Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 34 additions & 23 deletions src/infrastructure/transaction/CreateTransactionFromDTO.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,17 @@ const extractMessage = (message: any): Message => {
return msgObj;
};

/**
* Extract deadline from json payload.
* @param deadline - deadline dto
*/
const extractDeadline = (deadline?: string): Deadline => {
if (!deadline) {
return Deadline.createEmtpy();
}
return Deadline.createFromDTO(deadline);
};

/**
* @internal
* Extract transaction meta data
Expand Down Expand Up @@ -153,7 +164,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new TransferTransaction(
transactionDTO.network,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
extractRecipient(transactionDTO.recipientAddress),
extractMosaics(transactionDTO.mosaics),
Expand All @@ -168,7 +179,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new NamespaceRegistrationTransaction(
transactionDTO.network,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
transactionDTO.registrationType,
transactionDTO.name,
Expand All @@ -185,7 +196,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new MosaicDefinitionTransaction(
transactionDTO.network,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
MosaicNonce.createFromNumber(transactionDTO.nonce),
new MosaicId(transactionDTO.id),
Expand All @@ -202,7 +213,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new MosaicSupplyChangeTransaction(
transactionDTO.network,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
UnresolvedMapping.toUnresolvedMosaic(transactionDTO.mosaicId),
transactionDTO.action,
Expand All @@ -217,7 +228,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new MultisigAccountModificationTransaction(
transactionDTO.network,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
transactionDTO.minApprovalDelta,
transactionDTO.minRemovalDelta,
Expand All @@ -234,7 +245,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new LockFundsTransaction(
networkType,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
new Mosaic(new MosaicId(transactionDTO.mosaicId), UInt64.fromNumericString(transactionDTO.amount)),
UInt64.fromNumericString(transactionDTO.duration),
Expand All @@ -249,7 +260,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new SecretLockTransaction(
transactionDTO.network,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
new Mosaic(mosaicId, UInt64.fromNumericString(transactionDTO.amount)),
UInt64.fromNumericString(transactionDTO.duration),
Expand All @@ -267,7 +278,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new SecretProofTransaction(
transactionDTO.network,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
transactionDTO.hashAlgorithm,
transactionDTO.secret,
Expand All @@ -283,7 +294,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new MosaicAliasTransaction(
transactionDTO.network,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
transactionDTO.aliasAction,
NamespaceId.createFromEncoded(transactionDTO.namespaceId),
Expand All @@ -298,7 +309,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new AddressAliasTransaction(
transactionDTO.network,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
transactionDTO.aliasAction,
NamespaceId.createFromEncoded(transactionDTO.namespaceId),
Expand All @@ -313,7 +324,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new AccountAddressRestrictionTransaction(
transactionDTO.network,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
transactionDTO.restrictionFlags,
transactionDTO.restrictionAdditions ? transactionDTO.restrictionAdditions.map((addition) => extractRecipient(addition)) : [],
Expand All @@ -328,7 +339,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new AccountOperationRestrictionTransaction(
transactionDTO.network,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
transactionDTO.restrictionFlags,
transactionDTO.restrictionAdditions ? transactionDTO.restrictionAdditions : [],
Expand All @@ -343,7 +354,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new AccountMosaicRestrictionTransaction(
transactionDTO.network,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
transactionDTO.restrictionFlags,
transactionDTO.restrictionAdditions
Expand All @@ -362,7 +373,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new AccountKeyLinkTransaction(
transactionDTO.network,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
transactionDTO.linkedPublicKey,
transactionDTO.linkAction,
Expand All @@ -376,7 +387,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new MosaicGlobalRestrictionTransaction(
transactionDTO.network,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
UnresolvedMapping.toUnresolvedMosaic(transactionDTO.mosaicId),
UnresolvedMapping.toUnresolvedMosaic(transactionDTO.referenceMosaicId),
Expand All @@ -395,7 +406,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new MosaicAddressRestrictionTransaction(
transactionDTO.network,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
UnresolvedMapping.toUnresolvedMosaic(transactionDTO.mosaicId),
UInt64.fromHex(transactionDTO.restrictionKey),
Expand All @@ -412,7 +423,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new AccountMetadataTransaction(
transactionDTO.network,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
extractRecipient(transactionDTO.targetAddress),
UInt64.fromHex(transactionDTO.scopedMetadataKey),
Expand All @@ -428,7 +439,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new MosaicMetadataTransaction(
transactionDTO.network,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
extractRecipient(transactionDTO.targetAddress),
UInt64.fromHex(transactionDTO.scopedMetadataKey),
Expand All @@ -445,7 +456,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new NamespaceMetadataTransaction(
transactionDTO.network,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
extractRecipient(transactionDTO.targetAddress),
UInt64.fromHex(transactionDTO.scopedMetadataKey),
Expand All @@ -462,7 +473,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new VrfKeyLinkTransaction(
transactionDTO.network,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
transactionDTO.linkedPublicKey,
transactionDTO.linkAction,
Expand All @@ -476,7 +487,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new NodeKeyLinkTransaction(
transactionDTO.network,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
transactionDTO.linkedPublicKey,
transactionDTO.linkAction,
Expand All @@ -490,7 +501,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
return new VotingKeyLinkTransaction(
transactionDTO.network,
transactionDTO.version,
Deadline.createFromDTO(transactionDTO.deadline),
extractDeadline(transactionDTO.deadline),
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
transactionDTO.linkedPublicKey,
transactionDTO.startEpoch,
Expand Down Expand Up @@ -530,7 +541,7 @@ export const CreateTransactionFromDTO = (transactionDTO): Transaction => {
transactionDTO.transaction.network,
transactionDTO.transaction.type,
transactionDTO.transaction.version,
Deadline.createFromDTO(transactionDTO.transaction.deadline),
extractDeadline(transactionDTO.transaction.deadline),
UInt64.fromNumericString(transactionDTO.transaction.maxFee || '0'),
innerTransactions,
transactionDTO.transaction.cosignatures
Expand Down
10 changes: 10 additions & 0 deletions src/model/transaction/Deadline.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,16 @@ export class Deadline {
return new Deadline(deadlineDateTime);
}

/**
* @internal
* Create an empty Deadline object using min local datetime.
* This is method is an internal method to cope with undefined deadline for embedded transactions
* @returns {Deadline}
*/
public static createEmtpy(): Deadline {
return new Deadline(LocalDateTime.MIN);
}

/**
* @param value
* @returns {Deadline}
Expand Down
38 changes: 38 additions & 0 deletions test/infrastructure/transaction/CreateTransactionFromDTO.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import { CreateTransactionFromDTO } from '../../../src/infrastructure/transactio
import { Address } from '../../../src/model/account/Address';
import { TransferTransaction } from '../../../src/model/transaction/TransferTransaction';
import ValidateTransaction from './ValidateTransaction';
import { LocalDateTime } from 'js-joda';

describe('CreateTransactionFromDTO', () => {
describe('TransferTransaction', () => {
Expand Down Expand Up @@ -162,6 +163,43 @@ describe('CreateTransactionFromDTO', () => {
});
});

describe('Embedded transaction only', () => {
it('standalone', () => {
const transferTransactionDTO = {
id: '5CD2B76B2B3F0F0001751380',
meta: {
height: '78',
aggregateHash: 'D6A48BFD66920825D748D2CF92B025588F3A030C98633C442B4704BF407160B9',
aggregateId: '5F729AA24655A25B54840CB7',
index: 0,
},
transaction: {
signerPublicKey: '2FC3872A792933617D70E02AFF8FBDE152821A0DF0CA5FB04CB56FC3D21C8863',
version: 1,
network: 144,
type: 16724,
recipientAddress: '6026D27E1D0A26CA4E316F901E23E55C8711DB20DF300144',
message: {
payload: '746573742D6D657373616765',
type: 0,
},
mosaics: [
{
id: '85BBEA6CC462B244',
amount: '10',
},
],
},
};

const transferTransaction = CreateTransactionFromDTO(transferTransactionDTO) as TransferTransaction;
deepEqual(transferTransaction.recipientAddress, Address.createFromEncoded(transferTransactionDTO.transaction.recipientAddress));
expect(transferTransaction.message.payload).to.be.equal('test-message');
expect(transferTransaction.deadline.value).to.be.equal(LocalDateTime.MIN);
expect(transferTransaction.maxFee.toString()).to.be.equal('0');
});
});

describe('NamespaceRegistrationTransaction', () => {
describe('namespace', () => {
it('standalone', () => {
Expand Down
5 changes: 5 additions & 0 deletions test/model/transaction/Deadline.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,11 @@ describe('Deadline', () => {
expect(deadline.toDTO()[1]).to.be.equal(11);
});

it('should createComplete empty deadline', () => {
const deadline = Deadline.createEmtpy();
expect(deadline.value).to.be.equal(LocalDateTime.MIN);
});

it('make sure epochAdjustment is correct', () => {
const epochAdjustment = new Date(Deadline.timestampNemesisBlock * 1000);

Expand Down