Skip to content

Commit 194e1a3

Browse files
authored
Fixed #682 (#683)
- Return default (MIN) local datetime deadline value from embedded transaction
1 parent 8916ad9 commit 194e1a3

File tree

4 files changed

+87
-23
lines changed

4 files changed

+87
-23
lines changed

src/infrastructure/transaction/CreateTransactionFromDTO.ts

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,17 @@ const extractMessage = (message: any): Message => {
124124
return msgObj;
125125
};
126126

127+
/**
128+
* Extract deadline from json payload.
129+
* @param deadline - deadline dto
130+
*/
131+
const extractDeadline = (deadline?: string): Deadline => {
132+
if (!deadline) {
133+
return Deadline.createEmtpy();
134+
}
135+
return Deadline.createFromDTO(deadline);
136+
};
137+
127138
/**
128139
* @internal
129140
* Extract transaction meta data
@@ -153,7 +164,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
153164
return new TransferTransaction(
154165
transactionDTO.network,
155166
transactionDTO.version,
156-
Deadline.createFromDTO(transactionDTO.deadline),
167+
extractDeadline(transactionDTO.deadline),
157168
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
158169
extractRecipient(transactionDTO.recipientAddress),
159170
extractMosaics(transactionDTO.mosaics),
@@ -168,7 +179,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
168179
return new NamespaceRegistrationTransaction(
169180
transactionDTO.network,
170181
transactionDTO.version,
171-
Deadline.createFromDTO(transactionDTO.deadline),
182+
extractDeadline(transactionDTO.deadline),
172183
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
173184
transactionDTO.registrationType,
174185
transactionDTO.name,
@@ -185,7 +196,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
185196
return new MosaicDefinitionTransaction(
186197
transactionDTO.network,
187198
transactionDTO.version,
188-
Deadline.createFromDTO(transactionDTO.deadline),
199+
extractDeadline(transactionDTO.deadline),
189200
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
190201
MosaicNonce.createFromNumber(transactionDTO.nonce),
191202
new MosaicId(transactionDTO.id),
@@ -202,7 +213,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
202213
return new MosaicSupplyChangeTransaction(
203214
transactionDTO.network,
204215
transactionDTO.version,
205-
Deadline.createFromDTO(transactionDTO.deadline),
216+
extractDeadline(transactionDTO.deadline),
206217
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
207218
UnresolvedMapping.toUnresolvedMosaic(transactionDTO.mosaicId),
208219
transactionDTO.action,
@@ -217,7 +228,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
217228
return new MultisigAccountModificationTransaction(
218229
transactionDTO.network,
219230
transactionDTO.version,
220-
Deadline.createFromDTO(transactionDTO.deadline),
231+
extractDeadline(transactionDTO.deadline),
221232
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
222233
transactionDTO.minApprovalDelta,
223234
transactionDTO.minRemovalDelta,
@@ -234,7 +245,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
234245
return new LockFundsTransaction(
235246
networkType,
236247
transactionDTO.version,
237-
Deadline.createFromDTO(transactionDTO.deadline),
248+
extractDeadline(transactionDTO.deadline),
238249
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
239250
new Mosaic(new MosaicId(transactionDTO.mosaicId), UInt64.fromNumericString(transactionDTO.amount)),
240251
UInt64.fromNumericString(transactionDTO.duration),
@@ -249,7 +260,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
249260
return new SecretLockTransaction(
250261
transactionDTO.network,
251262
transactionDTO.version,
252-
Deadline.createFromDTO(transactionDTO.deadline),
263+
extractDeadline(transactionDTO.deadline),
253264
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
254265
new Mosaic(mosaicId, UInt64.fromNumericString(transactionDTO.amount)),
255266
UInt64.fromNumericString(transactionDTO.duration),
@@ -267,7 +278,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
267278
return new SecretProofTransaction(
268279
transactionDTO.network,
269280
transactionDTO.version,
270-
Deadline.createFromDTO(transactionDTO.deadline),
281+
extractDeadline(transactionDTO.deadline),
271282
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
272283
transactionDTO.hashAlgorithm,
273284
transactionDTO.secret,
@@ -283,7 +294,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
283294
return new MosaicAliasTransaction(
284295
transactionDTO.network,
285296
transactionDTO.version,
286-
Deadline.createFromDTO(transactionDTO.deadline),
297+
extractDeadline(transactionDTO.deadline),
287298
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
288299
transactionDTO.aliasAction,
289300
NamespaceId.createFromEncoded(transactionDTO.namespaceId),
@@ -298,7 +309,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
298309
return new AddressAliasTransaction(
299310
transactionDTO.network,
300311
transactionDTO.version,
301-
Deadline.createFromDTO(transactionDTO.deadline),
312+
extractDeadline(transactionDTO.deadline),
302313
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
303314
transactionDTO.aliasAction,
304315
NamespaceId.createFromEncoded(transactionDTO.namespaceId),
@@ -313,7 +324,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
313324
return new AccountAddressRestrictionTransaction(
314325
transactionDTO.network,
315326
transactionDTO.version,
316-
Deadline.createFromDTO(transactionDTO.deadline),
327+
extractDeadline(transactionDTO.deadline),
317328
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
318329
transactionDTO.restrictionFlags,
319330
transactionDTO.restrictionAdditions ? transactionDTO.restrictionAdditions.map((addition) => extractRecipient(addition)) : [],
@@ -328,7 +339,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
328339
return new AccountOperationRestrictionTransaction(
329340
transactionDTO.network,
330341
transactionDTO.version,
331-
Deadline.createFromDTO(transactionDTO.deadline),
342+
extractDeadline(transactionDTO.deadline),
332343
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
333344
transactionDTO.restrictionFlags,
334345
transactionDTO.restrictionAdditions ? transactionDTO.restrictionAdditions : [],
@@ -343,7 +354,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
343354
return new AccountMosaicRestrictionTransaction(
344355
transactionDTO.network,
345356
transactionDTO.version,
346-
Deadline.createFromDTO(transactionDTO.deadline),
357+
extractDeadline(transactionDTO.deadline),
347358
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
348359
transactionDTO.restrictionFlags,
349360
transactionDTO.restrictionAdditions
@@ -362,7 +373,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
362373
return new AccountKeyLinkTransaction(
363374
transactionDTO.network,
364375
transactionDTO.version,
365-
Deadline.createFromDTO(transactionDTO.deadline),
376+
extractDeadline(transactionDTO.deadline),
366377
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
367378
transactionDTO.linkedPublicKey,
368379
transactionDTO.linkAction,
@@ -376,7 +387,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
376387
return new MosaicGlobalRestrictionTransaction(
377388
transactionDTO.network,
378389
transactionDTO.version,
379-
Deadline.createFromDTO(transactionDTO.deadline),
390+
extractDeadline(transactionDTO.deadline),
380391
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
381392
UnresolvedMapping.toUnresolvedMosaic(transactionDTO.mosaicId),
382393
UnresolvedMapping.toUnresolvedMosaic(transactionDTO.referenceMosaicId),
@@ -395,7 +406,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
395406
return new MosaicAddressRestrictionTransaction(
396407
transactionDTO.network,
397408
transactionDTO.version,
398-
Deadline.createFromDTO(transactionDTO.deadline),
409+
extractDeadline(transactionDTO.deadline),
399410
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
400411
UnresolvedMapping.toUnresolvedMosaic(transactionDTO.mosaicId),
401412
UInt64.fromHex(transactionDTO.restrictionKey),
@@ -412,7 +423,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
412423
return new AccountMetadataTransaction(
413424
transactionDTO.network,
414425
transactionDTO.version,
415-
Deadline.createFromDTO(transactionDTO.deadline),
426+
extractDeadline(transactionDTO.deadline),
416427
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
417428
extractRecipient(transactionDTO.targetAddress),
418429
UInt64.fromHex(transactionDTO.scopedMetadataKey),
@@ -428,7 +439,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
428439
return new MosaicMetadataTransaction(
429440
transactionDTO.network,
430441
transactionDTO.version,
431-
Deadline.createFromDTO(transactionDTO.deadline),
442+
extractDeadline(transactionDTO.deadline),
432443
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
433444
extractRecipient(transactionDTO.targetAddress),
434445
UInt64.fromHex(transactionDTO.scopedMetadataKey),
@@ -445,7 +456,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
445456
return new NamespaceMetadataTransaction(
446457
transactionDTO.network,
447458
transactionDTO.version,
448-
Deadline.createFromDTO(transactionDTO.deadline),
459+
extractDeadline(transactionDTO.deadline),
449460
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
450461
extractRecipient(transactionDTO.targetAddress),
451462
UInt64.fromHex(transactionDTO.scopedMetadataKey),
@@ -462,7 +473,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
462473
return new VrfKeyLinkTransaction(
463474
transactionDTO.network,
464475
transactionDTO.version,
465-
Deadline.createFromDTO(transactionDTO.deadline),
476+
extractDeadline(transactionDTO.deadline),
466477
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
467478
transactionDTO.linkedPublicKey,
468479
transactionDTO.linkAction,
@@ -476,7 +487,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
476487
return new NodeKeyLinkTransaction(
477488
transactionDTO.network,
478489
transactionDTO.version,
479-
Deadline.createFromDTO(transactionDTO.deadline),
490+
extractDeadline(transactionDTO.deadline),
480491
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
481492
transactionDTO.linkedPublicKey,
482493
transactionDTO.linkAction,
@@ -490,7 +501,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
490501
return new VotingKeyLinkTransaction(
491502
transactionDTO.network,
492503
transactionDTO.version,
493-
Deadline.createFromDTO(transactionDTO.deadline),
504+
extractDeadline(transactionDTO.deadline),
494505
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
495506
transactionDTO.linkedPublicKey,
496507
transactionDTO.startEpoch,
@@ -530,7 +541,7 @@ export const CreateTransactionFromDTO = (transactionDTO): Transaction => {
530541
transactionDTO.transaction.network,
531542
transactionDTO.transaction.type,
532543
transactionDTO.transaction.version,
533-
Deadline.createFromDTO(transactionDTO.transaction.deadline),
544+
extractDeadline(transactionDTO.transaction.deadline),
534545
UInt64.fromNumericString(transactionDTO.transaction.maxFee || '0'),
535546
innerTransactions,
536547
transactionDTO.transaction.cosignatures

src/model/transaction/Deadline.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,16 @@ export class Deadline {
5252
return new Deadline(deadlineDateTime);
5353
}
5454

55+
/**
56+
* @internal
57+
* Create an empty Deadline object using min local datetime.
58+
* This is method is an internal method to cope with undefined deadline for embedded transactions
59+
* @returns {Deadline}
60+
*/
61+
public static createEmtpy(): Deadline {
62+
return new Deadline(LocalDateTime.MIN);
63+
}
64+
5565
/**
5666
* @param value
5767
* @returns {Deadline}

test/infrastructure/transaction/CreateTransactionFromDTO.spec.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { CreateTransactionFromDTO } from '../../../src/infrastructure/transactio
1919
import { Address } from '../../../src/model/account/Address';
2020
import { TransferTransaction } from '../../../src/model/transaction/TransferTransaction';
2121
import ValidateTransaction from './ValidateTransaction';
22+
import { LocalDateTime } from 'js-joda';
2223

2324
describe('CreateTransactionFromDTO', () => {
2425
describe('TransferTransaction', () => {
@@ -162,6 +163,43 @@ describe('CreateTransactionFromDTO', () => {
162163
});
163164
});
164165

166+
describe('Embedded transaction only', () => {
167+
it('standalone', () => {
168+
const transferTransactionDTO = {
169+
id: '5CD2B76B2B3F0F0001751380',
170+
meta: {
171+
height: '78',
172+
aggregateHash: 'D6A48BFD66920825D748D2CF92B025588F3A030C98633C442B4704BF407160B9',
173+
aggregateId: '5F729AA24655A25B54840CB7',
174+
index: 0,
175+
},
176+
transaction: {
177+
signerPublicKey: '2FC3872A792933617D70E02AFF8FBDE152821A0DF0CA5FB04CB56FC3D21C8863',
178+
version: 1,
179+
network: 144,
180+
type: 16724,
181+
recipientAddress: '6026D27E1D0A26CA4E316F901E23E55C8711DB20DF300144',
182+
message: {
183+
payload: '746573742D6D657373616765',
184+
type: 0,
185+
},
186+
mosaics: [
187+
{
188+
id: '85BBEA6CC462B244',
189+
amount: '10',
190+
},
191+
],
192+
},
193+
};
194+
195+
const transferTransaction = CreateTransactionFromDTO(transferTransactionDTO) as TransferTransaction;
196+
deepEqual(transferTransaction.recipientAddress, Address.createFromEncoded(transferTransactionDTO.transaction.recipientAddress));
197+
expect(transferTransaction.message.payload).to.be.equal('test-message');
198+
expect(transferTransaction.deadline.value).to.be.equal(LocalDateTime.MIN);
199+
expect(transferTransaction.maxFee.toString()).to.be.equal('0');
200+
});
201+
});
202+
165203
describe('NamespaceRegistrationTransaction', () => {
166204
describe('namespace', () => {
167205
it('standalone', () => {

test/model/transaction/Deadline.spec.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ describe('Deadline', () => {
5151
expect(deadline.toDTO()[1]).to.be.equal(11);
5252
});
5353

54+
it('should createComplete empty deadline', () => {
55+
const deadline = Deadline.createEmtpy();
56+
expect(deadline.value).to.be.equal(LocalDateTime.MIN);
57+
});
58+
5459
it('make sure epochAdjustment is correct', () => {
5560
const epochAdjustment = new Date(Deadline.timestampNemesisBlock * 1000);
5661

0 commit comments

Comments
 (0)