@bitgo-beta/sdk-coin-vet 1.0.1-beta.60 → 1.0.1-beta.601

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 (160) hide show
  1. package/dist/src/index.d.ts +1 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +2 -1
  4. package/dist/src/lib/constants.d.ts +28 -0
  5. package/dist/src/lib/constants.d.ts.map +1 -1
  6. package/dist/src/lib/constants.js +30 -2
  7. package/dist/src/lib/iface.d.ts +28 -2
  8. package/dist/src/lib/iface.d.ts.map +1 -1
  9. package/dist/src/lib/iface.js +1 -1
  10. package/dist/src/lib/index.d.ts +21 -0
  11. package/dist/src/lib/index.d.ts.map +1 -1
  12. package/dist/src/lib/index.js +44 -2
  13. package/dist/src/lib/transaction/addressInitializationTransaction.d.ts +31 -0
  14. package/dist/src/lib/transaction/addressInitializationTransaction.d.ts.map +1 -0
  15. package/dist/src/lib/transaction/addressInitializationTransaction.js +170 -0
  16. package/dist/src/lib/transaction/burnNftTransaction.d.ts +29 -0
  17. package/dist/src/lib/transaction/burnNftTransaction.d.ts.map +1 -0
  18. package/dist/src/lib/transaction/burnNftTransaction.js +138 -0
  19. package/dist/src/lib/transaction/claimRewards.d.ts +31 -0
  20. package/dist/src/lib/transaction/claimRewards.d.ts.map +1 -0
  21. package/dist/src/lib/transaction/claimRewards.js +151 -0
  22. package/dist/src/lib/transaction/delegateClauseTransaction.d.ts +27 -0
  23. package/dist/src/lib/transaction/delegateClauseTransaction.d.ts.map +1 -0
  24. package/dist/src/lib/transaction/delegateClauseTransaction.js +158 -0
  25. package/dist/src/lib/transaction/exitDelegation.d.ts +29 -0
  26. package/dist/src/lib/transaction/exitDelegation.d.ts.map +1 -0
  27. package/dist/src/lib/transaction/exitDelegation.js +143 -0
  28. package/dist/src/lib/transaction/flushTokenTransaction.d.ts +20 -0
  29. package/dist/src/lib/transaction/flushTokenTransaction.d.ts.map +1 -0
  30. package/dist/src/lib/transaction/flushTokenTransaction.js +98 -0
  31. package/dist/src/lib/transaction/nftTransaction.d.ts +17 -0
  32. package/dist/src/lib/transaction/nftTransaction.d.ts.map +1 -0
  33. package/dist/src/lib/transaction/nftTransaction.js +108 -0
  34. package/dist/src/lib/transaction/stakeClauseTransaction.d.ts +27 -0
  35. package/dist/src/lib/transaction/stakeClauseTransaction.d.ts.map +1 -0
  36. package/dist/src/lib/transaction/stakeClauseTransaction.js +158 -0
  37. package/dist/src/lib/transaction/stakingTransaction.d.ts +31 -0
  38. package/dist/src/lib/transaction/stakingTransaction.d.ts.map +1 -0
  39. package/dist/src/lib/transaction/stakingTransaction.js +169 -0
  40. package/dist/src/lib/transaction/tokenTransaction.d.ts +14 -0
  41. package/dist/src/lib/transaction/tokenTransaction.d.ts.map +1 -0
  42. package/dist/src/lib/transaction/tokenTransaction.js +95 -0
  43. package/dist/src/lib/transaction/transaction.d.ts +18 -28
  44. package/dist/src/lib/transaction/transaction.d.ts.map +1 -1
  45. package/dist/src/lib/transaction/transaction.js +98 -58
  46. package/dist/src/lib/transaction/validatorRegistrationTransaction.d.ts +29 -0
  47. package/dist/src/lib/transaction/validatorRegistrationTransaction.d.ts.map +1 -0
  48. package/dist/src/lib/transaction/validatorRegistrationTransaction.js +162 -0
  49. package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts +78 -0
  50. package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
  51. package/dist/src/lib/transactionBuilder/addressInitializationBuilder.js +158 -0
  52. package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts +59 -0
  53. package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts.map +1 -0
  54. package/dist/src/lib/transactionBuilder/burnNftBuilder.js +118 -0
  55. package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts +59 -0
  56. package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
  57. package/dist/src/lib/transactionBuilder/claimRewardsBuilder.js +117 -0
  58. package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts +72 -0
  59. package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts.map +1 -0
  60. package/dist/src/lib/transactionBuilder/delegateTxnBuilder.js +133 -0
  61. package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts +59 -0
  62. package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
  63. package/dist/src/lib/transactionBuilder/exitDelegationBuilder.js +118 -0
  64. package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts +66 -0
  65. package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts.map +1 -0
  66. package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.js +129 -0
  67. package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts +23 -0
  68. package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts.map +1 -0
  69. package/dist/src/lib/transactionBuilder/nftTransactionBuilder.js +93 -0
  70. package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.d.ts +73 -0
  71. package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.d.ts.map +1 -0
  72. package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.js +146 -0
  73. package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts +73 -0
  74. package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts.map +1 -0
  75. package/dist/src/lib/transactionBuilder/stakingBuilder.js +147 -0
  76. package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts +21 -0
  77. package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts.map +1 -0
  78. package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.js +70 -0
  79. package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts +10 -9
  80. package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts.map +1 -1
  81. package/dist/src/lib/transactionBuilder/transactionBuilder.js +25 -19
  82. package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.d.ts +72 -0
  83. package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.d.ts.map +1 -0
  84. package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.js +133 -0
  85. package/dist/src/lib/transactionBuilderFactory.d.ts +55 -0
  86. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  87. package/dist/src/lib/transactionBuilderFactory.js +124 -1
  88. package/dist/src/lib/types.d.ts +21 -0
  89. package/dist/src/lib/types.d.ts.map +1 -1
  90. package/dist/src/lib/types.js +1 -1
  91. package/dist/src/lib/utils.d.ts +102 -1
  92. package/dist/src/lib/utils.d.ts.map +1 -1
  93. package/dist/src/lib/utils.js +277 -8
  94. package/dist/src/register.d.ts.map +1 -1
  95. package/dist/src/register.js +5 -1
  96. package/dist/src/vet.d.ts +94 -3
  97. package/dist/src/vet.d.ts.map +1 -1
  98. package/dist/src/vet.js +505 -10
  99. package/dist/src/vetNFTCollection.d.ts +18 -0
  100. package/dist/src/vetNFTCollection.d.ts.map +1 -0
  101. package/dist/src/vetNFTCollection.js +52 -0
  102. package/dist/src/vetToken.d.ts +1 -1
  103. package/dist/src/vetToken.d.ts.map +1 -1
  104. package/dist/src/vetToken.js +2 -2
  105. package/dist/test/resources/vet.d.ts +86 -0
  106. package/dist/test/resources/vet.d.ts.map +1 -0
  107. package/dist/test/resources/vet.js +141 -0
  108. package/dist/test/transactionBuilder/addressInitializationBuilder.d.ts +2 -0
  109. package/dist/test/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
  110. package/dist/test/transactionBuilder/addressInitializationBuilder.js +141 -0
  111. package/dist/test/transactionBuilder/burnNftBuilder.d.ts +2 -0
  112. package/dist/test/transactionBuilder/burnNftBuilder.d.ts.map +1 -0
  113. package/dist/test/transactionBuilder/burnNftBuilder.js +150 -0
  114. package/dist/test/transactionBuilder/claimRewardsBuilder.d.ts +2 -0
  115. package/dist/test/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
  116. package/dist/test/transactionBuilder/claimRewardsBuilder.js +183 -0
  117. package/dist/test/transactionBuilder/delegateClauseTxnBuilder.d.ts +2 -0
  118. package/dist/test/transactionBuilder/delegateClauseTxnBuilder.d.ts.map +1 -0
  119. package/dist/test/transactionBuilder/delegateClauseTxnBuilder.js +209 -0
  120. package/dist/test/transactionBuilder/exitDelegationBuilder.d.ts +2 -0
  121. package/dist/test/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
  122. package/dist/test/transactionBuilder/exitDelegationBuilder.js +150 -0
  123. package/dist/test/transactionBuilder/flushTokenTransactionBuilder.d.ts +2 -0
  124. package/dist/test/transactionBuilder/flushTokenTransactionBuilder.d.ts.map +1 -0
  125. package/dist/test/transactionBuilder/flushTokenTransactionBuilder.js +132 -0
  126. package/dist/test/transactionBuilder/nftTransactionBuilder.d.ts +2 -0
  127. package/dist/test/transactionBuilder/nftTransactionBuilder.d.ts.map +1 -0
  128. package/dist/test/transactionBuilder/nftTransactionBuilder.js +242 -0
  129. package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.d.ts +2 -0
  130. package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.d.ts.map +1 -0
  131. package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.js +247 -0
  132. package/dist/test/transactionBuilder/stakingTransaction.d.ts +2 -0
  133. package/dist/test/transactionBuilder/stakingTransaction.d.ts.map +1 -0
  134. package/dist/test/transactionBuilder/stakingTransaction.js +250 -0
  135. package/dist/test/transactionBuilder/tokenTransactionBuilder.d.ts +2 -0
  136. package/dist/test/transactionBuilder/tokenTransactionBuilder.d.ts.map +1 -0
  137. package/dist/test/transactionBuilder/tokenTransactionBuilder.js +249 -0
  138. package/dist/test/transactionBuilder/transferBuilder.d.ts +2 -0
  139. package/dist/test/transactionBuilder/transferBuilder.d.ts.map +1 -0
  140. package/dist/test/transactionBuilder/transferBuilder.js +244 -0
  141. package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.d.ts +2 -0
  142. package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.d.ts.map +1 -0
  143. package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.js +195 -0
  144. package/dist/test/unit/keyPair.d.ts +2 -0
  145. package/dist/test/unit/keyPair.d.ts.map +1 -0
  146. package/dist/test/unit/keyPair.js +181 -0
  147. package/dist/test/unit/stakingFlowE2E.d.ts +2 -0
  148. package/dist/test/unit/stakingFlowE2E.d.ts.map +1 -0
  149. package/dist/test/unit/stakingFlowE2E.js +222 -0
  150. package/dist/test/unit/utils.d.ts +2 -0
  151. package/dist/test/unit/utils.d.ts.map +1 -0
  152. package/dist/test/unit/utils.js +106 -0
  153. package/dist/test/unit/vet.d.ts +2 -0
  154. package/dist/test/unit/vet.d.ts.map +1 -0
  155. package/dist/test/unit/vet.js +336 -0
  156. package/dist/tsconfig.tsbuildinfo +1 -0
  157. package/package.json +16 -10
  158. package/.eslintignore +0 -5
  159. package/.mocharc.yml +0 -8
  160. package/CHANGELOG.md +0 -40
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const nacl = __importStar(require("tweetnacl"));
40
+ const assert_1 = __importDefault(require("assert"));
41
+ const should_1 = __importDefault(require("should"));
42
+ const src_1 = require("../../src");
43
+ describe('VeChain KeyPair', function () {
44
+ // these are all encodings of the same key so the test suite will show that they we can interchange between them
45
+ const xprv = 'xprv9s21ZrQH143K3D8TXfvAJgHVfTEeQNW5Ys9wZtnUZkqPzFzSjbEJrWC1vZ4GnXCvR7rQL2UFX3RSuYeU9MrERm1XBvACow7c36vnz5iYyj2';
46
+ const xpub = 'xpub661MyMwAqRbcFhCvdhTAfpEEDV58oqDvv65YNHC686NNs4KbH8YZQJWVmrfbve7aAVHzxw8bKFxA7MLeDK6BbLfkE3bqkvHLPgaGHHtYGeY';
47
+ const prv = '82A34E3867EA7EA4E67E27865D500AE84E98D07AB1BAB06526F0A5A5FDCC3EBA';
48
+ const pub = '03D63D9FD9FD772A989C5B90EDB37716406356E98273E5F98FE07652247A3A8275';
49
+ const uncompressedPub = '04D63D9FD9FD772A989C5B90EDB37716406356E98273E5F98FE07652247A3A827503E948A2FDBF74A981D4E0054F10EDA7042C2D469F44473D3C7791E0E326E355';
50
+ const address = '0xeb317b9f2e0891d66c061ddc3f5ee7ed42d70a44';
51
+ const invalidPrivateKeyErrorMessage = 'Unsupported private key';
52
+ describe('should create a KeyPair', function () {
53
+ it('from an xpub', () => {
54
+ const keyPair = new src_1.KeyPair({ pub: xpub });
55
+ const defaultKeys = keyPair.getKeys();
56
+ should_1.default.not.exist(defaultKeys.prv);
57
+ defaultKeys.pub.should.equal('03D63D9FD9FD772A989C5B90EDB37716406356E98273E5F98FE07652247A3A8275');
58
+ const extendedKeys = keyPair.getExtendedKeys();
59
+ should_1.default.not.exist(extendedKeys.xprv);
60
+ extendedKeys.xpub.should.equal(xpub);
61
+ });
62
+ it('from an xprv', () => {
63
+ const keyPair = new src_1.KeyPair({ prv: xprv });
64
+ const defaultKeys = keyPair.getKeys();
65
+ (0, assert_1.default)(defaultKeys.prv);
66
+ defaultKeys.prv.should.equal(prv);
67
+ defaultKeys.pub.should.equal(pub);
68
+ const extendedKeys = keyPair.getExtendedKeys();
69
+ (0, assert_1.default)(extendedKeys.xprv);
70
+ extendedKeys.xprv.should.equal(xprv);
71
+ extendedKeys.xpub.should.equal(xpub);
72
+ });
73
+ it('from an uncompressed public key', () => {
74
+ const keyPair = new src_1.KeyPair({ pub: uncompressedPub });
75
+ const defaultKeys = keyPair.getKeys();
76
+ should_1.default.not.exist(defaultKeys.prv);
77
+ defaultKeys.pub.should.equal(uncompressedPub);
78
+ assert_1.default.throws(() => keyPair.getExtendedKeys());
79
+ });
80
+ it('from a compressed public key', () => {
81
+ const keyPair = new src_1.KeyPair({ pub });
82
+ const defaultKeys = keyPair.getKeys();
83
+ should_1.default.not.exist(defaultKeys.prv);
84
+ defaultKeys.pub.should.equal(uncompressedPub);
85
+ assert_1.default.throws(() => keyPair.getExtendedKeys());
86
+ });
87
+ it('from a raw private key', () => {
88
+ const keyPair = new src_1.KeyPair({ prv });
89
+ const defaultKeys = keyPair.getKeys();
90
+ (0, assert_1.default)(defaultKeys.prv);
91
+ defaultKeys.prv.should.equal(prv);
92
+ defaultKeys.pub.should.equal(uncompressedPub);
93
+ assert_1.default.throws(() => keyPair.getExtendedKeys());
94
+ });
95
+ it('from an empty value', () => {
96
+ const keyPair = new src_1.KeyPair();
97
+ should_1.default.exists(keyPair.getKeys().prv);
98
+ should_1.default.exists(keyPair.getKeys().pub);
99
+ const keys = keyPair.getKeys();
100
+ (0, assert_1.default)(keys.prv);
101
+ should_1.default.equal(keys.prv.length, 64);
102
+ should_1.default.equal(keys.pub.length, 66);
103
+ });
104
+ it('from seed', () => {
105
+ const seed = nacl.randomBytes(64);
106
+ const keyPair = new src_1.KeyPair({ seed: Buffer.from(seed) });
107
+ keyPair.getKeys().should.have.property('pub');
108
+ keyPair.getKeys().should.have.property('prv');
109
+ });
110
+ });
111
+ describe('should fail to create a KeyPair', function () {
112
+ it('from an invalid public key', () => {
113
+ const source = {
114
+ pub: '01D63D',
115
+ };
116
+ assert_1.default.throws(() => new src_1.KeyPair(source));
117
+ });
118
+ it('from an invalid private key', () => {
119
+ const source = {
120
+ prv: '82A34E',
121
+ };
122
+ assert_1.default.throws(() => new src_1.KeyPair(source));
123
+ assert_1.default.throws(() => new src_1.KeyPair({ prv: prv + pub }), (e) => e.message === invalidPrivateKeyErrorMessage);
124
+ });
125
+ });
126
+ describe('getAddress', function () {
127
+ it('should get an address from xprv', () => {
128
+ const keyPair = new src_1.KeyPair({ prv: xprv });
129
+ const calculatedAddress = keyPair.getAddress();
130
+ calculatedAddress.should.equal(address);
131
+ });
132
+ it('should get an address from xpub', () => {
133
+ const keyPair = new src_1.KeyPair({ pub: xpub });
134
+ const calculatedAddress = keyPair.getAddress();
135
+ calculatedAddress.should.equal(address);
136
+ });
137
+ it('should get an address from prv', () => {
138
+ const keyPair = new src_1.KeyPair({ prv });
139
+ const calculatedAddress = keyPair.getAddress();
140
+ calculatedAddress.should.equal(address);
141
+ });
142
+ it('should get an address from pub', () => {
143
+ const keyPair = new src_1.KeyPair({ pub });
144
+ const calculatedAddress = keyPair.getAddress();
145
+ calculatedAddress.should.equal(address);
146
+ });
147
+ it('should get an address from uncompressed pub', () => {
148
+ const keyPair = new src_1.KeyPair({ pub: uncompressedPub });
149
+ const calculatedAddress = keyPair.getAddress();
150
+ calculatedAddress.should.equal(address);
151
+ });
152
+ });
153
+ describe('getExtendedKeys', function () {
154
+ it('should get the keys in extended format from xprv', () => {
155
+ const keyPair = new src_1.KeyPair({ prv: xprv });
156
+ const { xprv: calculatedXprv, xpub: calculatedXpub } = keyPair.getExtendedKeys();
157
+ (0, assert_1.default)(calculatedXprv);
158
+ calculatedXprv.should.equal(xprv);
159
+ calculatedXpub.should.equal(xpub);
160
+ });
161
+ it('should get the keys in extended format from xpub', () => {
162
+ const keyPair = new src_1.KeyPair({ pub: xpub });
163
+ const { xprv: calculatedXprv, xpub: calculatedXpub } = keyPair.getExtendedKeys();
164
+ should_1.default.not.exist(calculatedXprv);
165
+ calculatedXpub.should.equal(xpub);
166
+ });
167
+ it('should not be able to get keys from prv', () => {
168
+ const keyPair = new src_1.KeyPair({ prv });
169
+ assert_1.default.throws(() => keyPair.getExtendedKeys());
170
+ });
171
+ it('should get the keys in extended format from pub', () => {
172
+ const keyPair = new src_1.KeyPair({ pub });
173
+ assert_1.default.throws(() => keyPair.getExtendedKeys());
174
+ });
175
+ it('should get the keys in extended format from uncompressed pub', () => {
176
+ const keyPair = new src_1.KeyPair({ pub: uncompressedPub });
177
+ assert_1.default.throws(() => keyPair.getExtendedKeys());
178
+ });
179
+ });
180
+ });
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9rZXlQYWlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQWtDO0FBQ2xDLG9EQUE0QjtBQUM1QixvREFBNEI7QUFFNUIsbUNBQW9DO0FBRXBDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtJQUMxQixnSEFBZ0g7SUFDaEgsTUFBTSxJQUFJLEdBQ1IsaUhBQWlILENBQUM7SUFDcEgsTUFBTSxJQUFJLEdBQ1IsaUhBQWlILENBQUM7SUFDcEgsTUFBTSxHQUFHLEdBQUcsa0VBQWtFLENBQUM7SUFDL0UsTUFBTSxHQUFHLEdBQUcsb0VBQW9FLENBQUM7SUFDakYsTUFBTSxlQUFlLEdBQ25CLG9JQUFvSSxDQUFDO0lBQ3ZJLE1BQU0sT0FBTyxHQUFHLDRDQUE0QyxDQUFDO0lBQzdELE1BQU0sNkJBQTZCLEdBQUcseUJBQXlCLENBQUM7SUFFaEUsUUFBUSxDQUFDLHlCQUF5QixFQUFFO1FBQ2xDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO1lBQ3RCLE1BQU0sT0FBTyxHQUFHLElBQUksYUFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDM0MsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RDLGdCQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG9FQUFvRSxDQUFDLENBQUM7WUFFbkcsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQy9DLGdCQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMs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LEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4REFBOEQsRUFBRSxHQUFHLEVBQUU7WUFDdEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztZQUN0RCxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBuYWNsIGZyb20gJ3R3ZWV0bmFjbCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5cbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuLi8uLi9zcmMnO1xuXG5kZXNjcmliZSgnVmVDaGFpbiBLZXlQYWlyJywgZnVuY3Rpb24gKCkge1xuICAvLyB0aGVzZSBhcmUgYWxsIGVuY29kaW5ncyBvZiB0aGUgc2FtZSBrZXkgc28gdGhlIHRlc3Qgc3VpdGUgd2lsbCBzaG93IHRoYXQgdGhleSB3ZSBjYW4gaW50ZXJjaGFuZ2UgYmV0d2VlbiB0aGVtXG4gIGNvbnN0IHhwcnYgPVxuICAgICd4cHJ2OXMyMVpyUUgxNDNLM0Q4VFhmdkFKZ0hWZlRFZVFOVzVZczl3WnRuVVprcVB6RnpTamJFSnJXQzF2WjRHblhDdlI3clFMMlVGWDNSU3VZZVU5TXJFUm0xWEJ2QUNvdzdjMzZ2bno1aVl5ajInO1xuICBjb25zdCB4cHViID1cbiAgICAneHB1YjY2MU15TXdBcVJiY0ZoQ3ZkaFRBZnBFRURWNThvcUR2djY1WU5IQzY4Nk5OczRLYkg4WVpRSldWbXJmYnZlN2FBVkh6eHc4YktGeEE3TUxlREs2QmJMZmtFM2Jxa3ZITFBnYUdISHRZR2VZJztcbiAgY29uc3QgcHJ2ID0gJzgyQTM0RTM4NjdFQTdFQTRFNjdFMjc4NjVENTAwQUU4NEU5OEQwN0FCMUJBQjA2NTI2RjBBNUE1RkRDQzNFQkEnO1xuICBjb25zdCBwdWIgPSAnMDNENjNEOUZEOUZENzcyQTk4OUM1QjkwRURCMzc3MTY0MDYzNTZFOTgyNzNFNUY5OEZFMDc2NTIyNDdBM0E4Mjc1JztcbiAgY29uc3QgdW5jb21wcmVzc2VkUHViID1cbiAgICAnMDRENjNEOUZEOUZENzcyQTk4OUM1QjkwRURCMzc3MTY0MDYzNTZFOTgyNzNFNUY5OEZFMDc2NTIyNDdBM0E4Mjc1MDNFOTQ4QTJGREJGNzRBOTgxRDRFMDA1NEYxMEVEQTcwNDJDMkQ0NjlGNDQ0NzNEM0M3NzkxRTBFMzI2RTM1NSc7XG4gIGNvbnN0IGFkZHJlc3MgPSAnMHhlYjMxN2I5ZjJlMDg5MWQ2NmMwNjFkZGMzZjVlZTdlZDQyZDcwYTQ0JztcbiAgY29uc3QgaW52YWxpZFByaXZhdGVLZXlFcnJvck1lc3NhZ2UgPSAnVW5zdXBwb3J0ZWQgcHJpdmF0ZSBrZXknO1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgY3JlYXRlIGEgS2V5UGFpcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZnJvbSBhbiB4cHViJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViOiB4cHViIH0pO1xuICAgICAgY29uc3QgZGVmYXVsdEtleXMgPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICAgIHNob3VsZC5ub3QuZXhpc3QoZGVmYXVsdEtleXMucHJ2KTtcbiAgICAgIGRlZmF1bHRLZXlzLnB1Yi5zaG91bGQuZXF1YWwoJzAzRDYzRDlGRDlGRDc3MkE5ODlDNUI5MEVEQjM3NzE2NDA2MzU2RTk4MjczRTVGOThGRTA3NjUyMjQ3QTNBODI3NScpO1xuXG4gICAgICBjb25zdCBleHRlbmRlZEtleXMgPSBrZXlQYWlyLmdldEV4dGVuZGVkS2V5cygpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChleHRlbmRlZEtleXMueHBydik7XG4gICAgICBleHRlbmRlZEtleXMueHB1Yi5zaG91bGQuZXF1YWwoeHB1Yik7XG4gICAgfSk7XG5cbiAgICBpdCgnZnJvbSBhbiB4cHJ2JywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB4cHJ2IH0pO1xuICAgICAgY29uc3QgZGVmYXVsdEtleXMgPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICAgIGFzc2VydChkZWZhdWx0S2V5cy5wcnYpO1xuICAgICAgZGVmYXVsdEtleXMucHJ2LnNob3VsZC5lcXVhbChwcnYpO1xuICAgICAgZGVmYXVsdEtleXMucHViLnNob3VsZC5lcXVhbChwdWIpO1xuXG4gICAgICBjb25zdCBleHRlbmRlZEtleXMgPSBrZXlQYWlyLmdldEV4dGVuZGVkS2V5cygpO1xuICAgICAgYXNzZXJ0KGV4dGVuZGVkS2V5cy54cHJ2KTtcbiAgICAgIGV4dGVuZGVkS2V5cy54cHJ2LnNob3VsZC5lcXVhbCh4cHJ2KTtcbiAgICAgIGV4dGVuZGVkS2V5cy54cHViLnNob3VsZC5lcXVhbCh4cHViKTtcbiAgICB9KTtcblxuICAgIGl0KCdmcm9tIGFuIHVuY29tcHJlc3NlZCBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViOiB1bmNvbXByZXNzZWRQdWIgfSk7XG4gICAgICBjb25zdCBkZWZhdWx0S2V5cyA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChkZWZhdWx0S2V5cy5wcnYpO1xuICAgICAgZGVmYXVsdEtleXMucHViLnNob3VsZC5lcXVhbCh1bmNvbXByZXNzZWRQdWIpO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGtleVBhaXIuZ2V0RXh0ZW5kZWRLZXlzKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb20gYSBjb21wcmVzc2VkIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwdWIgfSk7XG4gICAgICBjb25zdCBkZWZhdWx0S2V5cyA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChkZWZhdWx0S2V5cy5wcnYpO1xuICAgICAgZGVmYXVsdEtleXMucHViLnNob3VsZC5lcXVhbCh1bmNvbXByZXNzZWRQdWIpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBrZXlQYWlyLmdldEV4dGVuZGVkS2V5cygpKTtcbiAgICB9KTtcblxuICAgIGl0KCdmcm9tIGEgcmF3IHByaXZhdGUga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHJ2IH0pO1xuICAgICAgY29uc3QgZGVmYXVsdEtleXMgPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICAgIGFzc2VydChkZWZhdWx0S2V5cy5wcnYpO1xuICAgICAgZGVmYXVsdEtleXMucHJ2LnNob3VsZC5lcXVhbChwcnYpO1xuICAgICAgZGVmYXVsdEtleXMucHViLnNob3VsZC5lcXVhbCh1bmNvbXByZXNzZWRQdWIpO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGtleVBhaXIuZ2V0RXh0ZW5kZWRLZXlzKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb20gYW4gZW1wdHkgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoKTtcbiAgICAgIHNob3VsZC5leGlzdHMoa2V5UGFpci5nZXRLZXlzKCkucHJ2KTtcbiAgICAgIHNob3VsZC5leGlzdHMoa2V5UGFpci5nZXRLZXlzKCkucHViKTtcbiAgICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICAgIGFzc2VydChrZXlzLnBydik7XG4gICAgICBzaG91bGQuZXF1YWwoa2V5cy5wcnYubGVuZ3RoLCA2NCk7XG4gICAgICBzaG91bGQuZXF1YWwoa2V5cy5wdWIubGVuZ3RoLCA2Nik7XG4gICAgfSk7XG5cbiAgICBpdCgnZnJvbSBzZWVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VlZCA9IG5hY2wucmFuZG9tQnl0ZXMoNjQpO1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgc2VlZDogQnVmZmVyLmZyb20oc2VlZCkgfSk7XG4gICAgICBrZXlQYWlyLmdldEtleXMoKS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncHViJyk7XG4gICAgICBrZXlQYWlyLmdldEtleXMoKS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgncHJ2Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgZmFpbCB0byBjcmVhdGUgYSBLZXlQYWlyJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdmcm9tIGFuIGludmFsaWQgcHVibGljIGtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHtcbiAgICAgICAgcHViOiAnMDFENjNEJyxcbiAgICAgIH07XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBLZXlQYWlyKHNvdXJjZSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb20gYW4gaW52YWxpZCBwcml2YXRlIGtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHtcbiAgICAgICAgcHJ2OiAnODJBMzRFJyxcbiAgICAgIH07XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBLZXlQYWlyKHNvdXJjZSkpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gbmV3IEtleVBhaXIoeyBwcnY6IHBydiArIHB1YiB9KSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSBpbnZhbGlkUHJpdmF0ZUtleUVycm9yTWVzc2FnZVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBnZXQgYW4gYWRkcmVzcyBmcm9tIHhwcnYnLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IHhwcnYgfSk7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkQWRkcmVzcyA9IGtleVBhaXIuZ2V0QWRkcmVzcygpO1xuICAgICAgY2FsY3VsYXRlZEFkZHJlc3Muc2hvdWxkLmVxdWFsKGFkZHJlc3MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZXQgYW4gYWRkcmVzcyBmcm9tIHhwdWInLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwdWI6IHhwdWIgfSk7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkQWRkcmVzcyA9IGtleVBhaXIuZ2V0QWRkcmVzcygpO1xuICAgICAgY2FsY3VsYXRlZEFkZHJlc3Muc2hvdWxkLmVxdWFsKGFkZHJlc3MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZXQgYW4gYWRkcmVzcyBmcm9tIHBydicsICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydiB9KTtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRBZGRyZXNzID0ga2V5UGFpci5nZXRBZGRyZXNzKCk7XG4gICAgICBjYWxjdWxhdGVkQWRkcmVzcy5zaG91bGQuZXF1YWwoYWRkcmVzcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdldCBhbiBhZGRyZXNzIGZyb20gcHViJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViIH0pO1xuICAgICAgY29uc3QgY2FsY3VsYXRlZEFkZHJlc3MgPSBrZXlQYWlyLmdldEFkZHJlc3MoKTtcbiAgICAgIGNhbGN1bGF0ZWRBZGRyZXNzLnNob3VsZC5lcXVhbChhZGRyZXNzKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2V0IGFuIGFkZHJlc3MgZnJvbSB1bmNvbXByZXNzZWQgcHViJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViOiB1bmNvbXByZXNzZWRQdWIgfSk7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkQWRkcmVzcyA9IGtleVBhaXIuZ2V0QWRkcmVzcygpO1xuICAgICAgY2FsY3VsYXRlZEFkZHJlc3Muc2hvdWxkLmVxdWFsKGFkZHJlc3MpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0RXh0ZW5kZWRLZXlzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZ2V0IHRoZSBrZXlzIGluIGV4dGVuZGVkIGZvcm1hdCBmcm9tIHhwcnYnLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IHhwcnYgfSk7XG4gICAgICBjb25zdCB7IHhwcnY6IGNhbGN1bGF0ZWRYcHJ2LCB4cHViOiBjYWxjdWxhdGVkWHB1YiB9ID0ga2V5UGFpci5nZXRFeHRlbmRlZEtleXMoKTtcbiAgICAgIGFzc2VydChjYWxjdWxhdGVkWHBydik7XG4gICAgICBjYWxjdWxhdGVkWHBydi5zaG91bGQuZXF1YWwoeHBydik7XG4gICAgICBjYWxjdWxhdGVkWHB1Yi5zaG91bGQuZXF1YWwoeHB1Yik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdldCB0aGUga2V5cyBpbiBleHRlbmRlZCBmb3JtYXQgZnJvbSB4cHViJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViOiB4cHViIH0pO1xuICAgICAgY29uc3QgeyB4cHJ2OiBjYWxjdWxhdGVkWHBydiwgeHB1YjogY2FsY3VsYXRlZFhwdWIgfSA9IGtleVBhaXIuZ2V0RXh0ZW5kZWRLZXlzKCk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KGNhbGN1bGF0ZWRYcHJ2KTtcbiAgICAgIGNhbGN1bGF0ZWRYcHViLnNob3VsZC5lcXVhbCh4cHViKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGJlIGFibGUgdG8gZ2V0IGtleXMgZnJvbSBwcnYnLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnYgfSk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGtleVBhaXIuZ2V0RXh0ZW5kZWRLZXlzKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZXQgdGhlIGtleXMgaW4gZXh0ZW5kZWQgZm9ybWF0IGZyb20gcHViJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViIH0pO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBrZXlQYWlyLmdldEV4dGVuZGVkS2V5cygpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2V0IHRoZSBrZXlzIGluIGV4dGVuZGVkIGZvcm1hdCBmcm9tIHVuY29tcHJlc3NlZCBwdWInLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwdWI6IHVuY29tcHJlc3NlZFB1YiB9KTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ga2V5UGFpci5nZXRFeHRlbmRlZEtleXMoKSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=stakingFlowE2E.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stakingFlowE2E.d.ts","sourceRoot":"","sources":["../../../test/unit/stakingFlowE2E.ts"],"names":[],"mappings":""}
@@ -0,0 +1,222 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const should_1 = __importDefault(require("should"));
40
+ const statics_1 = require("@bitgo-beta/statics");
41
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
42
+ const lib_1 = require("../../src/lib");
43
+ const testData = __importStar(require("../resources/vet"));
44
+ describe('VET Staking Flow - End-to-End Test', function () {
45
+ const coinConfig = statics_1.coins.get('tvet');
46
+ const factory = new lib_1.TransactionBuilderFactory(coinConfig);
47
+ // Test data
48
+ const stakingContractAddress = testData.STAKING_CONTRACT_ADDRESS;
49
+ const amountToStake = '1000000000000000000'; // 1 VET in wei
50
+ const levelId = testData.STAKING_LEVEL_ID;
51
+ const senderAddress = '0x9378c12BD7502A11F770a5C1F223c959B2805dA9';
52
+ const feePayerAddress = '0xdc9fef0b84a0ccf3f1bd4b84e41743e3e051a083';
53
+ // Mock signatures for testing (these would come from actual signing in real scenario)
54
+ const mockSenderSignature = Buffer.from(testData.senderSig, 'hex');
55
+ const mockFeePayerSignature = Buffer.from(testData.feePayerSig, 'hex');
56
+ describe('Complete Staking Transaction Flow', function () {
57
+ it('should build, sign, and serialize a complete staking transaction with fee delegation', async function () {
58
+ // Step 1: Build the staking transaction
59
+ const stakingBuilder = factory.getStakingActivateBuilder();
60
+ stakingBuilder
61
+ .stakingContractAddress(stakingContractAddress)
62
+ .amountToStake(amountToStake)
63
+ .levelId(levelId)
64
+ .sender(senderAddress)
65
+ .chainTag(0x27) // Testnet chain tag
66
+ .blockRef('0x014ead140e77bbc1')
67
+ .expiration(64)
68
+ .gas(100000)
69
+ .gasPriceCoef(128)
70
+ .nonce('12345');
71
+ stakingBuilder.addFeePayerAddress(feePayerAddress);
72
+ const unsignedTx = await stakingBuilder.build();
73
+ should_1.default.exist(unsignedTx);
74
+ unsignedTx.should.be.instanceof(lib_1.StakeClauseTransaction);
75
+ const stakingTx = unsignedTx;
76
+ // Verify transaction structure
77
+ stakingTx.type.should.equal(sdk_core_1.TransactionType.StakingActivate);
78
+ stakingTx.stakingContractAddress.should.equal(stakingContractAddress);
79
+ stakingTx.amountToStake.should.equal(amountToStake);
80
+ stakingTx.levelId.should.equal(levelId);
81
+ should_1.default.exist(stakingTx.rawTransaction);
82
+ should_1.default.exist(stakingTx.rawTransaction.body);
83
+ // This is the critical test - ensure reserved.features = 1 for ContractCall type
84
+ should_1.default.exist(stakingTx.rawTransaction.body.reserved);
85
+ stakingTx.rawTransaction.body.reserved.should.have.property('features', 1);
86
+ // Step 3: Add sender signature
87
+ stakingTx.addSenderSignature(mockSenderSignature);
88
+ should_1.default.exist(stakingTx.senderSignature);
89
+ Buffer.from(stakingTx.senderSignature).should.eql(mockSenderSignature);
90
+ // Step 4: Add fee payer signature
91
+ stakingTx.addFeePayerSignature(mockFeePayerSignature);
92
+ should_1.default.exist(stakingTx.feePayerSignature);
93
+ Buffer.from(stakingTx.feePayerSignature).should.eql(mockFeePayerSignature);
94
+ // Step 5: Generate transaction ID
95
+ // This should NOT throw "not signed transaction: id unavailable" error anymore
96
+ const transactionId = stakingTx.id;
97
+ should_1.default.exist(transactionId);
98
+ transactionId.should.not.equal('UNAVAILABLE');
99
+ // Step 6: Serialize the fully signed transaction
100
+ const serializedTx = stakingTx.toBroadcastFormat();
101
+ should_1.default.exist(serializedTx);
102
+ serializedTx.should.be.type('string');
103
+ serializedTx.should.startWith('0x');
104
+ // Step 7: Verify transaction can be deserialized
105
+ const deserializedBuilder = factory.from(serializedTx);
106
+ const deserializedTx = deserializedBuilder.transaction;
107
+ deserializedTx.should.be.instanceof(lib_1.StakeClauseTransaction);
108
+ deserializedTx.stakingContractAddress.should.equal(stakingContractAddress);
109
+ deserializedTx.amountToStake.should.equal(amountToStake);
110
+ deserializedTx.levelId.should.equal(levelId);
111
+ // Step 8: Verify toJson output
112
+ const jsonOutput = stakingTx.toJson();
113
+ should_1.default.exist(jsonOutput);
114
+ jsonOutput.should.have.property('id', transactionId);
115
+ jsonOutput.should.have.property('stakingContractAddress', stakingContractAddress);
116
+ // JSON output keeps decimal format for amounts
117
+ jsonOutput.should.have.property('amountToStake', amountToStake);
118
+ jsonOutput.should.have.property('levelId', levelId);
119
+ });
120
+ it('should handle signature combination in the correct order', async function () {
121
+ // This test specifically validates the signature combination flow that was failing
122
+ const stakingBuilder = factory.getStakingActivateBuilder();
123
+ stakingBuilder
124
+ .stakingContractAddress(stakingContractAddress)
125
+ .amountToStake(amountToStake)
126
+ .levelId(levelId)
127
+ .sender(senderAddress)
128
+ .chainTag(0x27)
129
+ .blockRef('0x014ead140e77bbc1')
130
+ .expiration(64)
131
+ .gas(100000)
132
+ .gasPriceCoef(128)
133
+ .nonce('12345');
134
+ stakingBuilder.addFeePayerAddress(feePayerAddress);
135
+ const tx = (await stakingBuilder.build());
136
+ // Test 1: Only sender signature - should generate half-signed transaction
137
+ tx.addSenderSignature(mockSenderSignature);
138
+ // Test 2: Add fee payer signature - should generate fully signed transaction
139
+ tx.addFeePayerSignature(mockFeePayerSignature);
140
+ // Should be able to get transaction ID with both signatures
141
+ const fullSignedId = tx.id;
142
+ should_1.default.exist(fullSignedId);
143
+ fullSignedId.should.not.equal('UNAVAILABLE');
144
+ // The ID should be consistent
145
+ fullSignedId.should.be.type('string');
146
+ fullSignedId.length.should.be.greaterThan(10);
147
+ });
148
+ it('should properly set transaction type for fee delegation validation', async function () {
149
+ // This test ensures our fix for TransactionType.ContractCall is working
150
+ const stakingBuilder = factory.getStakingActivateBuilder();
151
+ stakingBuilder
152
+ .stakingContractAddress(stakingContractAddress)
153
+ .amountToStake(amountToStake)
154
+ .levelId(levelId)
155
+ .sender(senderAddress)
156
+ .chainTag(0x27)
157
+ .blockRef('0x014ead140e77bbc1')
158
+ .expiration(64)
159
+ .gas(100000)
160
+ .gasPriceCoef(128)
161
+ .nonce('12345');
162
+ stakingBuilder.addFeePayerAddress(feePayerAddress);
163
+ const tx = (await stakingBuilder.build());
164
+ // Verify the transaction type is ContractCall
165
+ tx.type.should.equal(sdk_core_1.TransactionType.StakingActivate);
166
+ // Verify fee delegation is enabled via reserved.features = 1
167
+ const rawTxBody = tx.rawTransaction.body;
168
+ should_1.default.exist(rawTxBody.reserved);
169
+ rawTxBody.reserved.should.have.property('features', 1);
170
+ // This proves that ContractCall transactions now get fee delegation support
171
+ });
172
+ it('should work with pre-built signed transaction from test data', async function () {
173
+ // Test using the actual signed transaction from our test data
174
+ const txBuilder = factory.from(testData.STAKING_TRANSACTION);
175
+ const tx = txBuilder.transaction;
176
+ // Should be able to get ID without throwing errors
177
+ const txId = tx.id;
178
+ should_1.default.exist(txId);
179
+ txId.should.not.equal('UNAVAILABLE');
180
+ // Verify all staking properties are preserved
181
+ // Note: The test data uses a different contract address in the transaction
182
+ // The actual contract address from the parsed transaction is 0x1856c533ac2d94340aaa8544d35a5c1d4a21dee7
183
+ tx.stakingContractAddress.should.equal('0x1856c533ac2d94340aaa8544d35a5c1d4a21dee7');
184
+ tx.levelId.should.equal(testData.STAKING_LEVEL_ID);
185
+ });
186
+ });
187
+ describe('Fee Delegation Flag Tests', function () {
188
+ it('should set fee delegation for all staking-related transaction types', async function () {
189
+ const testTypes = [
190
+ { type: sdk_core_1.TransactionType.ContractCall, name: 'Staking' },
191
+ { type: sdk_core_1.TransactionType.StakingUnlock, name: 'Exit Delegation' },
192
+ { type: sdk_core_1.TransactionType.StakingWithdraw, name: 'Burn NFT' },
193
+ { type: sdk_core_1.TransactionType.StakingClaim, name: 'Claim Rewards' },
194
+ ];
195
+ for (const testCase of testTypes) {
196
+ const stakingBuilder = factory.getStakingActivateBuilder();
197
+ stakingBuilder
198
+ .stakingContractAddress(stakingContractAddress)
199
+ .amountToStake(amountToStake)
200
+ .levelId(levelId)
201
+ .sender(senderAddress)
202
+ .chainTag(0x27)
203
+ .blockRef('0x014ead140e77bbc1')
204
+ .expiration(64)
205
+ .gas(100000)
206
+ .gasPriceCoef(128)
207
+ .nonce('12345');
208
+ stakingBuilder.addFeePayerAddress(feePayerAddress);
209
+ // Manually set the transaction type to test different types
210
+ const tx = (await stakingBuilder.build());
211
+ tx._type = testCase.type;
212
+ // Rebuild the raw transaction to test fee delegation flag
213
+ await tx.buildRawTransaction();
214
+ // Verify fee delegation is set for all types
215
+ const rawTxBody = tx.rawTransaction.body;
216
+ should_1.default.exist(rawTxBody.reserved);
217
+ rawTxBody.reserved.should.have.property('features', 1);
218
+ }
219
+ });
220
+ });
221
+ });
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ0Zsb3dFMkUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvc3Rha2luZ0Zsb3dFMkUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsaURBQTRDO0FBQzVDLG1EQUF1RDtBQUN2RCx1Q0FBa0Y7QUFDbEYsMkRBQTZDO0FBRTdDLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRTtJQUM3QyxNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFMUQsWUFBWTtJQUNaLE1BQU0sc0JBQXNCLEdBQUcsUUFBUSxDQUFDLHdCQUF3QixDQUFDO0lBQ2pFLE1BQU0sYUFBYSxHQUFHLHFCQUFxQixDQUFDLENBQUMsZUFBZTtJQUM1RCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7SUFDMUMsTUFBTSxhQUFhLEdBQUcsNENBQTRDLENBQUM7SUFDbkUsTUFBTSxlQUFlLEdBQUcsNENBQTRDLENBQUM7SUFFckUsc0ZBQXNGO0lBQ3RGLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25FLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXZFLFFBQVEsQ0FBQyxtQ0FBbUMsRUFBRTtRQUM1QyxFQUFFLENBQUMsc0ZBQXNGLEVBQUUsS0FBSztZQUM5Rix3Q0FBd0M7WUFDeEMsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFFM0QsY0FBYztpQkFDWCxzQkFBc0IsQ0FBQyxzQkFB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LENBQUM7cUJBQzVCLE9BQU8sQ0FBQyxPQUFPLENBQUM7cUJBQ2hCLE1BQU0sQ0FBQyxhQUFhLENBQUM7cUJBQ3JCLFFBQVEsQ0FBQyxJQUFJLENBQUM7cUJBQ2QsUUFBUSxDQUFDLG9CQUFvQixDQUFDO3FCQUM5QixVQUFVLENBQUMsRUFBRSxDQUFDO3FCQUNkLEdBQUcsQ0FBQyxNQUFNLENBQUM7cUJBQ1gsWUFBWSxDQUFDLEdBQUcsQ0FBQztxQkFDakIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUVsQixjQUFjLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBRW5ELDREQUE0RDtnQkFDNUQsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBMkIsQ0FBQztnQkFDbkUsRUFBVSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUVsQywwREFBMEQ7Z0JBQzFELE1BQU8sRUFBVSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBRXhDLDZDQUE2QztnQkFDN0MsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3pDLGdCQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakMsU0FBUyxDQUFDLFFBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBTdGFrZUNsYXVzZVRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi9yZXNvdXJjZXMvdmV0JztcblxuZGVzY3JpYmUoJ1ZFVCBTdGFraW5nIEZsb3cgLSBFbmQtdG8tRW5kIFRlc3QnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNvaW5Db25maWcgPSBjb2lucy5nZXQoJ3R2ZXQnKTtcbiAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5Db25maWcpO1xuXG4gIC8vIFRlc3QgZGF0YVxuICBjb25zdCBzdGFraW5nQ29udHJhY3RBZGRyZXNzID0gdGVzdERhdGEuU1RBS0lOR19DT05UUkFDVF9BRERSRVNTO1xuICBjb25zdCBhbW91bnRUb1N0YWtlID0gJzEwMDAwMDAwMDAwMDAwMDAwMDAnOyAvLyAxIFZFVCBpbiB3ZWlcbiAgY29uc3QgbGV2ZWxJZCA9IHRlc3REYXRhLlNUQUtJTkdfTEVWRUxfSUQ7XG4gIGNvbnN0IHNlbmRlckFkZHJlc3MgPSAnMHg5Mzc4YzEyQkQ3NTAyQTExRjc3MGE1QzFGMjIzYzk1OUIyODA1ZEE5JztcbiAgY29uc3QgZmVlUGF5ZXJBZGRyZXNzID0gJzB4ZGM5ZmVmMGI4NGEwY2NmM2YxYmQ0Yjg0ZTQxNzQzZTNlMDUxYTA4Myc7XG5cbiAgLy8gTW9jayBzaWduYXR1cmVzIGZvciB0ZXN0aW5nICh0aGVzZSB3b3VsZCBjb21lIGZyb20gYWN0dWFsIHNpZ25pbmcgaW4gcmVhbCBzY2VuYXJpbylcbiAgY29uc3QgbW9ja1NlbmRlclNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHRlc3REYXRhLnNlbmRlclNpZywgJ2hleCcpO1xuICBjb25zdCBtb2NrRmVlUGF5ZXJTaWduYXR1cmUgPSBCdWZmZXIuZnJvbSh0ZXN0RGF0YS5mZWVQYXllclNpZywgJ2hleCcpO1xuXG4gIGRlc2NyaWJlKCdDb21wbGV0ZSBTdGFraW5nIFRyYW5zYWN0aW9uIEZsb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCwgc2lnbiwgYW5kIHNlcmlhbGl6ZSBhIGNvbXBsZXRlIHN0YWtpbmcgdHJhbnNhY3Rpb24gd2l0aCBmZWUgZGVsZWdhdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFN0ZXAgMTogQnVpbGQgdGhlIHN0YWtpbmcgdHJhbnNhY3Rpb25cbiAgICAgIGNvbnN0IHN0YWtpbmdCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nQWN0aXZhdGVCdWlsZGVyKCk7XG5cbiAgICAgIHN0YWtpbmdCdWlsZGVyXG4gICAgICAgIC5zdGFraW5nQ29udHJhY3RBZGRyZXNzKHN0YWtpbmdDb250cmFjdEFkZHJlc3MpXG4gICAgICAgIC5hbW91bnRUb1N0YWtlKGFtb3VudFRvU3Rha2UpXG4gICAgICAgIC5sZXZlbElkKGxldmVsSWQpXG4gICAgICAgIC5zZW5kZXIoc2VuZGVyQWRkcmVzcylcbiAgICAgICAgLmNoYWluVGFnKDB4MjcpIC8vIFRlc3RuZXQgY2hhaW4gdGFnXG4gICAgICAgIC5ibG9ja1JlZignMHgwMTRlYWQxNDBlNzdiYmMxJylcbiAgICAgICAgLmV4cGlyYXRpb24oNjQpXG4gICAgICAgIC5nYXMoMTAwMDAwKVxuICAgICAgICAuZ2FzUHJpY2VDb2VmKDEyOClcbiAgICAgICAgLm5vbmNlKCcxMjM0NScpO1xuXG4gICAgICBzdGFraW5nQnVpbGRlci5hZGRGZWVQYXllckFkZHJlc3MoZmVlUGF5ZXJBZGRyZXNzKTtcblxuICAgICAgY29uc3QgdW5zaWduZWRUeCA9IGF3YWl0IHN0YWtpbmdCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXhpc3QodW5zaWduZWRUeCk7XG4gICAgICB1bnNpZ25lZFR4LnNob3VsZC5iZS5pbnN0YW5jZW9mKFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb24pO1xuXG4gICAgICBjb25zdCBzdGFraW5nVHggPSB1bnNpZ25lZFR4IGFzIFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIFZlcmlmeSB0cmFuc2FjdGlvbiBzdHJ1Y3R1cmVcbiAgICAgIHN0YWtpbmdUeC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlKTtcbiAgICAgIHN0YWtpbmdUeC5zdGFraW5nQ29udHJhY3RBZGRyZXNzLnNob3VsZC5lcXVhbChzdGFraW5nQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHN0YWtpbmdUeC5hbW91bnRUb1N0YWtlLnNob3VsZC5lcXVhbChhbW91bnRUb1N0YWtlKTtcbiAgICAgIHN0YWtpbmdUeC5sZXZlbElkLnNob3VsZC5lcXVhbChsZXZlbElkKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KHN0YWtpbmdUeC5yYXdUcmFuc2FjdGlvbik7XG4gICAgICBzaG91bGQuZXhpc3Qoc3Rha2luZ1R4LnJhd1RyYW5zYWN0aW9uLmJvZHkpO1xuXG4gICAgICAvLyBUaGlzIGlzIHRoZSBjcml0aWNhbCB0ZXN0IC0gZW5zdXJlIHJlc2VydmVkLmZlYXR1cmVzID0gMSBmb3IgQ29udHJhY3RDYWxsIHR5cGVcbiAgICAgIHNob3VsZC5leGlzdChzdGFraW5nVHgucmF3VHJhbnNhY3Rpb24uYm9keS5yZXNlcnZlZCk7XG4gICAgICBzdGFraW5nVHgucmF3VHJhbnNhY3Rpb24uYm9keS5yZXNlcnZlZCEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2ZlYXR1cmVzJywgMSk7XG5cbiAgICAgIC8vIFN0ZXAgMzogQWRkIHNlbmRlciBzaWduYXR1cmVcbiAgICAgIHN0YWtpbmdUeC5hZGRTZW5kZXJTaWduYXR1cmUobW9ja1NlbmRlclNpZ25hdHVyZSk7XG4gICAgICBzaG91bGQuZXhpc3Qoc3Rha2luZ1R4LnNlbmRlclNpZ25hdHVyZSk7XG4gICAgICBCdWZmZXIuZnJvbShzdGFraW5nVHguc2VuZGVyU2lnbmF0dXJlISkuc2hvdWxkLmVxbChtb2NrU2VuZGVyU2lnbmF0dXJlKTtcblxuICAgICAgLy8gU3RlcCA0OiBBZGQgZmVlIHBheWVyIHNpZ25hdHVyZVxuICAgICAgc3Rha2luZ1R4LmFkZEZlZVBheWVyU2lnbmF0dXJlKG1vY2tGZWVQYXllclNpZ25hdHVyZSk7XG4gICAgICBzaG91bGQuZXhpc3Qoc3Rha2luZ1R4LmZlZVBheWVyU2lnbmF0dXJlKTtcbiAgICAgIEJ1ZmZlci5mcm9tKHN0YWtpbmdUeC5mZWVQYXllclNpZ25hdHVyZSEpLnNob3VsZC5lcWwobW9ja0ZlZVBheWVyU2lnbmF0dXJlKTtcblxuICAgICAgLy8gU3RlcCA1OiBHZW5lcmF0ZSB0cmFuc2FjdGlvbiBJRFxuXG4gICAgICAvLyBUaGlzIHNob3VsZCBOT1QgdGhyb3cgXCJub3Qgc2lnbmVkIHRyYW5zYWN0aW9uOiBpZCB1bmF2YWlsYWJsZVwiIGVycm9yIGFueW1vcmVcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSWQgPSBzdGFraW5nVHguaWQ7XG4gICAgICBzaG91bGQuZXhpc3QodHJhbnNhY3Rpb25JZCk7XG4gICAgICB0cmFuc2FjdGlvbklkLnNob3VsZC5ub3QuZXF1YWwoJ1VOQVZBSUxBQkxFJyk7XG5cbiAgICAgIC8vIFN0ZXAgNjogU2VyaWFsaXplIHRoZSBmdWxseSBzaWduZWQgdHJhbnNhY3Rpb25cbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUeCA9IHN0YWtpbmdUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgc2hvdWxkLmV4aXN0KHNlcmlhbGl6ZWRUeCk7XG4gICAgICBzZXJpYWxpemVkVHguc2hvdWxkLmJlLnR5cGUoJ3N0cmluZycpO1xuICAgICAgc2VyaWFsaXplZFR4LnNob3VsZC5zdGFydFdpdGgoJzB4Jyk7XG5cbiAgICAgIC8vIFN0ZXAgNzogVmVyaWZ5IHRyYW5zYWN0aW9uIGNhbiBiZSBkZXNlcmlhbGl6ZWRcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20oc2VyaWFsaXplZFR4KTtcbiAgICAgIGNvbnN0IGRlc2VyaWFsaXplZFR4ID0gZGVzZXJpYWxpemVkQnVpbGRlci50cmFuc2FjdGlvbiBhcyBTdGFrZUNsYXVzZVRyYW5zYWN0aW9uO1xuXG4gICAgICBkZXNlcmlhbGl6ZWRUeC5zaG91bGQuYmUuaW5zdGFuY2VvZihTdGFrZUNsYXVzZVRyYW5zYWN0aW9uKTtcbiAgICAgIGRlc2VyaWFsaXplZFR4LnN0YWtpbmdDb250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKHN0YWtpbmdDb250cmFjdEFkZHJlc3MpO1xuICAgICAgZGVzZXJpYWxpemVkVHguYW1vdW50VG9TdGFrZS5zaG91bGQuZXF1YWwoYW1vdW50VG9TdGFrZSk7XG4gICAgICBkZXNlcmlhbGl6ZWRUeC5sZXZlbElkLnNob3VsZC5lcXVhbChsZXZlbElkKTtcblxuICAgICAgLy8gU3RlcCA4OiBWZXJpZnkgdG9Kc29uIG91dHB1dFxuICAgICAgY29uc3QganNvbk91dHB1dCA9IHN0YWtpbmdUeC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5leGlzdChqc29uT3V0cHV0KTtcbiAgICAgIGpzb25PdXRwdXQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2lkJywgdHJhbnNhY3Rpb25JZCk7XG4gICAgICBqc29uT3V0cHV0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdzdGFraW5nQ29udHJhY3RBZGRyZXNzJywgc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyk7XG4gICAgICAvLyBKU09OIG91dHB1dCBrZWVwcyBkZWNpbWFsIGZvcm1hdCBmb3IgYW1vdW50c1xuICAgICAganNvbk91dHB1dC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnYW1vdW50VG9TdGFrZScsIGFtb3VudFRvU3Rha2UpO1xuICAgICAganNvbk91dHB1dC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnbGV2ZWxJZCcsIGxldmVsSWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgc2lnbmF0dXJlIGNvbWJpbmF0aW9uIGluIHRoZSBjb3JyZWN0IG9yZGVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhpcyB0ZXN0IHNwZWNpZmljYWxseSB2YWxpZGF0ZXMgdGhlIHNpZ25hdHVyZSBjb21iaW5hdGlvbiBmbG93IHRoYXQgd2FzIGZhaWxpbmdcbiAgICAgIGNvbnN0IHN0YWtpbmdCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nQWN0aXZhdGVCdWlsZGVyKCk7XG5cbiAgICAgIHN0YWtpbmdCdWlsZGVyXG4gICAgICAgIC5zdGFraW5nQ29udHJhY3RBZGRyZXNzKHN0YWtpbmdDb250cmFjdEFkZHJlc3MpXG4gICAgICAgIC5hbW91bnRUb1N0YWtlKGFtb3VudFRvU3Rha2UpXG4gICAgICAgIC5sZXZlbElkKGxldmVsSWQpXG4gICAgICAgIC5zZW5kZXIoc2VuZGVyQWRkcmVzcylcbiAgICAgICAgLmNoYWluVGFnKDB4MjcpXG4gICAgICAgIC5ibG9ja1JlZignMHgwMTRlYWQxNDBlNzdiYmMxJylcbiAgICAgICAgLmV4cGlyYXRpb24oNjQpXG4gICAgICAgIC5nYXMoMTAwMDAwKVxuICAgICAgICAuZ2FzUHJpY2VDb2VmKDEyOClcbiAgICAgICAgLm5vbmNlKCcxMjM0NScpO1xuXG4gICAgICBzdGFraW5nQnVpbGRlci5hZGRGZWVQYXllckFkZHJlc3MoZmVlUGF5ZXJBZGRyZXNzKTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgc3Rha2luZ0J1aWxkZXIuYnVpbGQoKSkgYXMgU3Rha2VDbGF1c2VUcmFuc2FjdGlvbjtcblxuICAgICAgLy8gVGVzdCAxOiBPbmx5IHNlbmRlciBzaWduYXR1cmUgLSBzaG91bGQgZ2VuZXJhdGUgaGFsZi1zaWduZWQgdHJhbnNhY3Rpb25cbiAgICAgIHR4LmFkZFNlbmRlclNpZ25hdHVyZShtb2NrU2VuZGVyU2lnbmF0dXJlKTtcblxuICAgICAgLy8gVGVzdCAyOiBBZGQgZmVlIHBheWVyIHNpZ25hdHVyZSAtIHNob3VsZCBnZW5lcmF0ZSBmdWxseSBzaWduZWQgdHJhbnNhY3Rpb25cbiAgICAgIHR4LmFkZEZlZVBheWVyU2lnbmF0dXJlKG1vY2tGZWVQYXllclNpZ25hdHVyZSk7XG5cbiAgICAgIC8vIFNob3VsZCBiZSBhYmxlIHRvIGdldCB0cmFuc2FjdGlvbiBJRCB3aXRoIGJvdGggc2lnbmF0dXJlc1xuICAgICAgY29uc3QgZnVsbFNpZ25lZElkID0gdHguaWQ7XG4gICAgICBzaG91bGQuZXhpc3QoZnVsbFNpZ25lZElkKTtcbiAgICAgIGZ1bGxTaWduZWRJZC5zaG91bGQubm90LmVxdWFsKCdVTkFWQUlMQUJMRScpO1xuXG4gICAgICAvLyBUaGUgSUQgc2hvdWxkIGJlIGNvbnNpc3RlbnRcbiAgICAgIGZ1bGxTaWduZWRJZC5zaG91bGQuYmUudHlwZSgnc3RyaW5nJyk7XG4gICAgICBmdWxsU2lnbmVkSWQubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbigxMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByb3Blcmx5IHNldCB0cmFuc2FjdGlvbiB0eXBlIGZvciBmZWUgZGVsZWdhdGlvbiB2YWxpZGF0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhpcyB0ZXN0IGVuc3VyZXMgb3VyIGZpeCBmb3IgVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCBpcyB3b3JraW5nXG4gICAgICBjb25zdCBzdGFraW5nQnVpbGRlciA9IGZhY3RvcnkuZ2V0U3Rha2luZ0FjdGl2YXRlQnVpbGRlcigpO1xuXG4gICAgICBzdGFraW5nQnVpbGRlclxuICAgICAgICAuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhzdGFraW5nQ29udHJhY3RBZGRyZXNzKVxuICAgICAgICAuYW1vdW50VG9TdGFrZShhbW91bnRUb1N0YWtlKVxuICAgICAgICAubGV2ZWxJZChsZXZlbElkKVxuICAgICAgICAuc2VuZGVyKHNlbmRlckFkZHJlc3MpXG4gICAgICAgIC5jaGFpblRhZygweDI3KVxuICAgICAgICAuYmxvY2tSZWYoJzB4MDE0ZWFkMTQwZTc3YmJjMScpXG4gICAgICAgIC5leHBpcmF0aW9uKDY0KVxuICAgICAgICAuZ2FzKDEwMDAwMClcbiAgICAgICAgLmdhc1ByaWNlQ29lZigxMjgpXG4gICAgICAgIC5ub25jZSgnMTIzNDUnKTtcblxuICAgICAgc3Rha2luZ0J1aWxkZXIuYWRkRmVlUGF5ZXJBZGRyZXNzKGZlZVBheWVyQWRkcmVzcyk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHN0YWtpbmdCdWlsZGVyLmJ1aWxkKCkpIGFzIFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgdHJhbnNhY3Rpb24gdHlwZSBpcyBDb250cmFjdENhbGxcbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGUpO1xuXG4gICAgICAvLyBWZXJpZnkgZmVlIGRlbGVnYXRpb24gaXMgZW5hYmxlZCB2aWEgcmVzZXJ2ZWQuZmVhdHVyZXMgPSAxXG4gICAgICBjb25zdCByYXdUeEJvZHkgPSB0eC5yYXdUcmFuc2FjdGlvbi5ib2R5O1xuICAgICAgc2hvdWxkLmV4aXN0KHJhd1R4Qm9keS5yZXNlcnZlZCk7XG4gICAgICByYXdUeEJvZHkucmVzZXJ2ZWQhLnNob3VsZC5oYXZlLnByb3BlcnR5KCdmZWF0dXJlcycsIDEpO1xuXG4gICAgICAvLyBUaGlzIHByb3ZlcyB0aGF0IENvbnRyYWN0Q2FsbCB0cmFuc2FjdGlvbnMgbm93IGdldCBmZWUgZGVsZWdhdGlvbiBzdXBwb3J0XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHdvcmsgd2l0aCBwcmUtYnVpbHQgc2lnbmVkIHRyYW5zYWN0aW9uIGZyb20gdGVzdCBkYXRhJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGVzdCB1c2luZyB0aGUgYWN0dWFsIHNpZ25lZCB0cmFuc2FjdGlvbiBmcm9tIG91ciB0ZXN0IGRhdGFcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5TVEFLSU5HX1RSQU5TQUNUSU9OKTtcbiAgICAgIGNvbnN0IHR4ID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uIGFzIFN0YWtlQ2xhdXNlVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIFNob3VsZCBiZSBhYmxlIHRvIGdldCBJRCB3aXRob3V0IHRocm93aW5nIGVycm9yc1xuICAgICAgY29uc3QgdHhJZCA9IHR4LmlkO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4SWQpO1xuICAgICAgdHhJZC5zaG91bGQubm90LmVxdWFsKCdVTkFWQUlMQUJMRScpO1xuXG4gICAgICAvLyBWZXJpZnkgYWxsIHN0YWtpbmcgcHJvcGVydGllcyBhcmUgcHJlc2VydmVkXG4gICAgICAvLyBOb3RlOiBUaGUgdGVzdCBkYXRhIHVzZXMgYSBkaWZmZXJlbnQgY29udHJhY3QgYWRkcmVzcyBpbiB0aGUgdHJhbnNhY3Rpb25cbiAgICAgIC8vIFRoZSBhY3R1YWwgY29udHJhY3QgYWRkcmVzcyBmcm9tIHRoZSBwYXJzZWQgdHJhbnNhY3Rpb24gaXMgMHgxODU2YzUzM2FjMmQ5NDM0MGFhYTg1NDRkMzVhNWMxZDRhMjFkZWU3XG4gICAgICB0eC5zdGFraW5nQ29udHJhY3RBZGRyZXNzLnNob3VsZC5lcXVhbCgnMHgxODU2YzUzM2FjMmQ5NDM0MGFhYTg1NDRkMzVhNWMxZDRhMjFkZWU3Jyk7XG4gICAgICB0eC5sZXZlbElkLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5TVEFLSU5HX0xFVkVMX0lEKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0ZlZSBEZWxlZ2F0aW9uIEZsYWcgVGVzdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzZXQgZmVlIGRlbGVnYXRpb24gZm9yIGFsbCBzdGFraW5nLXJlbGF0ZWQgdHJhbnNhY3Rpb24gdHlwZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0ZXN0VHlwZXMgPSBbXG4gICAgICAgIHsgdHlwZTogVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCwgbmFtZTogJ1N0YWtpbmcnIH0sXG4gICAgICAgIHsgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbmxvY2ssIG5hbWU6ICdFeGl0IERlbGVnYXRpb24nIH0sXG4gICAgICAgIHsgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdywgbmFtZTogJ0J1cm4gTkZUJyB9LFxuICAgICAgICB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQ2xhaW0sIG5hbWU6ICdDbGFpbSBSZXdhcmRzJyB9LFxuICAgICAgXTtcblxuICAgICAgZm9yIChjb25zdCB0ZXN0Q2FzZSBvZiB0ZXN0VHlwZXMpIHtcbiAgICAgICAgY29uc3Qgc3Rha2luZ0J1aWxkZXIgPSBmYWN0b3J5LmdldFN0YWtpbmdBY3RpdmF0ZUJ1aWxkZXIoKTtcbiAgICAgICAgc3Rha2luZ0J1aWxkZXJcbiAgICAgICAgICAuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhzdGFraW5nQ29udHJhY3RBZGRyZXNzKVxuICAgICAgICAgIC5hbW91bnRUb1N0YWtlKGFtb3VudFRvU3Rha2UpXG4gICAgICAgICAgLmxldmVsSWQobGV2ZWxJZClcbiAgICAgICAgICAuc2VuZGVyKHNlbmRlckFkZHJlc3MpXG4gICAgICAgICAgLmNoYWluVGFnKDB4MjcpXG4gICAgICAgICAgLmJsb2NrUmVmKCcweDAxNGVhZDE0MGU3N2JiYzEnKVxuICAgICAgICAgIC5leHBpcmF0aW9uKDY0KVxuICAgICAgICAgIC5nYXMoMTAwMDAwKVxuICAgICAgICAgIC5nYXNQcmljZUNvZWYoMTI4KVxuICAgICAgICAgIC5ub25jZSgnMTIzNDUnKTtcblxuICAgICAgICBzdGFraW5nQnVpbGRlci5hZGRGZWVQYXllckFkZHJlc3MoZmVlUGF5ZXJBZGRyZXNzKTtcblxuICAgICAgICAvLyBNYW51YWxseSBzZXQgdGhlIHRyYW5zYWN0aW9uIHR5cGUgdG8gdGVzdCBkaWZmZXJlbnQgdHlwZXNcbiAgICAgICAgY29uc3QgdHggPSAoYXdhaXQgc3Rha2luZ0J1aWxkZXIuYnVpbGQoKSkgYXMgU3Rha2VDbGF1c2VUcmFuc2FjdGlvbjtcbiAgICAgICAgKHR4IGFzIGFueSkuX3R5cGUgPSB0ZXN0Q2FzZS50eXBlO1xuXG4gICAgICAgIC8vIFJlYnVpbGQgdGhlIHJhdyB0cmFuc2FjdGlvbiB0byB0ZXN0IGZlZSBkZWxlZ2F0aW9uIGZsYWdcbiAgICAgICAgYXdhaXQgKHR4IGFzIGFueSkuYnVpbGRSYXdUcmFuc2FjdGlvbigpO1xuXG4gICAgICAgIC8vIFZlcmlmeSBmZWUgZGVsZWdhdGlvbiBpcyBzZXQgZm9yIGFsbCB0eXBlc1xuICAgICAgICBjb25zdCByYXdUeEJvZHkgPSB0eC5yYXdUcmFuc2FjdGlvbi5ib2R5O1xuICAgICAgICBzaG91bGQuZXhpc3QocmF3VHhCb2R5LnJlc2VydmVkKTtcbiAgICAgICAgcmF3VHhCb2R5LnJlc2VydmVkIS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZmVhdHVyZXMnLCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../test/unit/utils.ts"],"names":[],"mappings":""}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const should_1 = __importDefault(require("should"));
40
+ const testData = __importStar(require("../resources/vet"));
41
+ const utils_1 = __importDefault(require("../../src/lib/utils"));
42
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
43
+ describe('Vechain util library', function () {
44
+ describe('isValidAddress', function () {
45
+ it('should succeed to validate raw transactoin', function () {
46
+ for (const address of testData.addresses.validAddresses) {
47
+ should_1.default.equal(utils_1.default.isValidAddress(address), true);
48
+ }
49
+ });
50
+ it('should fail to validate invalid addresses', function () {
51
+ for (const address of testData.addresses.invalidAddresses) {
52
+ should_1.default.doesNotThrow(() => utils_1.default.isValidAddress(address));
53
+ should_1.default.equal(utils_1.default.isValidAddress(address), false);
54
+ }
55
+ // @ts-expect-error Testing for missing param, should not throw an error
56
+ should_1.default.doesNotThrow(() => utils_1.default.isValidAddress(undefined));
57
+ // @ts-expect-error Testing for missing param, should return false
58
+ should_1.default.equal(utils_1.default.isValidAddress(undefined), false);
59
+ });
60
+ });
61
+ describe('isValidBlockId', function () {
62
+ it('should succeed to validate valid block IDs', function () {
63
+ for (const blockId of testData.blockIds.validBlockIds) {
64
+ should_1.default.equal(utils_1.default.isValidBlockId(blockId), true);
65
+ }
66
+ });
67
+ it('should fail to validate invalid block IDs', function () {
68
+ for (const blockId of testData.blockIds.invalidBlockIds) {
69
+ should_1.default.doesNotThrow(() => utils_1.default.isValidBlockId(blockId));
70
+ should_1.default.equal(utils_1.default.isValidBlockId(blockId), false);
71
+ }
72
+ // @ts-expect-error Testing for missing param, should not throw an error
73
+ should_1.default.doesNotThrow(() => utils_1.default.isValidBlockId(undefined));
74
+ // @ts-expect-error Testing for missing param, should return false
75
+ should_1.default.equal(utils_1.default.isValidBlockId(undefined), false);
76
+ });
77
+ });
78
+ describe('isValidDeserialize', function () {
79
+ it('should succeed to correctly deserialize sponsored signed serialized transaction', function () {
80
+ const signedTxn = utils_1.default.deserializeTransaction(testData.SPONSORED_TRANSACTION);
81
+ should_1.default.equal(signedTxn.origin.toString().toLowerCase(), '0x7ca00e3bc8a836026c2917c6c7c6d049e52099dd');
82
+ should_1.default.equal(signedTxn.gasPayer.toString().toLowerCase(), '0xdc9fef0b84a0ccf3f1bd4b84e41743e3e051a083');
83
+ });
84
+ it('should succeed to correctly deserialize unsigned serialized transaction', function () {
85
+ const signedTxn = utils_1.default.deserializeTransaction(testData.UNSIGNED_TRANSACTION);
86
+ should_1.default.equal(signedTxn.isSigned, false);
87
+ should_1.default.equal(signedTxn.body.gas, 21000);
88
+ should_1.default.equal(signedTxn.body.nonce, 400496);
89
+ should_1.default.equal(signedTxn.body.expiration, 64);
90
+ should_1.default.equal(signedTxn.body.blockRef, '0x01536ce9e9fb0638');
91
+ });
92
+ it('should fail to deserialize an invalid serialized transaction', function () {
93
+ should_1.default.throws(() => utils_1.default.deserializeTransaction(testData.INVALID_TRANSACTION));
94
+ });
95
+ });
96
+ it('should get correct transaction type from clause', function () {
97
+ should_1.default.equal(sdk_core_1.TransactionType.Send, utils_1.default.getTransactionTypeFromClause(testData.TRANSFER_CLAUSE));
98
+ });
99
+ it('is valid public key', function () {
100
+ // with 0x prefix
101
+ should_1.default.equal(false, utils_1.default.isValidPublicKey('0x9b4e96086d111500259f9b38680b0509a405c1904da18976455a20c691d3bb07'));
102
+ // without 0x prefix
103
+ should_1.default.equal(true, utils_1.default.isValidPublicKey('029831d82c36a58a69b31177b73d852e260a37769561450dab6ed234d5d965ef0b'));
104
+ });
105
+ });
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFFNUIsMkRBQTZDO0FBQzdDLGdFQUF3QztBQUN4QyxtREFBdUQ7QUFFdkQsUUFBUSxDQUFDLHNCQUFzQixFQUFFO0lBQy9CLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtRQUN6QixFQUFFLENBQUMsNENBQTRDLEVBQUU7WUFDL0MsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN4RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywyQ0FBMkMsRUFBRTtZQUM5QyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDMUQsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUN6RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JELENBQUM7WUFDRCx3RUFBd0U7WUFDeEUsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzNELGtFQUFrRTtZQUNsRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFD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SyxDQUFDLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQ25HLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHFCQUFxQixFQUFFO1FBQ3hCLGlCQUFpQjtRQUNqQixnQkFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsZUFBSyxDQUFDLGdCQUFnQixDQUFDLG9FQUFvRSxDQUFDLENBQUMsQ0FBQztRQUNsSCxvQkFBb0I7UUFDcEIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDLENBQUM7SUFDbkgsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIGFzIFZldFRyYW5zYWN0aW9uIH0gZnJvbSAnQHZlY2hhaW4vc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL3ZldCc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vLi4vc3JjL2xpYi91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmRlc2NyaWJlKCdWZWNoYWluIHV0aWwgbGlicmFyeScsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ2lzVmFsaWRBZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2YWxpZGF0ZSByYXcgdHJhbnNhY3RvaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2YgdGVzdERhdGEuYWRkcmVzc2VzLnZhbGlkQWRkcmVzc2VzKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgaW52YWxpZCBhZGRyZXNzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2YgdGVzdERhdGEuYWRkcmVzc2VzLmludmFsaWRBZGRyZXNzZXMpIHtcbiAgICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSk7XG4gICAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUZXN0aW5nIGZvciBtaXNzaW5nIHBhcmFtLCBzaG91bGQgbm90IHRocm93IGFuIGVycm9yXG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IHV0aWxzLmlzVmFsaWRBZGRyZXNzKHVuZGVmaW5lZCkpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUZXN0aW5nIGZvciBtaXNzaW5nIHBhcmFtLCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3ModW5kZWZpbmVkKSwgZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNWYWxpZEJsb2NrSWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZhbGlkYXRlIHZhbGlkIGJsb2NrIElEcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAoY29uc3QgYmxvY2tJZCBvZiB0ZXN0RGF0YS5ibG9ja0lkcy52YWxpZEJsb2NrSWRzKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQmxvY2tJZChibG9ja0lkKSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgaW52YWxpZCBibG9jayBJRHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IGJsb2NrSWQgb2YgdGVzdERhdGEuYmxvY2tJZHMuaW52YWxpZEJsb2NrSWRzKSB7XG4gICAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMuaXNWYWxpZEJsb2NrSWQoYmxvY2tJZCkpO1xuICAgICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEJsb2NrSWQoYmxvY2tJZCksIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVGVzdGluZyBmb3IgbWlzc2luZyBwYXJhbSwgc2hvdWxkIG5vdCB0aHJvdyBhbiBlcnJvclxuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB1dGlscy5pc1ZhbGlkQmxvY2tJZCh1bmRlZmluZWQpKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVGVzdGluZyBmb3IgbWlzc2luZyBwYXJhbSwgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRCbG9ja0lkKHVuZGVmaW5lZCksIGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWREZXNlcmlhbGl6ZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gY29ycmVjdGx5IGRlc2VyaWFsaXplIHNwb25zb3JlZCBzaWduZWQgc2VyaWFsaXplZCB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNpZ25lZFR4bjogVmV0VHJhbnNhY3Rpb24gPSB1dGlscy5kZXNlcmlhbGl6ZVRyYW5zYWN0aW9uKHRlc3REYXRhLlNQT05TT1JFRF9UUkFOU0FDVElPTik7XG4gICAgICBzaG91bGQuZXF1YWwoc2lnbmVkVHhuLm9yaWdpbi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksICcweDdjYTAwZTNiYzhhODM2MDI2YzI5MTdjNmM3YzZkMDQ5ZTUyMDk5ZGQnKTtcbiAgICAgIHNob3VsZC5lcXVhbChzaWduZWRUeG4uZ2FzUGF5ZXIudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLCAnMHhkYzlmZWYwYjg0YTBjY2YzZjFiZDRiODRlNDE3NDNlM2UwNTFhMDgzJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIGNvcnJlY3RseSBkZXNlcmlhbGl6ZSB1bnNpZ25lZCBzZXJpYWxpemVkIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmVkVHhuOiBWZXRUcmFuc2FjdGlvbiA9IHV0aWxzLmRlc2VyaWFsaXplVHJhbnNhY3Rpb24odGVzdERhdGEuVU5TSUdORURfVFJBTlNBQ1RJT04pO1xuICAgICAgc2hvdWxkLmVxdWFsKHNpZ25lZFR4bi5pc1NpZ25lZCwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHNpZ25lZFR4bi5ib2R5LmdhcywgMjEwMDApO1xuICAgICAgc2hvdWxkLmVxdWFsKHNpZ25lZFR4bi5ib2R5Lm5vbmNlLCA0MDA0OTYpO1xuICAgICAgc2hvdWxkLmVxdWFsKHNpZ25lZFR4bi5ib2R5LmV4cGlyYXRpb24sIDY0KTtcbiAgICAgIHNob3VsZC5lcXVhbChzaWduZWRUeG4uYm9keS5ibG9ja1JlZiwgJzB4MDE1MzZjZTllOWZiMDYzOCcpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZmFpbCB0byBkZXNlcmlhbGl6ZSBhbiBpbnZhbGlkIHNlcmlhbGl6ZWQgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQudGhyb3dzKCgpID0+IHV0aWxzLmRlc2VyaWFsaXplVHJhbnNhY3Rpb24odGVzdERhdGEuSU5WQUxJRF9UUkFOU0FDVElPTikpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGdldCBjb3JyZWN0IHRyYW5zYWN0aW9uIHR5cGUgZnJvbSBjbGF1c2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TZW5kLCB1dGlscy5nZXRUcmFuc2FjdGlvblR5cGVGcm9tQ2xhdXNlKHRlc3REYXRhLlRSQU5TRkVSX0NMQVVTRSkpO1xuICB9KTtcblxuICBpdCgnaXMgdmFsaWQgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyB3aXRoIDB4IHByZWZpeFxuICAgIHNob3VsZC5lcXVhbChmYWxzZSwgdXRpbHMuaXNWYWxpZFB1YmxpY0tleSgnMHg5YjRlOTYwODZkMTExNTAwMjU5ZjliMzg2ODBiMDUwOWE0MDVjMTkwNGRhMTg5NzY0NTVhMjBjNjkxZDNiYjA3JykpO1xuICAgIC8vIHdpdGhvdXQgMHggcHJlZml4XG4gICAgc2hvdWxkLmVxdWFsKHRydWUsIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoJzAyOTgzMWQ4MmMzNmE1OGE2OWIzMTE3N2I3M2Q4NTJlMjYwYTM3NzY5NTYxNDUwZGFiNmVkMjM0ZDVkOTY1ZWYwYicpKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=vet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vet.d.ts","sourceRoot":"","sources":["../../../test/unit/vet.ts"],"names":[],"mappings":""}