@bitgo-beta/sdk-coin-eth 4.4.1-beta.202 → 4.4.1-beta.2021

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 (122) hide show
  1. package/dist/src/erc20Token.d.ts +1 -1
  2. package/dist/src/erc20Token.d.ts.map +1 -1
  3. package/dist/src/erc20Token.js +49 -28
  4. package/dist/src/erc721Token.d.ts +60 -0
  5. package/dist/src/erc721Token.d.ts.map +1 -0
  6. package/dist/src/erc721Token.js +334 -0
  7. package/dist/src/erc7984Token.d.ts +187 -0
  8. package/dist/src/erc7984Token.d.ts.map +1 -0
  9. package/dist/src/erc7984Token.js +946 -0
  10. package/dist/src/eth.d.ts +10 -8
  11. package/dist/src/eth.d.ts.map +1 -1
  12. package/dist/src/eth.js +54 -39
  13. package/dist/src/index.d.ts +3 -0
  14. package/dist/src/index.d.ts.map +1 -1
  15. package/dist/src/index.js +9 -2
  16. package/dist/src/lib/index.d.ts +1 -0
  17. package/dist/src/lib/index.d.ts.map +1 -1
  18. package/dist/src/lib/index.js +7 -2
  19. package/dist/src/lib/messages/index.d.ts +3 -0
  20. package/dist/src/lib/messages/index.d.ts.map +1 -0
  21. package/dist/src/lib/messages/index.js +6 -0
  22. package/dist/src/lib/transactionBuilder.d.ts +10 -5
  23. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  24. package/dist/src/lib/transactionBuilder.js +17 -7
  25. package/dist/src/lib/transferBuilders/index.d.ts +2 -2
  26. package/dist/src/lib/transferBuilders/index.d.ts.map +1 -1
  27. package/dist/src/lib/transferBuilders/index.js +3 -2
  28. package/dist/src/register.d.ts +2 -0
  29. package/dist/src/register.d.ts.map +1 -1
  30. package/dist/src/register.js +39 -2
  31. package/dist/src/sepeth.d.ts +8 -0
  32. package/dist/src/sepeth.d.ts.map +1 -0
  33. package/dist/src/sepeth.js +14 -0
  34. package/dist/test/fixtures/eth.d.ts +39 -0
  35. package/dist/test/fixtures/eth.d.ts.map +1 -0
  36. package/dist/test/fixtures/eth.js +262 -0
  37. package/dist/test/resources/erc1155Abi.d.ts +40 -0
  38. package/dist/test/resources/erc1155Abi.d.ts.map +1 -0
  39. package/dist/test/resources/erc1155Abi.js +329 -0
  40. package/dist/test/resources/erc721Abi.d.ts +12 -0
  41. package/dist/test/resources/erc721Abi.d.ts.map +1 -0
  42. package/dist/test/resources/erc721Abi.js +34 -0
  43. package/dist/test/resources/eth.d.ts +51 -0
  44. package/dist/test/resources/eth.d.ts.map +1 -0
  45. package/dist/test/resources/eth.js +72 -0
  46. package/dist/test/resources/nftEncodings.d.ts +4 -0
  47. package/dist/test/resources/nftEncodings.d.ts.map +1 -0
  48. package/dist/test/resources/nftEncodings.js +7 -0
  49. package/dist/test/resources/walletSimpleAbi.d.ts +12 -0
  50. package/dist/test/resources/walletSimpleAbi.d.ts.map +1 -0
  51. package/dist/test/resources/walletSimpleAbi.js +44 -0
  52. package/dist/test/unit/erc7984Token.d.ts +2 -0
  53. package/dist/test/unit/erc7984Token.d.ts.map +1 -0
  54. package/dist/test/unit/erc7984Token.js +1589 -0
  55. package/dist/test/unit/eth.d.ts +2 -0
  56. package/dist/test/unit/eth.d.ts.map +1 -0
  57. package/dist/test/unit/eth.js +2701 -0
  58. package/dist/test/unit/ethWallet.d.ts +2 -0
  59. package/dist/test/unit/ethWallet.d.ts.map +1 -0
  60. package/dist/test/unit/ethWallet.js +552 -0
  61. package/dist/test/unit/fixtures/ethMultiSigBackupKey.d.ts +4 -0
  62. package/dist/test/unit/fixtures/ethMultiSigBackupKey.d.ts.map +1 -0
  63. package/dist/test/unit/fixtures/ethMultiSigBackupKey.js +10 -0
  64. package/dist/test/unit/fixtures/ethTssBackupKey.d.ts +5 -0
  65. package/dist/test/unit/fixtures/ethTssBackupKey.d.ts.map +1 -0
  66. package/dist/test/unit/fixtures/ethTssBackupKey.js +25 -0
  67. package/dist/test/unit/getBuilder.d.ts +3 -0
  68. package/dist/test/unit/getBuilder.d.ts.map +1 -0
  69. package/dist/test/unit/getBuilder.js +10 -0
  70. package/dist/test/unit/keyPair.d.ts +2 -0
  71. package/dist/test/unit/keyPair.d.ts.map +1 -0
  72. package/dist/test/unit/keyPair.js +175 -0
  73. package/dist/test/unit/register.d.ts +2 -0
  74. package/dist/test/unit/register.d.ts.map +1 -0
  75. package/dist/test/unit/register.js +75 -0
  76. package/dist/test/unit/transaction.d.ts +2 -0
  77. package/dist/test/unit/transaction.d.ts.map +1 -0
  78. package/dist/test/unit/transaction.js +117 -0
  79. package/dist/test/unit/transactionBuilder/addressInitialization.d.ts +2 -0
  80. package/dist/test/unit/transactionBuilder/addressInitialization.d.ts.map +1 -0
  81. package/dist/test/unit/transactionBuilder/addressInitialization.js +101 -0
  82. package/dist/test/unit/transactionBuilder/contractCall.d.ts +2 -0
  83. package/dist/test/unit/transactionBuilder/contractCall.d.ts.map +1 -0
  84. package/dist/test/unit/transactionBuilder/contractCall.js +101 -0
  85. package/dist/test/unit/transactionBuilder/decryptionDelegation.d.ts +2 -0
  86. package/dist/test/unit/transactionBuilder/decryptionDelegation.d.ts.map +1 -0
  87. package/dist/test/unit/transactionBuilder/decryptionDelegation.js +59 -0
  88. package/dist/test/unit/transactionBuilder/decryptionDelegationTxBuilder.d.ts +2 -0
  89. package/dist/test/unit/transactionBuilder/decryptionDelegationTxBuilder.d.ts.map +1 -0
  90. package/dist/test/unit/transactionBuilder/decryptionDelegationTxBuilder.js +136 -0
  91. package/dist/test/unit/transactionBuilder/flushCoins.d.ts +2 -0
  92. package/dist/test/unit/transactionBuilder/flushCoins.d.ts.map +1 -0
  93. package/dist/test/unit/transactionBuilder/flushCoins.js +133 -0
  94. package/dist/test/unit/transactionBuilder/flushTokens.d.ts +2 -0
  95. package/dist/test/unit/transactionBuilder/flushTokens.d.ts.map +1 -0
  96. package/dist/test/unit/transactionBuilder/flushTokens.js +298 -0
  97. package/dist/test/unit/transactionBuilder/send.d.ts +2 -0
  98. package/dist/test/unit/transactionBuilder/send.d.ts.map +1 -0
  99. package/dist/test/unit/transactionBuilder/send.js +331 -0
  100. package/dist/test/unit/transactionBuilder/sendERC7984Token.d.ts +2 -0
  101. package/dist/test/unit/transactionBuilder/sendERC7984Token.d.ts.map +1 -0
  102. package/dist/test/unit/transactionBuilder/sendERC7984Token.js +361 -0
  103. package/dist/test/unit/transactionBuilder/sendNFT.d.ts +2 -0
  104. package/dist/test/unit/transactionBuilder/sendNFT.d.ts.map +1 -0
  105. package/dist/test/unit/transactionBuilder/sendNFT.js +295 -0
  106. package/dist/test/unit/transactionBuilder/singleSigSend.d.ts +2 -0
  107. package/dist/test/unit/transactionBuilder/singleSigSend.d.ts.map +1 -0
  108. package/dist/test/unit/transactionBuilder/singleSigSend.js +196 -0
  109. package/dist/test/unit/transactionBuilder/walletInitialization.d.ts +2 -0
  110. package/dist/test/unit/transactionBuilder/walletInitialization.d.ts.map +1 -0
  111. package/dist/test/unit/transactionBuilder/walletInitialization.js +436 -0
  112. package/dist/test/unit/transferBuilder.d.ts +2 -0
  113. package/dist/test/unit/transferBuilder.d.ts.map +1 -0
  114. package/dist/test/unit/transferBuilder.js +124 -0
  115. package/dist/test/unit/utils.d.ts +2 -0
  116. package/dist/test/unit/utils.d.ts.map +1 -0
  117. package/dist/test/unit/utils.js +74 -0
  118. package/dist/tsconfig.tsbuildinfo +1 -0
  119. package/package.json +17 -13
  120. package/.eslintignore +0 -5
  121. package/.mocharc.yml +0 -8
  122. package/CHANGELOG.md +0 -771
@@ -0,0 +1,295 @@
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 sdk_core_1 = require("@bitgo-beta/sdk-core");
40
+ const statics_1 = require("@bitgo-beta/statics");
41
+ const src_1 = require("../../../src");
42
+ const testData = __importStar(require("../../resources/eth"));
43
+ const ethers_1 = require("ethers");
44
+ const should_1 = __importDefault(require("should"));
45
+ const erc1155Abi_1 = require("../../resources/erc1155Abi");
46
+ const walletSimpleAbi_1 = require("../../resources/walletSimpleAbi");
47
+ const erc721Abi_1 = require("../../resources/erc721Abi");
48
+ const nftEncodings_1 = require("../../resources/nftEncodings");
49
+ const getBuilder_1 = require("../getBuilder");
50
+ describe('Eth transaction builder sendNFT', () => {
51
+ // dummy addresses
52
+ const owner = '0x19645032c7f1533395d44a629462e751084d3e4d';
53
+ const recipient = '0x19645032c7f1533395d44a629462e751084d3e4c';
54
+ const contractAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
55
+ // ens erc721
56
+ const erc721ContractAddress = '0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85';
57
+ // opensea erc1155
58
+ const erc1155ContractAddress = '0x495f947276749ce646f68ac8c248420045cb7b5e';
59
+ const coin = statics_1.coins.get('hteth');
60
+ let key;
61
+ beforeEach(() => {
62
+ key = testData.KEYPAIR_PRV.getKeys().prv;
63
+ });
64
+ it('should sign ERC721 properly', async () => {
65
+ const txBuilder = (0, getBuilder_1.getBuilder)('hteth');
66
+ txBuilder.fee({
67
+ fee: '1000000000',
68
+ gasLimit: '12100000',
69
+ });
70
+ txBuilder.counter(2);
71
+ txBuilder.contract(contractAddress);
72
+ txBuilder.type(sdk_core_1.TransactionType.SendERC721);
73
+ // Dummy addresses
74
+ const expireTime = 1590066728;
75
+ const sequenceId = 5;
76
+ const tokenId = '1';
77
+ const erc721Transfer = txBuilder.transfer();
78
+ erc721Transfer
79
+ .from(owner)
80
+ .to(recipient)
81
+ .expirationTime(expireTime)
82
+ .tokenContractAddress(erc721ContractAddress)
83
+ .contractSequenceId(sequenceId)
84
+ .tokenId(tokenId)
85
+ .key(key);
86
+ txBuilder.sign({ key: testData.PRIVATE_KEY });
87
+ await txBuilder.build();
88
+ });
89
+ it('should sign and build ERC721 transfer with Builder pattern', async () => {
90
+ const txBuilder = (0, getBuilder_1.getBuilder)('hteth');
91
+ txBuilder.fee({
92
+ fee: '1000000000',
93
+ gasLimit: '12100000',
94
+ });
95
+ txBuilder.counter(2);
96
+ txBuilder.contract(contractAddress);
97
+ txBuilder.type(sdk_core_1.TransactionType.SendERC721);
98
+ // Dummy addresses
99
+ const expireTime = 1590066728;
100
+ const sequenceId = 5;
101
+ const tokenId = '1';
102
+ const erc721Transfer = txBuilder.transfer();
103
+ erc721Transfer
104
+ .from(owner)
105
+ .to(recipient)
106
+ .expirationTime(expireTime)
107
+ .tokenContractAddress(erc721ContractAddress)
108
+ .contractSequenceId(sequenceId)
109
+ .tokenId(tokenId)
110
+ .key(key);
111
+ const sendMultisigCallData = erc721Transfer.signAndBuild(`${coin.chainId}`);
112
+ const decodedSendMultisigCallData = decodeTransaction(JSON.stringify(walletSimpleAbi_1.walletSimpleABI), sendMultisigCallData);
113
+ const safeTransferFromCallData = decodedSendMultisigCallData.args[2];
114
+ const decodedSafeTransferFromCallData = decodeTransaction(JSON.stringify(erc721Abi_1.erc721ABI), safeTransferFromCallData);
115
+ should_1.default.equal(decodedSafeTransferFromCallData.args[0].toLowerCase(), owner.toLowerCase());
116
+ should_1.default.equal(decodedSafeTransferFromCallData.args[1].toLowerCase(), recipient.toLowerCase());
117
+ should_1.default.equal(decodedSafeTransferFromCallData.args[2], tokenId);
118
+ });
119
+ it('should sign and build ERC721 transfer with Decoder pattern', async () => {
120
+ const txBuilder = (0, getBuilder_1.getBuilder)('hteth');
121
+ txBuilder.fee({
122
+ fee: '1000000000',
123
+ gasLimit: '12100000',
124
+ });
125
+ txBuilder.counter(2);
126
+ txBuilder.contract(contractAddress);
127
+ txBuilder.type(sdk_core_1.TransactionType.SendERC721);
128
+ const tokenId = '1';
129
+ const erc721Transfer = txBuilder.transfer(nftEncodings_1.erc721Encoding);
130
+ const sendMultisigCallData = erc721Transfer.signAndBuild(`${coin.chainId}`);
131
+ const decodedSendMultisigCallData = decodeTransaction(JSON.stringify(walletSimpleAbi_1.walletSimpleABI), sendMultisigCallData);
132
+ const safeTransferFromCallData = decodedSendMultisigCallData.args[2];
133
+ const decodedSafeTransferFromCallData = decodeTransaction(JSON.stringify(erc721Abi_1.erc721ABI), safeTransferFromCallData);
134
+ should_1.default.equal(decodedSafeTransferFromCallData.args[0].toLowerCase(), owner.toLowerCase());
135
+ should_1.default.equal(decodedSafeTransferFromCallData.args[1].toLowerCase(), recipient.toLowerCase());
136
+ should_1.default.equal(decodedSafeTransferFromCallData.args[2], tokenId);
137
+ });
138
+ it('should sign and build ERC1155 single transfer with Builder pattern', async () => {
139
+ const txBuilder = (0, getBuilder_1.getBuilder)('hteth');
140
+ txBuilder.fee({
141
+ fee: '1000000000',
142
+ gasLimit: '12100000',
143
+ });
144
+ txBuilder.counter(2);
145
+ txBuilder.contract(contractAddress);
146
+ txBuilder.type(sdk_core_1.TransactionType.SendERC1155);
147
+ const expireTime = 1590066728;
148
+ const sequenceId = 5;
149
+ const tokenId = 1;
150
+ const value = 10;
151
+ const erc1155Transfer = txBuilder.transfer();
152
+ erc1155Transfer
153
+ .from(owner)
154
+ .to(recipient)
155
+ .expirationTime(expireTime)
156
+ .tokenContractAddress(erc1155ContractAddress)
157
+ .contractSequenceId(sequenceId)
158
+ .entry(tokenId, value)
159
+ .key(key);
160
+ const sendMultisigCallData = erc1155Transfer.signAndBuild(`${coin.chainId}`);
161
+ const decodedSendMultisigCallData = decodeTransaction(JSON.stringify(walletSimpleAbi_1.walletSimpleABI), sendMultisigCallData);
162
+ const safeTransferFromCallData = decodedSendMultisigCallData.args[2];
163
+ const decodedSafeTransferFromCallData = decodeTransaction(JSON.stringify(erc1155Abi_1.ERC1155ABI), safeTransferFromCallData);
164
+ should_1.default.equal(decodedSafeTransferFromCallData.args[0].toLowerCase(), owner.toLowerCase());
165
+ should_1.default.equal(decodedSafeTransferFromCallData.args[1].toLowerCase(), recipient.toLowerCase());
166
+ should_1.default.equal(decodedSafeTransferFromCallData.args[2], tokenId);
167
+ should_1.default.equal(decodedSafeTransferFromCallData.args[3], value);
168
+ txBuilder.sign({ key: testData.PRIVATE_KEY });
169
+ await txBuilder.build();
170
+ });
171
+ it('should sign and build ERC1155 single transfer with Decoder pattern', async () => {
172
+ const txBuilder = (0, getBuilder_1.getBuilder)('hteth');
173
+ txBuilder.fee({
174
+ fee: '1000000000',
175
+ gasLimit: '12100000',
176
+ });
177
+ txBuilder.counter(2);
178
+ txBuilder.contract(contractAddress);
179
+ txBuilder.type(sdk_core_1.TransactionType.SendERC1155);
180
+ const tokenId = '1';
181
+ const value = '10';
182
+ const erc1155Transfer = txBuilder.transfer(nftEncodings_1.erc1155SafeTransferEncoding);
183
+ const sendMultisigCallData = erc1155Transfer.signAndBuild(`${coin.chainId}`);
184
+ const decodedSendMultisigCallData = decodeTransaction(JSON.stringify(walletSimpleAbi_1.walletSimpleABI), sendMultisigCallData);
185
+ const safeTransferFromCallData = decodedSendMultisigCallData.args[2];
186
+ const decodedSafeTransferFromCallData = decodeTransaction(JSON.stringify(erc1155Abi_1.ERC1155ABI), safeTransferFromCallData);
187
+ should_1.default.equal(decodedSafeTransferFromCallData.args[0].toLowerCase(), owner.toLowerCase());
188
+ should_1.default.equal(decodedSafeTransferFromCallData.args[1].toLowerCase(), recipient.toLowerCase());
189
+ should_1.default.equal(decodedSafeTransferFromCallData.args[2], tokenId);
190
+ should_1.default.equal(decodedSafeTransferFromCallData.args[3], value);
191
+ });
192
+ it('should sign and build ERC1155 batch transfer with Builder pattern', async () => {
193
+ const txBuilder = (0, getBuilder_1.getBuilder)('hteth');
194
+ txBuilder.fee({
195
+ fee: '1000000000',
196
+ gasLimit: '12100000',
197
+ });
198
+ txBuilder.counter(2);
199
+ txBuilder.contract(contractAddress);
200
+ txBuilder.type(sdk_core_1.TransactionType.SendERC1155);
201
+ const expireTime = 1590066728;
202
+ const sequenceId = 5;
203
+ const tokenIds = [1, 2, 3];
204
+ const values = [10, 10, 10];
205
+ const erc1155Transfer = txBuilder.transfer();
206
+ erc1155Transfer
207
+ .from(owner)
208
+ .to(recipient)
209
+ .expirationTime(expireTime)
210
+ .tokenContractAddress(erc1155ContractAddress)
211
+ .contractSequenceId(sequenceId)
212
+ .entry(tokenIds[0], values[0])
213
+ .entry(tokenIds[1], values[1])
214
+ .entry(tokenIds[2], values[2])
215
+ .key(key);
216
+ const sendMultisigCallData = erc1155Transfer.signAndBuild(`${coin.chainId}`);
217
+ const decodedSendMultisigCallData = decodeTransaction(JSON.stringify(walletSimpleAbi_1.walletSimpleABI), sendMultisigCallData);
218
+ const safeTransferFromCallData = decodedSendMultisigCallData.args[2];
219
+ const decodedSafeTransferFromCallData = decodeTransaction(JSON.stringify(erc1155Abi_1.ERC1155ABI), safeTransferFromCallData);
220
+ should_1.default.equal(decodedSafeTransferFromCallData.args[0].toLowerCase(), owner.toLowerCase());
221
+ should_1.default.equal(decodedSafeTransferFromCallData.args[1].toLowerCase(), recipient.toLowerCase());
222
+ should_1.default.deepEqual(decodedSafeTransferFromCallData.args[2].map((x) => x.toNumber()), tokenIds);
223
+ should_1.default.deepEqual(decodedSafeTransferFromCallData.args[3].map((x) => x.toNumber()), values);
224
+ });
225
+ it('should sign and build ERC1155 batch transfer with Decoder pattern', async () => {
226
+ const txBuilder = (0, getBuilder_1.getBuilder)('hteth');
227
+ txBuilder.fee({
228
+ fee: '1000000000',
229
+ gasLimit: '12100000',
230
+ });
231
+ txBuilder.counter(2);
232
+ txBuilder.contract(contractAddress);
233
+ txBuilder.type(sdk_core_1.TransactionType.SendERC1155);
234
+ const tokenIds = [1, 2, 3];
235
+ const values = [10, 10, 10];
236
+ const erc1155Transfer = txBuilder.transfer(nftEncodings_1.erc1155BatchTransferEncoding);
237
+ const sendMultisigCallData = erc1155Transfer.signAndBuild(`${coin.chainId}`);
238
+ const decodedSendMultisigCallData = decodeTransaction(JSON.stringify(walletSimpleAbi_1.walletSimpleABI), sendMultisigCallData);
239
+ const safeTransferFromCallData = decodedSendMultisigCallData.args[2];
240
+ const decodedSafeTransferFromCallData = decodeTransaction(JSON.stringify(erc1155Abi_1.ERC1155ABI), safeTransferFromCallData);
241
+ should_1.default.equal(decodedSafeTransferFromCallData.args[0].toLowerCase(), owner.toLowerCase());
242
+ should_1.default.equal(decodedSafeTransferFromCallData.args[1].toLowerCase(), recipient.toLowerCase());
243
+ should_1.default.deepEqual(decodedSafeTransferFromCallData.args[2].map((x) => x.toNumber()), tokenIds);
244
+ should_1.default.deepEqual(decodedSafeTransferFromCallData.args[3].map((x) => x.toNumber()), values);
245
+ });
246
+ });
247
+ // ABI for transferFrom(address,address,uint256) used by HTS native NFTs on Hedera EVM
248
+ const transferFromABI = [
249
+ {
250
+ inputs: [
251
+ { internalType: 'address', name: 'from', type: 'address' },
252
+ { internalType: 'address', name: 'to', type: 'address' },
253
+ { internalType: 'uint256', name: 'tokenId', type: 'uint256' },
254
+ ],
255
+ name: 'transferFrom',
256
+ outputs: [],
257
+ stateMutability: 'nonpayable',
258
+ type: 'function',
259
+ },
260
+ ];
261
+ describe('ERC721 HTS native NFT transferFrom', () => {
262
+ const owner = '0x19645032c7f1533395d44a629462e751084d3e4d';
263
+ const recipient = '0x19645032c7f1533395d44a629462e751084d3e4c';
264
+ // HTS native NFT address (long-zero format)
265
+ const htsNftContractAddress = '0x00000000000000000000000000000000007ac203';
266
+ const tokenId = '12';
267
+ it('should build ERC721 transferFrom calldata with correct selector and params', () => {
268
+ const builder = new src_1.ERC721TransferBuilder();
269
+ builder.tokenContractAddress(htsNftContractAddress).to(recipient).from(owner).tokenId(tokenId);
270
+ const calldata = builder.buildTransferFrom();
271
+ // Should use transferFrom selector 0x23b872dd
272
+ calldata.should.startWith('0x23b872dd');
273
+ // Decode and verify parameters
274
+ const decoded = decodeTransaction(JSON.stringify(transferFromABI), calldata);
275
+ should_1.default.equal(decoded.args[0].toLowerCase(), owner.toLowerCase());
276
+ should_1.default.equal(decoded.args[1].toLowerCase(), recipient.toLowerCase());
277
+ should_1.default.equal(decoded.args[2].toString(), tokenId);
278
+ });
279
+ it('should not include bytes data parameter in transferFrom calldata', () => {
280
+ const builder = new src_1.ERC721TransferBuilder();
281
+ builder.tokenContractAddress(htsNftContractAddress).to(recipient).from(owner).tokenId(tokenId);
282
+ const transferFromData = builder.buildTransferFrom();
283
+ const safeTransferData = builder.build();
284
+ // transferFrom has 3 params (from, to, tokenId), safeTransferFrom has 4 (+ bytes data)
285
+ // So transferFrom encoding should be shorter
286
+ transferFromData.length.should.be.lessThan(safeTransferData.length);
287
+ // Verify safeTransferFrom uses 0xb88d4fde
288
+ safeTransferData.should.startWith('0xb88d4fde');
289
+ });
290
+ });
291
+ function decodeTransaction(abi, calldata) {
292
+ const contractInterface = new ethers_1.ethers.utils.Interface(abi);
293
+ return contractInterface.parseTransaction({ data: calldata });
294
+ }
295
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZE5GVC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvc2VuZE5GVC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQUF1RDtBQUN2RCxpREFBK0U7QUFDL0Usc0NBQWlHO0FBQ2pHLDhEQUFnRDtBQUNoRCxtQ0FBZ0M7QUFDaEMsb0RBQTRCO0FBQzVCLDJEQUF3RDtBQUN4RCxxRUFBa0U7QUFDbEUseURBQXNEO0FBQ3RELCtEQUlzQztBQUN0Qyw4Q0FBMkM7QUFFM0MsUUFBUSxDQUFDLGlDQUFpQyxFQUFFLEdBQUcsRUFBRTtJQUMvQyxrQkFBa0I7SUFDbEIsTUFBTSxLQUFLLEdBQUcsNENBQTRDLENBQUM7SUFDM0QsTUFBTSxTQUFTLEdBQUcsNENBQTRDLENBQUM7SUFDL0QsTUFBTSxlQUFlLEdBQUcsNENBQTRDLENBQUM7SUFFckUsYUFBYTtJQUNiLE1BQU0scUJBQXFCLEdBQUcsNENBQTRDLENBQUM7SUFDM0Usa0JBQWtCO0lBQ2xCLE1BQU0sc0JBQXNCLEdBQUcsNENBQTRDLENBQUM7SUFDNUUsTUFBTSxJQUFJLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQThCLENBQUM7SUFDN0QsSUFBSSxHQUFHLENBQUM7SUFFUixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsR0FBRyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBYSxDQUFDO0lBQ3JELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDZCQUE2QixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzNDLE1BQU0sU0FBUyxHQUFHLElBQUEsdUJBQVUsRUFBQyxPQUFPLENBQXVCLENBQUM7UUFDNUQsU0FBUyxDQUFDLEdBQUcsQ0FBQztZQUNaLEdBQUcsRUFBRSxZQUFZO1lBQ2pCLFFBQVEsRUFB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O1FBQ3JFLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsa0VBQWtFLEVBQUUsR0FBRyxFQUFFO1FBQzFFLE1BQU0sT0FBTyxHQUFHLElBQUksMkJBQXFCLEVBQUUsQ0FBQztRQUM1QyxPQUFPLENBQUMsb0JBQW9CLENBQUMscUJBQXFCLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUvRixNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3JELE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXpDLHVGQUF1RjtRQUN2Riw2Q0FBNkM7UUFDN0MsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXBFLDBDQUEwQztRQUMxQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxTQUFTLGlCQUFpQixDQUFDLEdBQVcsRUFBRSxRQUFnQjtJQUN0RCxNQUFNLGlCQUFpQixHQUFHLElBQUksZUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUQsT0FBTyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ2hFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBjb2lucywgRXRoZXJldW1OZXR3b3JrIGFzIEV0aExpa2VOZXR3b3JrIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBFUkMxMTU1VHJhbnNmZXJCdWlsZGVyLCBFUkM3MjFUcmFuc2ZlckJ1aWxkZXIsIFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZXRoJztcbmltcG9ydCB7IGV0aGVycyB9IGZyb20gJ2V0aGVycyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBFUkMxMTU1QUJJIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2VyYzExNTVBYmknO1xuaW1wb3J0IHsgd2FsbGV0U2ltcGxlQUJJIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3dhbGxldFNpbXBsZUFiaSc7XG5pbXBvcnQgeyBlcmM3MjFBQkkgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZXJjNzIxQWJpJztcbmltcG9ydCB7XG4gIGVyYzExNTVCYXRjaFRyYW5zZmVyRW5jb2RpbmcsXG4gIGVyYzExNTVTYWZlVHJhbnNmZXJFbmNvZGluZyxcbiAgZXJjNzIxRW5jb2RpbmcsXG59IGZyb20gJy4uLy4uL3Jlc291cmNlcy9uZnRFbmNvZGluZ3MnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlciB9IGZyb20gJy4uL2dldEJ1aWxkZXInO1xuXG5kZXNjcmliZSgnRXRoIHRyYW5zYWN0aW9uIGJ1aWxkZXIgc2VuZE5GVCcsICgpID0+IHtcbiAgLy8gZHVtbXkgYWRkcmVzc2VzXG4gIGNvbnN0IG93bmVyID0gJzB4MTk2NDUwMzJjN2YxNTMzMzk1ZDQ0YTYyOTQ2MmU3NTEwODRkM2U0ZCc7XG4gIGNvbnN0IHJlY2lwaWVudCA9ICcweDE5NjQ1MDMyYzdmMTUzMzM5NWQ0NGE2Mjk0NjJlNzUxMDg0ZDNlNGMnO1xuICBjb25zdCBjb250cmFjdEFkZHJlc3MgPSAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJztcblxuICAvLyBlbnMgZXJjNzIxXG4gIGNvbnN0IGVyYzcyMUNvbnRyYWN0QWRkcmVzcyA9ICcweDU3ZjE4ODdhOGJmMTliMTRmYzBkZjZmZDliMmFjYzlhZjE0N2VhODUnO1xuICAvLyBvcGVuc2VhIGVyYzExNTVcbiAgY29uc3QgZXJjMTE1NUNvbnRyYWN0QWRkcmVzcyA9ICcweDQ5NWY5NDcyNzY3NDljZTY0NmY2OGFjOGMyNDg0MjAwNDVjYjdiNWUnO1xuICBjb25zdCBjb2luID0gY29pbnMuZ2V0KCdodGV0aCcpIGFzIHVua25vd24gYXMgRXRoTGlrZU5ldHdvcms7XG4gIGxldCBrZXk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAga2V5ID0gdGVzdERhdGEuS0VZUEFJUl9QUlYuZ2V0S2V5cygpLnBydiBhcyBzdHJpbmc7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc2lnbiBFUkM3MjEgcHJvcGVybHknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcignaHRldGgnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgdHhCdWlsZGVyLmZlZSh7XG4gICAgICBmZWU6ICcxMDAwMDAwMDAwJyxcbiAgICAgIGdhc0xpbWl0OiAnMTIxMDAwMDAnLFxuICAgIH0pO1xuICAgIHR4QnVpbGRlci5jb3VudGVyKDIpO1xuICAgIHR4QnVpbGRlci5jb250cmFjdChjb250cmFjdEFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5TZW5kRVJDNzIxKTtcblxuICAgIC8vIER1bW15IGFkZHJlc3Nlc1xuICAgIGNvbnN0IGV4cGlyZVRpbWUgPSAxNTkwMDY2NzI4O1xuICAgIGNvbnN0IHNlcXVlbmNlSWQgPSA1O1xuICAgIGNvbnN0IHRva2VuSWQgPSAnMSc7XG5cbiAgICBjb25zdCBlcmM3MjFUcmFuc2ZlciA9IHR4QnVpbGRlci50cmFuc2ZlcigpIGFzIEVSQzcyMVRyYW5zZmVyQnVpbGRlcjtcbiAgICBlcmM3MjFUcmFuc2ZlclxuICAgICAgLmZyb20ob3duZXIpXG4gICAgICAudG8ocmVjaXBpZW50KVxuICAgICAgLmV4cGlyYXRpb25UaW1lKGV4cGlyZVRpbWUpXG4gICAgICAudG9rZW5Db250cmFjdEFkZHJlc3MoZXJjNzIxQ29udHJhY3RBZGRyZXNzKVxuICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZChzZXF1ZW5jZUlkKVxuICAgICAgLnRva2VuSWQodG9rZW5JZClcbiAgICAgIC5rZXkoa2V5KTtcblxuICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5QUklWQVRFX0tFWSB9KTtcbiAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaWduIGFuZCBidWlsZCBFUkM3MjEgdHJhbnNmZXIgd2l0aCBCdWlsZGVyIHBhdHRlcm4nLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcignaHRldGgnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgdHhCdWlsZGVyLmZlZSh7XG4gICAgICBmZWU6ICcxMDAwMDAwMDAwJyxcbiAgICAgIGdhc0xpbWl0OiAnMTIxMDAwMDAnLFxuICAgIH0pO1xuICAgIHR4QnVpbGRlci5jb3VudGVyKDIpO1xuICAgIHR4QnVpbGRlci5jb250cmFjdChjb250cmFjdEFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5TZW5kRVJDNzIxKTtcblxuICAgIC8vIER1bW15IGFkZHJlc3Nlc1xuICAgIGNvbnN0IGV4cGlyZVRpbWUgPSAxNTkwMDY2NzI4O1xuICAgIGNvbnN0IHNlcXVlbmNlSWQgPSA1O1xuICAgIGNvbnN0IHRva2VuSWQgPSAnMSc7XG5cbiAgICBjb25zdCBlcmM3MjFUcmFuc2ZlciA9IHR4QnVpbGRlci50cmFuc2ZlcigpIGFzIEVSQzcyMVRyYW5zZmVyQnVpbGRlcjtcbiAgICBlcmM3MjFUcmFuc2ZlclxuICAgICAgLmZyb20ob3duZXIpXG4gICAgICAudG8ocmVjaXBpZW50KVxuICAgICAgLmV4cGlyYXRpb25UaW1lKGV4cGlyZVRpbWUpXG4gICAgICAudG9rZW5Db250cmFjdEFkZHJlc3MoZXJjNzIxQ29udHJhY3RBZGRyZXNzKVxuICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZChzZXF1ZW5jZUlkKVxuICAgICAgLnRva2VuSWQodG9rZW5JZClcbiAgICAgIC5rZXkoa2V5KTtcblxuICAgIGNvbnN0IHNlbmRNdWx0aXNpZ0NhbGxEYXRhID0gZXJjNzIxVHJhbnNmZXIuc2lnbkFuZEJ1aWxkKGAke2NvaW4uY2hhaW5JZH1gKTtcbiAgICBjb25zdCBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEgPSBkZWNvZGVUcmFuc2FjdGlvbihKU09OLnN0cmluZ2lmeSh3YWxsZXRTaW1wbGVBQkkpLCBzZW5kTXVsdGlzaWdDYWxsRGF0YSk7XG5cbiAgICBjb25zdCBzYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEgPSBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEuYXJnc1syXTtcbiAgICBjb25zdCBkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhID0gZGVjb2RlVHJhbnNhY3Rpb24oSlNPTi5zdHJpbmdpZnkoZXJjNzIxQUJJKSwgc2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhKTtcblxuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMF0udG9Mb3dlckNhc2UoKSwgb3duZXIudG9Mb3dlckNhc2UoKSk7XG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1sxXS50b0xvd2VyQ2FzZSgpLCByZWNpcGllbnQudG9Mb3dlckNhc2UoKSk7XG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1syXSwgdG9rZW5JZCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc2lnbiBhbmQgYnVpbGQgRVJDNzIxIHRyYW5zZmVyIHdpdGggRGVjb2RlciBwYXR0ZXJuJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ2h0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgZmVlOiAnMTAwMDAwMDAwMCcsXG4gICAgICBnYXNMaW1pdDogJzEyMTAwMDAwJyxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIuY291bnRlcigyKTtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3QoY29udHJhY3RBZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuU2VuZEVSQzcyMSk7XG5cbiAgICBjb25zdCB0b2tlbklkID0gJzEnO1xuXG4gICAgY29uc3QgZXJjNzIxVHJhbnNmZXIgPSB0eEJ1aWxkZXIudHJhbnNmZXIoZXJjNzIxRW5jb2RpbmcpIGFzIEVSQzcyMVRyYW5zZmVyQnVpbGRlcjtcbiAgICBjb25zdCBzZW5kTXVsdGlzaWdDYWxsRGF0YSA9IGVyYzcyMVRyYW5zZmVyLnNpZ25BbmRCdWlsZChgJHtjb2luLmNoYWluSWR9YCk7XG4gICAgY29uc3QgZGVjb2RlZFNlbmRNdWx0aXNpZ0NhbGxEYXRhID0gZGVjb2RlVHJhbnNhY3Rpb24oSlNPTi5zdHJpbmdpZnkod2FsbGV0U2ltcGxlQUJJKSwgc2VuZE11bHRpc2lnQ2FsbERhdGEpO1xuXG4gICAgY29uc3Qgc2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhID0gZGVjb2RlZFNlbmRNdWx0aXNpZ0NhbGxEYXRhLmFyZ3NbMl07XG4gICAgY29uc3QgZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSA9IGRlY29kZVRyYW5zYWN0aW9uKEpTT04uc3RyaW5naWZ5KGVyYzcyMUFCSSksIHNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSk7XG5cbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzBdLnRvTG93ZXJDYXNlKCksIG93bmVyLnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMV0udG9Mb3dlckNhc2UoKSwgcmVjaXBpZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMl0sIHRva2VuSWQpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHNpZ24gYW5kIGJ1aWxkIEVSQzExNTUgc2luZ2xlIHRyYW5zZmVyIHdpdGggQnVpbGRlciBwYXR0ZXJuJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ2h0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgZmVlOiAnMTAwMDAwMDAwMCcsXG4gICAgICBnYXNMaW1pdDogJzEyMTAwMDAwJyxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIuY291bnRlcigyKTtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3QoY29udHJhY3RBZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuU2VuZEVSQzExNTUpO1xuXG4gICAgY29uc3QgZXhwaXJlVGltZSA9IDE1OTAwNjY3Mjg7XG4gICAgY29uc3Qgc2VxdWVuY2VJZCA9IDU7XG4gICAgY29uc3QgdG9rZW5JZCA9IDE7XG4gICAgY29uc3QgdmFsdWUgPSAxMDtcblxuICAgIGNvbnN0IGVyYzExNTVUcmFuc2ZlciA9IHR4QnVpbGRlci50cmFuc2ZlcigpIGFzIEVSQzExNTVUcmFuc2ZlckJ1aWxkZXI7XG4gICAgZXJjMTE1NVRyYW5zZmVyXG4gICAgICAuZnJvbShvd25lcilcbiAgICAgIC50byhyZWNpcGllbnQpXG4gICAgICAuZXhwaXJhdGlvblRpbWUoZXhwaXJlVGltZSlcbiAgICAgIC50b2tlbkNvbnRyYWN0QWRkcmVzcyhlcmMxMTU1Q29udHJhY3RBZGRyZXNzKVxuICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZChzZXF1ZW5jZUlkKVxuICAgICAgLmVudHJ5KHRva2VuSWQsIHZhbHVlKVxuICAgICAgLmtleShrZXkpO1xuXG4gICAgY29uc3Qgc2VuZE11bHRpc2lnQ2FsbERhdGEgPSBlcmMxMTU1VHJhbnNmZXIuc2lnbkFuZEJ1aWxkKGAke2NvaW4uY2hhaW5JZH1gKTtcbiAgICBjb25zdCBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEgPSBkZWNvZGVUcmFuc2FjdGlvbihKU09OLnN0cmluZ2lmeSh3YWxsZXRTaW1wbGVBQkkpLCBzZW5kTXVsdGlzaWdDYWxsRGF0YSk7XG5cbiAgICBjb25zdCBzYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEgPSBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEuYXJnc1syXTtcbiAgICBjb25zdCBkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhID0gZGVjb2RlVHJhbnNhY3Rpb24oSlNPTi5zdHJpbmdpZnkoRVJDMTE1NUFCSSksIHNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSk7XG5cbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzBdLnRvTG93ZXJDYXNlKCksIG93bmVyLnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMV0udG9Mb3dlckNhc2UoKSwgcmVjaXBpZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMl0sIHRva2VuSWQpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbM10sIHZhbHVlKTtcblxuICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5QUklWQVRFX0tFWSB9KTtcbiAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaWduIGFuZCBidWlsZCBFUkMxMTU1IHNpbmdsZSB0cmFuc2ZlciB3aXRoIERlY29kZXIgcGF0dGVybicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzEwMDAwMDAwMDAnLFxuICAgICAgZ2FzTGltaXQ6ICcxMjEwMDAwMCcsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLmNvdW50ZXIoMik7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0KGNvbnRyYWN0QWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLlNlbmRFUkMxMTU1KTtcblxuICAgIGNvbnN0IHRva2VuSWQgPSAnMSc7XG4gICAgY29uc3QgdmFsdWUgPSAnMTAnO1xuXG4gICAgY29uc3QgZXJjMTE1NVRyYW5zZmVyID0gdHhCdWlsZGVyLnRyYW5zZmVyKGVyYzExNTVTYWZlVHJhbnNmZXJFbmNvZGluZykgYXMgRVJDMTE1NVRyYW5zZmVyQnVpbGRlcjtcbiAgICBjb25zdCBzZW5kTXVsdGlzaWdDYWxsRGF0YSA9IGVyYzExNTVUcmFuc2Zlci5zaWduQW5kQnVpbGQoYCR7Y29pbi5jaGFpbklkfWApO1xuXG4gICAgY29uc3QgZGVjb2RlZFNlbmRNdWx0aXNpZ0NhbGxEYXRhID0gZGVjb2RlVHJhbnNhY3Rpb24oSlNPTi5zdHJpbmdpZnkod2FsbGV0U2ltcGxlQUJJKSwgc2VuZE11bHRpc2lnQ2FsbERhdGEpO1xuXG4gICAgY29uc3Qgc2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhID0gZGVjb2RlZFNlbmRNdWx0aXNpZ0NhbGxEYXRhLmFyZ3NbMl07XG4gICAgY29uc3QgZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSA9IGRlY29kZVRyYW5zYWN0aW9uKEpTT04uc3RyaW5naWZ5KEVSQzExNTVBQkkpLCBzYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEpO1xuXG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1swXS50b0xvd2VyQ2FzZSgpLCBvd25lci50b0xvd2VyQ2FzZSgpKTtcbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzFdLnRvTG93ZXJDYXNlKCksIHJlY2lwaWVudC50b0xvd2VyQ2FzZSgpKTtcbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzJdLCB0b2tlbklkKTtcbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzNdLCB2YWx1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc2lnbiBhbmQgYnVpbGQgRVJDMTE1NSBiYXRjaCB0cmFuc2ZlciB3aXRoIEJ1aWxkZXIgcGF0dGVybicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzEwMDAwMDAwMDAnLFxuICAgICAgZ2FzTGltaXQ6ICcxMjEwMDAwMCcsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLmNvdW50ZXIoMik7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0KGNvbnRyYWN0QWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLlNlbmRFUkMxMTU1KTtcblxuICAgIGNvbnN0IGV4cGlyZVRpbWUgPSAxNTkwMDY2NzI4O1xuICAgIGNvbnN0IHNlcXVlbmNlSWQgPSA1O1xuICAgIGNvbnN0IHRva2VuSWRzID0gWzEsIDIsIDNdO1xuICAgIGNvbnN0IHZhbHVlcyA9IFsxMCwgMTAsIDEwXTtcblxuICAgIGNvbnN0IGVyYzExNTVUcmFuc2ZlciA9IHR4QnVpbGRlci50cmFuc2ZlcigpIGFzIEVSQzExNTVUcmFuc2ZlckJ1aWxkZXI7XG4gICAgZXJjMTE1NVRyYW5zZmVyXG4gICAgICAuZnJvbShvd25lcilcbiAgICAgIC50byhyZWNpcGllbnQpXG4gICAgICAuZXhwaXJhdGlvblRpbWUoZXhwaXJlVGltZSlcbiAgICAgIC50b2tlbkNvbnRyYWN0QWRkcmVzcyhlcmMxMTU1Q29udHJhY3RBZGRyZXNzKVxuICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZChzZXF1ZW5jZUlkKVxuICAgICAgLmVudHJ5KHRva2VuSWRzWzBdLCB2YWx1ZXNbMF0pXG4gICAgICAuZW50cnkodG9rZW5JZHNbMV0sIHZhbHVlc1sxXSlcbiAgICAgIC5lbnRyeSh0b2tlbklkc1syXSwgdmFsdWVzWzJdKVxuICAgICAgLmtleShrZXkpO1xuXG4gICAgY29uc3Qgc2VuZE11bHRpc2lnQ2FsbERhdGEgPSBlcmMxMTU1VHJhbnNmZXIuc2lnbkFuZEJ1aWxkKGAke2NvaW4uY2hhaW5JZH1gKTtcbiAgICBjb25zdCBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEgPSBkZWNvZGVUcmFuc2FjdGlvbihKU09OLnN0cmluZ2lmeSh3YWxsZXRTaW1wbGVBQkkpLCBzZW5kTXVsdGlzaWdDYWxsRGF0YSk7XG5cbiAgICBjb25zdCBzYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEgPSBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEuYXJnc1syXTtcbiAgICBjb25zdCBkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhID0gZGVjb2RlVHJhbnNhY3Rpb24oSlNPTi5zdHJpbmdpZnkoRVJDMTE1NUFCSSksIHNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSk7XG5cbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzBdLnRvTG93ZXJDYXNlKCksIG93bmVyLnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMV0udG9Mb3dlckNhc2UoKSwgcmVjaXBpZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoXG4gICAgICBkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMl0ubWFwKCh4KSA9PiB4LnRvTnVtYmVyKCkpLFxuICAgICAgdG9rZW5JZHNcbiAgICApO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoXG4gICAgICBkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbM10ubWFwKCh4KSA9PiB4LnRvTnVtYmVyKCkpLFxuICAgICAgdmFsdWVzXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaWduIGFuZCBidWlsZCBFUkMxMTU1IGJhdGNoIHRyYW5zZmVyIHdpdGggRGVjb2RlciBwYXR0ZXJuJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ2h0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgZmVlOiAnMTAwMDAwMDAwMCcsXG4gICAgICBnYXNMaW1pdDogJzEyMTAwMDAwJyxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIuY291bnRlcigyKTtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3QoY29udHJhY3RBZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuU2VuZEVSQzExNTUpO1xuXG4gICAgY29uc3QgdG9rZW5JZHMgPSBbMSwgMiwgM107XG4gICAgY29uc3QgdmFsdWVzID0gWzEwLCAxMCwgMTBdO1xuXG4gICAgY29uc3QgZXJjMTE1NVRyYW5zZmVyID0gdHhCdWlsZGVyLnRyYW5zZmVyKGVyYzExNTVCYXRjaFRyYW5zZmVyRW5jb2RpbmcpIGFzIEVSQzExNTVUcmFuc2ZlckJ1aWxkZXI7XG5cbiAgICBjb25zdCBzZW5kTXVsdGlzaWdDYWxsRGF0YSA9IGVyYzExNTVUcmFuc2Zlci5zaWduQW5kQnVpbGQoYCR7Y29pbi5jaGFpbklkfWApO1xuICAgIGNvbnN0IGRlY29kZWRTZW5kTXVsdGlzaWdDYWxsRGF0YSA9IGRlY29kZVRyYW5zYWN0aW9uKEpTT04uc3RyaW5naWZ5KHdhbGxldFNpbXBsZUFCSSksIHNlbmRNdWx0aXNpZ0NhbGxEYXRhKTtcblxuICAgIGNvbnN0IHNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSA9IGRlY29kZWRTZW5kTXVsdGlzaWdDYWxsRGF0YS5hcmdzWzJdO1xuICAgIGNvbnN0IGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEgPSBkZWNvZGVUcmFuc2FjdGlvbihKU09OLnN0cmluZ2lmeShFUkMxMTU1QUJJKSwgc2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhKTtcblxuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMF0udG9Mb3dlckNhc2UoKSwgb3duZXIudG9Mb3dlckNhc2UoKSk7XG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1sxXS50b0xvd2VyQ2FzZSgpLCByZWNpcGllbnQudG9Mb3dlckNhc2UoKSk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbChcbiAgICAgIGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1syXS5tYXAoKHgpID0+IHgudG9OdW1iZXIoKSksXG4gICAgICB0b2tlbklkc1xuICAgICk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbChcbiAgICAgIGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1szXS5tYXAoKHgpID0+IHgudG9OdW1iZXIoKSksXG4gICAgICB2YWx1ZXNcbiAgICApO1xuICB9KTtcbn0pO1xuXG4vLyBBQkkgZm9yIHRyYW5zZmVyRnJvbShhZGRyZXNzLGFkZHJlc3MsdWludDI1NikgdXNlZCBieSBIVFMgbmF0aXZlIE5GVHMgb24gSGVkZXJhIEVWTVxuY29uc3QgdHJhbnNmZXJGcm9tQUJJID0gW1xuICB7XG4gICAgaW5wdXRzOiBbXG4gICAgICB7IGludGVybmFsVHlwZTogJ2FkZHJlc3MnLCBuYW1lOiAnZnJvbScsIHR5cGU6ICdhZGRyZXNzJyB9LFxuICAgICAgeyBpbnRlcm5hbFR5cGU6ICdhZGRyZXNzJywgbmFtZTogJ3RvJywgdHlwZTogJ2FkZHJlc3MnIH0sXG4gICAgICB7IGludGVybmFsVHlwZTogJ3VpbnQyNTYnLCBuYW1lOiAndG9rZW5JZCcsIHR5cGU6ICd1aW50MjU2JyB9LFxuICAgIF0sXG4gICAgbmFtZTogJ3RyYW5zZmVyRnJvbScsXG4gICAgb3V0cHV0czogW10sXG4gICAgc3RhdGVNdXRhYmlsaXR5OiAnbm9ucGF5YWJsZScsXG4gICAgdHlwZTogJ2Z1bmN0aW9uJyxcbiAgfSxcbl07XG5cbmRlc2NyaWJlKCdFUkM3MjEgSFRTIG5hdGl2ZSBORlQgdHJhbnNmZXJGcm9tJywgKCkgPT4ge1xuICBjb25zdCBvd25lciA9ICcweDE5NjQ1MDMyYzdmMTUzMzM5NWQ0NGE2Mjk0NjJlNzUxMDg0ZDNlNGQnO1xuICBjb25zdCByZWNpcGllbnQgPSAnMHgxOTY0NTAzMmM3ZjE1MzMzOTVkNDRhNjI5NDYyZTc1MTA4NGQzZTRjJztcbiAgLy8gSFRTIG5hdGl2ZSBORlQgYWRkcmVzcyAobG9uZy16ZXJvIGZvcm1hdClcbiAgY29uc3QgaHRzTmZ0Q29udHJhY3RBZGRyZXNzID0gJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdhYzIwMyc7XG4gIGNvbnN0IHRva2VuSWQgPSAnMTInO1xuXG4gIGl0KCdzaG91bGQgYnVpbGQgRVJDNzIxIHRyYW5zZmVyRnJvbSBjYWxsZGF0YSB3aXRoIGNvcnJlY3Qgc2VsZWN0b3IgYW5kIHBhcmFtcycsICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEVSQzcyMVRyYW5zZmVyQnVpbGRlcigpO1xuICAgIGJ1aWxkZXIudG9rZW5Db250cmFjdEFkZHJlc3MoaHRzTmZ0Q29udHJhY3RBZGRyZXNzKS50byhyZWNpcGllbnQpLmZyb20ob3duZXIpLnRva2VuSWQodG9rZW5JZCk7XG5cbiAgICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkZXIuYnVpbGRUcmFuc2ZlckZyb20oKTtcblxuICAgIC8vIFNob3VsZCB1c2UgdHJhbnNmZXJGcm9tIHNlbGVjdG9yIDB4MjNiODcyZGRcbiAgICBjYWxsZGF0YS5zaG91bGQuc3RhcnRXaXRoKCcweDIzYjg3MmRkJyk7XG5cbiAgICAvLyBEZWNvZGUgYW5kIHZlcmlmeSBwYXJhbWV0ZXJzXG4gICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVRyYW5zYWN0aW9uKEpTT04uc3RyaW5naWZ5KHRyYW5zZmVyRnJvbUFCSSksIGNhbGxkYXRhKTtcbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZC5hcmdzWzBdLnRvTG93ZXJDYXNlKCksIG93bmVyLnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkLmFyZ3NbMV0udG9Mb3dlckNhc2UoKSwgcmVjaXBpZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkLmFyZ3NbMl0udG9TdHJpbmcoKSwgdG9rZW5JZCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IGluY2x1ZGUgYnl0ZXMgZGF0YSBwYXJhbWV0ZXIgaW4gdHJhbnNmZXJGcm9tIGNhbGxkYXRhJywgKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgRVJDNzIxVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgYnVpbGRlci50b2tlbkNvbnRyYWN0QWRkcmVzcyhodHNOZnRDb250cmFjdEFkZHJlc3MpLnRvKHJlY2lwaWVudCkuZnJvbShvd25lcikudG9rZW5JZCh0b2tlbklkKTtcblxuICAgIGNvbnN0IHRyYW5zZmVyRnJvbURhdGEgPSBidWlsZGVyLmJ1aWxkVHJhbnNmZXJGcm9tKCk7XG4gICAgY29uc3Qgc2FmZVRyYW5zZmVyRGF0YSA9IGJ1aWxkZXIuYnVpbGQoKTtcblxuICAgIC8vIHRyYW5zZmVyRnJvbSBoYXMgMyBwYXJhbXMgKGZyb20sIHRvLCB0b2tlbklkKSwgc2FmZVRyYW5zZmVyRnJvbSBoYXMgNCAoKyBieXRlcyBkYXRhKVxuICAgIC8vIFNvIHRyYW5zZmVyRnJvbSBlbmNvZGluZyBzaG91bGQgYmUgc2hvcnRlclxuICAgIHRyYW5zZmVyRnJvbURhdGEubGVuZ3RoLnNob3VsZC5iZS5sZXNzVGhhbihzYWZlVHJhbnNmZXJEYXRhLmxlbmd0aCk7XG5cbiAgICAvLyBWZXJpZnkgc2FmZVRyYW5zZmVyRnJvbSB1c2VzIDB4Yjg4ZDRmZGVcbiAgICBzYWZlVHJhbnNmZXJEYXRhLnNob3VsZC5zdGFydFdpdGgoJzB4Yjg4ZDRmZGUnKTtcbiAgfSk7XG59KTtcblxuZnVuY3Rpb24gZGVjb2RlVHJhbnNhY3Rpb24oYWJpOiBzdHJpbmcsIGNhbGxkYXRhOiBzdHJpbmcpIHtcbiAgY29uc3QgY29udHJhY3RJbnRlcmZhY2UgPSBuZXcgZXRoZXJzLnV0aWxzLkludGVyZmFjZShhYmkpO1xuICByZXR1cm4gY29udHJhY3RJbnRlcmZhY2UucGFyc2VUcmFuc2FjdGlvbih7IGRhdGE6IGNhbGxkYXRhIH0pO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=singleSigSend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"singleSigSend.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/singleSigSend.ts"],"names":[],"mappings":""}
@@ -0,0 +1,196 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const should = __importStar(require("should"));
37
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
38
+ const src_1 = require("../../../src");
39
+ const getBuilder_1 = require("../getBuilder");
40
+ describe('Eth Transaction builder flush tokens', function () {
41
+ const defaultKeyPair = new src_1.KeyPair({
42
+ prv: 'FAC4D04AA0025ECF200D74BC9B5E4616E4B8338B69B61362AAAD49F76E68EF28',
43
+ });
44
+ const buildTransaction = async function (details) {
45
+ const txBuilder = (0, getBuilder_1.getBuilder)('teth');
46
+ txBuilder.type(sdk_core_1.TransactionType.SingleSigSend);
47
+ if (details.value !== undefined) {
48
+ txBuilder.value(details.value);
49
+ }
50
+ if (details.recipient !== undefined) {
51
+ // majority of calls the external recipient is the contract address
52
+ // unfortunate outcropping that in this case it is the recipient
53
+ txBuilder.contract(details.recipient);
54
+ }
55
+ if (details.fee !== undefined) {
56
+ txBuilder.fee(details.fee);
57
+ }
58
+ if (details.counter !== undefined) {
59
+ txBuilder.counter(details.counter);
60
+ }
61
+ if (details.key !== undefined) {
62
+ txBuilder.sign({ key: details.key.getKeys().prv });
63
+ }
64
+ return await txBuilder.build();
65
+ };
66
+ describe('should build', () => {
67
+ it('a single sig send', async () => {
68
+ const tx = await buildTransaction({
69
+ fee: {
70
+ fee: '10',
71
+ gasLimit: '1000',
72
+ },
73
+ counter: 1,
74
+ recipient: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
75
+ value: '123',
76
+ });
77
+ tx.type.should.equal(sdk_core_1.TransactionType.SingleSigSend);
78
+ const txJson = tx.toJson();
79
+ txJson.gasLimit.should.equal('1000');
80
+ txJson._type.should.equals(src_1.ETHTransactionType.LEGACY);
81
+ txJson.gasPrice.should.equal('10');
82
+ txJson.value.should.equal('123');
83
+ txJson.nonce.should.equal(1);
84
+ });
85
+ it('a single sig send with nonce 0', async () => {
86
+ const tx = await buildTransaction({
87
+ fee: {
88
+ fee: '10',
89
+ gasLimit: '1000',
90
+ },
91
+ counter: 0,
92
+ recipient: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
93
+ value: '123',
94
+ });
95
+ tx.type.should.equal(sdk_core_1.TransactionType.SingleSigSend);
96
+ const txJson = tx.toJson();
97
+ txJson.gasLimit.should.equal('1000');
98
+ txJson._type.should.equals(src_1.ETHTransactionType.LEGACY);
99
+ txJson.gasPrice.should.equal('10');
100
+ txJson.value.should.equal('123');
101
+ txJson.nonce.should.equal(0);
102
+ should.equal(txJson.v, '0x77');
103
+ });
104
+ it('an unsigned single sig send from serialized', async () => {
105
+ const tx = await buildTransaction({
106
+ fee: {
107
+ fee: '10',
108
+ gasLimit: '1000',
109
+ },
110
+ counter: 0,
111
+ recipient: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
112
+ value: '123',
113
+ });
114
+ const serialized = tx.toBroadcastFormat();
115
+ // now rebuild from the unsigned signed serialized tx and make sure it stays the same
116
+ const newTxBuilder = (0, getBuilder_1.getBuilder)('teth');
117
+ newTxBuilder.from(serialized);
118
+ const newTx = await newTxBuilder.build();
119
+ should.equal(newTx.toBroadcastFormat(), serialized);
120
+ should.equal(newTx.toJson().v, '0x77');
121
+ });
122
+ it('a signed single sig send from serialized', async () => {
123
+ const tx = await buildTransaction({
124
+ fee: {
125
+ fee: '10',
126
+ gasLimit: '1000',
127
+ },
128
+ counter: 0,
129
+ recipient: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
130
+ value: '123',
131
+ key: defaultKeyPair,
132
+ });
133
+ const serialized = tx.toBroadcastFormat();
134
+ // now rebuild from the signed serialized tx and make sure it stays the same
135
+ const newTxBuilder = (0, getBuilder_1.getBuilder)('teth');
136
+ newTxBuilder.from(serialized);
137
+ const newTx = await newTxBuilder.build();
138
+ should.equal(newTx.toBroadcastFormat(), serialized);
139
+ should.equal(newTx.id, '0x5dfa2726334bb5e800adfd151299f3af9a1dcf0cec7dc5107b4b24de1338173a');
140
+ const txJson = newTx.toJson();
141
+ should.exist(txJson.v);
142
+ should.exist(txJson.r);
143
+ should.exist(txJson.s);
144
+ should.exist(txJson.from);
145
+ });
146
+ it('an unsigned single sig send from serialized with final v', async () => {
147
+ const tx = await buildTransaction({
148
+ fee: {
149
+ fee: '10',
150
+ gasLimit: '1000',
151
+ },
152
+ counter: 0,
153
+ recipient: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
154
+ value: '123',
155
+ });
156
+ const serialized = tx.toBroadcastFormat();
157
+ // now rebuild from the unsigned signed serialized tx and make sure it stays the same
158
+ const newTxBuilder = (0, getBuilder_1.getBuilder)('teth');
159
+ newTxBuilder.from(serialized);
160
+ const newTx = await newTxBuilder.build();
161
+ should.equal(newTx.toBroadcastFormat(), serialized);
162
+ newTx.toJson().v.should.equal('0x77');
163
+ });
164
+ });
165
+ describe('should fail to build', () => {
166
+ it('a transaction without fee', async () => {
167
+ await buildTransaction({
168
+ counter: 0,
169
+ recipient: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
170
+ value: '123',
171
+ }).should.be.rejectedWith('Invalid transaction: missing fee');
172
+ });
173
+ it('a transaction without recipient', async () => {
174
+ await buildTransaction({
175
+ fee: {
176
+ fee: '10',
177
+ gasLimit: '10',
178
+ },
179
+ counter: 0,
180
+ value: '123',
181
+ }).should.be.rejectedWith('Invalid transaction: missing contract address');
182
+ });
183
+ it('a transaction with invalid counter', async () => {
184
+ await buildTransaction({
185
+ fee: {
186
+ fee: '10',
187
+ gasLimit: '10',
188
+ },
189
+ counter: -1,
190
+ recipient: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
191
+ value: '123',
192
+ }).should.be.rejectedWith('Invalid counter: -1');
193
+ });
194
+ });
195
+ });
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlU2lnU2VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvc2luZ2xlU2lnU2VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyxtREFBdUQ7QUFDdkQsc0NBQTZFO0FBQzdFLDhDQUEyQztBQUUzQyxRQUFRLENBQUMsc0NBQXNDLEVBQUU7SUFDL0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxhQUFPLENBQUM7UUFDakMsR0FBRyxFQUFFLGtFQUFrRTtLQUN4RSxDQUFDLENBQUM7SUFVSCxNQUFNLGdCQUFnQixHQUFHLEtBQUssV0FBVyxPQUFzQjtRQUM3RCxNQUFNLFNBQVMsR0FBUSxJQUFBLHVCQUFVLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTlDLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3BDLG1FQUFtRTtZQUNuRSxnRUFBZ0U7WUFDaEUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5QixTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVELE9BQU8sTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakMsQ0FBQyxDQUFDO0lBRUYsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7UUFDNUIsRUFBRSxDQUFDLG1CQUFtQixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2pDLE1BQU0sRUFBRSxHQUFHLE1BQU0sZ0JBQWdCLENBQUM7Z0JBQ2hDLEdBQUcsRUFBRTtvQkFDSCxHQUFHLEVBQUUsSUFBSTtvQkFDVCxRQUFRLEVBQUUsTUFBTTtpQkFDakI7Z0JBQ0QsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsU0FBUyxFQUFFLDRDQUE0QztnQkFDdkQsS0FBSyxFQUFFLEtBQUs7YUFDYixDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNwRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyx3QkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0RCxNQUFNLENBQUMsUUFBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM5QyxNQUFNLEVBQUUsR0FBRyxNQUFNLGdCQUFnQixDQUFDO2dCQUNoQyxHQUFHLEVBQUU7b0JBQ0gsR0FBRyxFQUFFLElBQUk7b0JBQ1QsUUFBUSxFQUFFLE1BQU07aUJBQ2pCO2dCQUNELE9BQU8sRUFBRSxDQUFDO2dCQUNWLFNBQVMsRUFBRSw0Q0FBNEM7Z0JBQ3ZELEtBQUssRUFBRSxLQUFLO2FBQ2IsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDcEQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsd0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEQsTUFBTSxDQUFDLFFBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzNELE1BQU0sRUFBRSxHQUFHLE1BQU0sZ0JBQWdCLENBQUM7Z0JBQ2hDLEdBQUcsRUFBRTtvQkFDSCxHQUFHLEVBQUUsSUFBSTtvQkFDVCxRQUFRLEVBQUUsTUFBTTtpQkFDakI7Z0JBQ0QsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsU0FBUyxFQUFFLDRDQUE0QztnQkFDdkQsS0FBSyxFQUFFLEtBQUs7YUFDYixDQUFDLENBQUM7WUFDSCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUUxQyxxRkFBcUY7WUFDckYsTUFBTSxZQUFZLEdBQVEsSUFBQSx1QkFBVSxFQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNwRCxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMENBQTBDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDeEQsTUFBTSxFQUFFLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQztnQkFDaEMsR0FBRyxFQUFFO29CQUNILEdBQUcsRUFBRSxJQUFJO29CQUNULFFBQVEsRUFBRSxNQUFNO2lCQUNqQjtnQkFDRCxPQUFPLEVBQUUsQ0FBQztnQkFDVixTQUFTLEVBQUUsNENBQTRDO2dCQUN2RCxLQUFLLEVBQUUsS0FBSztnQkFDWixHQUFHLEVBQUUsY0FBYzthQUNwQixDQUFDLENBQUM7WUFDSCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUUxQyw0RUFBNEU7WUFDNUUsTUFBTSxZQUFZLEdBQVEsSUFBQSx1QkFBVSxFQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNwRCxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsb0VBQW9FLENBQUMsQ0FBQztZQUM3RixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMERBQTBELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDeEUsTUFBTSxFQUFFLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQztnQkFDaEMsR0FBRyxFQUFFO29CQUNILEdBQUcsRUFBRSxJQUFJO29CQUNULFFBQVEsRUFBRSxNQUFNO2lCQUNqQjtnQkFDRCxPQUFPLEVBQUUsQ0FBQztnQkFDVixTQUFTLEVBQUUsNENBQTRDO2dCQUN2RCxLQUFLLEVBQUUsS0FBSzthQUNiLENBQUMsQ0FBQztZQUNILE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBRTFDLHFGQUFxRjtZQUNyRixNQUFNLFlBQVksR0FBUSxJQUFBLHVCQUFVLEVBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5QixNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN6QyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3BELEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRTtRQUNwQyxFQUFFLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDekMsTUFBTSxnQkFBZ0IsQ0FBQztnQkFDckIsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsU0FBUyxFQUFFLDRDQUE0QztnQkFDdkQsS0FBSyxFQUFFLEtBQUs7YUFDYixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMvQyxNQUFNLGdCQUFnQixDQUFDO2dCQUNyQixHQUFHLEVBQUU7b0JBQ0gsR0FBRyxFQUFFLElBQUk7b0JBQ1QsUUFBUSxFQUFFLElBQUk7aUJBQ2Y7Z0JBQ0QsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsS0FBSyxFQUFFLEtBQUs7YUFDYixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUM3RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNsRCxNQUFNLGdCQUFnQixDQUFDO2dCQUNyQixHQUFHLEVBQUU7b0JBQ0gsR0FBRyxFQUFFLElBQUk7b0JBQ1QsUUFBUSxFQUFFLElBQUk7aUJBQ2Y7Z0JBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDWCxTQUFTLEVBQUUsNENBQTRDO2dCQUN2RCxLQUFLLEVBQUUsS0FBSzthQUNiLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgRVRIVHJhbnNhY3Rpb25UeXBlLCBGZWUsIEtleVBhaXIsIFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7IGdldEJ1aWxkZXIgfSBmcm9tICcuLi9nZXRCdWlsZGVyJztcblxuZGVzY3JpYmUoJ0V0aCBUcmFuc2FjdGlvbiBidWlsZGVyIGZsdXNoIHRva2VucycsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZGVmYXVsdEtleVBhaXIgPSBuZXcgS2V5UGFpcih7XG4gICAgcHJ2OiAnRkFDNEQwNEFBMDAyNUVDRjIwMEQ3NEJDOUI1RTQ2MTZFNEI4MzM4QjY5QjYxMzYyQUFBRDQ5Rjc2RTY4RUYyOCcsXG4gIH0pO1xuXG4gIGludGVyZmFjZSBTaW5nbGVTaWdTZW5kIHtcbiAgICB2YWx1ZT86IHN0cmluZztcbiAgICByZWNpcGllbnQ/OiBzdHJpbmc7XG4gICAgY291bnRlcj86IG51bWJlcjtcbiAgICBmZWU/OiBGZWU7XG4gICAga2V5PzogS2V5UGFpcjtcbiAgfVxuXG4gIGNvbnN0IGJ1aWxkVHJhbnNhY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAoZGV0YWlsczogU2luZ2xlU2lnU2VuZCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXI6IGFueSA9IGdldEJ1aWxkZXIoJ3RldGgnKTtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuU2luZ2xlU2lnU2VuZCk7XG5cbiAgICBpZiAoZGV0YWlscy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0eEJ1aWxkZXIudmFsdWUoZGV0YWlscy52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGRldGFpbHMucmVjaXBpZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIG1ham9yaXR5IG9mIGNhbGxzIHRoZSBleHRlcm5hbCByZWNpcGllbnQgaXMgdGhlIGNvbnRyYWN0IGFkZHJlc3NcbiAgICAgIC8vIHVuZm9ydHVuYXRlIG91dGNyb3BwaW5nIHRoYXQgaW4gdGhpcyBjYXNlIGl0IGlzIHRoZSByZWNpcGllbnRcbiAgICAgIHR4QnVpbGRlci5jb250cmFjdChkZXRhaWxzLnJlY2lwaWVudCk7XG4gICAgfVxuXG4gICAgaWYgKGRldGFpbHMuZmVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHR4QnVpbGRlci5mZWUoZGV0YWlscy5mZWUpO1xuICAgIH1cblxuICAgIGlmIChkZXRhaWxzLmNvdW50ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHhCdWlsZGVyLmNvdW50ZXIoZGV0YWlscy5jb3VudGVyKTtcbiAgICB9XG5cbiAgICBpZiAoZGV0YWlscy5rZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGRldGFpbHMua2V5LmdldEtleXMoKS5wcnYgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgYnVpbGQnLCAoKSA9PiB7XG4gICAgaXQoJ2Egc2luZ2xlIHNpZyBzZW5kJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgZmVlOiB7XG4gICAgICAgICAgZmVlOiAnMTAnLFxuICAgICAgICAgIGdhc0xpbWl0OiAnMTAwMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvdW50ZXI6IDEsXG4gICAgICAgIHJlY2lwaWVudDogJzB4YmNmOTM1ZDIwNmNhMzI5MjllMWI4ODdhMDdlZDI0MGYwZDhjY2QyMicsXG4gICAgICAgIHZhbHVlOiAnMTIzJyxcbiAgICAgIH0pO1xuXG4gICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuU2luZ2xlU2lnU2VuZCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHR4SnNvbi5nYXNMaW1pdC5zaG91bGQuZXF1YWwoJzEwMDAnKTtcbiAgICAgIHR4SnNvbi5fdHlwZS5zaG91bGQuZXF1YWxzKEVUSFRyYW5zYWN0aW9uVHlwZS5MRUdBQ1kpO1xuICAgICAgdHhKc29uLmdhc1ByaWNlIS5zaG91bGQuZXF1YWwoJzEwJyk7XG4gICAgICB0eEpzb24udmFsdWUuc2hvdWxkLmVxdWFsKCcxMjMnKTtcbiAgICAgIHR4SnNvbi5ub25jZS5zaG91bGQuZXF1YWwoMSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSBzaW5nbGUgc2lnIHNlbmQgd2l0aCBub25jZSAwJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgZmVlOiB7XG4gICAgICAgICAgZmVlOiAnMTAnLFxuICAgICAgICAgIGdhc0xpbWl0OiAnMTAwMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvdW50ZXI6IDAsXG4gICAgICAgIHJlY2lwaWVudDogJzB4YmNmOTM1ZDIwNmNhMzI5MjllMWI4ODdhMDdlZDI0MGYwZDhjY2QyMicsXG4gICAgICAgIHZhbHVlOiAnMTIzJyxcbiAgICAgIH0pO1xuXG4gICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuU2luZ2xlU2lnU2VuZCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHR4SnNvbi5nYXNMaW1pdC5zaG91bGQuZXF1YWwoJzEwMDAnKTtcbiAgICAgIHR4SnNvbi5fdHlwZS5zaG91bGQuZXF1YWxzKEVUSFRyYW5zYWN0aW9uVHlwZS5MRUdBQ1kpO1xuICAgICAgdHhKc29uLmdhc1ByaWNlIS5zaG91bGQuZXF1YWwoJzEwJyk7XG4gICAgICB0eEpzb24udmFsdWUuc2hvdWxkLmVxdWFsKCcxMjMnKTtcbiAgICAgIHR4SnNvbi5ub25jZS5zaG91bGQuZXF1YWwoMCk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLnYsICcweDc3Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYW4gdW5zaWduZWQgc2luZ2xlIHNpZyBzZW5kIGZyb20gc2VyaWFsaXplZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgIGZlZToge1xuICAgICAgICAgIGZlZTogJzEwJyxcbiAgICAgICAgICBnYXNMaW1pdDogJzEwMDAnLFxuICAgICAgICB9LFxuICAgICAgICBjb3VudGVyOiAwLFxuICAgICAgICByZWNpcGllbnQ6ICcweGJjZjkzNWQyMDZjYTMyOTI5ZTFiODg3YTA3ZWQyNDBmMGQ4Y2NkMjInLFxuICAgICAgICB2YWx1ZTogJzEyMycsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBub3cgcmVidWlsZCBmcm9tIHRoZSB1bnNpZ25lZCBzaWduZWQgc2VyaWFsaXplZCB0eCBhbmQgbWFrZSBzdXJlIGl0IHN0YXlzIHRoZSBzYW1lXG4gICAgICBjb25zdCBuZXdUeEJ1aWxkZXI6IGFueSA9IGdldEJ1aWxkZXIoJ3RldGgnKTtcbiAgICAgIG5ld1R4QnVpbGRlci5mcm9tKHNlcmlhbGl6ZWQpO1xuICAgICAgY29uc3QgbmV3VHggPSBhd2FpdCBuZXdUeEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChuZXdUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLCBzZXJpYWxpemVkKTtcbiAgICAgIHNob3VsZC5lcXVhbChuZXdUeC50b0pzb24oKS52LCAnMHg3NycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Egc2lnbmVkIHNpbmdsZSBzaWcgc2VuZCBmcm9tIHNlcmlhbGl6ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6ICcxMCcsXG4gICAgICAgICAgZ2FzTGltaXQ6ICcxMDAwJyxcbiAgICAgICAgfSxcbiAgICAgICAgY291bnRlcjogMCxcbiAgICAgICAgcmVjaXBpZW50OiAnMHg1M2I4ZTkxYmIzYjhmNjE4YjVmMDEwMDRlZjEwOGYxMzRmMjE5NTczJyxcbiAgICAgICAgdmFsdWU6ICcxMjMnLFxuICAgICAgICBrZXk6IGRlZmF1bHRLZXlQYWlyLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgLy8gbm93IHJlYnVpbGQgZnJvbSB0aGUgc2lnbmVkIHNlcmlhbGl6ZWQgdHggYW5kIG1ha2Ugc3VyZSBpdCBzdGF5cyB0aGUgc2FtZVxuICAgICAgY29uc3QgbmV3VHhCdWlsZGVyOiBhbnkgPSBnZXRCdWlsZGVyKCd0ZXRoJyk7XG4gICAgICBuZXdUeEJ1aWxkZXIuZnJvbShzZXJpYWxpemVkKTtcbiAgICAgIGNvbnN0IG5ld1R4ID0gYXdhaXQgbmV3VHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXF1YWwobmV3VHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgc2VyaWFsaXplZCk7XG4gICAgICBzaG91bGQuZXF1YWwobmV3VHguaWQsICcweDVkZmEyNzI2MzM0YmI1ZTgwMGFkZmQxNTEyOTlmM2FmOWExZGNmMGNlYzdkYzUxMDdiNGIyNGRlMTMzODE3M2EnKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IG5ld1R4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi52KTtcbiAgICAgIHNob3VsZC5leGlzdCh0eEpzb24ucik7XG4gICAgICBzaG91bGQuZXhpc3QodHhKc29uLnMpO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi5mcm9tKTtcbiAgICB9KTtcblxuICAgIGl0KCdhbiB1bnNpZ25lZCBzaW5nbGUgc2lnIHNlbmQgZnJvbSBzZXJpYWxpemVkIHdpdGggZmluYWwgdicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgIGZlZToge1xuICAgICAgICAgIGZlZTogJzEwJyxcbiAgICAgICAgICBnYXNMaW1pdDogJzEwMDAnLFxuICAgICAgICB9LFxuICAgICAgICBjb3VudGVyOiAwLFxuICAgICAgICByZWNpcGllbnQ6ICcweGJjZjkzNWQyMDZjYTMyOTI5ZTFiODg3YTA3ZWQyNDBmMGQ4Y2NkMjInLFxuICAgICAgICB2YWx1ZTogJzEyMycsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBub3cgcmVidWlsZCBmcm9tIHRoZSB1bnNpZ25lZCBzaWduZWQgc2VyaWFsaXplZCB0eCBhbmQgbWFrZSBzdXJlIGl0IHN0YXlzIHRoZSBzYW1lXG4gICAgICBjb25zdCBuZXdUeEJ1aWxkZXI6IGFueSA9IGdldEJ1aWxkZXIoJ3RldGgnKTtcbiAgICAgIG5ld1R4QnVpbGRlci5mcm9tKHNlcmlhbGl6ZWQpO1xuICAgICAgY29uc3QgbmV3VHggPSBhd2FpdCBuZXdUeEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChuZXdUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLCBzZXJpYWxpemVkKTtcbiAgICAgIG5ld1R4LnRvSnNvbigpLnYuc2hvdWxkLmVxdWFsKCcweDc3Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgZmFpbCB0byBidWlsZCcsICgpID0+IHtcbiAgICBpdCgnYSB0cmFuc2FjdGlvbiB3aXRob3V0IGZlZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICBjb3VudGVyOiAwLFxuICAgICAgICByZWNpcGllbnQ6ICcweDUzYjhlOTFiYjNiOGY2MThiNWYwMTAwNGVmMTA4ZjEzNGYyMTk1NzMnLFxuICAgICAgICB2YWx1ZTogJzEyMycsXG4gICAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIGZlZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2EgdHJhbnNhY3Rpb24gd2l0aG91dCByZWNpcGllbnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgZmVlOiB7XG4gICAgICAgICAgZmVlOiAnMTAnLFxuICAgICAgICAgIGdhc0xpbWl0OiAnMTAnLFxuICAgICAgICB9LFxuICAgICAgICBjb3VudGVyOiAwLFxuICAgICAgICB2YWx1ZTogJzEyMycsXG4gICAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIGNvbnRyYWN0IGFkZHJlc3MnKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHRyYW5zYWN0aW9uIHdpdGggaW52YWxpZCBjb3VudGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgIGZlZToge1xuICAgICAgICAgIGZlZTogJzEwJyxcbiAgICAgICAgICBnYXNMaW1pdDogJzEwJyxcbiAgICAgICAgfSxcbiAgICAgICAgY291bnRlcjogLTEsXG4gICAgICAgIHJlY2lwaWVudDogJzB4YmNmOTM1ZDIwNmNhMzI5MjllMWI4ODdhMDdlZDI0MGYwZDhjY2QyMicsXG4gICAgICAgIHZhbHVlOiAnMTIzJyxcbiAgICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ludmFsaWQgY291bnRlcjogLTEnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=walletInitialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walletInitialization.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/walletInitialization.ts"],"names":[],"mappings":""}