Skip to content

Commit a97a3a0

Browse files
authored
Merge branch 'master' into TS-76-NetworkTypeHardcodedInSerialization
2 parents 3f18a6c + 61faf5b commit a97a3a0

File tree

46 files changed

+400
-228
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+400
-228
lines changed

e2e/infrastructure/TransactionHttp.spec.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -606,7 +606,7 @@ describe('TransactionHttp', () => {
606606

607607
listener.confirmed(account.address).subscribe((transaction: AccountAddressRestrictionTransaction) => {
608608
expect(transaction.modifications, 'Modifications').not.to.be.undefined;
609-
expect(transaction.modifications[0].modificationType, 'Modifications.ModificationType').not.to.be.undefined;
609+
expect(transaction.modifications[0].modificationAction, 'Modifications.ModificationAction').not.to.be.undefined;
610610
expect(transaction.modifications[0].value, 'Modifications.Value').not.to.be.undefined;
611611
expect(transaction.restrictionType, 'RestrictionType').not.to.be.undefined;
612612
done();
@@ -682,7 +682,7 @@ describe('TransactionHttp', () => {
682682

683683
listener.confirmed(account.address).subscribe((transaction: AccountAddressRestrictionTransaction) => {
684684
expect(transaction.modifications, 'Modifications').not.to.be.undefined;
685-
expect(transaction.modifications[0].modificationType, 'Modifications.ModificationType').not.to.be.undefined;
685+
expect(transaction.modifications[0].modificationAction, 'Modifications.ModificationAction').not.to.be.undefined;
686686
expect(transaction.modifications[0].value, 'Modifications.Value').not.to.be.undefined;
687687
expect(transaction.restrictionType, 'RestrictionType').not.to.be.undefined;
688688
done();
@@ -757,7 +757,7 @@ describe('TransactionHttp', () => {
757757

758758
listener.confirmed(account.address).subscribe((transaction: AccountMosaicRestrictionTransaction) => {
759759
expect(transaction.modifications, 'Modifications').not.to.be.undefined;
760-
expect(transaction.modifications[0].modificationType, 'Modifications.ModificationType').not.to.be.undefined;
760+
expect(transaction.modifications[0].modificationAction, 'Modifications.ModificationAction').not.to.be.undefined;
761761
expect(transaction.modifications[0].value, 'Modifications.Value').not.to.be.undefined;
762762
expect(transaction.restrictionType, 'RestrictionType').not.to.be.undefined;
763763
done();
@@ -832,7 +832,7 @@ describe('TransactionHttp', () => {
832832

833833
listener.confirmed(account3.address).subscribe((transaction: AccountOperationRestrictionTransaction) => {
834834
expect(transaction.modifications, 'Modifications').not.to.be.undefined;
835-
expect(transaction.modifications[0].modificationType, 'Modifications.ModificationType').not.to.be.undefined;
835+
expect(transaction.modifications[0].modificationAction, 'Modifications.ModificationAction').not.to.be.undefined;
836836
expect(transaction.modifications[0].value, 'Modifications.Value').not.to.be.undefined;
837837
expect(transaction.restrictionType, 'RestrictionType').not.to.be.undefined;
838838
done();
@@ -908,7 +908,7 @@ describe('TransactionHttp', () => {
908908

909909
listener.confirmed(account3.address).subscribe((transaction: AccountOperationRestrictionTransaction) => {
910910
expect(transaction.modifications, 'Modifications').not.to.be.undefined;
911-
expect(transaction.modifications[0].modificationType, 'Modifications.ModificationType').not.to.be.undefined;
911+
expect(transaction.modifications[0].modificationAction, 'Modifications.ModificationAction').not.to.be.undefined;
912912
expect(transaction.modifications[0].value, 'Modifications.Value').not.to.be.undefined;
913913
expect(transaction.restrictionType, 'RestrictionType').not.to.be.undefined;
914914
done();

e2e/infrastructure/transaction/CreateTransactionFromDTO.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,7 @@ describe('CreateTransactionFromDTO', () => {
511511
modifications: [
512512
{
513513
cosignatoryPublicKey: '76C1622C7FB58986E500228E8FFB30C606CAAFC1CD78E770E82C73DAB7BD7C9F',
514-
modificiationType: 0,
514+
modificationAction: 0,
515515
},
516516
],
517517
signature: '553E696EB4A54E43A11D180EBA57E4B89D0048C9DD2604A9E0608120018B9E0' +
@@ -566,7 +566,7 @@ describe('CreateTransactionFromDTO', () => {
566566
{
567567
cosignatoryPublicKey: '589B73FBC22063E9AE6FBAC67CB9C6EA865EF556E5' +
568568
'FB8B7310D45F77C1250B97',
569-
modificiationType: 0,
569+
modificationAction: 0,
570570
},
571571
],
572572
signerPublicKey: 'B4F12E7C9F6946091E2CB8B6D3A12B50D17CCBBF646386EA27CE2946A7423DCF',

e2e/infrastructure/transaction/ValidateTransaction.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ const ValidateTransaction = {
124124
.to.be.equal(modifyMultisigAccountTransactionDTO.transaction.minRemovalDelta);
125125

126126
deepEqual(modifyMultisigAccountTransaction.modifications[0], new MultisigCosignatoryModification(
127-
modifyMultisigAccountTransactionDTO.transaction.modifications[0].modificiationType,
127+
modifyMultisigAccountTransactionDTO.transaction.modifications[0].modificationAction,
128128
PublicAccount.createFromPublicKey(modifyMultisigAccountTransactionDTO.transaction.modifications[0].cosignatoryPublicKey,
129129
NetworkType.MIJIN_TEST),
130130
),

src/infrastructure/Listener.ts

Lines changed: 92 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -14,27 +14,29 @@
1414
* limitations under the License.
1515
*/
1616

17-
import {Observable, Subject} from 'rxjs';
18-
import {filter, map, share} from 'rxjs/operators';
17+
import { Observable, Subject } from 'rxjs';
18+
import { filter, map, share } from 'rxjs/operators';
1919
import * as WebSocket from 'ws';
20-
import {Address} from '../model/account/Address';
21-
import {PublicAccount} from '../model/account/PublicAccount';
22-
import {BlockInfo} from '../model/blockchain/BlockInfo';
23-
import {NetworkType} from '../model/blockchain/NetworkType';
24-
import {NamespaceId} from '../model/namespace/NamespaceId';
25-
import {AggregateTransaction} from '../model/transaction/AggregateTransaction';
26-
import {AggregateTransactionCosignature} from '../model/transaction/AggregateTransactionCosignature';
27-
import {CosignatoryModificationAction} from '../model/transaction/CosignatoryModificationAction';
28-
import {CosignatureSignedTransaction} from '../model/transaction/CosignatureSignedTransaction';
29-
import {Deadline} from '../model/transaction/Deadline';
30-
import {InnerTransaction} from '../model/transaction/InnerTransaction';
31-
import {MultisigAccountModificationTransaction} from '../model/transaction/MultisigAccountModificationTransaction';
32-
import {MultisigCosignatoryModification} from '../model/transaction/MultisigCosignatoryModification';
33-
import {Transaction} from '../model/transaction/Transaction';
34-
import {TransactionStatusError} from '../model/transaction/TransactionStatusError';
35-
import {TransferTransaction} from '../model/transaction/TransferTransaction';
36-
import {UInt64} from '../model/UInt64';
37-
import {CreateTransactionFromDTO, extractBeneficiary} from './transaction/CreateTransactionFromDTO';
20+
import { Address } from '../model/account/Address';
21+
import { PublicAccount } from '../model/account/PublicAccount';
22+
import { BlockInfo } from '../model/blockchain/BlockInfo';
23+
import { NamespaceId } from '../model/namespace/NamespaceId';
24+
import { AggregateTransaction } from '../model/transaction/AggregateTransaction';
25+
import { AggregateTransactionCosignature } from '../model/transaction/AggregateTransactionCosignature';
26+
import { CosignatoryModificationAction } from '../model/transaction/CosignatoryModificationAction';
27+
import { CosignatureSignedTransaction } from '../model/transaction/CosignatureSignedTransaction';
28+
import { Deadline } from '../model/transaction/Deadline';
29+
import { InnerTransaction } from '../model/transaction/InnerTransaction';
30+
import { MultisigAccountModificationTransaction } from '../model/transaction/MultisigAccountModificationTransaction';
31+
import { MultisigCosignatoryModification } from '../model/transaction/MultisigCosignatoryModification';
32+
import { Transaction } from '../model/transaction/Transaction';
33+
import { TransactionStatusError } from '../model/transaction/TransactionStatusError';
34+
import { TransferTransaction } from '../model/transaction/TransferTransaction';
35+
import { UInt64 } from '../model/UInt64';
36+
import {
37+
CreateTransactionFromDTO,
38+
extractBeneficiary
39+
} from './transaction/CreateTransactionFromDTO';
3840

3941
enum ListenerChannelName {
4042
block = 'block',
@@ -82,11 +84,11 @@ export class Listener {
8284
constructor(/**
8385
* Listener configuration.
8486
*/
85-
private config: string,
87+
private config: string,
8688
/**
8789
* WebSocket injected when using listeners in client.
8890
*/
89-
private websocketInjected?: any) {
91+
private websocketInjected?: any) {
9092
this.config = config.replace(/\/$/, '');
9193
this.url = `${this.config}/ws`;
9294
this.messageSubject = new Subject();
@@ -114,58 +116,76 @@ export class Listener {
114116
};
115117
this.webSocket.onmessage = (msg) => {
116118
const message = JSON.parse(msg.data as string);
117-
118-
if (message.uid) {
119-
this.uid = message.uid;
120-
resolve();
121-
} else if (message.transaction) {
122-
this.messageSubject.next({channelName: message.meta.channelName, message: CreateTransactionFromDTO(message)});
123-
} else if (message.block) {
124-
const networkType = parseInt(message.block.version.toString(16).substr(0, 2), 16);
125-
this.messageSubject.next({
126-
channelName: ListenerChannelName.block, message: new BlockInfo(
127-
message.meta.hash,
128-
message.meta.generationHash,
129-
message.meta.totalFee ? UInt64.fromNumericString(message.meta.totalFee) : new UInt64([0, 0]),
130-
message.meta.numTransactions,
131-
message.block.signature,
132-
PublicAccount.createFromPublicKey(message.block.signerPublicKey, networkType),
133-
networkType,
134-
parseInt(message.block.version.toString(16).substr(2, 2), 16), // Tx version
135-
message.block.type,
136-
UInt64.fromNumericString(message.block.height),
137-
UInt64.fromNumericString(message.block.timestamp),
138-
UInt64.fromNumericString(message.block.difficulty),
139-
message.block.feeMultiplier,
140-
message.block.previousBlockHash,
141-
message.block.blockTransactionsHash,
142-
message.block.blockReceiptsHash,
143-
message.block.stateHash,
144-
extractBeneficiary(message, networkType), // passing `message` as `blockDTO`
145-
),
146-
});
147-
} else if (message.status) {
148-
this.messageSubject.next({
149-
channelName: ListenerChannelName.status, message: new TransactionStatusError(
150-
message.hash,
151-
message.status,
152-
Deadline.createFromDTO(message.deadline)),
153-
});
154-
} else if (message.parentHash) {
155-
this.messageSubject.next({
156-
channelName: ListenerChannelName.cosignature,
157-
message: new CosignatureSignedTransaction(message.parentHash, message.signature, message.signerPublicKey),
158-
});
159-
} else if (message.meta && message.meta.hash) {
160-
this.messageSubject.next({channelName: message.meta.channelName, message: message.meta.hash});
161-
}
119+
this.handleMessage(message, resolve);
162120
};
163121
} else {
164122
resolve();
165123
}
166124
});
167125
}
168126

127+
/**
128+
* @internal
129+
*
130+
* This method handles one incoming message from the web socket and it dispatches it to the message subject listener.
131+
*
132+
* @param message the object payload.
133+
* @param resolve the method to notify when the uid has been resolved and the listener connection has been stablished.
134+
*/
135+
handleMessage(message: any, resolve) {
136+
if (message.uid) {
137+
this.uid = message.uid;
138+
resolve();
139+
} else if (message.transaction) {
140+
this.messageSubject.next({
141+
channelName: message.meta.channelName,
142+
message: CreateTransactionFromDTO(message)
143+
});
144+
} else if (message.block) {
145+
const networkType = parseInt(message.block.version.toString(16).substr(0, 2), 16);
146+
this.messageSubject.next({
147+
channelName: ListenerChannelName.block, message: new BlockInfo(
148+
message.meta.hash,
149+
message.meta.generationHash,
150+
message.meta.totalFee ? UInt64.fromNumericString(message.meta.totalFee) : new UInt64([0, 0]),
151+
message.meta.numTransactions,
152+
message.block.signature,
153+
PublicAccount.createFromPublicKey(message.block.signerPublicKey, networkType),
154+
networkType,
155+
parseInt(message.block.version.toString(16).substr(2, 2), 16), // Tx version
156+
message.block.type,
157+
UInt64.fromNumericString(message.block.height),
158+
UInt64.fromNumericString(message.block.timestamp),
159+
UInt64.fromNumericString(message.block.difficulty),
160+
message.block.feeMultiplier,
161+
message.block.previousBlockHash,
162+
message.block.blockTransactionsHash,
163+
message.block.blockReceiptsHash,
164+
message.block.stateHash,
165+
extractBeneficiary(message, networkType), // passing `message` as `blockDTO`
166+
),
167+
});
168+
} else if (message.status) {
169+
this.messageSubject.next({
170+
channelName: ListenerChannelName.status, message: new TransactionStatusError(
171+
Address.createFromEncoded(message.address),
172+
message.hash,
173+
message.status,
174+
Deadline.createFromDTO(message.deadline)),
175+
});
176+
} else if (message.parentHash) {
177+
this.messageSubject.next({
178+
channelName: ListenerChannelName.cosignature,
179+
message: new CosignatureSignedTransaction(message.parentHash, message.signature, message.signerPublicKey),
180+
});
181+
} else if (message.meta && message.meta.hash) {
182+
this.messageSubject.next({
183+
channelName: message.meta.channelName,
184+
message: message.meta.hash
185+
});
186+
}
187+
}
188+
169189
/**
170190
* returns a boolean that repressents the open state
171191
* @returns a boolean
@@ -207,7 +227,7 @@ export class Listener {
207227
public newBlock(): Observable<BlockInfo> {
208228
this.subscribeTo('block');
209229
return this.messageSubject
210-
.asObservable().pipe(
230+
.asObservable().pipe(
211231
share(),
212232
filter((_) => _.channelName === ListenerChannelName.block),
213233
filter((_) => _.message instanceof BlockInfo),
@@ -310,7 +330,8 @@ export class Listener {
310330
return this.messageSubject.asObservable().pipe(
311331
filter((_) => _.channelName === ListenerChannelName.status),
312332
filter((_) => _.message instanceof TransactionStatusError),
313-
map((_) => _.message as TransactionStatusError));
333+
map((_) => _.message as TransactionStatusError),
334+
filter((_) => address.equals(_.address)));
314335
}
315336

316337
/**
@@ -394,7 +415,7 @@ export class Listener {
394415
}
395416

396417
return transaction.signer!.address.equals(address) || (
397-
transaction instanceof TransferTransaction
418+
transaction instanceof TransferTransaction
398419
&& (transaction.recipientAddress as Address).equals(address)
399420
);
400421
}
@@ -409,7 +430,7 @@ export class Listener {
409430
private accountAddedToMultiSig(transaction: Transaction, address: Address): boolean {
410431
if (transaction instanceof MultisigAccountModificationTransaction) {
411432
return transaction.modifications.find((_: MultisigCosignatoryModification) =>
412-
_.modificiationType === CosignatoryModificationAction.Add &&
433+
_.modificationAction === CosignatoryModificationAction.Add &&
413434
_.cosignatoryPublicAccount.address.equals(address)) !== undefined;
414435
}
415436
return false;

src/infrastructure/transaction/CreateTransactionFromDTO.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
194194
transactionDTO.minApprovalDelta,
195195
transactionDTO.minRemovalDelta,
196196
transactionDTO.modifications ? transactionDTO.modifications.map((modificationDTO) => new MultisigCosignatoryModification(
197-
modificationDTO.modificiationType,
197+
modificationDTO.modificationAction,
198198
PublicAccount.createFromPublicKey(modificationDTO.cosignatoryPublicKey, extractNetworkType(transactionDTO.version)),
199199
)) : [],
200200
transactionDTO.signature,

src/model/transaction/AccountAddressRestrictionTransaction.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ export class AccountAddressRestrictionTransaction extends Transaction {
129129
const byteModificationCount = 1;
130130

131131
// each modification contains :
132-
// - 1 byte for modificationType
132+
// - 1 byte for modificationAction
133133
// - 25 bytes for the modification value (address)
134134
const byteModifications = 26 * this.modifications.length;
135135

@@ -154,7 +154,7 @@ export class AccountAddressRestrictionTransaction extends Transaction {
154154
this.restrictionType.valueOf(),
155155
this.modifications.map((modification) => {
156156
return new AccountAddressRestrictionModificationBuilder(
157-
modification.modificationType.valueOf(),
157+
modification.modificationAction.valueOf(),
158158
new UnresolvedAddressDto(RawAddress.stringToAddress(modification.value)),
159159
);
160160
}),
@@ -174,7 +174,7 @@ export class AccountAddressRestrictionTransaction extends Transaction {
174174
this.restrictionType.valueOf(),
175175
this.modifications.map((modification) => {
176176
return new AccountAddressRestrictionModificationBuilder(
177-
modification.modificationType.valueOf(),
177+
modification.modificationAction.valueOf(),
178178
new UnresolvedAddressDto(RawAddress.stringToAddress(modification.value)),
179179
);
180180
}),

src/model/transaction/AccountMetadataTransaction.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,10 @@ export class AccountMetadataTransaction extends Transaction {
146146
const targetPublicKey = 32;
147147
const byteScopedMetadataKey = 8;
148148
const byteValueSizeDelta = 2;
149+
const valueSize = 2;
149150

150151
return byteSize + targetPublicKey + byteScopedMetadataKey +
151-
byteValueSizeDelta + this.value.length;
152+
byteValueSizeDelta + valueSize + this.value.length;
152153
}
153154

154155
/**

0 commit comments

Comments
 (0)