@bitgo/sdk-coin-eth 25.3.2 → 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 -1858
|
@@ -0,0 +1,331 @@
|
|
|
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 ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
|
|
42
|
+
const assert_1 = __importDefault(require("assert"));
|
|
43
|
+
const should_1 = __importDefault(require("should"));
|
|
44
|
+
const ethUtil = __importStar(require("ethereumjs-util"));
|
|
45
|
+
const src_1 = require("../../../src");
|
|
46
|
+
const testData = __importStar(require("../../resources/eth"));
|
|
47
|
+
const getBuilder_1 = require("../getBuilder");
|
|
48
|
+
describe('Eth transaction builder send', () => {
|
|
49
|
+
it('should validate a send type transaction', () => {
|
|
50
|
+
const txBuilder = (0, getBuilder_1.getBuilder)('teth');
|
|
51
|
+
const coinConfig = statics_1.coins.get('eth');
|
|
52
|
+
const common = (0, src_1.getCommon)(coinConfig.network);
|
|
53
|
+
const tx = new src_1.Transaction(coinConfig, common);
|
|
54
|
+
txBuilder.counter(1);
|
|
55
|
+
txBuilder.type(sdk_core_1.TransactionType.Send);
|
|
56
|
+
assert_1.default.throws(() => txBuilder.validateTransaction(tx), /Invalid transaction: missing fee/);
|
|
57
|
+
txBuilder.fee({
|
|
58
|
+
fee: '10',
|
|
59
|
+
gasLimit: '1000',
|
|
60
|
+
});
|
|
61
|
+
assert_1.default.throws(() => txBuilder.validateTransaction(tx), /Invalid transaction: missing contract address/);
|
|
62
|
+
assert_1.default.throws(() => txBuilder.validateTransaction(tx), /Invalid transaction: missing contract address/);
|
|
63
|
+
});
|
|
64
|
+
describe('should sign and build', () => {
|
|
65
|
+
let txBuilder;
|
|
66
|
+
let key;
|
|
67
|
+
let contractAddress;
|
|
68
|
+
const getOperationHash = function (tx) {
|
|
69
|
+
const { data } = tx.toJson();
|
|
70
|
+
const { tokenContractAddress, expireTime, sequenceId, amount, to } = (0, src_1.decodeTransferData)(data);
|
|
71
|
+
const operationParams = [
|
|
72
|
+
['string', 'address', 'uint', 'address', 'uint', 'uint'],
|
|
73
|
+
[
|
|
74
|
+
'ERC20',
|
|
75
|
+
new ethUtil.BN(ethUtil.stripHexPrefix(to), 16),
|
|
76
|
+
amount,
|
|
77
|
+
new ethUtil.BN(ethUtil.stripHexPrefix(tokenContractAddress || ''), 16),
|
|
78
|
+
expireTime,
|
|
79
|
+
sequenceId,
|
|
80
|
+
],
|
|
81
|
+
];
|
|
82
|
+
return ethereumjs_abi_1.default.soliditySHA3(...operationParams);
|
|
83
|
+
};
|
|
84
|
+
beforeEach(() => {
|
|
85
|
+
contractAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
|
|
86
|
+
txBuilder = (0, getBuilder_1.getBuilder)('hteth');
|
|
87
|
+
key = testData.KEYPAIR_PRV.getKeys().prv;
|
|
88
|
+
txBuilder.fee({
|
|
89
|
+
fee: '1000000000',
|
|
90
|
+
gasLimit: '12100000',
|
|
91
|
+
});
|
|
92
|
+
txBuilder.counter(2);
|
|
93
|
+
txBuilder.type(sdk_core_1.TransactionType.Send);
|
|
94
|
+
txBuilder.contract(contractAddress);
|
|
95
|
+
});
|
|
96
|
+
it('a send funds transaction', async () => {
|
|
97
|
+
const recipient = '0x19645032c7f1533395d44a629462e751084d3e4c';
|
|
98
|
+
const amount = '1000000000';
|
|
99
|
+
const expireTime = 1590066728;
|
|
100
|
+
const sequenceId = 5;
|
|
101
|
+
txBuilder
|
|
102
|
+
.transfer()
|
|
103
|
+
.amount(amount)
|
|
104
|
+
.to(recipient)
|
|
105
|
+
.expirationTime(expireTime)
|
|
106
|
+
.contractSequenceId(sequenceId)
|
|
107
|
+
.key(key);
|
|
108
|
+
txBuilder.sign({ key: testData.PRIVATE_KEY });
|
|
109
|
+
const tx = await txBuilder.build();
|
|
110
|
+
should_1.default.equal(tx.toJson().chainId, 560048);
|
|
111
|
+
should_1.default.equal(tx.toBroadcastFormat(), testData.SEND_TX_BROADCAST_LEGACY);
|
|
112
|
+
should_1.default.equal(tx.signature.length, 2);
|
|
113
|
+
should_1.default.equal(tx.inputs.length, 1);
|
|
114
|
+
should_1.default.equal(tx.inputs[0].address, contractAddress);
|
|
115
|
+
should_1.default.equal(tx.inputs[0].value, amount);
|
|
116
|
+
should_1.default.equal(tx.outputs.length, 1);
|
|
117
|
+
should_1.default.equal(tx.outputs[0].address, recipient);
|
|
118
|
+
should_1.default.equal(tx.outputs[0].value, amount);
|
|
119
|
+
const data = tx.toJson().data;
|
|
120
|
+
const { to, amount: parsedAmount, expireTime: parsedExpireTime, sequenceId: parsedSequenceId, } = (0, src_1.decodeTransferData)(data);
|
|
121
|
+
should_1.default.equal(to, recipient);
|
|
122
|
+
should_1.default.equal(parsedAmount, amount);
|
|
123
|
+
should_1.default.equal(parsedExpireTime, expireTime);
|
|
124
|
+
should_1.default.equal(parsedSequenceId, sequenceId);
|
|
125
|
+
});
|
|
126
|
+
it('a send funds transaction built for a first signer', async () => {
|
|
127
|
+
const recipient = '0x19645032c7f1533395d44a629462e751084d3e4c';
|
|
128
|
+
const amount = '1000000000';
|
|
129
|
+
const expireTime = 1590066728;
|
|
130
|
+
const sequenceId = 5;
|
|
131
|
+
txBuilder.fee({
|
|
132
|
+
eip1559: {
|
|
133
|
+
maxFeePerGas: '100',
|
|
134
|
+
maxPriorityFeePerGas: '10',
|
|
135
|
+
},
|
|
136
|
+
fee: '10',
|
|
137
|
+
gasLimit: '1000',
|
|
138
|
+
});
|
|
139
|
+
const transfer = txBuilder.transfer();
|
|
140
|
+
transfer
|
|
141
|
+
.amount(amount)
|
|
142
|
+
.to(recipient)
|
|
143
|
+
.expirationTime(expireTime)
|
|
144
|
+
.contractSequenceId(sequenceId)
|
|
145
|
+
.isFirstSigner(true);
|
|
146
|
+
const tx = await txBuilder.build();
|
|
147
|
+
const methodId = ethereumjs_abi_1.default.methodID('sendMultiSig', src_1.sendMultiSigTypes);
|
|
148
|
+
const decodedData = ethereumjs_abi_1.default.rawDecode(['string', 'address', 'uint', 'bytes', 'uint', 'uint'], Buffer.from(ethUtil.stripHexPrefix(tx.toJson().data).slice(methodId.toString('hex').length, -2), 'hex'));
|
|
149
|
+
should_1.default.equal(decodedData[0], 'ETHER');
|
|
150
|
+
should_1.default.equal(decodedData[1], ethUtil.stripHexPrefix(recipient));
|
|
151
|
+
should_1.default.equal(decodedData[2].toString(), amount);
|
|
152
|
+
should_1.default.equal(decodedData[3].toString('hex'), '');
|
|
153
|
+
should_1.default.equal(decodedData[4].toString(), expireTime);
|
|
154
|
+
should_1.default.equal(decodedData[5].toString(), sequenceId);
|
|
155
|
+
should_1.default.equal(tx.toJson().chainId, 560048);
|
|
156
|
+
should_1.default.equal(tx.toBroadcastFormat(), testData.SEND_TX_BROADCAST_RECOVERY);
|
|
157
|
+
should_1.default.equal(tx.signature.length, 0);
|
|
158
|
+
should_1.default.equal(tx.inputs.length, 1);
|
|
159
|
+
should_1.default.equal(tx.inputs[0].address, contractAddress);
|
|
160
|
+
should_1.default.equal(tx.inputs[0].value, amount);
|
|
161
|
+
should_1.default.equal(tx.outputs.length, 1);
|
|
162
|
+
should_1.default.equal(tx.outputs[0].address, recipient);
|
|
163
|
+
should_1.default.equal(tx.outputs[0].value, amount);
|
|
164
|
+
const data = tx.toJson().data;
|
|
165
|
+
const { to, amount: parsedAmount, expireTime: parsedExpireTime, sequenceId: parsedSequenceId, } = (0, src_1.decodeTransferData)(data, true);
|
|
166
|
+
should_1.default.equal(to, recipient);
|
|
167
|
+
should_1.default.equal(parsedAmount, amount);
|
|
168
|
+
should_1.default.equal(parsedExpireTime, expireTime);
|
|
169
|
+
should_1.default.equal(parsedSequenceId, sequenceId);
|
|
170
|
+
// Add signature from first signer
|
|
171
|
+
transfer.setSignature('0x1234567890abcdef').isFirstSigner(false);
|
|
172
|
+
const signedTx = await txBuilder.build();
|
|
173
|
+
const { to: toSigned, amount: parsedAmountSigned, expireTime: parsedExpireTimeSigned, sequenceId: parsedSequenceIdSigned, signature, } = (0, src_1.decodeTransferData)(signedTx.toJson().data);
|
|
174
|
+
should_1.default.equal(toSigned, recipient);
|
|
175
|
+
should_1.default.equal(parsedAmountSigned, amount);
|
|
176
|
+
should_1.default.equal(parsedExpireTimeSigned, expireTime);
|
|
177
|
+
should_1.default.equal(parsedSequenceIdSigned, sequenceId);
|
|
178
|
+
should_1.default.equal(signature, '0x1234567890abcdef');
|
|
179
|
+
const fromSerializedTxBuilder = (0, getBuilder_1.getBuilder)('hteth');
|
|
180
|
+
fromSerializedTxBuilder.from(testData.SEND_TX_BROADCAST_RECOVERY, true);
|
|
181
|
+
const fromSerializedTx = await fromSerializedTxBuilder.build();
|
|
182
|
+
const { to: toFromSerialized, amount: amountFromSerialized, expireTime: expireTimeFromSerialized, sequenceId: sequenceIdFromSerialized, } = (0, src_1.decodeTransferData)(fromSerializedTx.toJson().data, true);
|
|
183
|
+
should_1.default.equal(toFromSerialized, recipient);
|
|
184
|
+
should_1.default.equal(amountFromSerialized, amount);
|
|
185
|
+
should_1.default.equal(expireTimeFromSerialized, expireTime);
|
|
186
|
+
should_1.default.equal(sequenceIdFromSerialized, sequenceId);
|
|
187
|
+
});
|
|
188
|
+
it('should send funds for wallet version 4', async () => {
|
|
189
|
+
const recipient = '0x19645032c7f1533395d44a629462e751084d3e4c';
|
|
190
|
+
const amount = '1000000000';
|
|
191
|
+
const expireTime = 1590066728;
|
|
192
|
+
const sequenceId = 5;
|
|
193
|
+
txBuilder.walletVersion(4);
|
|
194
|
+
txBuilder
|
|
195
|
+
.transfer()
|
|
196
|
+
.amount(amount)
|
|
197
|
+
.to(recipient)
|
|
198
|
+
.expirationTime(expireTime)
|
|
199
|
+
.contractSequenceId(sequenceId)
|
|
200
|
+
.key(key);
|
|
201
|
+
txBuilder.sign({ key: testData.PRIVATE_KEY });
|
|
202
|
+
await txBuilder.build();
|
|
203
|
+
const operationData = txBuilder.transfer().getOperationData();
|
|
204
|
+
should_1.default.equal(operationData[1][0], '560048');
|
|
205
|
+
should_1.default.equal(txBuilder.coinUsesNonPackedEncodingForTxData(), true);
|
|
206
|
+
});
|
|
207
|
+
it('a send funds with amount 0 transaction', async () => {
|
|
208
|
+
txBuilder
|
|
209
|
+
.transfer()
|
|
210
|
+
.amount('0')
|
|
211
|
+
.to('0x19645032c7f1533395d44a629462e751084d3e4c')
|
|
212
|
+
.expirationTime(1590066728)
|
|
213
|
+
.contractSequenceId(5)
|
|
214
|
+
.key(key);
|
|
215
|
+
txBuilder.sign({ key: testData.PRIVATE_KEY });
|
|
216
|
+
const tx = await txBuilder.build();
|
|
217
|
+
should_1.default.equal(tx.toBroadcastFormat(), testData.SEND_TX_AMOUNT_ZERO_BROADCAST);
|
|
218
|
+
});
|
|
219
|
+
it('Goerli chain id should be correct', async () => {
|
|
220
|
+
const txBuilder = (0, getBuilder_1.getBuilder)('gteth');
|
|
221
|
+
txBuilder.fee({
|
|
222
|
+
fee: '1000000000',
|
|
223
|
+
gasLimit: '12100000',
|
|
224
|
+
});
|
|
225
|
+
txBuilder.counter(2);
|
|
226
|
+
txBuilder.type(sdk_core_1.TransactionType.Send);
|
|
227
|
+
txBuilder.contract(contractAddress);
|
|
228
|
+
const transferBuilder = txBuilder.transfer();
|
|
229
|
+
transferBuilder
|
|
230
|
+
.amount('0')
|
|
231
|
+
.to('0x19645032c7f1533395d44a629462e751084d3e4c')
|
|
232
|
+
.expirationTime(1590066728)
|
|
233
|
+
.contractSequenceId(5)
|
|
234
|
+
.key(key);
|
|
235
|
+
txBuilder.sign({ key: testData.PRIVATE_KEY });
|
|
236
|
+
const tx = await txBuilder.build();
|
|
237
|
+
should_1.default.equal(tx.toJson().chainId, 5);
|
|
238
|
+
});
|
|
239
|
+
it('Hoodi chain id should be correct', async () => {
|
|
240
|
+
const txBuilder = (0, getBuilder_1.getBuilder)('hteth');
|
|
241
|
+
txBuilder.fee({
|
|
242
|
+
fee: '1000000000',
|
|
243
|
+
gasLimit: '12100000',
|
|
244
|
+
});
|
|
245
|
+
txBuilder.counter(2);
|
|
246
|
+
txBuilder.type(sdk_core_1.TransactionType.Send);
|
|
247
|
+
txBuilder.contract(contractAddress);
|
|
248
|
+
const transferBuilder = txBuilder.transfer();
|
|
249
|
+
transferBuilder
|
|
250
|
+
.amount('0')
|
|
251
|
+
.to('0x19645032c7f1533395d44a629462e751084d3e4c')
|
|
252
|
+
.expirationTime(1590066728)
|
|
253
|
+
.contractSequenceId(5)
|
|
254
|
+
.key(key);
|
|
255
|
+
txBuilder.sign({ key: testData.PRIVATE_KEY });
|
|
256
|
+
const tx = await txBuilder.build();
|
|
257
|
+
should_1.default.equal(tx.toJson().chainId, 560048);
|
|
258
|
+
});
|
|
259
|
+
it('a send token transaction', async () => {
|
|
260
|
+
const recipient = '0x72c2c8e08bf91d755cd7d26b49a2ee3dc99de1b9';
|
|
261
|
+
const contractAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
|
|
262
|
+
const amount = '100';
|
|
263
|
+
txBuilder.contract(contractAddress);
|
|
264
|
+
txBuilder
|
|
265
|
+
.transfer()
|
|
266
|
+
.coin('trif')
|
|
267
|
+
.amount(amount)
|
|
268
|
+
.to(recipient)
|
|
269
|
+
.expirationTime(1590066728)
|
|
270
|
+
.contractSequenceId(5)
|
|
271
|
+
.key(key);
|
|
272
|
+
txBuilder.sign({
|
|
273
|
+
key: testData.PRIVATE_KEY,
|
|
274
|
+
});
|
|
275
|
+
const tx = await txBuilder.build();
|
|
276
|
+
should_1.default.equal(tx.toBroadcastFormat(), testData.SEND_TOKEN_TX_BROADCAST);
|
|
277
|
+
should_1.default.equal(tx.signature.length, 2);
|
|
278
|
+
should_1.default.equal(tx.inputs.length, 1);
|
|
279
|
+
should_1.default.equal(tx.inputs[0].address, contractAddress);
|
|
280
|
+
should_1.default.equal(tx.inputs[0].value, amount);
|
|
281
|
+
should_1.default.equal(tx.inputs[0].coin, 'trif');
|
|
282
|
+
should_1.default.equal(tx.outputs.length, 1);
|
|
283
|
+
should_1.default.equal(tx.outputs[0].address, recipient);
|
|
284
|
+
should_1.default.equal(tx.outputs[0].value, amount);
|
|
285
|
+
should_1.default.equal(tx.outputs[0].coin, 'trif');
|
|
286
|
+
const { signature } = (0, src_1.decodeTransferData)(tx.toJson().data);
|
|
287
|
+
const operationHash = getOperationHash(tx);
|
|
288
|
+
const { v, r, s } = ethUtil.fromRpcSig(signature);
|
|
289
|
+
const senderPubKey = ethUtil.ecrecover(Buffer.from(operationHash, 'hex'), v, r, s);
|
|
290
|
+
const senderAddress = ethUtil.pubToAddress(senderPubKey);
|
|
291
|
+
const senderKey = new src_1.KeyPair({ prv: testData.PRIVATE_KEY });
|
|
292
|
+
ethUtil.bufferToHex(senderAddress).should.equal(senderKey.getAddress());
|
|
293
|
+
});
|
|
294
|
+
it('a send token transactions from serialized', async () => {
|
|
295
|
+
const txBuilder = new src_1.TransactionBuilder(statics_1.coins.get('hteth'));
|
|
296
|
+
txBuilder.from(testData.SEND_TOKEN_TX_BROADCAST);
|
|
297
|
+
const tx = await txBuilder.build();
|
|
298
|
+
should_1.default.equal(tx.toBroadcastFormat(), testData.SEND_TOKEN_TX_BROADCAST);
|
|
299
|
+
const { signature } = (0, src_1.decodeTransferData)(tx.toJson().data);
|
|
300
|
+
const operationHash = getOperationHash(tx);
|
|
301
|
+
const { v, r, s } = ethUtil.fromRpcSig(signature);
|
|
302
|
+
const senderPubKey = ethUtil.ecrecover(Buffer.from(operationHash || ''), v, r, s);
|
|
303
|
+
const senderAddress = ethUtil.pubToAddress(senderPubKey);
|
|
304
|
+
const senderKey = new src_1.KeyPair({ prv: testData.PRIVATE_KEY });
|
|
305
|
+
ethUtil.bufferToHex(senderAddress).should.equal(senderKey.getAddress());
|
|
306
|
+
});
|
|
307
|
+
});
|
|
308
|
+
describe('sign and build from serialized', () => {
|
|
309
|
+
{
|
|
310
|
+
const testParams = [
|
|
311
|
+
['Legacy', testData.SEND_TX_BROADCAST_LEGACY],
|
|
312
|
+
['EIP1559', testData.SEND_TX_BROADCAST_EIP1559],
|
|
313
|
+
];
|
|
314
|
+
testParams.map(([txnType, txnHex]) => {
|
|
315
|
+
it(`should be able to create a send transaction from serialized ${txnType} tx hex`, async () => {
|
|
316
|
+
const txBuilder = (0, getBuilder_1.getBuilder)('hteth');
|
|
317
|
+
txBuilder.from(txnHex);
|
|
318
|
+
const signedTx = await txBuilder.build();
|
|
319
|
+
should_1.default.equal(signedTx.toBroadcastFormat(), txnHex);
|
|
320
|
+
});
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
it('a send funds transaction with amount 0 from serialized', async () => {
|
|
324
|
+
const txBuilder = (0, getBuilder_1.getBuilder)('hteth');
|
|
325
|
+
txBuilder.from(testData.SEND_TX_AMOUNT_ZERO_BROADCAST);
|
|
326
|
+
const signedTx = await txBuilder.build();
|
|
327
|
+
should_1.default.equal(signedTx.toBroadcastFormat(), testData.SEND_TX_AMOUNT_ZERO_BROADCAST);
|
|
328
|
+
});
|
|
329
|
+
});
|
|
330
|
+
});
|
|
331
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvc2VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUFtRTtBQUNuRSw0Q0FBd0Q7QUFDeEQsb0VBQXlDO0FBQ3pDLG9EQUE0QjtBQUM1QixvREFBNEI7QUFDNUIseURBQTJDO0FBRTNDLHNDQVFzQjtBQUN0Qiw4REFBZ0Q7QUFDaEQsOENBQTJDO0FBRTNDLFFBQVEsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLEVBQUU7SUFDNUMsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtRQUNqRCxNQUFNLFNBQVMsR0FBRyxJQUFBLHVCQUFVLEVBQUMsTUFBTSxDQUF1QixDQUFDO1FBQzNELE1BQU0sVUFBVSxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsTUFBTSxNQUFNLEdBQUcsSUFBQSxlQUFTLEVBQUMsVUFBVSxDQUFDLE9BQTBCLENBQUMsQ0FBQztRQUNoRSxNQUFNLEVBQUUsR0FBRyxJQUFJLGlCQUFXLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO1FBQzNGLFNBQVMsQ0FBQyxHQUFHLENBQUM7WUFDWixHQUFHLEVBQUUsSUFBSTtZQUNULFFBQVEsRUFBRSxNQUFNO1NBQ2pCLENBQUMsQ0FBQztRQUNILGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFB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QUUsS0FBSyxJQUFJLEVBQUU7WUFDdEUsTUFBTSxTQUFTLEdBQUcsSUFBQSx1QkFBVSxFQUFDLE9BQU8sQ0FBdUIsQ0FBQztZQUM1RCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sUUFBUSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3pDLGdCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ3JGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSwgQmFzZVRyYW5zYWN0aW9uIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IGNvaW5zLCBFdGhlcmV1bU5ldHdvcmsgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgRXRoZXJldW1BYmkgZnJvbSAnZXRoZXJldW1qcy1hYmknO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0ICogYXMgZXRoVXRpbCBmcm9tICdldGhlcmV1bWpzLXV0aWwnO1xuXG5pbXBvcnQge1xuICBkZWNvZGVUcmFuc2ZlckRhdGEsXG4gIGdldENvbW1vbixcbiAgVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uQnVpbGRlcixcbiAgVHJhbnNmZXJCdWlsZGVyLFxuICBLZXlQYWlyLFxuICBzZW5kTXVsdGlTaWdUeXBlcyxcbn0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uLy4uL3Jlc291cmNlcy9ldGgnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlciB9IGZyb20gJy4uL2dldEJ1aWxkZXInO1xuXG5kZXNjcmliZSgnRXRoIHRyYW5zYWN0aW9uIGJ1aWxkZXIgc2VuZCcsICgpID0+IHtcbiAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIHNlbmQgdHlwZSB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCd0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgIGNvbnN0IGNvaW5Db25maWcgPSBjb2lucy5nZXQoJ2V0aCcpO1xuICAgIGNvbnN0IGNvbW1vbiA9IGdldENvbW1vbihjb2luQ29uZmlnLm5ldHdvcmsgYXMgRXRoZXJldW1OZXR3b3JrKTtcbiAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihjb2luQ29uZmlnLCBjb21tb24pO1xuICAgIHR4QnVpbGRlci5jb3VudGVyKDEpO1xuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci52YWxpZGF0ZVRyYW5zYWN0aW9uKHR4KSwgL0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3NpbmcgZmVlLyk7XG4gICAgdHhCdWlsZGVyLmZlZSh7XG4gICAgICBmZWU6ICcxMCcsXG4gICAgICBnYXNMaW1pdDogJzEwMDAnLFxuICAgIH0pO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnZhbGlkYXRlVHJhbnNhY3Rpb24odHgpLCAvSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBjb250cmFjdCBhZGRyZXNzLyk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIudmFsaWRhdGVUcmFuc2FjdGlvbih0eCksIC9JbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIGNvbnRyYWN0IGFkZHJlc3MvKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZCBzaWduIGFuZCBidWlsZCcsICgpID0+IHtcbiAgICBsZXQgdHhCdWlsZGVyO1xuICAgIGxldCBrZXk7XG4gICAgbGV0IGNvbnRyYWN0QWRkcmVzcztcblxuICAgIGNvbnN0IGdldE9wZXJhdGlvbkhhc2ggPSBmdW5jdGlvbiAodHg6IEJhc2VUcmFuc2FjdGlvbik6IHN0cmluZyB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IHR4LnRvSnNvbigpO1xuICAgICAgY29uc3QgeyB0b2tlbkNvbnRyYWN0QWRkcmVzcywgZXhwaXJlVGltZSwgc2VxdWVuY2VJZCwgYW1vdW50LCB0byB9ID0gZGVjb2RlVHJhbnNmZXJEYXRhKGRhdGEpO1xuICAgICAgY29uc3Qgb3BlcmF0aW9uUGFyYW1zID0gW1xuICAgICAgICBbJ3N0cmluZycsICdhZGRyZXNzJywgJ3VpbnQnLCAnYWRkcmVzcycsICd1aW50JywgJ3VpbnQnXSxcbiAgICAgICAgW1xuICAgICAgICAgICdFUkMyMCcsXG4gICAgICAgICAgbmV3IGV0aFV0aWwuQk4oZXRoVXRpbC5zdHJpcEhleFByZWZpeCh0byksIDE2KSxcbiAgICAgICAgICBhbW91bnQsXG4gICAgICAgICAgbmV3IGV0aFV0aWwuQk4oZXRoVXRpbC5zdHJpcEhleFByZWZpeCh0b2tlbkNvbnRyYWN0QWRkcmVzcyB8fCAnJyksIDE2KSxcbiAgICAgICAgICBleHBpcmVUaW1lLFxuICAgICAgICAgIHNlcXVlbmNlSWQsXG4gICAgICAgIF0sXG4gICAgICBdO1xuICAgICAgcmV0dXJuIEV0aGVyZXVtQWJpLnNvbGlkaXR5U0hBMyguLi5vcGVyYXRpb25QYXJhbXMpO1xuICAgIH07XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIGNvbnRyYWN0QWRkcmVzcyA9ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnO1xuICAgICAgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcignaHRldGgnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgICBrZXkgPSB0ZXN0RGF0YS5LRVlQQUlSX1BSVi5nZXRLZXlzKCkucHJ2IGFzIHN0cmluZztcbiAgICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgICBmZWU6ICcxMDAwMDAwMDAwJyxcbiAgICAgICAgZ2FzTGltaXQ6ICcxMjEwMDAwMCcsXG4gICAgICB9KTtcbiAgICAgIHR4QnVpbGRlci5jb3VudGVyKDIpO1xuICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KGNvbnRyYWN0QWRkcmVzcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSBzZW5kIGZ1bmRzIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVjaXBpZW50ID0gJzB4MTk2NDUwMzJjN2YxNTMzMzk1ZDQ0YTYyOTQ2MmU3NTEwODRkM2U0Yyc7XG4gICAgICBjb25zdCBhbW91bnQgPSAnMTAwMDAwMDAwMCc7XG4gICAgICBjb25zdCBleHBpcmVUaW1lID0gMTU5MDA2NjcyODtcbiAgICAgIGNvbnN0IHNlcXVlbmNlSWQgPSA1O1xuICAgICAgdHhCdWlsZGVyXG4gICAgICAgIC50cmFuc2ZlcigpXG4gICAgICAgIC5hbW91bnQoYW1vdW50KVxuICAgICAgICAudG8ocmVjaXBpZW50KVxuICAgICAgICAuZXhwaXJhdGlvblRpbWUoZXhwaXJlVGltZSlcbiAgICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZChzZXF1ZW5jZUlkKVxuICAgICAgICAua2V5KGtleSk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuUFJJVkFURV9LRVkgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkuY2hhaW5JZCwgNTYwMDQ4KTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0ZXN0RGF0YS5TRU5EX1RYX0JST0FEQ0FTVF9MRUdBQ1kpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnNpZ25hdHVyZS5sZW5ndGgsIDIpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmlucHV0cy5sZW5ndGgsIDEpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmlucHV0c1swXS5hZGRyZXNzLCBjb250cmFjdEFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmlucHV0c1swXS52YWx1ZSwgYW1vdW50KTtcblxuICAgICAgc2hvdWxkLmVxdWFsKHR4Lm91dHB1dHMubGVuZ3RoLCAxKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5vdXRwdXRzWzBdLmFkZHJlc3MsIHJlY2lwaWVudCk7XG4gICAgICBzaG91bGQuZXF1YWwodHgub3V0cHV0c1swXS52YWx1ZSwgYW1vdW50KTtcblxuICAgICAgY29uc3QgZGF0YSA9IHR4LnRvSnNvbigpLmRhdGE7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHRvLFxuICAgICAgICBhbW91bnQ6IHBhcnNlZEFtb3VudCxcbiAgICAgICAgZXhwaXJlVGltZTogcGFyc2VkRXhwaXJlVGltZSxcbiAgICAgICAgc2VxdWVuY2VJZDogcGFyc2VkU2VxdWVuY2VJZCxcbiAgICAgIH0gPSBkZWNvZGVUcmFuc2ZlckRhdGEoZGF0YSk7XG4gICAgICBzaG91bGQuZXF1YWwodG8sIHJlY2lwaWVudCk7XG4gICAgICBzaG91bGQuZXF1YWwocGFyc2VkQW1vdW50LCBhbW91bnQpO1xuICAgICAgc2hvdWxkLmVxdWFsKHBhcnNlZEV4cGlyZVRpbWUsIGV4cGlyZVRpbWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHBhcnNlZFNlcXVlbmNlSWQsIHNlcXVlbmNlSWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Egc2VuZCBmdW5kcyB0cmFuc2FjdGlvbiBidWlsdCBmb3IgYSBmaXJzdCBzaWduZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZWNpcGllbnQgPSAnMHgxOTY0NTAzMmM3ZjE1MzMzOTVkNDRhNjI5NDYyZTc1MTA4NGQzZTRjJztcbiAgICAgIGNvbnN0IGFtb3VudCA9ICcxMDAwMDAwMDAwJztcbiAgICAgIGNvbnN0IGV4cGlyZVRpbWUgPSAxNTkwMDY2NzI4O1xuICAgICAgY29uc3Qgc2VxdWVuY2VJZCA9IDU7XG4gICAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgICAgZWlwMTU1OToge1xuICAgICAgICAgIG1heEZlZVBlckdhczogJzEwMCcsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6ICcxMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGZlZTogJzEwJyxcbiAgICAgICAgZ2FzTGltaXQ6ICcxMDAwJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdHJhbnNmZXI6IFRyYW5zZmVyQnVpbGRlciA9IHR4QnVpbGRlci50cmFuc2ZlcigpO1xuICAgICAgdHJhbnNmZXJcbiAgICAgICAgLmFtb3VudChhbW91bnQpXG4gICAgICAgIC50byhyZWNpcGllbnQpXG4gICAgICAgIC5leHBpcmF0aW9uVGltZShleHBpcmVUaW1lKVxuICAgICAgICAuY29udHJhY3RTZXF1ZW5jZUlkKHNlcXVlbmNlSWQpXG4gICAgICAgIC5pc0ZpcnN0U2lnbmVyKHRydWUpO1xuICAgICAgY29uc3QgdHg6IFRyYW5zYWN0aW9uID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGNvbnN0IG1ldGhvZElkID0gRXRoZXJldW1BYmkubWV0aG9kSUQoJ3NlbmRNdWx0aVNpZycsIHNlbmRNdWx0aVNpZ1R5cGVzKTtcbiAgICAgIGNvbnN0IGRlY29kZWREYXRhID0gRXRoZXJldW1BYmkucmF3RGVjb2RlKFxuICAgICAgICBbJ3N0cmluZycsICdhZGRyZXNzJywgJ3VpbnQnLCAnYnl0ZXMnLCAndWludCcsICd1aW50J10sXG4gICAgICAgIEJ1ZmZlci5mcm9tKGV0aFV0aWwuc3RyaXBIZXhQcmVmaXgodHgudG9Kc29uKCkuZGF0YSkuc2xpY2UobWV0aG9kSWQudG9TdHJpbmcoJ2hleCcpLmxlbmd0aCwgLTIpLCAnaGV4JylcbiAgICAgICk7XG5cbiAgICAgIHNob3VsZC5lcXVhbChkZWNvZGVkRGF0YVswXSwgJ0VUSEVSJyk7XG4gICAgICBzaG91bGQuZXF1YWwoZGVjb2RlZERhdGFbMV0sIGV0aFV0aWwuc3RyaXBIZXhQcmVmaXgocmVjaXBpZW50KSk7XG4gICAgICBzaG91bGQuZXF1YWwoZGVjb2RlZERhdGFbMl0udG9TdHJpbmcoKSwgYW1vdW50KTtcbiAgICAgIHNob3VsZC5lcXVhbChkZWNvZGVkRGF0YVszXS50b1N0cmluZygnaGV4JyksICcnKTtcbiAgICAgIHNob3VsZC5lcXVhbChkZWNvZGVkRGF0YVs0XS50b1N0cmluZygpLCBleHBpcmVUaW1lKTtcbiAgICAgIHNob3VsZC5lcXVhbChkZWNvZGVkRGF0YVs1XS50b1N0cmluZygpLCBzZXF1ZW5jZUlkKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC50b0pzb24oKS5jaGFpbklkLCA1NjAwNDgpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLlNFTkRfVFhfQlJPQURDQVNUX1JFQ09WRVJZKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5zaWduYXR1cmUubGVuZ3RoLCAwKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5pbnB1dHMubGVuZ3RoLCAxKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5pbnB1dHNbMF0uYWRkcmVzcywgY29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5pbnB1dHNbMF0udmFsdWUsIGFtb3VudCk7XG5cbiAgICAgIHNob3VsZC5lcXVhbCh0eC5vdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgICBzaG91bGQuZXF1YWwodHgub3V0cHV0c1swXS5hZGRyZXNzLCByZWNpcGllbnQpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4Lm91dHB1dHNbMF0udmFsdWUsIGFtb3VudCk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSB0eC50b0pzb24oKS5kYXRhO1xuICAgICAgY29uc3Qge1xuICAgICAgICB0byxcbiAgICAgICAgYW1vdW50OiBwYXJzZWRBbW91bnQsXG4gICAgICAgIGV4cGlyZVRpbWU6IHBhcnNlZEV4cGlyZVRpbWUsXG4gICAgICAgIHNlcXVlbmNlSWQ6IHBhcnNlZFNlcXVlbmNlSWQsXG4gICAgICB9ID0gZGVjb2RlVHJhbnNmZXJEYXRhKGRhdGEsIHRydWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHRvLCByZWNpcGllbnQpO1xuICAgICAgc2hvdWxkLmVxdWFsKHBhcnNlZEFtb3VudCwgYW1vdW50KTtcbiAgICAgIHNob3VsZC5lcXVhbChwYXJzZWRFeHBpcmVUaW1lLCBleHBpcmVUaW1lKTtcbiAgICAgIHNob3VsZC5lcXVhbChwYXJzZWRTZXF1ZW5jZUlkLCBzZXF1ZW5jZUlkKTtcbiAgICAgIC8vIEFkZCBzaWduYXR1cmUgZnJvbSBmaXJzdCBzaWduZXJcbiAgICAgIHRyYW5zZmVyLnNldFNpZ25hdHVyZSgnMHgxMjM0NTY3ODkwYWJjZGVmJykuaXNGaXJzdFNpZ25lcihmYWxzZSk7XG4gICAgICBjb25zdCBzaWduZWRUeCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3Qge1xuICAgICAgICB0bzogdG9TaWduZWQsXG4gICAgICAgIGFtb3VudDogcGFyc2VkQW1vdW50U2lnbmVkLFxuICAgICAgICBleHBpcmVUaW1lOiBwYXJzZWRFeHBpcmVUaW1lU2lnbmVkLFxuICAgICAgICBzZXF1ZW5jZUlkOiBwYXJzZWRTZXF1ZW5jZUlkU2lnbmVkLFxuICAgICAgICBzaWduYXR1cmUsXG4gICAgICB9ID0gZGVjb2RlVHJhbnNmZXJEYXRhKHNpZ25lZFR4LnRvSnNvbigpLmRhdGEpO1xuICAgICAgc2hvdWxkLmVxdWFsKHRvU2lnbmVkLCByZWNpcGllbnQpO1xuICAgICAgc2hvdWxkLmVxdWFsKHBhcnNlZEFtb3VudFNpZ25lZCwgYW1vdW50KTtcbiAgICAgIHNob3VsZC5lcXVhbChwYXJzZWRFeHBpcmVUaW1lU2lnbmVkLCBleHBpcmVUaW1lKTtcbiAgICAgIHNob3VsZC5lcXVhbChwYXJzZWRTZXF1ZW5jZUlkU2lnbmVkLCBzZXF1ZW5jZUlkKTtcbiAgICAgIHNob3VsZC5lcXVhbChzaWduYXR1cmUsICcweDEyMzQ1Njc4OTBhYmNkZWYnKTtcblxuICAgICAgY29uc3QgZnJvbVNlcmlhbGl6ZWRUeEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICAgIGZyb21TZXJpYWxpemVkVHhCdWlsZGVyLmZyb20odGVzdERhdGEuU0VORF9UWF9CUk9BRENBU1RfUkVDT1ZFUlksIHRydWUpO1xuICAgICAgY29uc3QgZnJvbVNlcmlhbGl6ZWRUeCA9IGF3YWl0IGZyb21TZXJpYWxpemVkVHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHRvOiB0b0Zyb21TZXJpYWxpemVkLFxuICAgICAgICBhbW91bnQ6IGFtb3VudEZyb21TZXJpYWxpemVkLFxuICAgICAgICBleHBpcmVUaW1lOiBleHBpcmVUaW1lRnJvbVNlcmlhbGl6ZWQsXG4gICAgICAgIHNlcXVlbmNlSWQ6IHNlcXVlbmNlSWRGcm9tU2VyaWFsaXplZCxcbiAgICAgIH0gPSBkZWNvZGVUcmFuc2ZlckRhdGEoZnJvbVNlcmlhbGl6ZWRUeC50b0pzb24oKS5kYXRhLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0b0Zyb21TZXJpYWxpemVkLCByZWNpcGllbnQpO1xuICAgICAgc2hvdWxkLmVxdWFsKGFtb3VudEZyb21TZXJpYWxpemVkLCBhbW91bnQpO1xuICAgICAgc2hvdWxkLmVxdWFsKGV4cGlyZVRpbWVGcm9tU2VyaWFsaXplZCwgZXhwaXJlVGltZSk7XG4gICAgICBzaG91bGQuZXF1YWwoc2VxdWVuY2VJZEZyb21TZXJpYWxpemVkLCBzZXF1ZW5jZUlkKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2VuZCBmdW5kcyBmb3Igd2FsbGV0IHZlcnNpb24gNCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlY2lwaWVudCA9ICcweDE5NjQ1MDMyYzdmMTUzMzM5NWQ0NGE2Mjk0NjJlNzUxMDg0ZDNlNGMnO1xuICAgICAgY29uc3QgYW1vdW50ID0gJzEwMDAwMDAwMDAnO1xuICAgICAgY29uc3QgZXhwaXJlVGltZSA9IDE1OTAwNjY3Mjg7XG4gICAgICBjb25zdCBzZXF1ZW5jZUlkID0gNTtcbiAgICAgIHR4QnVpbGRlci53YWxsZXRWZXJzaW9uKDQpO1xuICAgICAgdHhCdWlsZGVyXG4gICAgICAgIC50cmFuc2ZlcigpXG4gICAgICAgIC5hbW91bnQoYW1vdW50KVxuICAgICAgICAudG8ocmVjaXBpZW50KVxuICAgICAgICAuZXhwaXJhdGlvblRpbWUoZXhwaXJlVGltZSlcbiAgICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZChzZXF1ZW5jZUlkKVxuICAgICAgICAua2V5KGtleSk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuUFJJVkFURV9LRVkgfSk7XG4gICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IG9wZXJhdGlvbkRhdGEgPSB0eEJ1aWxkZXIudHJhbnNmZXIoKS5nZXRPcGVyYXRpb25EYXRhKCk7XG4gICAgICBzaG91bGQuZXF1YWwob3BlcmF0aW9uRGF0YVsxXVswXSwgJzU2MDA0OCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4QnVpbGRlci5jb2luVXNlc05vblBhY2tlZEVuY29kaW5nRm9yVHhEYXRhKCksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Egc2VuZCBmdW5kcyB3aXRoIGFtb3VudCAwIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgdHhCdWlsZGVyXG4gICAgICAgIC50cmFuc2ZlcigpXG4gICAgICAgIC5hbW91bnQoJzAnKVxuICAgICAgICAudG8oJzB4MTk2NDUwMzJjN2YxNTMzMzk1ZDQ0YTYyOTQ2MmU3NTEwODRkM2U0YycpXG4gICAgICAgIC5leHBpcmF0aW9uVGltZSgxNTkwMDY2NzI4KVxuICAgICAgICAuY29udHJhY3RTZXF1ZW5jZUlkKDUpXG4gICAgICAgIC5rZXkoa2V5KTtcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5QUklWQVRFX0tFWSB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuU0VORF9UWF9BTU9VTlRfWkVST19CUk9BRENBU1QpO1xuICAgIH0pO1xuXG4gICAgaXQoJ0dvZXJsaSBjaGFpbiBpZCBzaG91bGQgYmUgY29ycmVjdCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ2d0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgICAgdHhCdWlsZGVyLmZlZSh7XG4gICAgICAgIGZlZTogJzEwMDAwMDAwMDAnLFxuICAgICAgICBnYXNMaW1pdDogJzEyMTAwMDAwJyxcbiAgICAgIH0pO1xuICAgICAgdHhCdWlsZGVyLmNvdW50ZXIoMik7XG4gICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgICB0eEJ1aWxkZXIuY29udHJhY3QoY29udHJhY3RBZGRyZXNzKTtcbiAgICAgIGNvbnN0IHRyYW5zZmVyQnVpbGRlciA9IHR4QnVpbGRlci50cmFuc2ZlcigpIGFzIFRyYW5zZmVyQnVpbGRlcjtcbiAgICAgIHRyYW5zZmVyQnVpbGRlclxuICAgICAgICAuYW1vdW50KCcwJylcbiAgICAgICAgLnRvKCcweDE5NjQ1MDMyYzdmMTUzMzM5NWQ0NGE2Mjk0NjJlNzUxMDg0ZDNlNGMnKVxuICAgICAgICAuZXhwaXJhdGlvblRpbWUoMTU5MDA2NjcyOClcbiAgICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZCg1KVxuICAgICAgICAua2V5KGtleSk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuUFJJVkFURV9LRVkgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnRvSnNvbigpLmNoYWluSWQsIDUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ0hvb2RpIGNoYWluIGlkIHNob3VsZCBiZSBjb3JyZWN0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcignaHRldGgnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgICAgZmVlOiAnMTAwMDAwMDAwMCcsXG4gICAgICAgIGdhc0xpbWl0OiAnMTIxMDAwMDAnLFxuICAgICAgfSk7XG4gICAgICB0eEJ1aWxkZXIuY291bnRlcigyKTtcbiAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgIHR4QnVpbGRlci5jb250cmFjdChjb250cmFjdEFkZHJlc3MpO1xuICAgICAgY29uc3QgdHJhbnNmZXJCdWlsZGVyID0gdHhCdWlsZGVyLnRyYW5zZmVyKCkgYXMgVHJhbnNmZXJCdWlsZGVyO1xuICAgICAgdHJhbnNmZXJCdWlsZGVyXG4gICAgICAgIC5hbW91bnQoJzAnKVxuICAgICAgICAudG8oJzB4MTk2NDUwMzJjN2YxNTMzMzk1ZDQ0YTYyOTQ2MmU3NTEwODRkM2U0YycpXG4gICAgICAgIC5leHBpcmF0aW9uVGltZSgxNTkwMDY2NzI4KVxuICAgICAgICAuY29udHJhY3RTZXF1ZW5jZUlkKDUpXG4gICAgICAgIC5rZXkoa2V5KTtcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5QUklWQVRFX0tFWSB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkuY2hhaW5JZCwgNTYwMDQ4KTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHNlbmQgdG9rZW4gdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZWNpcGllbnQgPSAnMHg3MmMyYzhlMDhiZjkxZDc1NWNkN2QyNmI0OWEyZWUzZGM5OWRlMWI5JztcbiAgICAgIGNvbnN0IGNvbnRyYWN0QWRkcmVzcyA9ICcweGRmN2RlY2IxYmFhOGY1MjlmMGM4OTgyY2JiNGJlNTAzNTcxOTUyOTknO1xuICAgICAgY29uc3QgYW1vdW50ID0gJzEwMCc7XG4gICAgICB0eEJ1aWxkZXIuY29udHJhY3QoY29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHR4QnVpbGRlclxuICAgICAgICAudHJhbnNmZXIoKVxuICAgICAgICAuY29pbigndHJpZicpXG4gICAgICAgIC5hbW91bnQoYW1vdW50KVxuICAgICAgICAudG8ocmVjaXBpZW50KVxuICAgICAgICAuZXhwaXJhdGlvblRpbWUoMTU5MDA2NjcyOClcbiAgICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZCg1KVxuICAgICAgICAua2V5KGtleSk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7XG4gICAgICAgIGtleTogdGVzdERhdGEuUFJJVkFURV9LRVksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuU0VORF9UT0tFTl9UWF9CUk9BRENBU1QpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnNpZ25hdHVyZS5sZW5ndGgsIDIpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmlucHV0cy5sZW5ndGgsIDEpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmlucHV0c1swXS5hZGRyZXNzLCBjb250cmFjdEFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LmlucHV0c1swXS52YWx1ZSwgYW1vdW50KTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5pbnB1dHNbMF0uY29pbiwgJ3RyaWYnKTtcblxuICAgICAgc2hvdWxkLmVxdWFsKHR4Lm91dHB1dHMubGVuZ3RoLCAxKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5vdXRwdXRzWzBdLmFkZHJlc3MsIHJlY2lwaWVudCk7XG4gICAgICBzaG91bGQuZXF1YWwodHgub3V0cHV0c1swXS52YWx1ZSwgYW1vdW50KTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5vdXRwdXRzWzBdLmNvaW4sICd0cmlmJyk7XG5cbiAgICAgIGNvbnN0IHsgc2lnbmF0dXJlIH0gPSBkZWNvZGVUcmFuc2ZlckRhdGEodHgudG9Kc29uKCkuZGF0YSk7XG4gICAgICBjb25zdCBvcGVyYXRpb25IYXNoID0gZ2V0T3BlcmF0aW9uSGFzaCh0eCk7XG5cbiAgICAgIGNvbnN0IHsgdiwgciwgcyB9ID0gZXRoVXRpbC5mcm9tUnBjU2lnKHNpZ25hdHVyZSk7XG4gICAgICBjb25zdCBzZW5kZXJQdWJLZXkgPSBldGhVdGlsLmVjcmVjb3ZlcihCdWZmZXIuZnJvbShvcGVyYXRpb25IYXNoLCAnaGV4JyksIHYsIHIsIHMpO1xuICAgICAgY29uc3Qgc2VuZGVyQWRkcmVzcyA9IGV0aFV0aWwucHViVG9BZGRyZXNzKHNlbmRlclB1YktleSk7XG4gICAgICBjb25zdCBzZW5kZXJLZXkgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuUFJJVkFURV9LRVkgfSk7XG4gICAgICBldGhVdGlsLmJ1ZmZlclRvSGV4KHNlbmRlckFkZHJlc3MpLnNob3VsZC5lcXVhbChzZW5kZXJLZXkuZ2V0QWRkcmVzcygpKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHNlbmQgdG9rZW4gdHJhbnNhY3Rpb25zIGZyb20gc2VyaWFsaXplZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KCdodGV0aCcpKTtcbiAgICAgIHR4QnVpbGRlci5mcm9tKHRlc3REYXRhLlNFTkRfVE9LRU5fVFhfQlJPQURDQVNUKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuU0VORF9UT0tFTl9UWF9CUk9BRENBU1QpO1xuXG4gICAgICBjb25zdCB7IHNpZ25hdHVyZSB9ID0gZGVjb2RlVHJhbnNmZXJEYXRhKHR4LnRvSnNvbigpLmRhdGEpO1xuICAgICAgY29uc3Qgb3BlcmF0aW9uSGFzaCA9IGdldE9wZXJhdGlvbkhhc2godHgpO1xuXG4gICAgICBjb25zdCB7IHYsIHIsIHMgfSA9IGV0aFV0aWwuZnJvbVJwY1NpZyhzaWduYXR1cmUpO1xuICAgICAgY29uc3Qgc2VuZGVyUHViS2V5ID0gZXRoVXRpbC5lY3JlY292ZXIoQnVmZmVyLmZyb20ob3BlcmF0aW9uSGFzaCB8fCAnJyksIHYsIHIsIHMpO1xuICAgICAgY29uc3Qgc2VuZGVyQWRkcmVzcyA9IGV0aFV0aWwucHViVG9BZGRyZXNzKHNlbmRlclB1YktleSk7XG4gICAgICBjb25zdCBzZW5kZXJLZXkgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuUFJJVkFURV9LRVkgfSk7XG4gICAgICBldGhVdGlsLmJ1ZmZlclRvSGV4KHNlbmRlckFkZHJlc3MpLnNob3VsZC5lcXVhbChzZW5kZXJLZXkuZ2V0QWRkcmVzcygpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NpZ24gYW5kIGJ1aWxkIGZyb20gc2VyaWFsaXplZCcsICgpID0+IHtcbiAgICB7XG4gICAgICBjb25zdCB0ZXN0UGFyYW1zID0gW1xuICAgICAgICBbJ0xlZ2FjeScsIHRlc3REYXRhLlNFTkRfVFhfQlJPQURDQVNUX0xFR0FDWV0sXG4gICAgICAgIFsnRUlQMTU1OScsIHRlc3REYXRhLlNFTkRfVFhfQlJPQURDQVNUX0VJUDE1NTldLFxuICAgICAgXTtcblxuICAgICAgdGVzdFBhcmFtcy5tYXAoKFt0eG5UeXBlLCB0eG5IZXhdKSA9PiB7XG4gICAgICAgIGl0KGBzaG91bGQgYmUgYWJsZSB0byBjcmVhdGUgYSBzZW5kIHRyYW5zYWN0aW9uIGZyb20gc2VyaWFsaXplZCAke3R4blR5cGV9IHR4IGhleGAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICAgICAgICB0eEJ1aWxkZXIuZnJvbSh0eG5IZXgpO1xuICAgICAgICAgIGNvbnN0IHNpZ25lZFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgICAgc2hvdWxkLmVxdWFsKHNpZ25lZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHR4bkhleCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaXQoJ2Egc2VuZCBmdW5kcyB0cmFuc2FjdGlvbiB3aXRoIGFtb3VudCAwIGZyb20gc2VyaWFsaXplZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ2h0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgICAgdHhCdWlsZGVyLmZyb20odGVzdERhdGEuU0VORF9UWF9BTU9VTlRfWkVST19CUk9BRENBU1QpO1xuICAgICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChzaWduZWRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0ZXN0RGF0YS5TRU5EX1RYX0FNT1VOVF9aRVJPX0JST0FEQ0FTVCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendNFT.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/sendNFT.ts"],"names":[],"mappings":""}
|