Skip to content

Commit e484c93

Browse files
committed
Sort aggregate inner transactions to original order
1 parent 510a648 commit e484c93

File tree

3 files changed

+65
-5
lines changed

3 files changed

+65
-5
lines changed

e2e/service/TransactionService.spec.ts

Lines changed: 64 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import { assert } from 'chai';
1818
import { expect } from 'chai';
19+
import { Convert } from '../../src/core/format/Convert';
1920
import { Listener } from '../../src/infrastructure/Listener';
2021
import { NamespaceHttp } from '../../src/infrastructure/NamespaceHttp';
2122
import { TransactionHttp } from '../../src/infrastructure/TransactionHttp';
@@ -36,6 +37,7 @@ import { AggregateTransaction } from '../../src/model/transaction/AggregateTrans
3637
import { Deadline } from '../../src/model/transaction/Deadline';
3738
import { MosaicAliasTransaction } from '../../src/model/transaction/MosaicAliasTransaction';
3839
import { MosaicDefinitionTransaction } from '../../src/model/transaction/MosaicDefinitionTransaction';
40+
import { MosaicMetadataTransaction } from '../../src/model/transaction/MosaicMetadataTransaction';
3941
import { MosaicSupplyChangeTransaction } from '../../src/model/transaction/MosaicSupplyChangeTransaction';
4042
import { NamespaceRegistrationTransaction } from '../../src/model/transaction/NamespaceRegistrationTransaction';
4143
import { TransferTransaction } from '../../src/model/transaction/TransferTransaction';
@@ -51,6 +53,7 @@ describe('TransactionService', () => {
5153
let addressAlias: NamespaceId;
5254
let mosaicAlias: NamespaceId;
5355
let mosaicId: MosaicId;
56+
let newMosaicId: MosaicId;
5457
let transactionHttp: TransactionHttp;
5558
let config;
5659
let transactionHashes: string[];
@@ -125,7 +128,7 @@ describe('TransactionService', () => {
125128
const registerNamespaceTransaction = NamespaceRegistrationTransaction.createRootNamespace(
126129
Deadline.create(),
127130
namespaceName,
128-
UInt64.fromUint(9),
131+
UInt64.fromUint(20),
129132
NetworkType.MIJIN_TEST,
130133
);
131134
mosaicAlias = new NamespaceId(namespaceName);
@@ -304,6 +307,12 @@ describe('TransactionService', () => {
304307
});
305308
});
306309

310+
/**
311+
* =====================================
312+
* Setup test aggregate transaction data
313+
* =====================================
314+
*/
315+
307316
describe('Create Aggreate TransferTransaction', () => {
308317
let listener: Listener;
309318
before (() => {
@@ -324,8 +333,56 @@ describe('TransactionService', () => {
324333
PlainMessage.create('test-message'),
325334
NetworkType.MIJIN_TEST,
326335
);
336+
// Unlink MosaicAlias
337+
const mosaicAliasTransactionUnlink = MosaicAliasTransaction.create(
338+
Deadline.create(),
339+
AliasAction.Unlink,
340+
mosaicAlias,
341+
mosaicId,
342+
NetworkType.MIJIN_TEST,
343+
);
344+
345+
// Create a new Mosaic
346+
const nonce = MosaicNonce.createRandom();
347+
newMosaicId = MosaicId.createFromNonce(nonce, account.publicAccount);
348+
const mosaicDefinitionTransaction = MosaicDefinitionTransaction.create(
349+
Deadline.create(),
350+
nonce,
351+
newMosaicId,
352+
MosaicFlags.create(true, true, false),
353+
3,
354+
UInt64.fromUint(0),
355+
NetworkType.MIJIN_TEST,
356+
);
357+
358+
// Link namespace with new MosaicId
359+
const mosaicAliasTransactionRelink = MosaicAliasTransaction.create(
360+
Deadline.create(),
361+
AliasAction.Link,
362+
mosaicAlias,
363+
newMosaicId,
364+
NetworkType.MIJIN_TEST,
365+
);
366+
367+
// Use new mosaicAlias in metadata
368+
const mosaicMetadataTransaction = MosaicMetadataTransaction.create(
369+
Deadline.create(),
370+
account.publicKey,
371+
UInt64.fromUint(5),
372+
mosaicAlias,
373+
10,
374+
Convert.uint8ToUtf8(new Uint8Array(10)),
375+
NetworkType.MIJIN_TEST,
376+
);
327377
const aggregateTransaction = AggregateTransaction.createComplete(Deadline.create(),
328-
[transferTransaction.toAggregate(account.publicAccount)],
378+
[
379+
transferTransaction.toAggregate(account.publicAccount),
380+
mosaicAliasTransactionUnlink.toAggregate(account.publicAccount),
381+
mosaicDefinitionTransaction.toAggregate(account.publicAccount),
382+
mosaicAliasTransactionRelink.toAggregate(account.publicAccount),
383+
mosaicMetadataTransaction.toAggregate(account.publicAccount),
384+
385+
],
329386
NetworkType.MIJIN_TEST,
330387
[],
331388
);
@@ -359,13 +416,17 @@ describe('TransactionService', () => {
359416
expect((tx.recipientAddress as Address).plain()).to.be.equal(account.address.plain());
360417
expect(tx.mosaics.find((m) => m.id.toHex() === mosaicId.toHex())).not.to.equal(undefined);
361418
} else if (tx instanceof AggregateTransaction) {
419+
expect(tx.innerTransactions.length).to.be.equal(5);
420+
// Assert Transfer
362421
expect(((tx.innerTransactions[0] as TransferTransaction).recipientAddress as Address)
363422
.plain()).to.be.equal(account.address.plain());
364423
expect((tx.innerTransactions[0] as TransferTransaction).mosaics
365424
.find((m) => m.id.toHex() === mosaicId.toHex())).not.to.equal(undefined);
425+
// Assert MosaicMeta
426+
expect((tx.innerTransactions[4] as MosaicMetadataTransaction)
427+
.targetMosaicId.toHex() === newMosaicId.toHex()).to.be.true;
366428
}
367429
});
368-
done();
369430
});
370431
});
371432
});

src/model/transaction/AggregateTransaction.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ export class AggregateTransaction extends Transaction {
422422
this.version,
423423
this.deadline,
424424
this.maxFee,
425-
innerTransactions,
425+
innerTransactions.sort((a, b) => a.transactionInfo!.index - b.transactionInfo!.index),
426426
this.cosignatures,
427427
this.signature,
428428
this.signer,

src/service/TransactionService.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import { TransactionHttp } from '../infrastructure/TransactionHttp';
2121
import { Address } from '../model/account/Address';
2222
import { MosaicId } from '../model/mosaic/MosaicId';
2323
import { NamespaceId } from '../model/namespace/NamespaceId';
24-
import { ReceiptType } from '../model/receipt/ReceiptType';
2524
import { ResolutionType } from '../model/receipt/ResolutionType';
2625
import { Statement } from '../model/receipt/Statement';
2726
import { Transaction } from '../model/transaction/Transaction';

0 commit comments

Comments
 (0)