Skip to content

Commit 43c586f

Browse files
committed
Fixed createSubNameapceId bug
Added registerNamespaceTransaction from payload
1 parent bf0c8ef commit 43c586f

File tree

5 files changed

+80
-6
lines changed

5 files changed

+80
-6
lines changed

src/infrastructure/transaction/CreateTransactionFromPayload.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { MosaicId } from '../../model/mosaic/MosaicId';
2424
import { MosaicNonce } from '../../model/mosaic/MosaicNonce';
2525
import { MosaicProperties } from '../../model/mosaic/MosaicProperties';
2626
import { NamespaceId } from '../../model/namespace/NamespaceId';
27+
import { NamespaceType } from '../../model/namespace/NamespaceType';
2728
import { AccountLinkTransaction } from '../../model/transaction/AccountLinkTransaction';
2829
import { AccountPropertyModification } from '../../model/transaction/AccountPropertyModification';
2930
import { AddressAliasTransaction } from '../../model/transaction/AddressAliasTransaction';
@@ -240,6 +241,26 @@ const CreateTransaction = (type: number, transactionData: string, networkType: N
240241
UInt64.fromHex(reverse(delta)),
241242
networkType,
242243
);
244+
case TransactionType.REGISTER_NAMESPACE:
245+
// read bytes
246+
const namespaceType = parseInt(convert.uint8ToHex(convert.hexToUint8(transactionData.substring(0, 2)).reverse()), 16);
247+
const nameSpaceDurationParentId = transactionData.substring(2, 18);
248+
const nameSpaceId = transactionData.substring(18, 34);
249+
const nameSize = transactionData.substring(34, 36);
250+
const nameSpaceName = transactionData.substring(36);
251+
252+
return namespaceType === NamespaceType.RootNamespace ?
253+
RegisterNamespaceTransaction.createRootNamespace(
254+
Deadline.createFromDTO(deadline),
255+
decodeHex(nameSpaceName),
256+
UInt64.fromHex(reverse(nameSpaceDurationParentId)),
257+
networkType,
258+
) : RegisterNamespaceTransaction.createSubNamespace(
259+
Deadline.createFromDTO(deadline),
260+
decodeHex(nameSpaceName),
261+
new NamespaceId(UInt64.fromHex(reverse(nameSpaceDurationParentId)).toDTO()),
262+
networkType,
263+
);
243264
case TransactionType.TRANSFER:
244265
// read bytes
245266
const transferRecipient = transactionData.substring(0, 50);

src/model/transaction/RegisterNamespaceTransaction.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { NamespaceCreationTransaction as RegisterNamespaceTransactionLibrary, subnamespaceNamespaceId, subnamespaceParentId, VerifiableTransaction } from 'nem2-library';
17+
import { NamespaceCreationTransaction as RegisterNamespaceTransactionLibrary, subnamespaceNamespaceId, subnamespaceParentId, VerifiableTransaction, namespaceId } from 'nem2-library';
1818
import { PublicAccount } from '../account/PublicAccount';
1919
import { NetworkType } from '../blockchain/NetworkType';
2020
import { NamespaceId } from '../namespace/NamespaceId';
@@ -79,7 +79,9 @@ export class RegisterNamespaceTransaction extends Transaction {
7979
new UInt64([0, 0]),
8080
NamespaceType.SubNamespace,
8181
namespaceName,
82-
new NamespaceId(subnamespaceNamespaceId(parentNamespace, namespaceName)),
82+
typeof parentNamespace === 'string' ?
83+
new NamespaceId(subnamespaceNamespaceId(parentNamespace, namespaceName)) :
84+
new NamespaceId(namespaceId(namespaceName)),
8385
undefined,
8486
parentId,
8587
);

test/infrastructure/SerializeTransactionToJSON.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,13 @@ import { NetworkCurrencyMosaic } from '../../src/model/mosaic/NetworkCurrencyMos
3232
import { AliasActionType } from '../../src/model/namespace/AliasActionType';
3333
import { NamespaceId } from '../../src/model/namespace/NamespaceId';
3434
import { NamespaceType } from '../../src/model/namespace/NamespaceType';
35+
import { AccountLinkTransaction } from '../../src/model/transaction/AccountLinkTransaction';
3536
import { AccountPropertyTransaction } from '../../src/model/transaction/AccountPropertyTransaction';
3637
import { AddressAliasTransaction } from '../../src/model/transaction/AddressAliasTransaction';
3738
import { AggregateTransaction } from '../../src/model/transaction/AggregateTransaction';
3839
import { Deadline } from '../../src/model/transaction/Deadline';
3940
import { HashType } from '../../src/model/transaction/HashType';
41+
import { LinkAction } from '../../src/model/transaction/LinkAction';
4042
import { LockFundsTransaction } from '../../src/model/transaction/LockFundsTransaction';
4143
import { ModifyAccountPropertyAddressTransaction } from '../../src/model/transaction/ModifyAccountPropertyAddressTransaction';
4244
import { ModifyMultisigAccountTransaction } from '../../src/model/transaction/ModifyMultisigAccountTransaction';
@@ -54,8 +56,6 @@ import { TransferTransaction } from '../../src/model/transaction/TransferTransac
5456
import { UInt64 } from '../../src/model/UInt64';
5557
import { TransactionMapping } from '../../src/utility/TransactionMapping';
5658
import { TestingAccount } from '../conf/conf.spec';
57-
import { AccountLinkTransaction } from '../../src/model/transaction/AccountLinkTransaction';
58-
import { LinkAction } from '../../src/model/transaction/LinkAction';
5959

6060
describe('SerializeTransactionToJSON', () => {
6161
let account: Account;

test/model/transaction/RegisterNamespaceTransaction.spec.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {Deadline} from '../../../src/model/transaction/Deadline';
2121
import {RegisterNamespaceTransaction} from '../../../src/model/transaction/RegisterNamespaceTransaction';
2222
import {UInt64} from '../../../src/model/UInt64';
2323
import {TestingAccount} from '../../conf/conf.spec';
24+
import { NamespaceId } from '../../../src/model/namespace/NamespaceId';
2425

2526
describe('RegisterNamespaceTransaction', () => {
2627
let account: Account;
@@ -65,4 +66,21 @@ describe('RegisterNamespaceTransaction', () => {
6566
)).to.be.equal('014DF55E7F6D8FB7FF924207DF2CA1BBF313726F6F742D746573742D6E616D657370616365');
6667

6768
});
69+
70+
it('should createComplete an sub RegisterNamespaceTransaction object and sign it - ParentId', () => {
71+
const registerNamespaceTransaction = RegisterNamespaceTransaction.createSubNamespace(
72+
Deadline.create(),
73+
'root-test-namespace',
74+
new NamespaceId([929036875, 2226345261]),
75+
NetworkType.MIJIN_TEST,
76+
);
77+
78+
const signedTransaction = registerNamespaceTransaction.signWith(account);
79+
80+
expect(signedTransaction.payload.substring(
81+
240,
82+
signedTransaction.payload.length,
83+
)).to.be.equal('014BFA5F372D55B384CFCBE72D994BE69B13726F6F742D746573742D6E616D657370616365');
84+
85+
});
6886
});

test/utility/TransactionMapping.spec.ts

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,13 @@ import { NetworkCurrencyMosaic } from '../../src/model/mosaic/NetworkCurrencyMos
3232
import { AliasActionType } from '../../src/model/namespace/AliasActionType';
3333
import { NamespaceId } from '../../src/model/namespace/NamespaceId';
3434
import { NamespaceType } from '../../src/model/namespace/NamespaceType';
35+
import { AccountLinkTransaction } from '../../src/model/transaction/AccountLinkTransaction';
3536
import { AccountPropertyTransaction } from '../../src/model/transaction/AccountPropertyTransaction';
3637
import { AddressAliasTransaction } from '../../src/model/transaction/AddressAliasTransaction';
3738
import { AggregateTransaction } from '../../src/model/transaction/AggregateTransaction';
3839
import { Deadline } from '../../src/model/transaction/Deadline';
3940
import { HashType } from '../../src/model/transaction/HashType';
41+
import { LinkAction } from '../../src/model/transaction/LinkAction';
4042
import { LockFundsTransaction } from '../../src/model/transaction/LockFundsTransaction';
4143
import { ModifyAccountPropertyAddressTransaction } from '../../src/model/transaction/ModifyAccountPropertyAddressTransaction';
4244
import { ModifyMultisigAccountTransaction } from '../../src/model/transaction/ModifyMultisigAccountTransaction';
@@ -54,8 +56,6 @@ import { TransferTransaction } from '../../src/model/transaction/TransferTransac
5456
import { UInt64 } from '../../src/model/UInt64';
5557
import { TransactionMapping } from '../../src/utility/TransactionMapping';
5658
import { TestingAccount } from '../conf/conf.spec';
57-
import { AccountLinkTransaction } from '../../src/model/transaction/AccountLinkTransaction';
58-
import { LinkAction } from '../../src/model/transaction/LinkAction';
5959

6060
describe('TransactionMapping', () => {
6161
let account: Account;
@@ -396,4 +396,37 @@ describe('TransactionMapping', () => {
396396
expect(transaction.linkAction).to.be.equal(0);
397397
expect(transaction.remoteAccountKey).to.be.equal(account.publicKey);
398398
});
399+
400+
it('should create RegisterNamespaceTransaction - Root', () => {
401+
const registerNamespaceTransaction = RegisterNamespaceTransaction.createRootNamespace(
402+
Deadline.create(),
403+
'root-test-namespace',
404+
UInt64.fromUint(1000),
405+
NetworkType.MIJIN_TEST,
406+
);
407+
408+
const signedTransaction = registerNamespaceTransaction.signWith(account);
409+
410+
const transaction = TransactionMapping.createFromPayload(signedTransaction.payload) as RegisterNamespaceTransaction;
411+
412+
expect(transaction.namespaceType).to.be.equal(NamespaceType.RootNamespace);
413+
expect(transaction.namespaceName).to.be.equal('root-test-namespace');
414+
415+
});
416+
417+
it('should create RegisterNamespaceTransaction - Sub', () => {
418+
const registerNamespaceTransaction = RegisterNamespaceTransaction.createSubNamespace(
419+
Deadline.create(),
420+
'root-test-namespace',
421+
'parent-test-namespace',
422+
NetworkType.MIJIN_TEST,
423+
);
424+
425+
const signedTransaction = registerNamespaceTransaction.signWith(account);
426+
427+
const transaction = TransactionMapping.createFromPayload(signedTransaction.payload) as RegisterNamespaceTransaction;
428+
429+
expect(transaction.namespaceType).to.be.equal(NamespaceType.SubNamespace);
430+
expect(transaction.namespaceName).to.be.equal('root-test-namespace');
431+
});
399432
});

0 commit comments

Comments
 (0)