@bitgo/sdk-coin-polyx 1.17.2 → 1.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/src/lib/batchStakingBuilder.d.ts.map +1 -1
  2. package/dist/src/lib/batchStakingBuilder.js +4 -1
  3. package/dist/src/lib/batchUnstakingBuilder.d.ts.map +1 -1
  4. package/dist/src/lib/batchUnstakingBuilder.js +3 -1
  5. package/dist/src/lib/bondExtraBuilder.d.ts.map +1 -1
  6. package/dist/src/lib/bondExtraBuilder.js +3 -1
  7. package/dist/src/lib/hexTokenTransferBuilder.d.ts +3 -0
  8. package/dist/src/lib/hexTokenTransferBuilder.d.ts.map +1 -1
  9. package/dist/src/lib/hexTokenTransferBuilder.js +4 -1
  10. package/dist/src/lib/hexTransferBuilder.d.ts +2 -0
  11. package/dist/src/lib/hexTransferBuilder.d.ts.map +1 -1
  12. package/dist/src/lib/hexTransferBuilder.js +3 -1
  13. package/dist/src/lib/iface.d.ts +113 -2
  14. package/dist/src/lib/iface.d.ts.map +1 -1
  15. package/dist/src/lib/iface.js +12 -1
  16. package/dist/src/lib/index.d.ts +14 -1
  17. package/dist/src/lib/index.d.ts.map +1 -1
  18. package/dist/src/lib/index.js +28 -2
  19. package/dist/src/lib/nominateBuilder.d.ts.map +1 -1
  20. package/dist/src/lib/nominateBuilder.js +3 -1
  21. package/dist/src/lib/preApproveAssetBuilder.d.ts.map +1 -1
  22. package/dist/src/lib/preApproveAssetBuilder.js +2 -2
  23. package/dist/src/lib/registerDidWithCDDBuilder.d.ts.map +1 -1
  24. package/dist/src/lib/registerDidWithCDDBuilder.js +4 -1
  25. package/dist/src/lib/tokenTransferBuilder.d.ts +7 -1
  26. package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -1
  27. package/dist/src/lib/tokenTransferBuilder.js +16 -7
  28. package/dist/src/lib/transaction.d.ts.map +1 -1
  29. package/dist/src/lib/transaction.js +24 -6
  30. package/dist/src/lib/transactionBuilderFactory.d.ts +32 -0
  31. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  32. package/dist/src/lib/transactionBuilderFactory.js +121 -5
  33. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  34. package/dist/src/lib/transferBuilder.js +3 -1
  35. package/dist/src/lib/txnSchema.d.ts +20 -0
  36. package/dist/src/lib/txnSchema.d.ts.map +1 -1
  37. package/dist/src/lib/txnSchema.js +81 -2
  38. package/dist/src/lib/unbondBuilder.d.ts.map +1 -1
  39. package/dist/src/lib/unbondBuilder.js +3 -1
  40. package/dist/src/lib/utils.d.ts +1 -0
  41. package/dist/src/lib/utils.d.ts.map +1 -1
  42. package/dist/src/lib/utils.js +6 -1
  43. package/dist/src/lib/v8BatchStakingBuilder.d.ts +85 -0
  44. package/dist/src/lib/v8BatchStakingBuilder.d.ts.map +1 -0
  45. package/dist/src/lib/v8BatchStakingBuilder.js +266 -0
  46. package/dist/src/lib/v8BatchUnstakingBuilder.d.ts +11 -0
  47. package/dist/src/lib/v8BatchUnstakingBuilder.d.ts.map +1 -0
  48. package/dist/src/lib/v8BatchUnstakingBuilder.js +21 -0
  49. package/dist/src/lib/v8BondExtraBuilder.d.ts +11 -0
  50. package/dist/src/lib/v8BondExtraBuilder.d.ts.map +1 -0
  51. package/dist/src/lib/v8BondExtraBuilder.js +21 -0
  52. package/dist/src/lib/v8HexTokenTransferBuilder.d.ts +20 -0
  53. package/dist/src/lib/v8HexTokenTransferBuilder.d.ts.map +1 -0
  54. package/dist/src/lib/v8HexTokenTransferBuilder.js +42 -0
  55. package/dist/src/lib/v8HexTransferBuilder.d.ts +11 -0
  56. package/dist/src/lib/v8HexTransferBuilder.d.ts.map +1 -0
  57. package/dist/src/lib/v8HexTransferBuilder.js +21 -0
  58. package/dist/src/lib/v8NominateBuilder.d.ts +11 -0
  59. package/dist/src/lib/v8NominateBuilder.d.ts.map +1 -0
  60. package/dist/src/lib/v8NominateBuilder.js +21 -0
  61. package/dist/src/lib/v8PreApproveAssetBuilder.d.ts +11 -0
  62. package/dist/src/lib/v8PreApproveAssetBuilder.d.ts.map +1 -0
  63. package/dist/src/lib/v8PreApproveAssetBuilder.js +21 -0
  64. package/dist/src/lib/v8RegisterDidBuilder.d.ts +47 -0
  65. package/dist/src/lib/v8RegisterDidBuilder.d.ts.map +1 -0
  66. package/dist/src/lib/v8RegisterDidBuilder.js +96 -0
  67. package/dist/src/lib/v8RegisterDidWithCDDBuilder.d.ts +11 -0
  68. package/dist/src/lib/v8RegisterDidWithCDDBuilder.d.ts.map +1 -0
  69. package/dist/src/lib/v8RegisterDidWithCDDBuilder.js +21 -0
  70. package/dist/src/lib/v8TokenTransferBuilder.d.ts +24 -0
  71. package/dist/src/lib/v8TokenTransferBuilder.d.ts.map +1 -0
  72. package/dist/src/lib/v8TokenTransferBuilder.js +101 -0
  73. package/dist/src/lib/v8TransferBuilder.d.ts +11 -0
  74. package/dist/src/lib/v8TransferBuilder.d.ts.map +1 -0
  75. package/dist/src/lib/v8TransferBuilder.js +21 -0
  76. package/dist/src/lib/v8UnbondBuilder.d.ts +11 -0
  77. package/dist/src/lib/v8UnbondBuilder.d.ts.map +1 -0
  78. package/dist/src/lib/v8UnbondBuilder.js +21 -0
  79. package/dist/src/lib/v8WithdrawUnbondedBuilder.d.ts +11 -0
  80. package/dist/src/lib/v8WithdrawUnbondedBuilder.d.ts.map +1 -0
  81. package/dist/src/lib/v8WithdrawUnbondedBuilder.js +21 -0
  82. package/dist/src/lib/withdrawUnbondedBuilder.d.ts.map +1 -1
  83. package/dist/src/lib/withdrawUnbondedBuilder.js +3 -1
  84. package/dist/src/resources/index.d.ts +2 -0
  85. package/dist/src/resources/index.d.ts.map +1 -1
  86. package/dist/src/resources/index.js +3 -1
  87. package/dist/src/resources/mainnetV8.d.ts +13 -0
  88. package/dist/src/resources/mainnetV8.d.ts.map +1 -0
  89. package/dist/src/resources/mainnetV8.js +19 -0
  90. package/dist/src/resources/testnetV8.d.ts +13 -0
  91. package/dist/src/resources/testnetV8.d.ts.map +1 -0
  92. package/dist/src/resources/testnetV8.js +16 -0
  93. package/dist/test/resources/index.d.ts +28 -1
  94. package/dist/test/resources/index.d.ts.map +1 -1
  95. package/dist/test/resources/index.js +31 -2
  96. package/dist/test/unit/transactionBuilder/batchStakingBuilder.js +30 -1
  97. package/dist/test/unit/transactionBuilder/nominateBuilder.js +58 -1
  98. package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.d.ts +2 -0
  99. package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.d.ts.map +1 -0
  100. package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.js +201 -0
  101. package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.d.ts +2 -0
  102. package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.d.ts.map +1 -0
  103. package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.js +90 -0
  104. package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.d.ts +2 -0
  105. package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.d.ts.map +1 -0
  106. package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.js +62 -0
  107. package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.d.ts +2 -0
  108. package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.d.ts.map +1 -0
  109. package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.js +45 -0
  110. package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.d.ts +2 -0
  111. package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.d.ts.map +1 -0
  112. package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.js +87 -0
  113. package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.d.ts +2 -0
  114. package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.d.ts.map +1 -0
  115. package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.js +45 -0
  116. package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.d.ts +2 -0
  117. package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.d.ts.map +1 -0
  118. package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.js +114 -0
  119. package/dist/test/unit/transactionBuilder/v8TransferBuilder.d.ts +2 -0
  120. package/dist/test/unit/transactionBuilder/v8TransferBuilder.d.ts.map +1 -0
  121. package/dist/test/unit/transactionBuilder/v8TransferBuilder.js +107 -0
  122. package/dist/tsconfig.tsbuildinfo +1 -1
  123. package/package.json +8 -8
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const should_1 = __importDefault(require("should"));
7
+ const txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
8
+ const lib_1 = require("../../../src/lib");
9
+ const resources_1 = require("../../resources");
10
+ const resources_2 = require("../../../src/resources");
11
+ const base_1 = require("./base");
12
+ describe('V8RegisterDidBuilder', () => {
13
+ describe('v8 material', () => {
14
+ it('carries v8 specVersion and txVersion', () => {
15
+ const builder = new lib_1.V8RegisterDidBuilder((0, base_1.buildTestConfig)());
16
+ const material = builder._material;
17
+ should_1.default.equal(material.specVersion, resources_2.testnetV8Material.specVersion);
18
+ should_1.default.equal(material.txVersion, resources_2.testnetV8Material.txVersion);
19
+ });
20
+ });
21
+ describe('factory method', () => {
22
+ it('getV8RegisterDidBuilder returns a V8RegisterDidBuilder', () => {
23
+ const factory = new lib_1.TransactionBuilderFactory((0, base_1.buildTestConfig)());
24
+ should_1.default.ok(factory.getV8RegisterDidBuilder() instanceof lib_1.V8RegisterDidBuilder);
25
+ });
26
+ });
27
+ describe('build transaction', () => {
28
+ const sender = resources_1.accounts.cddProvider;
29
+ const target = resources_1.accounts.account1;
30
+ it('should build a v8 DID registration transaction with v8 specVersion in output', async () => {
31
+ const builder = new lib_1.V8RegisterDidBuilder((0, base_1.buildTestConfig)())
32
+ .to({ address: target.address })
33
+ .sender({ address: sender.address })
34
+ .validity({ firstValid: 3933, maxDuration: 64 })
35
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
36
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
37
+ .fee({ amount: 0, type: 'tip' });
38
+ builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
39
+ const tx = await builder.build();
40
+ const txJson = tx.toJson();
41
+ should_1.default.deepEqual(txJson.specVersion, resources_2.testnetV8Material.specVersion);
42
+ should_1.default.deepEqual(txJson.transactionVersion, resources_2.testnetV8Material.txVersion);
43
+ });
44
+ it('encodes identity.registerDid (0x0718), not the v7 cddRegisterDidWithCdd (0x0714)', async () => {
45
+ const builder = new lib_1.V8RegisterDidBuilder((0, base_1.buildTestConfig)())
46
+ .to({ address: target.address })
47
+ .sender({ address: sender.address })
48
+ .validity({ firstValid: 3933, maxDuration: 64 })
49
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
50
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
51
+ .fee({ amount: 0, type: 'tip' });
52
+ builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
53
+ const tx = await builder.build();
54
+ const methodHex = tx._substrateTransaction.method;
55
+ should_1.default.equal(methodHex.slice(2, 6), '0718');
56
+ const v8Material = lib_1.utils.getV8Material((0, base_1.buildTestConfig)().network.type);
57
+ const registry = lib_1.SingletonRegistry.getInstance(v8Material);
58
+ const decoded = (0, txwrapper_polkadot_1.decode)(tx.toBroadcastFormat(), {
59
+ metadataRpc: v8Material.metadata,
60
+ registry,
61
+ });
62
+ should_1.default.equal(decoded.method.name, 'registerDid');
63
+ });
64
+ it('should build from raw signed v8 tx and decode back to the target address', async () => {
65
+ const builder = new lib_1.V8RegisterDidBuilder((0, base_1.buildTestConfig)())
66
+ .to({ address: target.address })
67
+ .sender({ address: sender.address })
68
+ .validity({ firstValid: 3933, maxDuration: 64 })
69
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
70
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
71
+ .fee({ amount: 0, type: 'tip' });
72
+ builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
73
+ const built = await builder.build();
74
+ const rawSigned = built.toBroadcastFormat();
75
+ const roundTrip = new lib_1.V8RegisterDidBuilder((0, base_1.buildTestConfig)());
76
+ roundTrip.from(rawSigned);
77
+ roundTrip
78
+ .validity({ firstValid: 3933, maxDuration: 64 })
79
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
80
+ const tx = await roundTrip.build();
81
+ const txJson = tx.toJson();
82
+ should_1.default.deepEqual(txJson.to, target.address);
83
+ should_1.default.deepEqual(txJson.amount, '0');
84
+ });
85
+ });
86
+ });
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhSZWdpc3RlckRpZEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3Y4UmVnaXN0ZXJEaWRCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLHNFQUF1RDtBQUN2RCwwQ0FBNkc7QUFDN0csK0NBQTZEO0FBQzdELHNEQUEyRDtBQUMzRCxpQ0FBeUM7QUFFekMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRTtJQUNwQyxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtRQUMzQixFQUFFLENBQUMsc0NBQXNDLEVBQUUsR0FBRyxFQUFFO1lBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksMEJBQW9CLENBQUMsSUFBQSxzQkFBZSxHQUFFLENBQUMsQ0FBQztZQUM1RCxNQUFNLFFBQVEsR0FBSSxPQUFlLENBQUMsU0FBUyxDQUFDO1lBQzVDLGdCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsNkJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbEUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSw2QkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRTtRQUM5QixFQUFFLENBQUMsd0RBQXdELEVBQUUsR0FBRyxFQUFFO1lBQ2hFLE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsSUFBQSxzQkFBZSxHQUFFLENBQUMsQ0FBQztZQUNqRSxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsWUFBWSwwQkFBb0IsQ0FBQyxDQUFDO1FBQy9FLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENB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QUFDLENBQUM7WUFDdEYsTUFBTSxLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFFNUMsTUFBTSxTQUFTLEdBQUcsSUFBSSwwQkFBb0IsQ0FBQyxJQUFBLHNCQUFlLEdBQUUsQ0FBQyxDQUFDO1lBQzlELFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDMUIsU0FBUztpQkFDTixRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQztpQkFDL0MsY0FBYyxDQUFDLG9FQUFvRSxDQUFDLENBQUM7WUFDeEYsTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBRTNCLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVDLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgZGVjb2RlIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItcG9sa2Fkb3QnO1xuaW1wb3J0IHsgVjhSZWdpc3RlckRpZEJ1aWxkZXIsIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIFNpbmdsZXRvblJlZ2lzdHJ5LCB1dGlscyB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgYWNjb3VudHMsIG1vY2tUc3NTaWduYXR1cmUgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgdGVzdG5ldFY4TWF0ZXJpYWwgfSBmcm9tICcuLi8uLi8uLi9zcmMvcmVzb3VyY2VzJztcbmltcG9ydCB7IGJ1aWxkVGVzdENvbmZpZyB9IGZyb20gJy4vYmFzZSc7XG5cbmRlc2NyaWJlKCdWOFJlZ2lzdGVyRGlkQnVpbGRlcicsICgpID0+IHtcbiAgZGVzY3JpYmUoJ3Y4IG1hdGVyaWFsJywgKCkgPT4ge1xuICAgIGl0KCdjYXJyaWVzIHY4IHNwZWNWZXJzaW9uIGFuZCB0eFZlcnNpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFY4UmVnaXN0ZXJEaWRCdWlsZGVyKGJ1aWxkVGVzdENvbmZpZygpKTtcbiAgICAgIGNvbnN0IG1hdGVyaWFsID0gKGJ1aWxkZXIgYXMgYW55KS5fbWF0ZXJpYWw7XG4gICAgICBzaG91bGQuZXF1YWwobWF0ZXJpYWwuc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5lcXVhbChtYXRlcmlhbC50eFZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnR4VmVyc2lvbik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmYWN0b3J5IG1ldGhvZCcsICgpID0+IHtcbiAgICBpdCgnZ2V0VjhSZWdpc3RlckRpZEJ1aWxkZXIgcmV0dXJucyBhIFY4UmVnaXN0ZXJEaWRCdWlsZGVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGJ1aWxkVGVzdENvbmZpZygpKTtcbiAgICAgIHNob3VsZC5vayhmYWN0b3J5LmdldFY4UmVnaXN0ZXJEaWRCdWlsZGVyKCkgaW5zdGFuY2VvZiBWOFJlZ2lzdGVyRGlkQnVpbGRlcik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdidWlsZCB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBjb25zdCBzZW5kZXIgPSBhY2NvdW50cy5jZGRQcm92aWRlcjtcbiAgICBjb25zdCB0YXJnZXQgPSBhY2NvdW50cy5hY2NvdW50MTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSB2OCBESUQgcmVnaXN0cmF0aW9uIHRyYW5zYWN0aW9uIHdpdGggdjggc3BlY1ZlcnNpb24gaW4gb3V0cHV0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBWOFJlZ2lzdGVyRGlkQnVpbGRlcihidWlsZFRlc3RDb25maWcoKSlcbiAgICAgICAgLnRvKHsgYWRkcmVzczogdGFyZ2V0LmFkZHJlc3MgfSlcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDEgfSlcbiAgICAgICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSk7XG4gICAgICBidWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1Yjogc2VuZGVyLnB1YmxpY0tleSB9LCBCdWZmZXIuZnJvbShtb2NrVHNzU2lnbmF0dXJlLCAnaGV4JykpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgdGVzdG5ldFY4TWF0ZXJpYWwudHhWZXJzaW9uKTtcbiAgICB9KTtcblxuICAgIGl0KCdlbmNvZGVzIGlkZW50aXR5LnJlZ2lzdGVyRGlkICgweDA3MTgpLCBub3QgdGhlIHY3IGNkZFJlZ2lzdGVyRGlkV2l0aENkZCAoMHgwNzE0KScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVjhSZWdpc3RlckRpZEJ1aWxkZXIoYnVpbGRUZXN0Q29uZmlnKCkpXG4gICAgICAgIC50byh7IGFkZHJlc3M6IHRhcmdldC5hZGRyZXNzIH0pXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxIH0pXG4gICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pO1xuICAgICAgYnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IHNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBjb25zdCBtZXRob2RIZXggPSAodHggYXMgYW55KS5fc3Vic3RyYXRlVHJhbnNhY3Rpb24ubWV0aG9kIGFzIHN0cmluZztcbiAgICAgIHNob3VsZC5lcXVhbChtZXRob2RIZXguc2xpY2UoMiwgNiksICcwNzE4Jyk7XG5cbiAgICAgIGNvbnN0IHY4TWF0ZXJpYWwgPSB1dGlscy5nZXRWOE1hdGVyaWFsKGJ1aWxkVGVzdENvbmZpZygpLm5ldHdvcmsudHlwZSk7XG4gICAgICBjb25zdCByZWdpc3RyeSA9IFNpbmdsZXRvblJlZ2lzdHJ5LmdldEluc3RhbmNlKHY4TWF0ZXJpYWwpO1xuICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZSh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB7XG4gICAgICAgIG1ldGFkYXRhUnBjOiB2OE1hdGVyaWFsLm1ldGFkYXRhLFxuICAgICAgICByZWdpc3RyeSxcbiAgICAgIH0pO1xuICAgICAgc2hvdWxkLmVxdWFsKGRlY29kZWQubWV0aG9kLm5hbWUsICdyZWdpc3RlckRpZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBmcm9tIHJhdyBzaWduZWQgdjggdHggYW5kIGRlY29kZSBiYWNrIHRvIHRoZSB0YXJnZXQgYWRkcmVzcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVjhSZWdpc3RlckRpZEJ1aWxkZXIoYnVpbGRUZXN0Q29uZmlnKCkpXG4gICAgICAgIC50byh7IGFkZHJlc3M6IHRhcmdldC5hZGRyZXNzIH0pXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxIH0pXG4gICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pO1xuICAgICAgYnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IHNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcbiAgICAgIGNvbnN0IGJ1aWx0ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmF3U2lnbmVkID0gYnVpbHQudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgY29uc3Qgcm91bmRUcmlwID0gbmV3IFY4UmVnaXN0ZXJEaWRCdWlsZGVyKGJ1aWxkVGVzdENvbmZpZygpKTtcbiAgICAgIHJvdW5kVHJpcC5mcm9tKHJhd1NpZ25lZCk7XG4gICAgICByb3VuZFRyaXBcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJyk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHJvdW5kVHJpcC5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRvLCB0YXJnZXQuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5hbW91bnQsICcwJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=v8RegisterDidWithCDDBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v8RegisterDidWithCDDBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const should_1 = __importDefault(require("should"));
7
+ const lib_1 = require("../../../src/lib");
8
+ const resources_1 = require("../../resources");
9
+ const resources_2 = require("../../../src/resources");
10
+ const base_1 = require("./base");
11
+ describe('V8RegisterDidWithCDDBuilder', () => {
12
+ describe('v8 material', () => {
13
+ it('carries v8 specVersion and txVersion', () => {
14
+ const builder = new lib_1.V8RegisterDidWithCDDBuilder((0, base_1.buildTestConfig)());
15
+ const material = builder._material;
16
+ should_1.default.equal(material.specVersion, resources_2.testnetV8Material.specVersion);
17
+ should_1.default.equal(material.txVersion, resources_2.testnetV8Material.txVersion);
18
+ });
19
+ });
20
+ describe('factory method', () => {
21
+ it('getV8RegisterDidWithCDDBuilder returns a V8RegisterDidWithCDDBuilder', () => {
22
+ const factory = new lib_1.TransactionBuilderFactory((0, base_1.buildTestConfig)());
23
+ should_1.default.ok(factory.getV8RegisterDidWithCDDBuilder() instanceof lib_1.V8RegisterDidWithCDDBuilder);
24
+ });
25
+ });
26
+ describe('build transaction', () => {
27
+ const sender = resources_1.accounts.cddProvider;
28
+ const target = resources_1.accounts.account1;
29
+ it('should build a v8 DID registration transaction with v8 specVersion in output', async () => {
30
+ const builder = new lib_1.V8RegisterDidWithCDDBuilder((0, base_1.buildTestConfig)())
31
+ .to({ address: target.address })
32
+ .sender({ address: sender.address })
33
+ .validity({ firstValid: 3933, maxDuration: 64 })
34
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
35
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
36
+ .fee({ amount: 0, type: 'tip' });
37
+ builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
38
+ const tx = await builder.build();
39
+ const txJson = tx.toJson();
40
+ should_1.default.deepEqual(txJson.specVersion, resources_2.testnetV8Material.specVersion);
41
+ should_1.default.deepEqual(txJson.transactionVersion, resources_2.testnetV8Material.txVersion);
42
+ });
43
+ });
44
+ });
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhSZWdpc3RlckRpZFdpdGhDRERCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci92OFJlZ2lzdGVyRGlkV2l0aENEREJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsMENBQTBGO0FBQzFGLCtDQUE2RDtBQUM3RCxzREFBMkQ7QUFDM0QsaUNBQXlDO0FBRXpDLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxHQUFHLEVBQUU7SUFDM0MsUUFBUSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7UUFDM0IsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtZQUM5QyxNQUFNLE9BQU8sR0FBRyxJQUFJLGlDQUEyQixDQUFDLElBQUEsc0JBQWUsR0FBRSxDQUFDLENBQUM7WUFDbkUsTUFBTSxRQUFRLEdBQUksT0FBZSxDQUFDLFNBQVMsQ0FBQztZQUM1QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLDZCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xFLGdCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsNkJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7UUFDOUIsRUFBRSxDQUFDLHNFQUFzRSxFQUFFLEdBQUcsRUFBRTtZQUM5RSxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLElBQUEsc0JBQWUsR0FBRSxDQUFDLENBQUM7WUFDakUsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLDhCQUE4QixFQUFFLFlBQVksaUNBQTJCLENBQUMsQ0FBQztRQUM3RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtRQUNqQyxNQUFNLE1BQU0sR0FBRyxvQkFBUSxDQUFDLFdBQVcsQ0FBQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxvQkFBUSxDQUFDLFFBQVEsQ0FBQztRQUVqQyxFQUFFLENBQUMsOEVBQThFLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDNUYsTUFBTSxPQUFPLEdBQUcsSUFBSSxpQ0FBMkIsQ0FBQyxJQUFBLHNCQUFlLEdBQUUsQ0FBQztpQkFDL0QsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztpQkFDL0IsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztpQkFDbkMsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUM7aUJBQy9DLGNBQWMsQ0FBQyxvRUFBb0UsQ0FBQztpQkFDcEYsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztpQkFDekQsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNuQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDdEYsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFakMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsNkJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEUsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLDZCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IFY4UmVnaXN0ZXJEaWRXaXRoQ0REQnVpbGRlciwgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgYWNjb3VudHMsIG1vY2tUc3NTaWduYXR1cmUgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgdGVzdG5ldFY4TWF0ZXJpYWwgfSBmcm9tICcuLi8uLi8uLi9zcmMvcmVzb3VyY2VzJztcbmltcG9ydCB7IGJ1aWxkVGVzdENvbmZpZyB9IGZyb20gJy4vYmFzZSc7XG5cbmRlc2NyaWJlKCdWOFJlZ2lzdGVyRGlkV2l0aENEREJ1aWxkZXInLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCd2OCBtYXRlcmlhbCcsICgpID0+IHtcbiAgICBpdCgnY2FycmllcyB2OCBzcGVjVmVyc2lvbiBhbmQgdHhWZXJzaW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBWOFJlZ2lzdGVyRGlkV2l0aENEREJ1aWxkZXIoYnVpbGRUZXN0Q29uZmlnKCkpO1xuICAgICAgY29uc3QgbWF0ZXJpYWwgPSAoYnVpbGRlciBhcyBhbnkpLl9tYXRlcmlhbDtcbiAgICAgIHNob3VsZC5lcXVhbChtYXRlcmlhbC5zcGVjVmVyc2lvbiwgdGVzdG5ldFY4TWF0ZXJpYWwuc3BlY1ZlcnNpb24pO1xuICAgICAgc2hvdWxkLmVxdWFsKG1hdGVyaWFsLnR4VmVyc2lvbiwgdGVzdG5ldFY4TWF0ZXJpYWwudHhWZXJzaW9uKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZhY3RvcnkgbWV0aG9kJywgKCkgPT4ge1xuICAgIGl0KCdnZXRWOFJlZ2lzdGVyRGlkV2l0aENEREJ1aWxkZXIgcmV0dXJucyBhIFY4UmVnaXN0ZXJEaWRXaXRoQ0REQnVpbGRlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShidWlsZFRlc3RDb25maWcoKSk7XG4gICAgICBzaG91bGQub2soZmFjdG9yeS5nZXRWOFJlZ2lzdGVyRGlkV2l0aENEREJ1aWxkZXIoKSBpbnN0YW5jZW9mIFY4UmVnaXN0ZXJEaWRXaXRoQ0REQnVpbGRlcik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdidWlsZCB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBjb25zdCBzZW5kZXIgPSBhY2NvdW50cy5jZGRQcm92aWRlcjtcbiAgICBjb25zdCB0YXJnZXQgPSBhY2NvdW50cy5hY2NvdW50MTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSB2OCBESUQgcmVnaXN0cmF0aW9uIHRyYW5zYWN0aW9uIHdpdGggdjggc3BlY1ZlcnNpb24gaW4gb3V0cHV0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBWOFJlZ2lzdGVyRGlkV2l0aENEREJ1aWxkZXIoYnVpbGRUZXN0Q29uZmlnKCkpXG4gICAgICAgIC50byh7IGFkZHJlc3M6IHRhcmdldC5hZGRyZXNzIH0pXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxIH0pXG4gICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pO1xuICAgICAgYnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IHNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnR4VmVyc2lvbik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=v8TokenTransferBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v8TokenTransferBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/v8TokenTransferBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const should_1 = __importDefault(require("should"));
7
+ const txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
8
+ const lib_1 = require("../../../src/lib");
9
+ const resources_1 = require("../../resources");
10
+ const resources_2 = require("../../../src/resources");
11
+ const base_1 = require("./base");
12
+ const FROM_DID = '0x1208d7851e6698249aea40742701ee1ef6cdcced260a7c49c1cca1a9db836342';
13
+ const TO_DID = '0xbc6f7ec808f361c1353ab9dc88c3cc54b98d9eb60fed9c063e67a40925b8ef61';
14
+ const ASSET_ID = '0x780602887b358cf48989d0d9aa6c8d28';
15
+ describe('V8TokenTransferBuilder', () => {
16
+ describe('v8 material', () => {
17
+ it('carries v8 specVersion and txVersion', () => {
18
+ const builder = new lib_1.V8TokenTransferBuilder((0, base_1.buildTestConfig)());
19
+ const material = builder._material;
20
+ should_1.default.equal(material.specVersion, resources_2.testnetV8Material.specVersion);
21
+ should_1.default.equal(material.txVersion, resources_2.testnetV8Material.txVersion);
22
+ });
23
+ });
24
+ describe('factory method', () => {
25
+ it('getV8TokenTransferBuilder returns a V8TokenTransferBuilder', () => {
26
+ const factory = new lib_1.TransactionBuilderFactory((0, base_1.buildTestConfig)());
27
+ should_1.default.ok(factory.getV8TokenTransferBuilder() instanceof lib_1.V8TokenTransferBuilder);
28
+ });
29
+ });
30
+ describe('build transaction', () => {
31
+ const sender = resources_1.accounts.account1;
32
+ it('should build a v8 token transfer transaction with v8 specVersion in output', async () => {
33
+ const builder = new lib_1.V8TokenTransferBuilder((0, base_1.buildTestConfig)())
34
+ .assetId(ASSET_ID)
35
+ .amount('1000000')
36
+ .fromDID(FROM_DID)
37
+ .toDID(TO_DID)
38
+ .memo('0')
39
+ .sender({ address: sender.address })
40
+ .validity({ firstValid: 3933, maxDuration: 64 })
41
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
42
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
43
+ .fee({ amount: 0, type: 'tip' });
44
+ builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
45
+ const tx = await builder.build();
46
+ const txJson = tx.toJson();
47
+ should_1.default.deepEqual(txJson.specVersion, resources_2.testnetV8Material.specVersion);
48
+ should_1.default.deepEqual(txJson.transactionVersion, resources_2.testnetV8Material.txVersion);
49
+ });
50
+ it('encodes legs/holderSet using the v8 AssetHolder wrapper, not the v7 bare PortfolioId shape', async () => {
51
+ const builder = new lib_1.V8TokenTransferBuilder((0, base_1.buildTestConfig)())
52
+ .assetId(ASSET_ID)
53
+ .amount('1000000')
54
+ .fromDID(FROM_DID)
55
+ .toDID(TO_DID)
56
+ .memo('0')
57
+ .sender({ address: sender.address })
58
+ .validity({ firstValid: 3933, maxDuration: 64 })
59
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
60
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
61
+ .fee({ amount: 0, type: 'tip' });
62
+ builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
63
+ const tx = await builder.build();
64
+ // Call index is unchanged from v7 (0x2514) — confirmed on Polymesh Testnet v8 (block 24801173).
65
+ const methodHex = tx._substrateTransaction.method;
66
+ should_1.default.equal(methodHex.slice(2, 6), '2514');
67
+ // Decoding against real v8 metadata must resolve `holderSet` + AssetHolder-wrapped legs
68
+ // (lowercase `portfolio` key — see DecodedAssetHolder). A v7-shaped `portfolios` field
69
+ // would fail this decode (defineMethod itself throws "expects argument holderSet" if the
70
+ // v7 shape is passed to v8 metadata — this test proves the v8 shape round-trips cleanly).
71
+ const v8Material = lib_1.utils.getV8Material((0, base_1.buildTestConfig)().network.type);
72
+ const registry = lib_1.SingletonRegistry.getInstance(v8Material);
73
+ const decoded = (0, txwrapper_polkadot_1.decode)(tx.toBroadcastFormat(), {
74
+ metadataRpc: v8Material.metadata,
75
+ registry,
76
+ });
77
+ const args = decoded.method.args;
78
+ should_1.default.not.exist(args.portfolios);
79
+ should_1.default.exist(args.holderSet);
80
+ should_1.default.equal(args.holderSet[0].portfolio.did, FROM_DID);
81
+ should_1.default.equal(args.legs[0].fungible.sender.portfolio.did, FROM_DID);
82
+ should_1.default.equal(args.legs[0].fungible.receiver.portfolio.did, TO_DID);
83
+ should_1.default.equal(args.legs[0].fungible.assetId, ASSET_ID);
84
+ });
85
+ it('should build from raw signed v8 tx and decode the AssetHolder-wrapped legs back into DIDs', async () => {
86
+ const builder = new lib_1.V8TokenTransferBuilder((0, base_1.buildTestConfig)())
87
+ .assetId(ASSET_ID)
88
+ .amount('1000000')
89
+ .fromDID(FROM_DID)
90
+ .toDID(TO_DID)
91
+ .memo('0')
92
+ .sender({ address: sender.address })
93
+ .validity({ firstValid: 3933, maxDuration: 64 })
94
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
95
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
96
+ .fee({ amount: 0, type: 'tip' });
97
+ builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
98
+ const built = await builder.build();
99
+ const rawSigned = built.toBroadcastFormat();
100
+ const roundTrip = new lib_1.V8TokenTransferBuilder((0, base_1.buildTestConfig)());
101
+ roundTrip.from(rawSigned);
102
+ roundTrip
103
+ .validity({ firstValid: 3933, maxDuration: 64 })
104
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
105
+ const tx = await roundTrip.build();
106
+ const txJson = tx.toJson();
107
+ should_1.default.deepEqual(txJson.amount, '1000000');
108
+ should_1.default.deepEqual(txJson.assetId, ASSET_ID);
109
+ should_1.default.deepEqual(txJson.fromDID, FROM_DID);
110
+ should_1.default.deepEqual(txJson.toDID, TO_DID);
111
+ });
112
+ });
113
+ });
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhUb2tlblRyYW5zZmVyQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvdjhUb2tlblRyYW5zZmVyQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1QixzRUFBdUQ7QUFDdkQsMENBQStHO0FBQy9HLCtDQUE2RDtBQUM3RCxzREFBMkQ7QUFDM0QsaUNBQXlDO0FBRXpDLE1BQU0sUUFBUSxHQUFHLG9FQUFvRSxDQUFDO0FBQ3RGLE1BQU0sTUFBTSxHQUFHLG9FQUFvRSxDQUFDO0FBQ3BGLE1BQU0sUUFBUSxHQUFHLG9DQUFvQyxDQUFDO0FBRXRELFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7SUFDdEMsUUFBUSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7UUFDM0IsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtZQUM5QyxNQUFNLE9BQU8sR0FBRyxJQUFJLDRCQUFzQixDQUFDLElBQUEsc0JBQWUsR0FBRSxDQUFDLENBQUM7WUFDOUQsTUFBTSxRQUFRLEdBQUksT0FBZSxDQUFDLFNBQVMsQ0FBQztZQUM1QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLDZCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xFLGdCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsNkJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7UUFDOUIsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEdBQUcsRUFBRTtZQUNwRSxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLElBQUEsc0JBQWUsR0FBRSxDQUFDLENBQUM7WUFDakUs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R0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUU1QyxNQUFNLFNBQVMsR0FBRyxJQUFJLDRCQUFzQixDQUFDLElBQUEsc0JBQWUsR0FBRSxDQUFDLENBQUM7WUFDaEUsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxQixTQUFTO2lCQUNOLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO2lCQUMvQyxjQUFjLENBQUMsb0VBQW9FLENBQUMsQ0FBQztZQUN4RixNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFFM0IsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUMzQyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzNDLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDM0MsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBkZWNvZGUgfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1wb2xrYWRvdCc7XG5pbXBvcnQgeyBWOFRva2VuVHJhbnNmZXJCdWlsZGVyLCBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBTaW5nbGV0b25SZWdpc3RyeSwgdXRpbHMgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IGFjY291bnRzLCBtb2NrVHNzU2lnbmF0dXJlIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzJztcbmltcG9ydCB7IHRlc3RuZXRWOE1hdGVyaWFsIH0gZnJvbSAnLi4vLi4vLi4vc3JjL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBidWlsZFRlc3RDb25maWcgfSBmcm9tICcuL2Jhc2UnO1xuXG5jb25zdCBGUk9NX0RJRCA9ICcweDEyMDhkNzg1MWU2Njk4MjQ5YWVhNDA3NDI3MDFlZTFlZjZjZGNjZWQyNjBhN2M0OWMxY2NhMWE5ZGI4MzYzNDInO1xuY29uc3QgVE9fRElEID0gJzB4YmM2ZjdlYzgwOGYzNjFjMTM1M2FiOWRjODhjM2NjNTRiOThkOWViNjBmZWQ5YzA2M2U2N2E0MDkyNWI4ZWY2MSc7XG5jb25zdCBBU1NFVF9JRCA9ICcweDc4MDYwMjg4N2IzNThjZjQ4OTg5ZDBkOWFhNmM4ZDI4JztcblxuZGVzY3JpYmUoJ1Y4VG9rZW5UcmFuc2ZlckJ1aWxkZXInLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCd2OCBtYXRlcmlhbCcsICgpID0+IHtcbiAgICBpdCgnY2FycmllcyB2OCBzcGVjVmVyc2lvbiBhbmQgdHhWZXJzaW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBWOFRva2VuVHJhbnNmZXJCdWlsZGVyKGJ1aWxkVGVzdENvbmZpZygpKTtcbiAgICAgIGNvbnN0IG1hdGVyaWFsID0gKGJ1aWxkZXIgYXMgYW55KS5fbWF0ZXJpYWw7XG4gICAgICBzaG91bGQuZXF1YWwobWF0ZXJpYWwuc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5lcXVhbChtYXRlcmlhbC50eFZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnR4VmVyc2lvbik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmYWN0b3J5IG1ldGhvZCcsICgpID0+IHtcbiAgICBpdCgnZ2V0VjhUb2tlblRyYW5zZmVyQnVpbGRlciByZXR1cm5zIGEgVjhUb2tlblRyYW5zZmVyQnVpbGRlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShidWlsZFRlc3RDb25maWcoKSk7XG4gICAgICBzaG91bGQub2soZmFjdG9yeS5nZXRWOFRva2VuVHJhbnNmZXJCdWlsZGVyKCkgaW5zdGFuY2VvZiBWOFRva2VuVHJhbnNmZXJCdWlsZGVyKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2J1aWxkIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IHNlbmRlciA9IGFjY291bnRzLmFjY291bnQxO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIHY4IHRva2VuIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGggdjggc3BlY1ZlcnNpb24gaW4gb3V0cHV0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBWOFRva2VuVHJhbnNmZXJCdWlsZGVyKGJ1aWxkVGVzdENvbmZpZygpKVxuICAgICAgICAuYXNzZXRJZChBU1NFVF9JRClcbiAgICAgICAgLmFtb3VudCgnMTAwMDAwMCcpXG4gICAgICAgIC5mcm9tRElEKEZST01fRElEKVxuICAgICAgICAudG9ESUQoVE9fRElEKVxuICAgICAgICAubWVtbygnMCcpXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxIH0pXG4gICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pO1xuICAgICAgYnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IHNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnR4VmVyc2lvbik7XG4gICAgfSk7XG5cbiAgICBpdCgnZW5jb2RlcyBsZWdzL2hvbGRlclNldCB1c2luZyB0aGUgdjggQXNzZXRIb2xkZXIgd3JhcHBlciwgbm90IHRoZSB2NyBiYXJlIFBvcnRmb2xpb0lkIHNoYXBlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBWOFRva2VuVHJhbnNmZXJCdWlsZGVyKGJ1aWxkVGVzdENvbmZpZygpKVxuICAgICAgICAuYXNzZXRJZChBU1NFVF9JRClcbiAgICAgICAgLmFtb3VudCgnMTAwMDAwMCcpXG4gICAgICAgIC5mcm9tRElEKEZST01fRElEKVxuICAgICAgICAudG9ESUQoVE9fRElEKVxuICAgICAgICAubWVtbygnMCcpXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxIH0pXG4gICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pO1xuICAgICAgYnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IHNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICAvLyBDYWxsIGluZGV4IGlzIHVuY2hhbmdlZCBmcm9tIHY3ICgweDI1MTQpIOKAlCBjb25maXJtZWQgb24gUG9seW1lc2ggVGVzdG5ldCB2OCAoYmxvY2sgMjQ4MDExNzMpLlxuICAgICAgY29uc3QgbWV0aG9kSGV4ID0gKHR4IGFzIGFueSkuX3N1YnN0cmF0ZVRyYW5zYWN0aW9uLm1ldGhvZCBhcyBzdHJpbmc7XG4gICAgICBzaG91bGQuZXF1YWwobWV0aG9kSGV4LnNsaWNlKDIsIDYpLCAnMjUxNCcpO1xuXG4gICAgICAvLyBEZWNvZGluZyBhZ2FpbnN0IHJlYWwgdjggbWV0YWRhdGEgbXVzdCByZXNvbHZlIGBob2xkZXJTZXRgICsgQXNzZXRIb2xkZXItd3JhcHBlZCBsZWdzXG4gICAgICAvLyAobG93ZXJjYXNlIGBwb3J0Zm9saW9gIGtleSDigJQgc2VlIERlY29kZWRBc3NldEhvbGRlcikuIEEgdjctc2hhcGVkIGBwb3J0Zm9saW9zYCBmaWVsZFxuICAgICAgLy8gd291bGQgZmFpbCB0aGlzIGRlY29kZSAoZGVmaW5lTWV0aG9kIGl0c2VsZiB0aHJvd3MgXCJleHBlY3RzIGFyZ3VtZW50IGhvbGRlclNldFwiIGlmIHRoZVxuICAgICAgLy8gdjcgc2hhcGUgaXMgcGFzc2VkIHRvIHY4IG1ldGFkYXRhIOKAlCB0aGlzIHRlc3QgcHJvdmVzIHRoZSB2OCBzaGFwZSByb3VuZC10cmlwcyBjbGVhbmx5KS5cbiAgICAgIGNvbnN0IHY4TWF0ZXJpYWwgPSB1dGlscy5nZXRWOE1hdGVyaWFsKGJ1aWxkVGVzdENvbmZpZygpLm5ldHdvcmsudHlwZSk7XG4gICAgICBjb25zdCByZWdpc3RyeSA9IFNpbmdsZXRvblJlZ2lzdHJ5LmdldEluc3RhbmNlKHY4TWF0ZXJpYWwpO1xuICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZSh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB7XG4gICAgICAgIG1ldGFkYXRhUnBjOiB2OE1hdGVyaWFsLm1ldGFkYXRhLFxuICAgICAgICByZWdpc3RyeSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYXJncyA9IGRlY29kZWQubWV0aG9kLmFyZ3MgYXMgYW55O1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChhcmdzLnBvcnRmb2xpb3MpO1xuICAgICAgc2hvdWxkLmV4aXN0KGFyZ3MuaG9sZGVyU2V0KTtcbiAgICAgIHNob3VsZC5lcXVhbChhcmdzLmhvbGRlclNldFswXS5wb3J0Zm9saW8uZGlkLCBGUk9NX0RJRCk7XG4gICAgICBzaG91bGQuZXF1YWwoYXJncy5sZWdzWzBdLmZ1bmdpYmxlLnNlbmRlci5wb3J0Zm9saW8uZGlkLCBGUk9NX0RJRCk7XG4gICAgICBzaG91bGQuZXF1YWwoYXJncy5sZWdzWzBdLmZ1bmdpYmxlLnJlY2VpdmVyLnBvcnRmb2xpby5kaWQsIFRPX0RJRCk7XG4gICAgICBzaG91bGQuZXF1YWwoYXJncy5sZWdzWzBdLmZ1bmdpYmxlLmFzc2V0SWQsIEFTU0VUX0lEKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgZnJvbSByYXcgc2lnbmVkIHY4IHR4IGFuZCBkZWNvZGUgdGhlIEFzc2V0SG9sZGVyLXdyYXBwZWQgbGVncyBiYWNrIGludG8gRElEcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVjhUb2tlblRyYW5zZmVyQnVpbGRlcihidWlsZFRlc3RDb25maWcoKSlcbiAgICAgICAgLmFzc2V0SWQoQVNTRVRfSUQpXG4gICAgICAgIC5hbW91bnQoJzEwMDAwMDAnKVxuICAgICAgICAuZnJvbURJRChGUk9NX0RJRClcbiAgICAgICAgLnRvRElEKFRPX0RJRClcbiAgICAgICAgLm1lbW8oJzAnKVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMSB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICAgIGJ1aWxkZXIuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG4gICAgICBjb25zdCBidWlsdCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1NpZ25lZCA9IGJ1aWx0LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIGNvbnN0IHJvdW5kVHJpcCA9IG5ldyBWOFRva2VuVHJhbnNmZXJCdWlsZGVyKGJ1aWxkVGVzdENvbmZpZygpKTtcbiAgICAgIHJvdW5kVHJpcC5mcm9tKHJhd1NpZ25lZCk7XG4gICAgICByb3VuZFRyaXBcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJyk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHJvdW5kVHJpcC5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmFtb3VudCwgJzEwMDAwMDAnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmFzc2V0SWQsIEFTU0VUX0lEKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZyb21ESUQsIEZST01fRElEKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRvRElELCBUT19ESUQpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=v8TransferBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v8TransferBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/v8TransferBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const should_1 = __importDefault(require("should"));
7
+ const lib_1 = require("../../../src/lib");
8
+ const src_1 = require("../../../src");
9
+ const resources_1 = require("../../resources");
10
+ const resources_2 = require("../../../src/resources");
11
+ const base_1 = require("./base");
12
+ describe('V8TransferBuilder', () => {
13
+ describe('v8 material', () => {
14
+ it('testnet builder uses v8 specVersion and txVersion', () => {
15
+ const config = (0, base_1.buildTestConfig)();
16
+ const builder = new lib_1.V8TransferBuilder(config);
17
+ const material = builder._material;
18
+ should_1.default.equal(material.specVersion, resources_2.testnetV8Material.specVersion);
19
+ should_1.default.equal(material.txVersion, resources_2.testnetV8Material.txVersion);
20
+ should_1.default.equal(material.chainName, resources_2.testnetV8Material.chainName);
21
+ });
22
+ it('mainnet builder uses v8 specVersion and txVersion', () => {
23
+ const config = (0, base_1.buildMainnetConfig)();
24
+ const builder = new lib_1.V8TransferBuilder(config);
25
+ const material = builder._material;
26
+ should_1.default.equal(material.specVersion, resources_2.mainnetV8Material.specVersion);
27
+ should_1.default.equal(material.txVersion, resources_2.mainnetV8Material.txVersion);
28
+ });
29
+ it('v8 specVersion is greater than v7 specVersion', () => {
30
+ const config = (0, base_1.buildTestConfig)();
31
+ const v7Material = src_1.utils.getMaterial(config.network.type);
32
+ const v8Material = src_1.utils.getV8Material(config.network.type);
33
+ should_1.default.ok(v8Material.specVersion > v7Material.specVersion, `expected v8 (${v8Material.specVersion}) > v7 (${v7Material.specVersion})`);
34
+ });
35
+ it('testnet v8 metadata bytes differ from v7 (real chain metadata, not placeholder)', () => {
36
+ should_1.default.notEqual(resources_2.testnetV8Material.metadata, resources_2.testnetMaterial.metadata);
37
+ });
38
+ });
39
+ describe('factory method', () => {
40
+ it('getV8TransferBuilder returns a V8TransferBuilder', () => {
41
+ const factory = new lib_1.TransactionBuilderFactory((0, base_1.buildTestConfig)());
42
+ should_1.default.ok(factory.getV8TransferBuilder() instanceof lib_1.V8TransferBuilder);
43
+ });
44
+ it('factory v8 builder carries v8 material', () => {
45
+ const factory = new lib_1.TransactionBuilderFactory((0, base_1.buildTestConfig)());
46
+ const builder = factory.getV8TransferBuilder();
47
+ should_1.default.equal(builder._material.specVersion, resources_2.testnetV8Material.specVersion);
48
+ });
49
+ });
50
+ describe('build transaction', () => {
51
+ const sender = resources_1.accounts.account1;
52
+ const receiver = resources_1.accounts.account2;
53
+ it('should build a signed v8 transfer transaction with v8 specVersion in output', async () => {
54
+ const config = (0, base_1.buildTestConfig)();
55
+ const builder = new lib_1.V8TransferBuilder(config)
56
+ .amount('90034235235322')
57
+ .to({ address: receiver.address })
58
+ .sender({ address: sender.address })
59
+ .memo('0')
60
+ .validity({ firstValid: 3933, maxDuration: 64 })
61
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
62
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 200 })
63
+ .fee({ amount: 0, type: 'tip' });
64
+ builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
65
+ const tx = await builder.build();
66
+ const txJson = tx.toJson();
67
+ should_1.default.deepEqual(txJson.amount, '90034235235322');
68
+ should_1.default.deepEqual(txJson.to, receiver.address);
69
+ should_1.default.deepEqual(txJson.sender, sender.address);
70
+ should_1.default.deepEqual(txJson.specVersion, resources_2.testnetV8Material.specVersion);
71
+ should_1.default.deepEqual(txJson.transactionVersion, resources_2.testnetV8Material.txVersion);
72
+ });
73
+ it('should build an unsigned v8 transfer transaction', async () => {
74
+ const config = (0, base_1.buildTestConfig)();
75
+ const tx = await new lib_1.V8TransferBuilder(config)
76
+ .amount('1000000')
77
+ .to({ address: receiver.address })
78
+ .sender({ address: sender.address })
79
+ .memo('0')
80
+ .validity({ firstValid: 3933, maxDuration: 64 })
81
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
82
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
83
+ .fee({ amount: 0, type: 'tip' })
84
+ .build();
85
+ const txJson = tx.toJson();
86
+ should_1.default.deepEqual(txJson.specVersion, resources_2.testnetV8Material.specVersion);
87
+ should_1.default.deepEqual(txJson.transactionVersion, resources_2.testnetV8Material.txVersion);
88
+ });
89
+ it('encodes transferWithMemo at v8 call index 0x0528 (HSM method ID 1320)', async () => {
90
+ const config = (0, base_1.buildTestConfig)();
91
+ const tx = await new lib_1.V8TransferBuilder(config)
92
+ .amount('1000000')
93
+ .to({ address: receiver.address })
94
+ .sender({ address: sender.address })
95
+ .memo('0')
96
+ .validity({ firstValid: 3933, maxDuration: 64 })
97
+ .referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
98
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
99
+ .fee({ amount: 0, type: 'tip' })
100
+ .build();
101
+ const methodHex = tx._substrateTransaction.method;
102
+ // pallet 5 (balances) + call 0x28 (transferWithMemo) → hex bytes 05 28
103
+ should_1.default.equal(methodHex.slice(2, 6), '0528');
104
+ });
105
+ });
106
+ });
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhUcmFuc2ZlckJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3Y4VHJhbnNmZXJCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLDBDQUFnRjtBQUNoRixzQ0FBcUM7QUFDckMsK0NBQTZEO0FBQzdELHNEQUErRjtBQUMvRixpQ0FBNkQ7QUFFN0QsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtJQUNqQyxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtRQUMzQixFQUFFLENBQUMsbURBQW1ELEVBQUUsR0FBRyxFQUFFO1lBQzNELE1BQU0sTUFBTSxHQUFHLElBQUEsc0JBQWUsR0FBRSxDQUFDO1lBQ2pDLE1BQU0sT0FBTyxHQUFHLElBQUksdUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUMsTUFBTSxRQUFRLEdBQUksT0FBZSxDQUFDLFNBQVMsQ0FBQztZQUM1QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLDZCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xFLGdCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsNkJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDOUQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSw2QkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7WUFDM0QsTUFBTSxNQUFNLEdBQUcsSUFBQSx5QkFBa0IsR0FBRSxDQUFDO1lBQ3BDLE1BQU0sT0FBTyxHQUFHLElBQUksdUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUMsTUFBTSxRQUFRLEdBQUksT0FBZSxDQUFDLFNBQVMs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QUFVLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQztpQkFDL0MsY0FBYyxDQUFDLG9FQUFvRSxDQUFDO2lCQUNwRixVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO2lCQUN6RCxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztpQkFDL0IsS0FBSyxFQUFFLENBQUM7WUFFWCxNQUFNLFNBQVMsR0FBSSxFQUFVLENBQUMscUJBQXFCLENBQUMsTUFBZ0IsQ0FBQztZQUNyRSx1RUFBdUU7WUFDdkUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgVjhUcmFuc2ZlckJ1aWxkZXIsIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IHV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7IGFjY291bnRzLCBtb2NrVHNzU2lnbmF0dXJlIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzJztcbmltcG9ydCB7IHRlc3RuZXRNYXRlcmlhbCwgdGVzdG5ldFY4TWF0ZXJpYWwsIG1haW5uZXRWOE1hdGVyaWFsIH0gZnJvbSAnLi4vLi4vLi4vc3JjL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBidWlsZFRlc3RDb25maWcsIGJ1aWxkTWFpbm5ldENvbmZpZyB9IGZyb20gJy4vYmFzZSc7XG5cbmRlc2NyaWJlKCdWOFRyYW5zZmVyQnVpbGRlcicsICgpID0+IHtcbiAgZGVzY3JpYmUoJ3Y4IG1hdGVyaWFsJywgKCkgPT4ge1xuICAgIGl0KCd0ZXN0bmV0IGJ1aWxkZXIgdXNlcyB2OCBzcGVjVmVyc2lvbiBhbmQgdHhWZXJzaW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gYnVpbGRUZXN0Q29uZmlnKCk7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFY4VHJhbnNmZXJCdWlsZGVyKGNvbmZpZyk7XG4gICAgICBjb25zdCBtYXRlcmlhbCA9IChidWlsZGVyIGFzIGFueSkuX21hdGVyaWFsO1xuICAgICAgc2hvdWxkLmVxdWFsKG1hdGVyaWFsLnNwZWNWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gICAgICBzaG91bGQuZXF1YWwobWF0ZXJpYWwudHhWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC50eFZlcnNpb24pO1xuICAgICAgc2hvdWxkLmVxdWFsKG1hdGVyaWFsLmNoYWluTmFtZSwgdGVzdG5ldFY4TWF0ZXJpYWwuY2hhaW5OYW1lKTtcbiAgICB9KTtcblxuICAgIGl0KCdtYWlubmV0IGJ1aWxkZXIgdXNlcyB2OCBzcGVjVmVyc2lvbiBhbmQgdHhWZXJzaW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gYnVpbGRNYWlubmV0Q29uZmlnKCk7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFY4VHJhbnNmZXJCdWlsZGVyKGNvbmZpZyk7XG4gICAgICBjb25zdCBtYXRlcmlhbCA9IChidWlsZGVyIGFzIGFueSkuX21hdGVyaWFsO1xuICAgICAgc2hvdWxkLmVxdWFsKG1hdGVyaWFsLnNwZWNWZXJzaW9uLCBtYWlubmV0VjhNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gICAgICBzaG91bGQuZXF1YWwobWF0ZXJpYWwudHhWZXJzaW9uLCBtYWlubmV0VjhNYXRlcmlhbC50eFZlcnNpb24pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Y4IHNwZWNWZXJzaW9uIGlzIGdyZWF0ZXIgdGhhbiB2NyBzcGVjVmVyc2lvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGJ1aWxkVGVzdENvbmZpZygpO1xuICAgICAgY29uc3QgdjdNYXRlcmlhbCA9IHV0aWxzLmdldE1hdGVyaWFsKGNvbmZpZy5uZXR3b3JrLnR5cGUpO1xuICAgICAgY29uc3QgdjhNYXRlcmlhbCA9IHV0aWxzLmdldFY4TWF0ZXJpYWwoY29uZmlnLm5ldHdvcmsudHlwZSk7XG4gICAgICBzaG91bGQub2soXG4gICAgICAgIHY4TWF0ZXJpYWwuc3BlY1ZlcnNpb24gPiB2N01hdGVyaWFsLnNwZWNWZXJzaW9uLFxuICAgICAgICBgZXhwZWN0ZWQgdjggKCR7djhNYXRlcmlhbC5zcGVjVmVyc2lvbn0pID4gdjcgKCR7djdNYXRlcmlhbC5zcGVjVmVyc2lvbn0pYFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCd0ZXN0bmV0IHY4IG1ldGFkYXRhIGJ5dGVzIGRpZmZlciBmcm9tIHY3IChyZWFsIGNoYWluIG1ldGFkYXRhLCBub3QgcGxhY2Vob2xkZXIpJywgKCkgPT4ge1xuICAgICAgc2hvdWxkLm5vdEVxdWFsKHRlc3RuZXRWOE1hdGVyaWFsLm1ldGFkYXRhLCB0ZXN0bmV0TWF0ZXJpYWwubWV0YWRhdGEpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZmFjdG9yeSBtZXRob2QnLCAoKSA9PiB7XG4gICAgaXQoJ2dldFY4VHJhbnNmZXJCdWlsZGVyIHJldHVybnMgYSBWOFRyYW5zZmVyQnVpbGRlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShidWlsZFRlc3RDb25maWcoKSk7XG4gICAgICBzaG91bGQub2soZmFjdG9yeS5nZXRWOFRyYW5zZmVyQnVpbGRlcigpIGluc3RhbmNlb2YgVjhUcmFuc2ZlckJ1aWxkZXIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhY3RvcnkgdjggYnVpbGRlciBjYXJyaWVzIHY4IG1hdGVyaWFsJywgKCkgPT4ge1xuICAgICAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGJ1aWxkVGVzdENvbmZpZygpKTtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICBzaG91bGQuZXF1YWwoKGJ1aWxkZXIgYXMgYW55KS5fbWF0ZXJpYWwuc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2J1aWxkIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IHNlbmRlciA9IGFjY291bnRzLmFjY291bnQxO1xuICAgIGNvbnN0IHJlY2VpdmVyID0gYWNjb3VudHMuYWNjb3VudDI7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgc2lnbmVkIHY4IHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGggdjggc3BlY1ZlcnNpb24gaW4gb3V0cHV0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gYnVpbGRUZXN0Q29uZmlnKCk7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFY4VHJhbnNmZXJCdWlsZGVyKGNvbmZpZylcbiAgICAgICAgLmFtb3VudCgnOTAwMzQyMzUyMzUzMjInKVxuICAgICAgICAudG8oeyBhZGRyZXNzOiByZWNlaXZlci5hZGRyZXNzIH0pXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAubWVtbygnMCcpXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDIwMCB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICAgIGJ1aWxkZXIuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmFtb3VudCwgJzkwMDM0MjM1MjM1MzIyJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50bywgcmVjZWl2ZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZW5kZXIsIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnR4VmVyc2lvbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGFuIHVuc2lnbmVkIHY4IHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnID0gYnVpbGRUZXN0Q29uZmlnKCk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IG5ldyBWOFRyYW5zZmVyQnVpbGRlcihjb25maWcpXG4gICAgICAgIC5hbW91bnQoJzEwMDAwMDAnKVxuICAgICAgICAudG8oeyBhZGRyZXNzOiByZWNlaXZlci5hZGRyZXNzIH0pXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAubWVtbygnMCcpXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMsIG1heER1cmF0aW9uOiA2NCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDEgfSlcbiAgICAgICAgLmZlZSh7IGFtb3VudDogMCwgdHlwZTogJ3RpcCcgfSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRyYW5zYWN0aW9uVmVyc2lvbiwgdGVzdG5ldFY4TWF0ZXJpYWwudHhWZXJzaW9uKTtcbiAgICB9KTtcblxuICAgIGl0KCdlbmNvZGVzIHRyYW5zZmVyV2l0aE1lbW8gYXQgdjggY2FsbCBpbmRleCAweDA1MjggKEhTTSBtZXRob2QgSUQgMTMyMCknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjb25maWcgPSBidWlsZFRlc3RDb25maWcoKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgbmV3IFY4VHJhbnNmZXJCdWlsZGVyKGNvbmZpZylcbiAgICAgICAgLmFtb3VudCgnMTAwMDAwMCcpXG4gICAgICAgIC50byh7IGFkZHJlc3M6IHJlY2VpdmVyLmFkZHJlc3MgfSlcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC5tZW1vKCcwJylcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMSB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgICAgY29uc3QgbWV0aG9kSGV4ID0gKHR4IGFzIGFueSkuX3N1YnN0cmF0ZVRyYW5zYWN0aW9uLm1ldGhvZCBhcyBzdHJpbmc7XG4gICAgICAvLyBwYWxsZXQgNSAoYmFsYW5jZXMpICsgY2FsbCAweDI4ICh0cmFuc2ZlcldpdGhNZW1vKSDihpIgaGV4IGJ5dGVzIDA1IDI4XG4gICAgICBzaG91bGQuZXF1YWwobWV0aG9kSGV4LnNsaWNlKDIsIDYpLCAnMDUyOCcpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19