Skip to content

Commit b6d66f1

Browse files
authored
Merge pull request #255 from rg911/task/g226_mosaic_property_refactoring
JAV-2 [Github #226] MosaicDefinition refactoring
2 parents 2601e19 + 51097c6 commit b6d66f1

19 files changed

+299
-481
lines changed

e2e/infrastructure/MosaicHttp.spec.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ import { Listener, TransactionHttp } from '../../src/infrastructure/infrastructu
1818
import {MosaicHttp} from '../../src/infrastructure/MosaicHttp';
1919
import { Account } from '../../src/model/account/Account';
2020
import { NetworkType } from '../../src/model/blockchain/NetworkType';
21+
import { MosaicFlags } from '../../src/model/mosaic/MosaicFlags';
2122
import {MosaicId} from '../../src/model/mosaic/MosaicId';
2223
import { MosaicNonce } from '../../src/model/mosaic/MosaicNonce';
23-
import { MosaicProperties } from '../../src/model/mosaic/MosaicProperties';
2424
import { AliasAction } from '../../src/model/namespace/AliasAction';
2525
import {NamespaceId} from '../../src/model/namespace/NamespaceId';
2626
import { Deadline } from '../../src/model/transaction/Deadline';
@@ -74,12 +74,9 @@ describe('MosaicHttp', () => {
7474
Deadline.create(),
7575
nonce,
7676
mosaicId,
77-
MosaicProperties.create({
78-
supplyMutable: true,
79-
transferable: true,
80-
divisibility: 3,
81-
duration: UInt64.fromUint(0),
82-
}),
77+
MosaicFlags.create(true, true, false),
78+
3,
79+
UInt64.fromUint(0),
8380
NetworkType.MIJIN_TEST,
8481
);
8582
const signedTransaction = mosaicDefinitionTransaction.signWith(account, generationHash);

e2e/infrastructure/TransactionHttp.spec.ts

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ import { AccountRestrictionModificationAction } from '../../src/model/account/Ac
2929
import { AccountRestrictionType } from '../../src/model/account/AccountRestrictionType';
3030
import {NetworkType} from '../../src/model/blockchain/NetworkType';
3131
import { Mosaic } from '../../src/model/mosaic/Mosaic';
32+
import {MosaicFlags} from '../../src/model/mosaic/MosaicFlags';
3233
import {MosaicId} from '../../src/model/mosaic/MosaicId';
3334
import {MosaicNonce} from '../../src/model/mosaic/MosaicNonce';
34-
import {MosaicProperties} from '../../src/model/mosaic/MosaicProperties';
3535
import { MosaicRestrictionType } from '../../src/model/mosaic/MosaicRestrictionType';
3636
import {MosaicSupplyChangeAction} from '../../src/model/mosaic/MosaicSupplyChangeAction';
3737
import {NetworkCurrencyMosaic} from '../../src/model/mosaic/NetworkCurrencyMosaic';
@@ -143,23 +143,20 @@ describe('TransactionHttp', () => {
143143
Deadline.create(),
144144
nonce,
145145
mosaicId,
146-
MosaicProperties.create({
147-
supplyMutable: true,
148-
transferable: true,
149-
divisibility: 3,
150-
restrictable: true,
151-
duration: UInt64.fromUint(1000),
152-
}),
146+
MosaicFlags.create( true, true, true),
147+
3,
148+
UInt64.fromUint(1000),
153149
NetworkType.MIJIN_TEST,
154150
);
155151
const signedTransaction = mosaicDefinitionTransaction.signWith(account, generationHash);
156152
listener.confirmed(account.address).subscribe((transaction: MosaicDefinitionTransaction) => {
157153
expect(transaction.mosaicId, 'MosaicId').not.to.be.undefined;
158154
expect(transaction.nonce, 'Nonce').not.to.be.undefined;
159-
expect(transaction.mosaicProperties.divisibility, 'Divisibility').not.to.be.undefined;
160-
expect(transaction.mosaicProperties.duration, 'Duration').not.to.be.undefined;
161-
expect(transaction.mosaicProperties.supplyMutable, 'SupplyMutable').not.to.be.undefined;
162-
expect(transaction.mosaicProperties.transferable, 'Transferable').not.to.be.undefined;
155+
expect(transaction.divisibility, 'Divisibility').not.to.be.undefined;
156+
expect(transaction.duration, 'Duration').not.to.be.undefined;
157+
expect(transaction.flags.supplyMutable, 'SupplyMutable').not.to.be.undefined;
158+
expect(transaction.flags.transferable, 'Transferable').not.to.be.undefined;
159+
expect(transaction.flags.restrictable, 'Restrictable').not.to.be.undefined;
163160
done();
164161
});
165162
listener.status(account.address).subscribe((error) => {
@@ -186,13 +183,9 @@ describe('TransactionHttp', () => {
186183
Deadline.create(),
187184
nonce,
188185
MosaicId.createFromNonce(nonce, account.publicAccount),
189-
MosaicProperties.create({
190-
supplyMutable: true,
191-
transferable: true,
192-
divisibility: 3,
193-
duration: UInt64.fromUint(0),
194-
restrictable: true,
195-
}),
186+
MosaicFlags.create( true, true, true),
187+
3,
188+
UInt64.fromUint(0),
196189
NetworkType.MIJIN_TEST,
197190
);
198191
const aggregateTransaction = AggregateTransaction.createComplete(Deadline.create(),

src/infrastructure/MosaicHttp.ts

Lines changed: 7 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ import { ClientResponse } from 'http';
1818
import {from as observableFrom, Observable, throwError} from 'rxjs';
1919
import {catchError, map, mergeMap} from 'rxjs/operators';
2020
import {PublicAccount} from '../model/account/PublicAccount';
21+
import {MosaicFlags} from '../model/mosaic/MosaicFlags';
2122
import {MosaicId} from '../model/mosaic/MosaicId';
2223
import {MosaicInfo} from '../model/mosaic/MosaicInfo';
2324
import { MosaicNames } from '../model/mosaic/MosaicNames';
24-
import {MosaicProperties} from '../model/mosaic/MosaicProperties';
2525
import {NamespaceId} from '../model/namespace/NamespaceId';
2626
import { NamespaceName } from '../model/namespace/NamespaceName';
2727
import {UInt64} from '../model/UInt64';
@@ -64,29 +64,15 @@ export class MosaicHttp extends Http implements MosaicRepository {
6464
this.mosaicRoutesApi.getMosaic(mosaicId.toHex())).pipe(
6565
map((response: { response: ClientResponse; body: MosaicInfoDTO; } ) => {
6666
const mosaicInfoDTO = response.body;
67-
let mosaicFlag;
68-
let divisibility;
69-
let duration;
70-
if (mosaicInfoDTO.mosaic.flags) {
71-
mosaicFlag = mosaicInfoDTO.mosaic.flags;
72-
}
73-
if (mosaicInfoDTO.mosaic.divisibility) {
74-
divisibility = mosaicInfoDTO.mosaic.divisibility;
75-
}
76-
if (mosaicInfoDTO.mosaic.duration) {
77-
duration = mosaicInfoDTO.mosaic.duration;
78-
}
7967
return new MosaicInfo(
8068
new MosaicId(mosaicInfoDTO.mosaic.id),
8169
UInt64.fromNumericString(mosaicInfoDTO.mosaic.supply),
8270
UInt64.fromNumericString(mosaicInfoDTO.mosaic.startHeight),
8371
PublicAccount.createFromPublicKey(mosaicInfoDTO.mosaic.ownerPublicKey, networkType),
8472
mosaicInfoDTO.mosaic.revision,
85-
new MosaicProperties(
86-
mosaicFlag,
87-
divisibility,
88-
UInt64.fromNumericString(duration),
89-
),
73+
new MosaicFlags(mosaicInfoDTO.mosaic.flags),
74+
mosaicInfoDTO.mosaic.divisibility,
75+
UInt64.fromNumericString(mosaicInfoDTO.mosaic.duration),
9076
);
9177
}),
9278
catchError((error) => throwError(this.errorHandling(error))),
@@ -109,29 +95,15 @@ export class MosaicHttp extends Http implements MosaicRepository {
10995
map((response: { response: ClientResponse; body: MosaicInfoDTO[]; }) => {
11096
const mosaicInfosDTO = response.body;
11197
return mosaicInfosDTO.map((mosaicInfoDTO) => {
112-
let mosaicFlag;
113-
let divisibility;
114-
let duration;
115-
if (mosaicInfoDTO.mosaic.flags) {
116-
mosaicFlag = mosaicInfoDTO.mosaic.flags;
117-
}
118-
if (mosaicInfoDTO.mosaic.divisibility) {
119-
divisibility = mosaicInfoDTO.mosaic.divisibility;
120-
}
121-
if (mosaicInfoDTO.mosaic.duration) {
122-
duration = mosaicInfoDTO.mosaic.duration;
123-
}
12498
return new MosaicInfo(
12599
new MosaicId(mosaicInfoDTO.mosaic.id),
126100
UInt64.fromNumericString(mosaicInfoDTO.mosaic.supply),
127101
UInt64.fromNumericString(mosaicInfoDTO.mosaic.startHeight),
128102
PublicAccount.createFromPublicKey(mosaicInfoDTO.mosaic.ownerPublicKey, networkType),
129103
mosaicInfoDTO.mosaic.revision,
130-
new MosaicProperties(
131-
mosaicFlag,
132-
divisibility,
133-
UInt64.fromNumericString(duration),
134-
),
104+
new MosaicFlags(mosaicInfoDTO.mosaic.flags),
105+
mosaicInfoDTO.mosaic.divisibility,
106+
UInt64.fromNumericString(mosaicInfoDTO.mosaic.duration),
135107
);
136108
});
137109
}),

src/infrastructure/transaction/CreateTransactionFromDTO.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ import {PublicAccount} from '../../model/account/PublicAccount';
2020
import {NetworkType} from '../../model/blockchain/NetworkType';
2121
import {Id} from '../../model/Id';
2222
import {Mosaic} from '../../model/mosaic/Mosaic';
23+
import {MosaicFlags} from '../../model/mosaic/MosaicFlags';
2324
import {MosaicId} from '../../model/mosaic/MosaicId';
24-
import {MosaicProperties} from '../../model/mosaic/MosaicProperties';
2525
import {NamespaceId} from '../../model/namespace/NamespaceId';
2626
import {AccountAddressRestrictionTransaction} from '../../model/transaction/AccountAddressRestrictionTransaction';
2727
import { AccountLinkTransaction } from '../../model/transaction/AccountLinkTransaction';
@@ -163,11 +163,9 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
163163
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
164164
transactionDTO.nonce,
165165
new MosaicId(transactionDTO.id),
166-
new MosaicProperties(
167-
transactionDTO.flags,
168-
transactionDTO.divisibility,
169-
UInt64.fromNumericString(transactionDTO.duration),
170-
),
166+
new MosaicFlags(transactionDTO.flags),
167+
transactionDTO.divisibility,
168+
UInt64.fromNumericString(transactionDTO.duration),
171169
transactionDTO.signature,
172170
transactionDTO.signerPublicKey ? PublicAccount.createFromPublicKey(transactionDTO.signerPublicKey,
173171
extractNetworkType(transactionDTO.version)) : undefined,

src/infrastructure/transaction/SerializeTransactionToJSON.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,13 +112,12 @@ export const SerializeTransactionToJSON = (transaction: Transaction): any => {
112112
mosaicId: (transaction as MosaicAliasTransaction).mosaicId.toHex(),
113113
};
114114
case TransactionType.MOSAIC_DEFINITION:
115-
const properties = (transaction as MosaicDefinitionTransaction).mosaicProperties.toDTO();
116115
return {
117116
nonce: (transaction as MosaicDefinitionTransaction).nonce,
118117
mosaicId: (transaction as MosaicDefinitionTransaction).mosaicId.toHex(),
119-
flags: properties.flags,
120-
divisibility: properties.divisibility,
121-
duration: properties.duration,
118+
flags: (transaction as MosaicDefinitionTransaction).flags.getValue(),
119+
divisibility: (transaction as MosaicDefinitionTransaction).divisibility,
120+
duration: (transaction as MosaicDefinitionTransaction).duration.toString(),
122121
};
123122
case TransactionType.MOSAIC_SUPPLY_CHANGE:
124123
return {

src/model/model.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export * from './mosaic/MosaicInfo';
5050
export * from './mosaic/MosaicId';
5151
export * from './mosaic/MosaicNonce';
5252
export * from './mosaic/MosaicSupplyChangeAction';
53-
export * from './mosaic/MosaicProperties';
53+
export * from './mosaic/MosaicFlags';
5454
export * from '../service/MosaicView';
5555
export * from '../service/MosaicAmountView';
5656
export * from './mosaic/NetworkCurrencyMosaic';

src/model/mosaic/MosaicFlag.ts

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/model/mosaic/MosaicProperties.ts renamed to src/model/mosaic/MosaicFlags.ts

Lines changed: 20 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,10 @@
1414
* limitations under the License.
1515
*/
1616

17-
import {UInt64} from '../UInt64';
18-
1917
/**
20-
* Mosaic properties model
18+
* Mosaic flags model
2119
*/
22-
export class MosaicProperties {
20+
export class MosaicFlags {
2321

2422
/**
2523
* The creator can choose between a definition that allows a mosaic supply change at a later point or an immutable supply.
@@ -47,22 +45,7 @@ export class MosaicProperties {
4745
* @param divisibility
4846
* @param duration
4947
*/
50-
constructor(flags: number,
51-
/**
52-
* The divisibility determines up to what decimal place the mosaic can be divided into.
53-
* Thus a divisibility of 3 means that a mosaic can be divided into smallest parts of 0.001 mosaics
54-
* i.e. milli mosaics is the smallest sub-unit.
55-
* When transferring mosaics via a transfer transaction the quantity transferred
56-
* is given in multiples of those smallest parts.
57-
* The divisibility must be in the range of 0 and 6. The default value is "0".
58-
*/
59-
public readonly divisibility: number,
60-
/**
61-
* The duration in blocks a mosaic will be available.
62-
* After the duration finishes mosaic is inactive and can be renewed.
63-
* Duration is optional when defining the mosaic
64-
*/
65-
public readonly duration: UInt64) {
48+
constructor(flags: number) {
6649
let binaryFlags = '00' + (flags >>> 0).toString(2);
6750
binaryFlags = binaryFlags.substr(binaryFlags.length - 3, 3);
6851
this.supplyMutable = binaryFlags[2] === '1';
@@ -72,29 +55,33 @@ export class MosaicProperties {
7255

7356
/**
7457
* Static constructor function with default parameters
75-
* @returns {MosaicProperties}
76-
* @param params
58+
* @returns {MosaicFlags}
59+
* @param supplyMutable
60+
* @param transferable
61+
* @param restrictable
7762
*/
78-
public static create(params: {
63+
public static create(
7964
supplyMutable: boolean,
8065
transferable: boolean,
81-
divisibility: number,
82-
duration: UInt64,
83-
restrictable?: boolean,
84-
}) {
85-
const restrictable = params.restrictable ? 4 : 0;
86-
const flags = (params.supplyMutable ? 1 : 0) + (params.transferable ? 2 : 0) + restrictable;
87-
return new MosaicProperties(flags, params.divisibility, params.duration);
66+
restrictable: boolean = false ): MosaicFlags {
67+
const flags = (supplyMutable ? 1 : 0) + (transferable ? 2 : 0) + (restrictable ? 4 : 0);
68+
return new MosaicFlags(flags);
69+
}
70+
71+
/**
72+
* Get mosaic flag value in number
73+
* @returns {number}
74+
*/
75+
public getValue(): number {
76+
return (this.supplyMutable ? 1 : 0) + (this.transferable ? 2 : 0) + (this.restrictable ? 4 : 0);
8877
}
8978

9079
/**
9180
* Create DTO object
9281
*/
9382
toDTO() {
9483
return {
95-
flags: (this.supplyMutable ? 1 : 0) + (this.transferable ? 2 : 0) + (this.transferable ? 4 : 0),
96-
divisibility: this.divisibility,
97-
duration: this.duration ? this.duration.toString() : '0',
84+
flags: this.getValue(),
9885
};
9986
}
10087
}

0 commit comments

Comments
 (0)