@bitgo/sdk-coin-eth 25.3.1 → 25.3.3
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.
- package/dist/test/fixtures/eth.d.ts +39 -0
- package/dist/test/fixtures/eth.d.ts.map +1 -0
- package/dist/test/fixtures/eth.js +262 -0
- package/dist/test/resources/erc1155Abi.d.ts +40 -0
- package/dist/test/resources/erc1155Abi.d.ts.map +1 -0
- package/dist/test/resources/erc1155Abi.js +329 -0
- package/dist/test/resources/erc721Abi.d.ts +12 -0
- package/dist/test/resources/erc721Abi.d.ts.map +1 -0
- package/dist/test/resources/erc721Abi.js +34 -0
- package/dist/test/resources/eth.d.ts +51 -0
- package/dist/test/resources/eth.d.ts.map +1 -0
- package/dist/test/resources/eth.js +72 -0
- package/dist/test/resources/nftEncodings.d.ts +4 -0
- package/dist/test/resources/nftEncodings.d.ts.map +1 -0
- package/dist/test/resources/nftEncodings.js +7 -0
- package/dist/test/resources/walletSimpleAbi.d.ts +12 -0
- package/dist/test/resources/walletSimpleAbi.d.ts.map +1 -0
- package/dist/test/resources/walletSimpleAbi.js +44 -0
- package/dist/test/unit/eth.d.ts +2 -0
- package/dist/test/unit/eth.d.ts.map +1 -0
- package/dist/test/unit/eth.js +1171 -0
- package/dist/test/unit/ethWallet.d.ts +2 -0
- package/dist/test/unit/ethWallet.d.ts.map +1 -0
- package/dist/test/unit/ethWallet.js +472 -0
- package/dist/test/unit/fixtures/ethMultiSigBackupKey.d.ts +4 -0
- package/dist/test/unit/fixtures/ethMultiSigBackupKey.d.ts.map +1 -0
- package/dist/test/unit/fixtures/ethMultiSigBackupKey.js +10 -0
- package/dist/test/unit/fixtures/ethTssBackupKey.d.ts +5 -0
- package/dist/test/unit/fixtures/ethTssBackupKey.d.ts.map +1 -0
- package/dist/test/unit/fixtures/ethTssBackupKey.js +25 -0
- package/dist/test/unit/getBuilder.d.ts +3 -0
- package/dist/test/unit/getBuilder.d.ts.map +1 -0
- package/dist/test/unit/getBuilder.js +10 -0
- package/dist/test/unit/keyPair.d.ts +2 -0
- package/dist/test/unit/keyPair.d.ts.map +1 -0
- package/dist/test/unit/keyPair.js +175 -0
- package/dist/test/unit/transaction.d.ts +2 -0
- package/dist/test/unit/transaction.d.ts.map +1 -0
- package/dist/test/unit/transaction.js +96 -0
- package/dist/test/unit/transactionBuilder/addressInitialization.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/addressInitialization.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/addressInitialization.js +101 -0
- package/dist/test/unit/transactionBuilder/contractCall.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/contractCall.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/contractCall.js +101 -0
- package/dist/test/unit/transactionBuilder/flushCoins.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/flushCoins.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/flushCoins.js +133 -0
- package/dist/test/unit/transactionBuilder/flushTokens.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/flushTokens.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/flushTokens.js +281 -0
- package/dist/test/unit/transactionBuilder/send.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/send.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/send.js +331 -0
- package/dist/test/unit/transactionBuilder/sendNFT.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/sendNFT.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/sendNFT.js +250 -0
- package/dist/test/unit/transactionBuilder/singleSigSend.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/singleSigSend.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/singleSigSend.js +196 -0
- package/dist/test/unit/transactionBuilder/walletInitialization.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/walletInitialization.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/walletInitialization.js +423 -0
- package/dist/test/unit/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transferBuilder.js +124 -0
- package/dist/test/unit/utils.d.ts +2 -0
- package/dist/test/unit/utils.d.ts.map +1 -0
- package/dist/test/unit/utils.js +74 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +10 -7
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -1854
|
@@ -0,0 +1,250 @@
|
|
|
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/sdk-core");
|
|
40
|
+
const statics_1 = require("@bitgo/statics");
|
|
41
|
+
const testData = __importStar(require("../../resources/eth"));
|
|
42
|
+
const ethers_1 = require("ethers");
|
|
43
|
+
const should_1 = __importDefault(require("should"));
|
|
44
|
+
const erc1155Abi_1 = require("../../resources/erc1155Abi");
|
|
45
|
+
const walletSimpleAbi_1 = require("../../resources/walletSimpleAbi");
|
|
46
|
+
const erc721Abi_1 = require("../../resources/erc721Abi");
|
|
47
|
+
const nftEncodings_1 = require("../../resources/nftEncodings");
|
|
48
|
+
const getBuilder_1 = require("../getBuilder");
|
|
49
|
+
describe('Eth transaction builder sendNFT', () => {
|
|
50
|
+
// dummy addresses
|
|
51
|
+
const owner = '0x19645032c7f1533395d44a629462e751084d3e4d';
|
|
52
|
+
const recipient = '0x19645032c7f1533395d44a629462e751084d3e4c';
|
|
53
|
+
const contractAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
|
|
54
|
+
// ens erc721
|
|
55
|
+
const erc721ContractAddress = '0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85';
|
|
56
|
+
// opensea erc1155
|
|
57
|
+
const erc1155ContractAddress = '0x495f947276749ce646f68ac8c248420045cb7b5e';
|
|
58
|
+
const coin = statics_1.coins.get('hteth');
|
|
59
|
+
let key;
|
|
60
|
+
beforeEach(() => {
|
|
61
|
+
key = testData.KEYPAIR_PRV.getKeys().prv;
|
|
62
|
+
});
|
|
63
|
+
it('should sign ERC721 properly', async () => {
|
|
64
|
+
const txBuilder = (0, getBuilder_1.getBuilder)('hteth');
|
|
65
|
+
txBuilder.fee({
|
|
66
|
+
fee: '1000000000',
|
|
67
|
+
gasLimit: '12100000',
|
|
68
|
+
});
|
|
69
|
+
txBuilder.counter(2);
|
|
70
|
+
txBuilder.contract(contractAddress);
|
|
71
|
+
txBuilder.type(sdk_core_1.TransactionType.SendERC721);
|
|
72
|
+
// Dummy addresses
|
|
73
|
+
const expireTime = 1590066728;
|
|
74
|
+
const sequenceId = 5;
|
|
75
|
+
const tokenId = '1';
|
|
76
|
+
const erc721Transfer = txBuilder.transfer();
|
|
77
|
+
erc721Transfer
|
|
78
|
+
.from(owner)
|
|
79
|
+
.to(recipient)
|
|
80
|
+
.expirationTime(expireTime)
|
|
81
|
+
.tokenContractAddress(erc721ContractAddress)
|
|
82
|
+
.contractSequenceId(sequenceId)
|
|
83
|
+
.tokenId(tokenId)
|
|
84
|
+
.key(key);
|
|
85
|
+
txBuilder.sign({ key: testData.PRIVATE_KEY });
|
|
86
|
+
await txBuilder.build();
|
|
87
|
+
});
|
|
88
|
+
it('should sign and build ERC721 transfer with Builder pattern', async () => {
|
|
89
|
+
const txBuilder = (0, getBuilder_1.getBuilder)('hteth');
|
|
90
|
+
txBuilder.fee({
|
|
91
|
+
fee: '1000000000',
|
|
92
|
+
gasLimit: '12100000',
|
|
93
|
+
});
|
|
94
|
+
txBuilder.counter(2);
|
|
95
|
+
txBuilder.contract(contractAddress);
|
|
96
|
+
txBuilder.type(sdk_core_1.TransactionType.SendERC721);
|
|
97
|
+
// Dummy addresses
|
|
98
|
+
const expireTime = 1590066728;
|
|
99
|
+
const sequenceId = 5;
|
|
100
|
+
const tokenId = '1';
|
|
101
|
+
const erc721Transfer = txBuilder.transfer();
|
|
102
|
+
erc721Transfer
|
|
103
|
+
.from(owner)
|
|
104
|
+
.to(recipient)
|
|
105
|
+
.expirationTime(expireTime)
|
|
106
|
+
.tokenContractAddress(erc721ContractAddress)
|
|
107
|
+
.contractSequenceId(sequenceId)
|
|
108
|
+
.tokenId(tokenId)
|
|
109
|
+
.key(key);
|
|
110
|
+
const sendMultisigCallData = erc721Transfer.signAndBuild(`${coin.chainId}`);
|
|
111
|
+
const decodedSendMultisigCallData = decodeTransaction(JSON.stringify(walletSimpleAbi_1.walletSimpleABI), sendMultisigCallData);
|
|
112
|
+
const safeTransferFromCallData = decodedSendMultisigCallData.args[2];
|
|
113
|
+
const decodedSafeTransferFromCallData = decodeTransaction(JSON.stringify(erc721Abi_1.erc721ABI), safeTransferFromCallData);
|
|
114
|
+
should_1.default.equal(decodedSafeTransferFromCallData.args[0].toLowerCase(), owner.toLowerCase());
|
|
115
|
+
should_1.default.equal(decodedSafeTransferFromCallData.args[1].toLowerCase(), recipient.toLowerCase());
|
|
116
|
+
should_1.default.equal(decodedSafeTransferFromCallData.args[2], tokenId);
|
|
117
|
+
});
|
|
118
|
+
it('should sign and build ERC721 transfer with Decoder pattern', async () => {
|
|
119
|
+
const txBuilder = (0, getBuilder_1.getBuilder)('hteth');
|
|
120
|
+
txBuilder.fee({
|
|
121
|
+
fee: '1000000000',
|
|
122
|
+
gasLimit: '12100000',
|
|
123
|
+
});
|
|
124
|
+
txBuilder.counter(2);
|
|
125
|
+
txBuilder.contract(contractAddress);
|
|
126
|
+
txBuilder.type(sdk_core_1.TransactionType.SendERC721);
|
|
127
|
+
const tokenId = '1';
|
|
128
|
+
const erc721Transfer = txBuilder.transfer(nftEncodings_1.erc721Encoding);
|
|
129
|
+
const sendMultisigCallData = erc721Transfer.signAndBuild(`${coin.chainId}`);
|
|
130
|
+
const decodedSendMultisigCallData = decodeTransaction(JSON.stringify(walletSimpleAbi_1.walletSimpleABI), sendMultisigCallData);
|
|
131
|
+
const safeTransferFromCallData = decodedSendMultisigCallData.args[2];
|
|
132
|
+
const decodedSafeTransferFromCallData = decodeTransaction(JSON.stringify(erc721Abi_1.erc721ABI), safeTransferFromCallData);
|
|
133
|
+
should_1.default.equal(decodedSafeTransferFromCallData.args[0].toLowerCase(), owner.toLowerCase());
|
|
134
|
+
should_1.default.equal(decodedSafeTransferFromCallData.args[1].toLowerCase(), recipient.toLowerCase());
|
|
135
|
+
should_1.default.equal(decodedSafeTransferFromCallData.args[2], tokenId);
|
|
136
|
+
});
|
|
137
|
+
it('should sign and build ERC1155 single transfer with Builder pattern', async () => {
|
|
138
|
+
const txBuilder = (0, getBuilder_1.getBuilder)('hteth');
|
|
139
|
+
txBuilder.fee({
|
|
140
|
+
fee: '1000000000',
|
|
141
|
+
gasLimit: '12100000',
|
|
142
|
+
});
|
|
143
|
+
txBuilder.counter(2);
|
|
144
|
+
txBuilder.contract(contractAddress);
|
|
145
|
+
txBuilder.type(sdk_core_1.TransactionType.SendERC1155);
|
|
146
|
+
const expireTime = 1590066728;
|
|
147
|
+
const sequenceId = 5;
|
|
148
|
+
const tokenId = 1;
|
|
149
|
+
const value = 10;
|
|
150
|
+
const erc1155Transfer = txBuilder.transfer();
|
|
151
|
+
erc1155Transfer
|
|
152
|
+
.from(owner)
|
|
153
|
+
.to(recipient)
|
|
154
|
+
.expirationTime(expireTime)
|
|
155
|
+
.tokenContractAddress(erc1155ContractAddress)
|
|
156
|
+
.contractSequenceId(sequenceId)
|
|
157
|
+
.entry(tokenId, value)
|
|
158
|
+
.key(key);
|
|
159
|
+
const sendMultisigCallData = erc1155Transfer.signAndBuild(`${coin.chainId}`);
|
|
160
|
+
const decodedSendMultisigCallData = decodeTransaction(JSON.stringify(walletSimpleAbi_1.walletSimpleABI), sendMultisigCallData);
|
|
161
|
+
const safeTransferFromCallData = decodedSendMultisigCallData.args[2];
|
|
162
|
+
const decodedSafeTransferFromCallData = decodeTransaction(JSON.stringify(erc1155Abi_1.ERC1155ABI), safeTransferFromCallData);
|
|
163
|
+
should_1.default.equal(decodedSafeTransferFromCallData.args[0].toLowerCase(), owner.toLowerCase());
|
|
164
|
+
should_1.default.equal(decodedSafeTransferFromCallData.args[1].toLowerCase(), recipient.toLowerCase());
|
|
165
|
+
should_1.default.equal(decodedSafeTransferFromCallData.args[2], tokenId);
|
|
166
|
+
should_1.default.equal(decodedSafeTransferFromCallData.args[3], value);
|
|
167
|
+
txBuilder.sign({ key: testData.PRIVATE_KEY });
|
|
168
|
+
await txBuilder.build();
|
|
169
|
+
});
|
|
170
|
+
it('should sign and build ERC1155 single transfer with Decoder pattern', async () => {
|
|
171
|
+
const txBuilder = (0, getBuilder_1.getBuilder)('hteth');
|
|
172
|
+
txBuilder.fee({
|
|
173
|
+
fee: '1000000000',
|
|
174
|
+
gasLimit: '12100000',
|
|
175
|
+
});
|
|
176
|
+
txBuilder.counter(2);
|
|
177
|
+
txBuilder.contract(contractAddress);
|
|
178
|
+
txBuilder.type(sdk_core_1.TransactionType.SendERC1155);
|
|
179
|
+
const tokenId = '1';
|
|
180
|
+
const value = '10';
|
|
181
|
+
const erc1155Transfer = txBuilder.transfer(nftEncodings_1.erc1155SafeTransferEncoding);
|
|
182
|
+
const sendMultisigCallData = erc1155Transfer.signAndBuild(`${coin.chainId}`);
|
|
183
|
+
const decodedSendMultisigCallData = decodeTransaction(JSON.stringify(walletSimpleAbi_1.walletSimpleABI), sendMultisigCallData);
|
|
184
|
+
const safeTransferFromCallData = decodedSendMultisigCallData.args[2];
|
|
185
|
+
const decodedSafeTransferFromCallData = decodeTransaction(JSON.stringify(erc1155Abi_1.ERC1155ABI), safeTransferFromCallData);
|
|
186
|
+
should_1.default.equal(decodedSafeTransferFromCallData.args[0].toLowerCase(), owner.toLowerCase());
|
|
187
|
+
should_1.default.equal(decodedSafeTransferFromCallData.args[1].toLowerCase(), recipient.toLowerCase());
|
|
188
|
+
should_1.default.equal(decodedSafeTransferFromCallData.args[2], tokenId);
|
|
189
|
+
should_1.default.equal(decodedSafeTransferFromCallData.args[3], value);
|
|
190
|
+
});
|
|
191
|
+
it('should sign and build ERC1155 batch transfer with Builder pattern', async () => {
|
|
192
|
+
const txBuilder = (0, getBuilder_1.getBuilder)('hteth');
|
|
193
|
+
txBuilder.fee({
|
|
194
|
+
fee: '1000000000',
|
|
195
|
+
gasLimit: '12100000',
|
|
196
|
+
});
|
|
197
|
+
txBuilder.counter(2);
|
|
198
|
+
txBuilder.contract(contractAddress);
|
|
199
|
+
txBuilder.type(sdk_core_1.TransactionType.SendERC1155);
|
|
200
|
+
const expireTime = 1590066728;
|
|
201
|
+
const sequenceId = 5;
|
|
202
|
+
const tokenIds = [1, 2, 3];
|
|
203
|
+
const values = [10, 10, 10];
|
|
204
|
+
const erc1155Transfer = txBuilder.transfer();
|
|
205
|
+
erc1155Transfer
|
|
206
|
+
.from(owner)
|
|
207
|
+
.to(recipient)
|
|
208
|
+
.expirationTime(expireTime)
|
|
209
|
+
.tokenContractAddress(erc1155ContractAddress)
|
|
210
|
+
.contractSequenceId(sequenceId)
|
|
211
|
+
.entry(tokenIds[0], values[0])
|
|
212
|
+
.entry(tokenIds[1], values[1])
|
|
213
|
+
.entry(tokenIds[2], values[2])
|
|
214
|
+
.key(key);
|
|
215
|
+
const sendMultisigCallData = erc1155Transfer.signAndBuild(`${coin.chainId}`);
|
|
216
|
+
const decodedSendMultisigCallData = decodeTransaction(JSON.stringify(walletSimpleAbi_1.walletSimpleABI), sendMultisigCallData);
|
|
217
|
+
const safeTransferFromCallData = decodedSendMultisigCallData.args[2];
|
|
218
|
+
const decodedSafeTransferFromCallData = decodeTransaction(JSON.stringify(erc1155Abi_1.ERC1155ABI), safeTransferFromCallData);
|
|
219
|
+
should_1.default.equal(decodedSafeTransferFromCallData.args[0].toLowerCase(), owner.toLowerCase());
|
|
220
|
+
should_1.default.equal(decodedSafeTransferFromCallData.args[1].toLowerCase(), recipient.toLowerCase());
|
|
221
|
+
should_1.default.deepEqual(decodedSafeTransferFromCallData.args[2].map((x) => x.toNumber()), tokenIds);
|
|
222
|
+
should_1.default.deepEqual(decodedSafeTransferFromCallData.args[3].map((x) => x.toNumber()), values);
|
|
223
|
+
});
|
|
224
|
+
it('should sign and build ERC1155 batch transfer with Decoder pattern', async () => {
|
|
225
|
+
const txBuilder = (0, getBuilder_1.getBuilder)('hteth');
|
|
226
|
+
txBuilder.fee({
|
|
227
|
+
fee: '1000000000',
|
|
228
|
+
gasLimit: '12100000',
|
|
229
|
+
});
|
|
230
|
+
txBuilder.counter(2);
|
|
231
|
+
txBuilder.contract(contractAddress);
|
|
232
|
+
txBuilder.type(sdk_core_1.TransactionType.SendERC1155);
|
|
233
|
+
const tokenIds = [1, 2, 3];
|
|
234
|
+
const values = [10, 10, 10];
|
|
235
|
+
const erc1155Transfer = txBuilder.transfer(nftEncodings_1.erc1155BatchTransferEncoding);
|
|
236
|
+
const sendMultisigCallData = erc1155Transfer.signAndBuild(`${coin.chainId}`);
|
|
237
|
+
const decodedSendMultisigCallData = decodeTransaction(JSON.stringify(walletSimpleAbi_1.walletSimpleABI), sendMultisigCallData);
|
|
238
|
+
const safeTransferFromCallData = decodedSendMultisigCallData.args[2];
|
|
239
|
+
const decodedSafeTransferFromCallData = decodeTransaction(JSON.stringify(erc1155Abi_1.ERC1155ABI), safeTransferFromCallData);
|
|
240
|
+
should_1.default.equal(decodedSafeTransferFromCallData.args[0].toLowerCase(), owner.toLowerCase());
|
|
241
|
+
should_1.default.equal(decodedSafeTransferFromCallData.args[1].toLowerCase(), recipient.toLowerCase());
|
|
242
|
+
should_1.default.deepEqual(decodedSafeTransferFromCallData.args[2].map((x) => x.toNumber()), tokenIds);
|
|
243
|
+
should_1.default.deepEqual(decodedSafeTransferFromCallData.args[3].map((x) => x.toNumber()), values);
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
function decodeTransaction(abi, calldata) {
|
|
247
|
+
const contractInterface = new ethers_1.ethers.utils.Interface(abi);
|
|
248
|
+
return contractInterface.parseTransaction({ data: calldata });
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZE5GVC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvc2VuZE5GVC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUFrRDtBQUNsRCw0Q0FBMEU7QUFFMUUsOERBQWdEO0FBQ2hELG1DQUFnQztBQUNoQyxvREFBNEI7QUFDNUIsMkRBQXdEO0FBQ3hELHFFQUFrRTtBQUNsRSx5REFBc0Q7QUFDdEQsK0RBSXNDO0FBQ3RDLDhDQUEyQztBQUUzQyxRQUFRLENBQUMsaUNBQWlDLEVBQUUsR0FBRyxFQUFFO0lBQy9DLGtCQUFrQjtJQUNsQixNQUFNLEtBQUssR0FBRyw0Q0FBNEMsQ0FBQztJQUMzRCxNQUFNLFNBQVMsR0FBRyw0Q0FBNEMsQ0FBQztJQUMvRCxNQUFNLGVBQWUsR0FBRyw0Q0FBNEMsQ0FBQztJQUVyRSxhQUFhO0lBQ2IsTUFBTSxxQkFBcUIsR0FBRyw0Q0FBNEMsQ0FBQztJQUMzRSxrQkFBa0I7SUFDbEIsTUFBTSxzQkFBc0IsR0FBRyw0Q0FBNEMsQ0FBQztJQUM1RSxNQUFNLElBQUksR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBOEIsQ0FBQztJQUM3RCxJQUFJLEdBQUcsQ0FBQztJQUVSLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxHQUFHLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFhLENBQUM7SUFDckQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNkJBQTZCLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDM0MsTUFBTSxTQUFTLEdBQUcsSUFBQSx1QkFBVSxFQUFDLE9BQU8sQ0FBdUIsQ0FBQztRQUM1RCxTQUFTLENBQUMsR0FBRyxDQUFDO1lBQ1osR0FBRyxFQUFFLFlBQVk7WUFDakIsUUFBUSxFQUFFLFVBQVU7U0FDckIs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LGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQVUsQ0FBQyxFQUFFLHdCQUF3QixDQUFDLENBQUM7UUFFaEgsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3pGLGdCQUFNLENBQUMsS0FBSyxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM3RixnQkFBTSxDQUFDLFNBQVMsQ0FDZCwrQkFBK0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsRUFDaEUsUUFBUSxDQUNULENBQUM7UUFDRixnQkFBTSxDQUFDLFNBQVMsQ0FDZCwrQkFBK0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsRUFDaEUsTUFBTSxDQUNQLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxpQkFBaUIsQ0FBQyxHQUFXLEVBQUUsUUFBZ0I7SUFDdEQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGVBQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFELE9BQU8saUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUNoRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IGNvaW5zLCBFdGhlcmV1bU5ldHdvcmsgYXMgRXRoTGlrZU5ldHdvcmsgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBFUkMxMTU1VHJhbnNmZXJCdWlsZGVyLCBFUkM3MjFUcmFuc2ZlckJ1aWxkZXIsIFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZXRoJztcbmltcG9ydCB7IGV0aGVycyB9IGZyb20gJ2V0aGVycyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBFUkMxMTU1QUJJIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2VyYzExNTVBYmknO1xuaW1wb3J0IHsgd2FsbGV0U2ltcGxlQUJJIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3dhbGxldFNpbXBsZUFiaSc7XG5pbXBvcnQgeyBlcmM3MjFBQkkgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZXJjNzIxQWJpJztcbmltcG9ydCB7XG4gIGVyYzExNTVCYXRjaFRyYW5zZmVyRW5jb2RpbmcsXG4gIGVyYzExNTVTYWZlVHJhbnNmZXJFbmNvZGluZyxcbiAgZXJjNzIxRW5jb2RpbmcsXG59IGZyb20gJy4uLy4uL3Jlc291cmNlcy9uZnRFbmNvZGluZ3MnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlciB9IGZyb20gJy4uL2dldEJ1aWxkZXInO1xuXG5kZXNjcmliZSgnRXRoIHRyYW5zYWN0aW9uIGJ1aWxkZXIgc2VuZE5GVCcsICgpID0+IHtcbiAgLy8gZHVtbXkgYWRkcmVzc2VzXG4gIGNvbnN0IG93bmVyID0gJzB4MTk2NDUwMzJjN2YxNTMzMzk1ZDQ0YTYyOTQ2MmU3NTEwODRkM2U0ZCc7XG4gIGNvbnN0IHJlY2lwaWVudCA9ICcweDE5NjQ1MDMyYzdmMTUzMzM5NWQ0NGE2Mjk0NjJlNzUxMDg0ZDNlNGMnO1xuICBjb25zdCBjb250cmFjdEFkZHJlc3MgPSAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJztcblxuICAvLyBlbnMgZXJjNzIxXG4gIGNvbnN0IGVyYzcyMUNvbnRyYWN0QWRkcmVzcyA9ICcweDU3ZjE4ODdhOGJmMTliMTRmYzBkZjZmZDliMmFjYzlhZjE0N2VhODUnO1xuICAvLyBvcGVuc2VhIGVyYzExNTVcbiAgY29uc3QgZXJjMTE1NUNvbnRyYWN0QWRkcmVzcyA9ICcweDQ5NWY5NDcyNzY3NDljZTY0NmY2OGFjOGMyNDg0MjAwNDVjYjdiNWUnO1xuICBjb25zdCBjb2luID0gY29pbnMuZ2V0KCdodGV0aCcpIGFzIHVua25vd24gYXMgRXRoTGlrZU5ldHdvcms7XG4gIGxldCBrZXk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAga2V5ID0gdGVzdERhdGEuS0VZUEFJUl9QUlYuZ2V0S2V5cygpLnBydiBhcyBzdHJpbmc7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc2lnbiBFUkM3MjEgcHJvcGVybHknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcignaHRldGgnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgdHhCdWlsZGVyLmZlZSh7XG4gICAgICBmZWU6ICcxMDAwMDAwMDAwJyxcbiAgICAgIGdhc0xpbWl0OiAnMTIxMDAwMDAnLFxuICAgIH0pO1xuICAgIHR4QnVpbGRlci5jb3VudGVyKDIpO1xuICAgIHR4QnVpbGRlci5jb250cmFjdChjb250cmFjdEFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5TZW5kRVJDNzIxKTtcblxuICAgIC8vIER1bW15IGFkZHJlc3Nlc1xuICAgIGNvbnN0IGV4cGlyZVRpbWUgPSAxNTkwMDY2NzI4O1xuICAgIGNvbnN0IHNlcXVlbmNlSWQgPSA1O1xuICAgIGNvbnN0IHRva2VuSWQgPSAnMSc7XG5cbiAgICBjb25zdCBlcmM3MjFUcmFuc2ZlciA9IHR4QnVpbGRlci50cmFuc2ZlcigpIGFzIEVSQzcyMVRyYW5zZmVyQnVpbGRlcjtcbiAgICBlcmM3MjFUcmFuc2ZlclxuICAgICAgLmZyb20ob3duZXIpXG4gICAgICAudG8ocmVjaXBpZW50KVxuICAgICAgLmV4cGlyYXRpb25UaW1lKGV4cGlyZVRpbWUpXG4gICAgICAudG9rZW5Db250cmFjdEFkZHJlc3MoZXJjNzIxQ29udHJhY3RBZGRyZXNzKVxuICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZChzZXF1ZW5jZUlkKVxuICAgICAgLnRva2VuSWQodG9rZW5JZClcbiAgICAgIC5rZXkoa2V5KTtcblxuICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5QUklWQVRFX0tFWSB9KTtcbiAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaWduIGFuZCBidWlsZCBFUkM3MjEgdHJhbnNmZXIgd2l0aCBCdWlsZGVyIHBhdHRlcm4nLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcignaHRldGgnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgdHhCdWlsZGVyLmZlZSh7XG4gICAgICBmZWU6ICcxMDAwMDAwMDAwJyxcbiAgICAgIGdhc0xpbWl0OiAnMTIxMDAwMDAnLFxuICAgIH0pO1xuICAgIHR4QnVpbGRlci5jb3VudGVyKDIpO1xuICAgIHR4QnVpbGRlci5jb250cmFjdChjb250cmFjdEFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5TZW5kRVJDNzIxKTtcblxuICAgIC8vIER1bW15IGFkZHJlc3Nlc1xuICAgIGNvbnN0IGV4cGlyZVRpbWUgPSAxNTkwMDY2NzI4O1xuICAgIGNvbnN0IHNlcXVlbmNlSWQgPSA1O1xuICAgIGNvbnN0IHRva2VuSWQgPSAnMSc7XG5cbiAgICBjb25zdCBlcmM3MjFUcmFuc2ZlciA9IHR4QnVpbGRlci50cmFuc2ZlcigpIGFzIEVSQzcyMVRyYW5zZmVyQnVpbGRlcjtcbiAgICBlcmM3MjFUcmFuc2ZlclxuICAgICAgLmZyb20ob3duZXIpXG4gICAgICAudG8ocmVjaXBpZW50KVxuICAgICAgLmV4cGlyYXRpb25UaW1lKGV4cGlyZVRpbWUpXG4gICAgICAudG9rZW5Db250cmFjdEFkZHJlc3MoZXJjNzIxQ29udHJhY3RBZGRyZXNzKVxuICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZChzZXF1ZW5jZUlkKVxuICAgICAgLnRva2VuSWQodG9rZW5JZClcbiAgICAgIC5rZXkoa2V5KTtcblxuICAgIGNvbnN0IHNlbmRNdWx0aXNpZ0NhbGxEYXRhID0gZXJjNzIxVHJhbnNmZXIuc2lnbkFuZEJ1aWxkKGAke2NvaW4uY2hhaW5JZH1gKTtcbiAgICBjb25zdCBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEgPSBkZWNvZGVUcmFuc2FjdGlvbihKU09OLnN0cmluZ2lmeSh3YWxsZXRTaW1wbGVBQkkpLCBzZW5kTXVsdGlzaWdDYWxsRGF0YSk7XG5cbiAgICBjb25zdCBzYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEgPSBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEuYXJnc1syXTtcbiAgICBjb25zdCBkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhID0gZGVjb2RlVHJhbnNhY3Rpb24oSlNPTi5zdHJpbmdpZnkoZXJjNzIxQUJJKSwgc2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhKTtcblxuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMF0udG9Mb3dlckNhc2UoKSwgb3duZXIudG9Mb3dlckNhc2UoKSk7XG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1sxXS50b0xvd2VyQ2FzZSgpLCByZWNpcGllbnQudG9Mb3dlckNhc2UoKSk7XG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1syXSwgdG9rZW5JZCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc2lnbiBhbmQgYnVpbGQgRVJDNzIxIHRyYW5zZmVyIHdpdGggRGVjb2RlciBwYXR0ZXJuJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ2h0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgZmVlOiAnMTAwMDAwMDAwMCcsXG4gICAgICBnYXNMaW1pdDogJzEyMTAwMDAwJyxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIuY291bnRlcigyKTtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3QoY29udHJhY3RBZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuU2VuZEVSQzcyMSk7XG5cbiAgICBjb25zdCB0b2tlbklkID0gJzEnO1xuXG4gICAgY29uc3QgZXJjNzIxVHJhbnNmZXIgPSB0eEJ1aWxkZXIudHJhbnNmZXIoZXJjNzIxRW5jb2RpbmcpIGFzIEVSQzcyMVRyYW5zZmVyQnVpbGRlcjtcbiAgICBjb25zdCBzZW5kTXVsdGlzaWdDYWxsRGF0YSA9IGVyYzcyMVRyYW5zZmVyLnNpZ25BbmRCdWlsZChgJHtjb2luLmNoYWluSWR9YCk7XG4gICAgY29uc3QgZGVjb2RlZFNlbmRNdWx0aXNpZ0NhbGxEYXRhID0gZGVjb2RlVHJhbnNhY3Rpb24oSlNPTi5zdHJpbmdpZnkod2FsbGV0U2ltcGxlQUJJKSwgc2VuZE11bHRpc2lnQ2FsbERhdGEpO1xuXG4gICAgY29uc3Qgc2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhID0gZGVjb2RlZFNlbmRNdWx0aXNpZ0NhbGxEYXRhLmFyZ3NbMl07XG4gICAgY29uc3QgZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSA9IGRlY29kZVRyYW5zYWN0aW9uKEpTT04uc3RyaW5naWZ5KGVyYzcyMUFCSSksIHNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSk7XG5cbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzBdLnRvTG93ZXJDYXNlKCksIG93bmVyLnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMV0udG9Mb3dlckNhc2UoKSwgcmVjaXBpZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMl0sIHRva2VuSWQpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHNpZ24gYW5kIGJ1aWxkIEVSQzExNTUgc2luZ2xlIHRyYW5zZmVyIHdpdGggQnVpbGRlciBwYXR0ZXJuJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ2h0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgZmVlOiAnMTAwMDAwMDAwMCcsXG4gICAgICBnYXNMaW1pdDogJzEyMTAwMDAwJyxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIuY291bnRlcigyKTtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3QoY29udHJhY3RBZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuU2VuZEVSQzExNTUpO1xuXG4gICAgY29uc3QgZXhwaXJlVGltZSA9IDE1OTAwNjY3Mjg7XG4gICAgY29uc3Qgc2VxdWVuY2VJZCA9IDU7XG4gICAgY29uc3QgdG9rZW5JZCA9IDE7XG4gICAgY29uc3QgdmFsdWUgPSAxMDtcblxuICAgIGNvbnN0IGVyYzExNTVUcmFuc2ZlciA9IHR4QnVpbGRlci50cmFuc2ZlcigpIGFzIEVSQzExNTVUcmFuc2ZlckJ1aWxkZXI7XG4gICAgZXJjMTE1NVRyYW5zZmVyXG4gICAgICAuZnJvbShvd25lcilcbiAgICAgIC50byhyZWNpcGllbnQpXG4gICAgICAuZXhwaXJhdGlvblRpbWUoZXhwaXJlVGltZSlcbiAgICAgIC50b2tlbkNvbnRyYWN0QWRkcmVzcyhlcmMxMTU1Q29udHJhY3RBZGRyZXNzKVxuICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZChzZXF1ZW5jZUlkKVxuICAgICAgLmVudHJ5KHRva2VuSWQsIHZhbHVlKVxuICAgICAgLmtleShrZXkpO1xuXG4gICAgY29uc3Qgc2VuZE11bHRpc2lnQ2FsbERhdGEgPSBlcmMxMTU1VHJhbnNmZXIuc2lnbkFuZEJ1aWxkKGAke2NvaW4uY2hhaW5JZH1gKTtcbiAgICBjb25zdCBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEgPSBkZWNvZGVUcmFuc2FjdGlvbihKU09OLnN0cmluZ2lmeSh3YWxsZXRTaW1wbGVBQkkpLCBzZW5kTXVsdGlzaWdDYWxsRGF0YSk7XG5cbiAgICBjb25zdCBzYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEgPSBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEuYXJnc1syXTtcbiAgICBjb25zdCBkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhID0gZGVjb2RlVHJhbnNhY3Rpb24oSlNPTi5zdHJpbmdpZnkoRVJDMTE1NUFCSSksIHNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSk7XG5cbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzBdLnRvTG93ZXJDYXNlKCksIG93bmVyLnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMV0udG9Mb3dlckNhc2UoKSwgcmVjaXBpZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMl0sIHRva2VuSWQpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbM10sIHZhbHVlKTtcblxuICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5QUklWQVRFX0tFWSB9KTtcbiAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaWduIGFuZCBidWlsZCBFUkMxMTU1IHNpbmdsZSB0cmFuc2ZlciB3aXRoIERlY29kZXIgcGF0dGVybicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzEwMDAwMDAwMDAnLFxuICAgICAgZ2FzTGltaXQ6ICcxMjEwMDAwMCcsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLmNvdW50ZXIoMik7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0KGNvbnRyYWN0QWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLlNlbmRFUkMxMTU1KTtcblxuICAgIGNvbnN0IHRva2VuSWQgPSAnMSc7XG4gICAgY29uc3QgdmFsdWUgPSAnMTAnO1xuXG4gICAgY29uc3QgZXJjMTE1NVRyYW5zZmVyID0gdHhCdWlsZGVyLnRyYW5zZmVyKGVyYzExNTVTYWZlVHJhbnNmZXJFbmNvZGluZykgYXMgRVJDMTE1NVRyYW5zZmVyQnVpbGRlcjtcbiAgICBjb25zdCBzZW5kTXVsdGlzaWdDYWxsRGF0YSA9IGVyYzExNTVUcmFuc2Zlci5zaWduQW5kQnVpbGQoYCR7Y29pbi5jaGFpbklkfWApO1xuXG4gICAgY29uc3QgZGVjb2RlZFNlbmRNdWx0aXNpZ0NhbGxEYXRhID0gZGVjb2RlVHJhbnNhY3Rpb24oSlNPTi5zdHJpbmdpZnkod2FsbGV0U2ltcGxlQUJJKSwgc2VuZE11bHRpc2lnQ2FsbERhdGEpO1xuXG4gICAgY29uc3Qgc2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhID0gZGVjb2RlZFNlbmRNdWx0aXNpZ0NhbGxEYXRhLmFyZ3NbMl07XG4gICAgY29uc3QgZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSA9IGRlY29kZVRyYW5zYWN0aW9uKEpTT04uc3RyaW5naWZ5KEVSQzExNTVBQkkpLCBzYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEpO1xuXG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1swXS50b0xvd2VyQ2FzZSgpLCBvd25lci50b0xvd2VyQ2FzZSgpKTtcbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzFdLnRvTG93ZXJDYXNlKCksIHJlY2lwaWVudC50b0xvd2VyQ2FzZSgpKTtcbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzJdLCB0b2tlbklkKTtcbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzNdLCB2YWx1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc2lnbiBhbmQgYnVpbGQgRVJDMTE1NSBiYXRjaCB0cmFuc2ZlciB3aXRoIEJ1aWxkZXIgcGF0dGVybicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzEwMDAwMDAwMDAnLFxuICAgICAgZ2FzTGltaXQ6ICcxMjEwMDAwMCcsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLmNvdW50ZXIoMik7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0KGNvbnRyYWN0QWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLlNlbmRFUkMxMTU1KTtcblxuICAgIGNvbnN0IGV4cGlyZVRpbWUgPSAxNTkwMDY2NzI4O1xuICAgIGNvbnN0IHNlcXVlbmNlSWQgPSA1O1xuICAgIGNvbnN0IHRva2VuSWRzID0gWzEsIDIsIDNdO1xuICAgIGNvbnN0IHZhbHVlcyA9IFsxMCwgMTAsIDEwXTtcblxuICAgIGNvbnN0IGVyYzExNTVUcmFuc2ZlciA9IHR4QnVpbGRlci50cmFuc2ZlcigpIGFzIEVSQzExNTVUcmFuc2ZlckJ1aWxkZXI7XG4gICAgZXJjMTE1NVRyYW5zZmVyXG4gICAgICAuZnJvbShvd25lcilcbiAgICAgIC50byhyZWNpcGllbnQpXG4gICAgICAuZXhwaXJhdGlvblRpbWUoZXhwaXJlVGltZSlcbiAgICAgIC50b2tlbkNvbnRyYWN0QWRkcmVzcyhlcmMxMTU1Q29udHJhY3RBZGRyZXNzKVxuICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZChzZXF1ZW5jZUlkKVxuICAgICAgLmVudHJ5KHRva2VuSWRzWzBdLCB2YWx1ZXNbMF0pXG4gICAgICAuZW50cnkodG9rZW5JZHNbMV0sIHZhbHVlc1sxXSlcbiAgICAgIC5lbnRyeSh0b2tlbklkc1syXSwgdmFsdWVzWzJdKVxuICAgICAgLmtleShrZXkpO1xuXG4gICAgY29uc3Qgc2VuZE11bHRpc2lnQ2FsbERhdGEgPSBlcmMxMTU1VHJhbnNmZXIuc2lnbkFuZEJ1aWxkKGAke2NvaW4uY2hhaW5JZH1gKTtcbiAgICBjb25zdCBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEgPSBkZWNvZGVUcmFuc2FjdGlvbihKU09OLnN0cmluZ2lmeSh3YWxsZXRTaW1wbGVBQkkpLCBzZW5kTXVsdGlzaWdDYWxsRGF0YSk7XG5cbiAgICBjb25zdCBzYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEgPSBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEuYXJnc1syXTtcbiAgICBjb25zdCBkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhID0gZGVjb2RlVHJhbnNhY3Rpb24oSlNPTi5zdHJpbmdpZnkoRVJDMTE1NUFCSSksIHNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSk7XG5cbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzBdLnRvTG93ZXJDYXNlKCksIG93bmVyLnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMV0udG9Mb3dlckNhc2UoKSwgcmVjaXBpZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoXG4gICAgICBkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMl0ubWFwKCh4KSA9PiB4LnRvTnVtYmVyKCkpLFxuICAgICAgdG9rZW5JZHNcbiAgICApO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoXG4gICAgICBkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbM10ubWFwKCh4KSA9PiB4LnRvTnVtYmVyKCkpLFxuICAgICAgdmFsdWVzXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaWduIGFuZCBidWlsZCBFUkMxMTU1IGJhdGNoIHRyYW5zZmVyIHdpdGggRGVjb2RlciBwYXR0ZXJuJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ2h0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgZmVlOiAnMTAwMDAwMDAwMCcsXG4gICAgICBnYXNMaW1pdDogJzEyMTAwMDAwJyxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIuY291bnRlcigyKTtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3QoY29udHJhY3RBZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuU2VuZEVSQzExNTUpO1xuXG4gICAgY29uc3QgdG9rZW5JZHMgPSBbMSwgMiwgM107XG4gICAgY29uc3QgdmFsdWVzID0gWzEwLCAxMCwgMTBdO1xuXG4gICAgY29uc3QgZXJjMTE1NVRyYW5zZmVyID0gdHhCdWlsZGVyLnRyYW5zZmVyKGVyYzExNTVCYXRjaFRyYW5zZmVyRW5jb2RpbmcpIGFzIEVSQzExNTVUcmFuc2ZlckJ1aWxkZXI7XG5cbiAgICBjb25zdCBzZW5kTXVsdGlzaWdDYWxsRGF0YSA9IGVyYzExNTVUcmFuc2Zlci5zaWduQW5kQnVpbGQoYCR7Y29pbi5jaGFpbklkfWApO1xuICAgIGNvbnN0IGRlY29kZWRTZW5kTXVsdGlzaWdDYWxsRGF0YSA9IGRlY29kZVRyYW5zYWN0aW9uKEpTT04uc3RyaW5naWZ5KHdhbGxldFNpbXBsZUFCSSksIHNlbmRNdWx0aXNpZ0NhbGxEYXRhKTtcblxuICAgIGNvbnN0IHNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSA9IGRlY29kZWRTZW5kTXVsdGlzaWdDYWxsRGF0YS5hcmdzWzJdO1xuICAgIGNvbnN0IGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEgPSBkZWNvZGVUcmFuc2FjdGlvbihKU09OLnN0cmluZ2lmeShFUkMxMTU1QUJJKSwgc2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhKTtcblxuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMF0udG9Mb3dlckNhc2UoKSwgb3duZXIudG9Mb3dlckNhc2UoKSk7XG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1sxXS50b0xvd2VyQ2FzZSgpLCByZWNpcGllbnQudG9Mb3dlckNhc2UoKSk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbChcbiAgICAgIGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1syXS5tYXAoKHgpID0+IHgudG9OdW1iZXIoKSksXG4gICAgICB0b2tlbklkc1xuICAgICk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbChcbiAgICAgIGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1szXS5tYXAoKHgpID0+IHgudG9OdW1iZXIoKSksXG4gICAgICB2YWx1ZXNcbiAgICApO1xuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiBkZWNvZGVUcmFuc2FjdGlvbihhYmk6IHN0cmluZywgY2FsbGRhdGE6IHN0cmluZykge1xuICBjb25zdCBjb250cmFjdEludGVyZmFjZSA9IG5ldyBldGhlcnMudXRpbHMuSW50ZXJmYWNlKGFiaSk7XG4gIHJldHVybiBjb250cmFjdEludGVyZmFjZS5wYXJzZVRyYW5zYWN0aW9uKHsgZGF0YTogY2FsbGRhdGEgfSk7XG59XG4iXX0=
|
|
@@ -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/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlU2lnU2VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvc2luZ2xlU2lnU2VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw4Q0FBa0Q7QUFDbEQsc0NBQTZFO0FBQzdFLDhDQUEyQztBQUUzQyxRQUFRLENBQUMsc0NBQXNDLEVBQUU7SUFDL0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxhQUFPLENBQUM7UUFDakMsR0FBRyxFQUFFLGtFQUFrRTtLQUN4RSxDQUFDLENBQUM7SUFVSCxNQUFNLGdCQUFnQixHQUFHLEtBQUssV0FBVyxPQUFzQjtRQUM3RCxNQUFNLFNBQVMsR0FBUSxJQUFBLHVCQUFVLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTlDLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3BDLG1FQUFtRTtZQUNuRSxnRUFBZ0U7WUFDaEUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5QixTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLFNBQVMsQ0FBQyxPQUFPLENBQUMs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LENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEVUSFRyYW5zYWN0aW9uVHlwZSwgRmVlLCBLZXlQYWlyLCBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBnZXRCdWlsZGVyIH0gZnJvbSAnLi4vZ2V0QnVpbGRlcic7XG5cbmRlc2NyaWJlKCdFdGggVHJhbnNhY3Rpb24gYnVpbGRlciBmbHVzaCB0b2tlbnMnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGRlZmF1bHRLZXlQYWlyID0gbmV3IEtleVBhaXIoe1xuICAgIHBydjogJ0ZBQzREMDRBQTAwMjVFQ0YyMDBENzRCQzlCNUU0NjE2RTRCODMzOEI2OUI2MTM2MkFBQUQ0OUY3NkU2OEVGMjgnLFxuICB9KTtcblxuICBpbnRlcmZhY2UgU2luZ2xlU2lnU2VuZCB7XG4gICAgdmFsdWU/OiBzdHJpbmc7XG4gICAgcmVjaXBpZW50Pzogc3RyaW5nO1xuICAgIGNvdW50ZXI/OiBudW1iZXI7XG4gICAgZmVlPzogRmVlO1xuICAgIGtleT86IEtleVBhaXI7XG4gIH1cblxuICBjb25zdCBidWlsZFRyYW5zYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gKGRldGFpbHM6IFNpbmdsZVNpZ1NlbmQpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHhCdWlsZGVyOiBhbnkgPSBnZXRCdWlsZGVyKCd0ZXRoJyk7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLlNpbmdsZVNpZ1NlbmQpO1xuXG4gICAgaWYgKGRldGFpbHMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHhCdWlsZGVyLnZhbHVlKGRldGFpbHMudmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChkZXRhaWxzLnJlY2lwaWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBtYWpvcml0eSBvZiBjYWxscyB0aGUgZXh0ZXJuYWwgcmVjaXBpZW50IGlzIHRoZSBjb250cmFjdCBhZGRyZXNzXG4gICAgICAvLyB1bmZvcnR1bmF0ZSBvdXRjcm9wcGluZyB0aGF0IGluIHRoaXMgY2FzZSBpdCBpcyB0aGUgcmVjaXBpZW50XG4gICAgICB0eEJ1aWxkZXIuY29udHJhY3QoZGV0YWlscy5yZWNpcGllbnQpO1xuICAgIH1cblxuICAgIGlmIChkZXRhaWxzLmZlZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0eEJ1aWxkZXIuZmVlKGRldGFpbHMuZmVlKTtcbiAgICB9XG5cbiAgICBpZiAoZGV0YWlscy5jb3VudGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHR4QnVpbGRlci5jb3VudGVyKGRldGFpbHMuY291bnRlcik7XG4gICAgfVxuXG4gICAgaWYgKGRldGFpbHMua2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBkZXRhaWxzLmtleS5nZXRLZXlzKCkucHJ2IH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgfTtcblxuICBkZXNjcmliZSgnc2hvdWxkIGJ1aWxkJywgKCkgPT4ge1xuICAgIGl0KCdhIHNpbmdsZSBzaWcgc2VuZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgIGZlZToge1xuICAgICAgICAgIGZlZTogJzEwJyxcbiAgICAgICAgICBnYXNMaW1pdDogJzEwMDAnLFxuICAgICAgICB9LFxuICAgICAgICBjb3VudGVyOiAxLFxuICAgICAgICByZWNpcGllbnQ6ICcweGJjZjkzNWQyMDZjYTMyOTI5ZTFiODg3YTA3ZWQyNDBmMGQ4Y2NkMjInLFxuICAgICAgICB2YWx1ZTogJzEyMycsXG4gICAgICB9KTtcblxuICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLlNpbmdsZVNpZ1NlbmQpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICB0eEpzb24uZ2FzTGltaXQuc2hvdWxkLmVxdWFsKCcxMDAwJyk7XG4gICAgICB0eEpzb24uX3R5cGUuc2hvdWxkLmVxdWFscyhFVEhUcmFuc2FjdGlvblR5cGUuTEVHQUNZKTtcbiAgICAgIHR4SnNvbi5nYXNQcmljZSEuc2hvdWxkLmVxdWFsKCcxMCcpO1xuICAgICAgdHhKc29uLnZhbHVlLnNob3VsZC5lcXVhbCgnMTIzJyk7XG4gICAgICB0eEpzb24ubm9uY2Uuc2hvdWxkLmVxdWFsKDEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Egc2luZ2xlIHNpZyBzZW5kIHdpdGggbm9uY2UgMCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgIGZlZToge1xuICAgICAgICAgIGZlZTogJzEwJyxcbiAgICAgICAgICBnYXNMaW1pdDogJzEwMDAnLFxuICAgICAgICB9LFxuICAgICAgICBjb3VudGVyOiAwLFxuICAgICAgICByZWNpcGllbnQ6ICcweGJjZjkzNWQyMDZjYTMyOTI5ZTFiODg3YTA3ZWQyNDBmMGQ4Y2NkMjInLFxuICAgICAgICB2YWx1ZTogJzEyMycsXG4gICAgICB9KTtcblxuICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLlNpbmdsZVNpZ1NlbmQpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICB0eEpzb24uZ2FzTGltaXQuc2hvdWxkLmVxdWFsKCcxMDAwJyk7XG4gICAgICB0eEpzb24uX3R5cGUuc2hvdWxkLmVxdWFscyhFVEhUcmFuc2FjdGlvblR5cGUuTEVHQUNZKTtcbiAgICAgIHR4SnNvbi5nYXNQcmljZSEuc2hvdWxkLmVxdWFsKCcxMCcpO1xuICAgICAgdHhKc29uLnZhbHVlLnNob3VsZC5lcXVhbCgnMTIzJyk7XG4gICAgICB0eEpzb24ubm9uY2Uuc2hvdWxkLmVxdWFsKDApO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi52LCAnMHg3NycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FuIHVuc2lnbmVkIHNpbmdsZSBzaWcgc2VuZCBmcm9tIHNlcmlhbGl6ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6ICcxMCcsXG4gICAgICAgICAgZ2FzTGltaXQ6ICcxMDAwJyxcbiAgICAgICAgfSxcbiAgICAgICAgY291bnRlcjogMCxcbiAgICAgICAgcmVjaXBpZW50OiAnMHhiY2Y5MzVkMjA2Y2EzMjkyOWUxYjg4N2EwN2VkMjQwZjBkOGNjZDIyJyxcbiAgICAgICAgdmFsdWU6ICcxMjMnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgLy8gbm93IHJlYnVpbGQgZnJvbSB0aGUgdW5zaWduZWQgc2lnbmVkIHNlcmlhbGl6ZWQgdHggYW5kIG1ha2Ugc3VyZSBpdCBzdGF5cyB0aGUgc2FtZVxuICAgICAgY29uc3QgbmV3VHhCdWlsZGVyOiBhbnkgPSBnZXRCdWlsZGVyKCd0ZXRoJyk7XG4gICAgICBuZXdUeEJ1aWxkZXIuZnJvbShzZXJpYWxpemVkKTtcbiAgICAgIGNvbnN0IG5ld1R4ID0gYXdhaXQgbmV3VHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXF1YWwobmV3VHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgc2VyaWFsaXplZCk7XG4gICAgICBzaG91bGQuZXF1YWwobmV3VHgudG9Kc29uKCkudiwgJzB4NzcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHNpZ25lZCBzaW5nbGUgc2lnIHNlbmQgZnJvbSBzZXJpYWxpemVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgZmVlOiB7XG4gICAgICAgICAgZmVlOiAnMTAnLFxuICAgICAgICAgIGdhc0xpbWl0OiAnMTAwMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvdW50ZXI6IDAsXG4gICAgICAgIHJlY2lwaWVudDogJzB4NTNiOGU5MWJiM2I4ZjYxOGI1ZjAxMDA0ZWYxMDhmMTM0ZjIxOTU3MycsXG4gICAgICAgIHZhbHVlOiAnMTIzJyxcbiAgICAgICAga2V5OiBkZWZhdWx0S2V5UGFpcixcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIC8vIG5vdyByZWJ1aWxkIGZyb20gdGhlIHNpZ25lZCBzZXJpYWxpemVkIHR4IGFuZCBtYWtlIHN1cmUgaXQgc3RheXMgdGhlIHNhbWVcbiAgICAgIGNvbnN0IG5ld1R4QnVpbGRlcjogYW55ID0gZ2V0QnVpbGRlcigndGV0aCcpO1xuICAgICAgbmV3VHhCdWlsZGVyLmZyb20oc2VyaWFsaXplZCk7XG4gICAgICBjb25zdCBuZXdUeCA9IGF3YWl0IG5ld1R4QnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKG5ld1R4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHNlcmlhbGl6ZWQpO1xuICAgICAgc2hvdWxkLmVxdWFsKG5ld1R4LmlkLCAnMHg1ZGZhMjcyNjMzNGJiNWU4MDBhZGZkMTUxMjk5ZjNhZjlhMWRjZjBjZWM3ZGM1MTA3YjRiMjRkZTEzMzgxNzNhJyk7XG4gICAgICBjb25zdCB0eEpzb24gPSBuZXdUeC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5leGlzdCh0eEpzb24udik7XG4gICAgICBzaG91bGQuZXhpc3QodHhKc29uLnIpO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi5zKTtcbiAgICAgIHNob3VsZC5leGlzdCh0eEpzb24uZnJvbSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYW4gdW5zaWduZWQgc2luZ2xlIHNpZyBzZW5kIGZyb20gc2VyaWFsaXplZCB3aXRoIGZpbmFsIHYnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6ICcxMCcsXG4gICAgICAgICAgZ2FzTGltaXQ6ICcxMDAwJyxcbiAgICAgICAgfSxcbiAgICAgICAgY291bnRlcjogMCxcbiAgICAgICAgcmVjaXBpZW50OiAnMHhiY2Y5MzVkMjA2Y2EzMjkyOWUxYjg4N2EwN2VkMjQwZjBkOGNjZDIyJyxcbiAgICAgICAgdmFsdWU6ICcxMjMnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgLy8gbm93IHJlYnVpbGQgZnJvbSB0aGUgdW5zaWduZWQgc2lnbmVkIHNlcmlhbGl6ZWQgdHggYW5kIG1ha2Ugc3VyZSBpdCBzdGF5cyB0aGUgc2FtZVxuICAgICAgY29uc3QgbmV3VHhCdWlsZGVyOiBhbnkgPSBnZXRCdWlsZGVyKCd0ZXRoJyk7XG4gICAgICBuZXdUeEJ1aWxkZXIuZnJvbShzZXJpYWxpemVkKTtcbiAgICAgIGNvbnN0IG5ld1R4ID0gYXdhaXQgbmV3VHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXF1YWwobmV3VHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgc2VyaWFsaXplZCk7XG4gICAgICBuZXdUeC50b0pzb24oKS52LnNob3VsZC5lcXVhbCgnMHg3NycpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2hvdWxkIGZhaWwgdG8gYnVpbGQnLCAoKSA9PiB7XG4gICAgaXQoJ2EgdHJhbnNhY3Rpb24gd2l0aG91dCBmZWUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgY291bnRlcjogMCxcbiAgICAgICAgcmVjaXBpZW50OiAnMHg1M2I4ZTkxYmIzYjhmNjE4YjVmMDEwMDRlZjEwOGYxMzRmMjE5NTczJyxcbiAgICAgICAgdmFsdWU6ICcxMjMnLFxuICAgICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBmZWUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHRyYW5zYWN0aW9uIHdpdGhvdXQgcmVjaXBpZW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgIGZlZToge1xuICAgICAgICAgIGZlZTogJzEwJyxcbiAgICAgICAgICBnYXNMaW1pdDogJzEwJyxcbiAgICAgICAgfSxcbiAgICAgICAgY291bnRlcjogMCxcbiAgICAgICAgdmFsdWU6ICcxMjMnLFxuICAgICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBjb250cmFjdCBhZGRyZXNzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSB0cmFuc2FjdGlvbiB3aXRoIGludmFsaWQgY291bnRlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6ICcxMCcsXG4gICAgICAgICAgZ2FzTGltaXQ6ICcxMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvdW50ZXI6IC0xLFxuICAgICAgICByZWNpcGllbnQ6ICcweGJjZjkzNWQyMDZjYTMyOTI5ZTFiODg3YTA3ZWQyNDBmMGQ4Y2NkMjInLFxuICAgICAgICB2YWx1ZTogJzEyMycsXG4gICAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIGNvdW50ZXI6IC0xJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walletInitialization.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/walletInitialization.ts"],"names":[],"mappings":""}
|