Skip to content

Commit b0b308c

Browse files
authored
Merge pull request #238 from rg911/task/g144_metadata_transaction
Metadata transaction
2 parents 9a6e7e0 + 1fd5a59 commit b0b308c

15 files changed

+1437
-81
lines changed

e2e/infrastructure/TransactionHttp.spec.ts

Lines changed: 220 additions & 81 deletions
Large diffs are not rendered by default.

src/infrastructure/catbuffer/EntityTypeDto.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ export enum EntityTypeDto {
2828
* Account address restriction transaction.
2929
*/
3030
ACCOUNT_ADDRESS_RESTRICTION_TRANSACTION = 0x4150,
31+
/**
32+
* Account metadata transaction
33+
*/
34+
ACCOUNT_METADATA_TRANSACTION = 0x4144,
3135
/**
3236
* Account mosaic restriction transaction.
3337
*/
@@ -64,6 +68,10 @@ export enum EntityTypeDto {
6468
* Mosaic definition transaction.
6569
*/
6670
MOSAIC_DEFINITION_TRANSACTION = 0x414D,
71+
/**
72+
* Mosaic metadata transaction.
73+
*/
74+
MOSAIC_METADATA_TRANSACTION = 0x4244,
6775
/**
6876
* Mosaic supply change transaction.
6977
*/
@@ -72,6 +80,10 @@ export enum EntityTypeDto {
7280
* Mosaic alias transaction.
7381
*/
7482
MOSAIC_ALIAS_TRANSACTION = 0x434E,
83+
/**
84+
* Namespace metadata transaction.
85+
*/
86+
NAMESPACE_METADATA_TRANSACTION = 0x4344,
7587
/**
7688
* Register namespace transaction.
7789
*/

src/infrastructure/transaction/CreateTransactionFromDTO.ts

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import { MosaicPropertyType } from '../../model/mosaic/MosaicPropertyType';
2626
import {NamespaceId} from '../../model/namespace/NamespaceId';
2727
import {AccountAddressRestrictionTransaction} from '../../model/transaction/AccountAddressRestrictionTransaction';
2828
import { AccountLinkTransaction } from '../../model/transaction/AccountLinkTransaction';
29+
import { AccountMetadataTransaction } from '../../model/transaction/AccountMetadataTransaction';
2930
import {AccountMosaicRestrictionTransaction} from '../../model/transaction/AccountMosaicRestrictionTransaction';
3031
import {AccountOperationRestrictionTransaction} from '../../model/transaction/AccountOperationRestrictionTransaction';
3132
import {AccountRestrictionModification} from '../../model/transaction/AccountRestrictionModification';
@@ -42,8 +43,10 @@ import { MosaicAddressRestrictionTransaction } from '../../model/transaction/Mos
4243
import {MosaicAliasTransaction} from '../../model/transaction/MosaicAliasTransaction';
4344
import {MosaicDefinitionTransaction} from '../../model/transaction/MosaicDefinitionTransaction';
4445
import { MosaicGlobalRestrictionTransaction } from '../../model/transaction/MosaicGlobalRestrictionTransaction';
46+
import { MosaicMetadataTransaction } from '../../model/transaction/MosaicMetadataTransaction';
4547
import {MosaicSupplyChangeTransaction} from '../../model/transaction/MosaicSupplyChangeTransaction';
4648
import {MultisigCosignatoryModification} from '../../model/transaction/MultisigCosignatoryModification';
49+
import { NamespaceMetadataTransaction } from '../../model/transaction/NamespaceMetadataTransaction';
4750
import {EmptyMessage, PlainMessage} from '../../model/transaction/PlainMessage';
4851
import {RegisterNamespaceTransaction} from '../../model/transaction/RegisterNamespaceTransaction';
4952
import {SecretLockTransaction} from '../../model/transaction/SecretLockTransaction';
@@ -377,6 +380,53 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
377380
extractNetworkType(transactionDTO.version)) : undefined,
378381
transactionInfo,
379382
);
383+
} else if (transactionDTO.type === TransactionType.ACCOUNT_METADATA_TRANSACTION) {
384+
return new AccountMetadataTransaction(
385+
extractNetworkType(transactionDTO.version),
386+
extractTransactionVersion(transactionDTO.version),
387+
Deadline.createFromDTO(transactionDTO.deadline),
388+
new UInt64(transactionDTO.maxFee || [0, 0]),
389+
transactionDTO.targetPublicKey,
390+
new UInt64(transactionDTO.scopedMetadataKey),
391+
transactionDTO.valueSizeDelta,
392+
convert.hexToUint8(transactionDTO.value),
393+
transactionDTO.signature,
394+
transactionDTO.signer ? PublicAccount.createFromPublicKey(transactionDTO.signer,
395+
extractNetworkType(transactionDTO.version)) : undefined,
396+
transactionInfo,
397+
);
398+
} else if (transactionDTO.type === TransactionType.MOSAIC_METADATA_TRANSACTION) {
399+
return new MosaicMetadataTransaction(
400+
extractNetworkType(transactionDTO.version),
401+
extractTransactionVersion(transactionDTO.version),
402+
Deadline.createFromDTO(transactionDTO.deadline),
403+
new UInt64(transactionDTO.maxFee || [0, 0]),
404+
transactionDTO.targetPublicKey,
405+
new UInt64(transactionDTO.scopedMetadataKey),
406+
new MosaicId(transactionDTO.targetMosaicId),
407+
transactionDTO.valueSizeDelta,
408+
convert.hexToUint8(transactionDTO.value),
409+
transactionDTO.signature,
410+
transactionDTO.signer ? PublicAccount.createFromPublicKey(transactionDTO.signer,
411+
extractNetworkType(transactionDTO.version)) : undefined,
412+
transactionInfo,
413+
);
414+
} else if (transactionDTO.type === TransactionType.NAMESPACE_METADATA_TRANSACTION) {
415+
return new NamespaceMetadataTransaction(
416+
extractNetworkType(transactionDTO.version),
417+
extractTransactionVersion(transactionDTO.version),
418+
Deadline.createFromDTO(transactionDTO.deadline),
419+
new UInt64(transactionDTO.maxFee || [0, 0]),
420+
transactionDTO.targetPublicKey,
421+
new UInt64(transactionDTO.scopedMetadataKey),
422+
new NamespaceId(transactionDTO.targetNamespaceId),
423+
transactionDTO.valueSizeDelta,
424+
convert.hexToUint8(transactionDTO.value),
425+
transactionDTO.signature,
426+
transactionDTO.signer ? PublicAccount.createFromPublicKey(transactionDTO.signer,
427+
extractNetworkType(transactionDTO.version)) : undefined,
428+
transactionInfo,
429+
);
380430
}
381431
throw new Error('Unimplemented transaction with type ' + transactionDTO.type);
382432
};

src/infrastructure/transaction/CreateTransactionFromPayload.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { Convert as convert } from '../../core/format';
1919
import { InnerTransaction } from '../../model/model';
2020
import { AccountAddressRestrictionTransaction } from '../../model/transaction/AccountAddressRestrictionTransaction';
2121
import { AccountLinkTransaction } from '../../model/transaction/AccountLinkTransaction';
22+
import { AccountMetadataTransaction } from '../../model/transaction/AccountMetadataTransaction';
2223
import { AccountMosaicRestrictionTransaction } from '../../model/transaction/AccountMosaicRestrictionTransaction';
2324
import { AccountOperationRestrictionTransaction } from '../../model/transaction/AccountOperationRestrictionTransaction';
2425
import { AddressAliasTransaction } from '../../model/transaction/AddressAliasTransaction';
@@ -29,7 +30,9 @@ import { MosaicAddressRestrictionTransaction } from '../../model/transaction/Mos
2930
import { MosaicAliasTransaction } from '../../model/transaction/MosaicAliasTransaction';
3031
import { MosaicDefinitionTransaction } from '../../model/transaction/MosaicDefinitionTransaction';
3132
import { MosaicGlobalRestrictionTransaction } from '../../model/transaction/MosaicGlobalRestrictionTransaction';
33+
import { MosaicMetadataTransaction } from '../../model/transaction/MosaicMetadataTransaction';
3234
import { MosaicSupplyChangeTransaction } from '../../model/transaction/MosaicSupplyChangeTransaction';
35+
import { NamespaceMetadataTransaction } from '../../model/transaction/NamespaceMetadataTransaction';
3336
import { RegisterNamespaceTransaction } from '../../model/transaction/RegisterNamespaceTransaction';
3437
import { SecretLockTransaction } from '../../model/transaction/SecretLockTransaction';
3538
import { SecretProofTransaction } from '../../model/transaction/SecretProofTransaction';
@@ -92,6 +95,12 @@ export const CreateTransactionFromPayload = (payload: string,
9295
return MosaicGlobalRestrictionTransaction.createFromPayload(payload, isEmbedded, signSchema);
9396
case TransactionType.MOSAIC_ADDRESS_RESTRICTION:
9497
return MosaicAddressRestrictionTransaction.createFromPayload(payload, isEmbedded, signSchema);
98+
case TransactionType.ACCOUNT_METADATA_TRANSACTION:
99+
return AccountMetadataTransaction.createFromPayload(payload, isEmbedded, signSchema);
100+
case TransactionType.MOSAIC_METADATA_TRANSACTION:
101+
return MosaicMetadataTransaction.createFromPayload(payload, isEmbedded, signSchema);
102+
case TransactionType.NAMESPACE_METADATA_TRANSACTION:
103+
return NamespaceMetadataTransaction.createFromPayload(payload, isEmbedded, signSchema);
95104
case TransactionType.AGGREGATE_COMPLETE:
96105
case TransactionType.AGGREGATE_BONDED:
97106
return AggregateTransaction.createFromPayload(payload, signSchema);

src/infrastructure/transaction/SerializeTransactionToJSON.ts

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

17+
import { Convert } from '../../core/format/Convert';
1718
import { AccountAddressRestrictionTransaction } from '../../model/transaction/AccountAddressRestrictionTransaction';
1819
import { AccountLinkTransaction } from '../../model/transaction/AccountLinkTransaction';
20+
import { AccountMetadataTransaction } from '../../model/transaction/AccountMetadataTransaction';
1921
import { AccountMosaicRestrictionTransaction } from '../../model/transaction/AccountMosaicRestrictionTransaction';
2022
import { AccountOperationRestrictionTransaction } from '../../model/transaction/AccountOperationRestrictionTransaction';
2123
import { AddressAliasTransaction } from '../../model/transaction/AddressAliasTransaction';
@@ -26,7 +28,9 @@ import { MosaicAddressRestrictionTransaction } from '../../model/transaction/Mos
2628
import { MosaicAliasTransaction } from '../../model/transaction/MosaicAliasTransaction';
2729
import { MosaicDefinitionTransaction } from '../../model/transaction/MosaicDefinitionTransaction';
2830
import { MosaicGlobalRestrictionTransaction } from '../../model/transaction/MosaicGlobalRestrictionTransaction';
31+
import { MosaicMetadataTransaction } from '../../model/transaction/MosaicMetadataTransaction';
2932
import { MosaicSupplyChangeTransaction } from '../../model/transaction/MosaicSupplyChangeTransaction';
33+
import { NamespaceMetadataTransaction } from '../../model/transaction/NamespaceMetadataTransaction';
3034
import { RegisterNamespaceTransaction } from '../../model/transaction/RegisterNamespaceTransaction';
3135
import { SecretLockTransaction } from '../../model/transaction/SecretLockTransaction';
3236
import { SecretProofTransaction } from '../../model/transaction/SecretProofTransaction';
@@ -178,6 +182,35 @@ export const SerializeTransactionToJSON = (transaction: Transaction): any => {
178182
previousRestrictionValue: (transaction as MosaicAddressRestrictionTransaction).previousRestrictionValue.toDTO(),
179183
newRestrictionValue: (transaction as MosaicAddressRestrictionTransaction).newRestrictionValue.toDTO(),
180184

185+
};
186+
case TransactionType.ACCOUNT_METADATA_TRANSACTION:
187+
return {
188+
targetPublicKey: (transaction as AccountMetadataTransaction).targetPublicKey,
189+
scopedMetadataKey: (transaction as AccountMetadataTransaction).scopedMetadataKey.toDTO(),
190+
valueSizeDelta: (transaction as AccountMetadataTransaction).valueSizeDelta,
191+
valueSize: (transaction as AccountMetadataTransaction).value.length,
192+
value: Convert.uint8ToHex((transaction as AccountMetadataTransaction).value),
193+
194+
};
195+
case TransactionType.MOSAIC_METADATA_TRANSACTION:
196+
return {
197+
targetPublicKey: (transaction as MosaicMetadataTransaction).targetPublicKey,
198+
scopedMetadataKey: (transaction as MosaicMetadataTransaction).scopedMetadataKey.toDTO(),
199+
valueSizeDelta: (transaction as MosaicMetadataTransaction).valueSizeDelta,
200+
targetMosaicId: (transaction as MosaicMetadataTransaction).targetMosaicId.id.toDTO(),
201+
valueSize: (transaction as MosaicMetadataTransaction).value.length,
202+
value: Convert.uint8ToHex((transaction as MosaicMetadataTransaction).value),
203+
204+
};
205+
case TransactionType.NAMESPACE_METADATA_TRANSACTION:
206+
return {
207+
targetPublicKey: (transaction as NamespaceMetadataTransaction).targetPublicKey,
208+
scopedMetadataKey: (transaction as NamespaceMetadataTransaction).scopedMetadataKey.toDTO(),
209+
valueSizeDelta: (transaction as NamespaceMetadataTransaction).valueSizeDelta,
210+
targetNamespaceId: (transaction as NamespaceMetadataTransaction).targetNamespaceId.id.toDTO(),
211+
valueSize: (transaction as NamespaceMetadataTransaction).value.length,
212+
value: Convert.uint8ToHex((transaction as NamespaceMetadataTransaction).value),
213+
181214
};
182215
default:
183216
throw new Error ('Transaction type not implemented yet.');

src/model/model.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ export * from './mosaic/NetworkCurrencyMosaic';
5656
export * from './mosaic/NetworkHarvestMosaic';
5757
export * from './mosaic/MosaicNames';
5858
export * from './mosaic/MosaicPropertyType';
59+
export * from './mosaic/MosaicRestrictionType';
5960

6061
// Namespace
6162
export * from '../service/Namespace';
@@ -130,6 +131,11 @@ export * from './transaction/TransactionStatus';
130131
export * from './transaction/TransactionStatusError';
131132
export * from './transaction/TransactionType';
132133
export * from './transaction/TransferTransaction';
134+
export * from './transaction/AccountMetadataTransaction';
135+
export * from './transaction/MosaicMetadataTransaction';
136+
export * from './transaction/NamespaceMetadataTransaction';
137+
export * from './transaction/MosaicGlobalRestrictionTransaction';
138+
export * from './transaction/MosaicAddressRestrictionTransaction';
133139

134140
// Wallet
135141
export * from './wallet/EncryptedPrivateKey';

0 commit comments

Comments
 (0)