@bitgo-beta/sdk-coin-eth 4.4.1-beta.202 → 4.4.1-beta.2021
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/erc20Token.d.ts +1 -1
- package/dist/src/erc20Token.d.ts.map +1 -1
- package/dist/src/erc20Token.js +49 -28
- package/dist/src/erc721Token.d.ts +60 -0
- package/dist/src/erc721Token.d.ts.map +1 -0
- package/dist/src/erc721Token.js +334 -0
- package/dist/src/erc7984Token.d.ts +187 -0
- package/dist/src/erc7984Token.d.ts.map +1 -0
- package/dist/src/erc7984Token.js +946 -0
- package/dist/src/eth.d.ts +10 -8
- package/dist/src/eth.d.ts.map +1 -1
- package/dist/src/eth.js +54 -39
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -2
- package/dist/src/lib/index.d.ts +1 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +7 -2
- package/dist/src/lib/messages/index.d.ts +3 -0
- package/dist/src/lib/messages/index.d.ts.map +1 -0
- package/dist/src/lib/messages/index.js +6 -0
- package/dist/src/lib/transactionBuilder.d.ts +10 -5
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +17 -7
- package/dist/src/lib/transferBuilders/index.d.ts +2 -2
- package/dist/src/lib/transferBuilders/index.d.ts.map +1 -1
- package/dist/src/lib/transferBuilders/index.js +3 -2
- package/dist/src/register.d.ts +2 -0
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +39 -2
- package/dist/src/sepeth.d.ts +8 -0
- package/dist/src/sepeth.d.ts.map +1 -0
- package/dist/src/sepeth.js +14 -0
- 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/erc7984Token.d.ts +2 -0
- package/dist/test/unit/erc7984Token.d.ts.map +1 -0
- package/dist/test/unit/erc7984Token.js +1589 -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 +2701 -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 +552 -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/register.d.ts +2 -0
- package/dist/test/unit/register.d.ts.map +1 -0
- package/dist/test/unit/register.js +75 -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 +117 -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/decryptionDelegation.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/decryptionDelegation.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/decryptionDelegation.js +59 -0
- package/dist/test/unit/transactionBuilder/decryptionDelegationTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/decryptionDelegationTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/decryptionDelegationTxBuilder.js +136 -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 +298 -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/sendERC7984Token.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/sendERC7984Token.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/sendERC7984Token.js +361 -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 +295 -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 +436 -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 +17 -13
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -771
|
@@ -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-beta/sdk-core");
|
|
40
|
+
const statics_1 = require("@bitgo-beta/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvc2VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQUF3RTtBQUN4RSxpREFBNkQ7QUFDN0Qsb0VBQXlDO0FBQ3pDLG9EQUE0QjtBQUM1QixvREFBNEI7QUFDNUIseURBQTJDO0FBRTNDLHNDQVFzQjtBQUN0Qiw4REFBZ0Q7QUFDaEQsOENBQTJDO0FBRTNDLFFBQVEsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLEVBQUU7SUFDNUMsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtRQUNqRCxNQUFNLFNBQVMsR0FBRyxJQUFBLHVCQUFVLEVBQUMsTUFBTSxDQUF1QixDQUFDO1FBQzNELE1BQU0sVUFBVSxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsTUFBTSxNQUFNLEdBQUcsSUFBQSxlQUFTLEVBQUMsVUFBVSxDQUFDLE9BQTBCLENBQUMsQ0FBQztRQUNoRSxNQUFNLEVBQUUsR0FBRyxJQUFJLGlCQUFXLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO1FBQzNGLFNBQVMsQ0FBQyxHQUFHLENBQUM7WUFDWixHQUFHLEVBQUUsSUFBSTtZQUNULFFBQVEsRUFBRSxNQUFNO1NBQ2pCLENBQUMsQ0FBQztRQUNILGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFB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QUUsS0FBSyxJQUFJLEVBQUU7WUFDdEUsTUFBTSxTQUFTLEdBQUcsSUFBQSx1QkFBVSxFQUFDLE9BQU8sQ0FBdUIsQ0FBQztZQUM1RCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sUUFBUSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3pDLGdCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ3JGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSwgQmFzZVRyYW5zYWN0aW9uIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgY29pbnMsIEV0aGVyZXVtTmV0d29yayB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IEV0aGVyZXVtQWJpIGZyb20gJ2V0aGVyZXVtanMtYWJpJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCAqIGFzIGV0aFV0aWwgZnJvbSAnZXRoZXJldW1qcy11dGlsJztcblxuaW1wb3J0IHtcbiAgZGVjb2RlVHJhbnNmZXJEYXRhLFxuICBnZXRDb21tb24sXG4gIFRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIFRyYW5zZmVyQnVpbGRlcixcbiAgS2V5UGFpcixcbiAgc2VuZE11bHRpU2lnVHlwZXMsXG59IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZXRoJztcbmltcG9ydCB7IGdldEJ1aWxkZXIgfSBmcm9tICcuLi9nZXRCdWlsZGVyJztcblxuZGVzY3JpYmUoJ0V0aCB0cmFuc2FjdGlvbiBidWlsZGVyIHNlbmQnLCAoKSA9PiB7XG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgYSBzZW5kIHR5cGUgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcigndGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KCdldGgnKTtcbiAgICBjb25zdCBjb21tb24gPSBnZXRDb21tb24oY29pbkNvbmZpZy5uZXR3b3JrIGFzIEV0aGVyZXVtTmV0d29yayk7XG4gICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oY29pbkNvbmZpZywgY29tbW9uKTtcbiAgICB0eEJ1aWxkZXIuY291bnRlcigxKTtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eEJ1aWxkZXIudmFsaWRhdGVUcmFuc2FjdGlvbih0eCksIC9JbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIGZlZS8pO1xuICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgZmVlOiAnMTAnLFxuICAgICAgZ2FzTGltaXQ6ICcxMDAwJyxcbiAgICB9KTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4QnVpbGRlci52YWxpZGF0ZVRyYW5zYWN0aW9uKHR4KSwgL0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3NpbmcgY29udHJhY3QgYWRkcmVzcy8pO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLnZhbGlkYXRlVHJhbnNhY3Rpb24odHgpLCAvSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBjb250cmFjdCBhZGRyZXNzLyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgc2lnbiBhbmQgYnVpbGQnLCAoKSA9PiB7XG4gICAgbGV0IHR4QnVpbGRlcjtcbiAgICBsZXQga2V5O1xuICAgIGxldCBjb250cmFjdEFkZHJlc3M7XG5cbiAgICBjb25zdCBnZXRPcGVyYXRpb25IYXNoID0gZnVuY3Rpb24gKHR4OiBCYXNlVHJhbnNhY3Rpb24pOiBzdHJpbmcge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSB0eC50b0pzb24oKTtcbiAgICAgIGNvbnN0IHsgdG9rZW5Db250cmFjdEFkZHJlc3MsIGV4cGlyZVRpbWUsIHNlcXVlbmNlSWQsIGFtb3VudCwgdG8gfSA9IGRlY29kZVRyYW5zZmVyRGF0YShkYXRhKTtcbiAgICAgIGNvbnN0IG9wZXJhdGlvblBhcmFtcyA9IFtcbiAgICAgICAgWydzdHJpbmcnLCAnYWRkcmVzcycsICd1aW50JywgJ2FkZHJlc3MnLCAndWludCcsICd1aW50J10sXG4gICAgICAgIFtcbiAgICAgICAgICAnRVJDMjAnLFxuICAgICAgICAgIG5ldyBldGhVdGlsLkJOKGV0aFV0aWwuc3RyaXBIZXhQcmVmaXgodG8pLCAxNiksXG4gICAgICAgICAgYW1vdW50LFxuICAgICAgICAgIG5ldyBldGhVdGlsLkJOKGV0aFV0aWwuc3RyaXBIZXhQcmVmaXgodG9rZW5Db250cmFjdEFkZHJlc3MgfHwgJycpLCAxNiksXG4gICAgICAgICAgZXhwaXJlVGltZSxcbiAgICAgICAgICBzZXF1ZW5jZUlkLFxuICAgICAgICBdLFxuICAgICAgXTtcbiAgICAgIHJldHVybiBFdGhlcmV1bUFiaS5zb2xpZGl0eVNIQTMoLi4ub3BlcmF0aW9uUGFyYW1zKTtcbiAgICB9O1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBjb250cmFjdEFkZHJlc3MgPSAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJztcbiAgICAgIHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ2h0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgICAga2V5ID0gdGVzdERhdGEuS0VZUEFJUl9QUlYuZ2V0S2V5cygpLnBydiBhcyBzdHJpbmc7XG4gICAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgICAgZmVlOiAnMTAwMDAwMDAwMCcsXG4gICAgICAgIGdhc0xpbWl0OiAnMTIxMDAwMDAnLFxuICAgICAgfSk7XG4gICAgICB0eEJ1aWxkZXIuY291bnRlcigyKTtcbiAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgIHR4QnVpbGRlci5jb250cmFjdChjb250cmFjdEFkZHJlc3MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Egc2VuZCBmdW5kcyB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlY2lwaWVudCA9ICcweDE5NjQ1MDMyYzdmMTUzMzM5NWQ0NGE2Mjk0NjJlNzUxMDg0ZDNlNGMnO1xuICAgICAgY29uc3QgYW1vdW50ID0gJzEwMDAwMDAwMDAnO1xuICAgICAgY29uc3QgZXhwaXJlVGltZSA9IDE1OTAwNjY3Mjg7XG4gICAgICBjb25zdCBzZXF1ZW5jZUlkID0gNTtcbiAgICAgIHR4QnVpbGRlclxuICAgICAgICAudHJhbnNmZXIoKVxuICAgICAgICAuYW1vdW50KGFtb3VudClcbiAgICAgICAgLnRvKHJlY2lwaWVudClcbiAgICAgICAgLmV4cGlyYXRpb25UaW1lKGV4cGlyZVRpbWUpXG4gICAgICAgIC5jb250cmFjdFNlcXVlbmNlSWQoc2VxdWVuY2VJZClcbiAgICAgICAgLmtleShrZXkpO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLlBSSVZBVEVfS0VZIH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgc2hvdWxkLmVxdWFsKHR4LnRvSnNvbigpLmNoYWluSWQsIDU2MDA0OCk7XG4gICAgICBzaG91bGQuZXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuU0VORF9UWF9CUk9BRENBU1RfTEVHQUNZKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5zaWduYXR1cmUubGVuZ3RoLCAyKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5pbnB1dHMubGVuZ3RoLCAxKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5pbnB1dHNbMF0uYWRkcmVzcywgY29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5pbnB1dHNbMF0udmFsdWUsIGFtb3VudCk7XG5cbiAgICAgIHNob3VsZC5lcXVhbCh0eC5vdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgICBzaG91bGQuZXF1YWwodHgub3V0cHV0c1swXS5hZGRyZXNzLCByZWNpcGllbnQpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4Lm91dHB1dHNbMF0udmFsdWUsIGFtb3VudCk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSB0eC50b0pzb24oKS5kYXRhO1xuICAgICAgY29uc3Qge1xuICAgICAgICB0byxcbiAgICAgICAgYW1vdW50OiBwYXJzZWRBbW91bnQsXG4gICAgICAgIGV4cGlyZVRpbWU6IHBhcnNlZEV4cGlyZVRpbWUsXG4gICAgICAgIHNlcXVlbmNlSWQ6IHBhcnNlZFNlcXVlbmNlSWQsXG4gICAgICB9ID0gZGVjb2RlVHJhbnNmZXJEYXRhKGRhdGEpO1xuICAgICAgc2hvdWxkLmVxdWFsKHRvLCByZWNpcGllbnQpO1xuICAgICAgc2hvdWxkLmVxdWFsKHBhcnNlZEFtb3VudCwgYW1vdW50KTtcbiAgICAgIHNob3VsZC5lcXVhbChwYXJzZWRFeHBpcmVUaW1lLCBleHBpcmVUaW1lKTtcbiAgICAgIHNob3VsZC5lcXVhbChwYXJzZWRTZXF1ZW5jZUlkLCBzZXF1ZW5jZUlkKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHNlbmQgZnVuZHMgdHJhbnNhY3Rpb24gYnVpbHQgZm9yIGEgZmlyc3Qgc2lnbmVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVjaXBpZW50ID0gJzB4MTk2NDUwMzJjN2YxNTMzMzk1ZDQ0YTYyOTQ2MmU3NTEwODRkM2U0Yyc7XG4gICAgICBjb25zdCBhbW91bnQgPSAnMTAwMDAwMDAwMCc7XG4gICAgICBjb25zdCBleHBpcmVUaW1lID0gMTU5MDA2NjcyODtcbiAgICAgIGNvbnN0IHNlcXVlbmNlSWQgPSA1O1xuICAgICAgdHhCdWlsZGVyLmZlZSh7XG4gICAgICAgIGVpcDE1NTk6IHtcbiAgICAgICAgICBtYXhGZWVQZXJHYXM6ICcxMDAnLFxuICAgICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAnMTAnLFxuICAgICAgICB9LFxuICAgICAgICBmZWU6ICcxMCcsXG4gICAgICAgIGdhc0xpbWl0OiAnMTAwMCcsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHRyYW5zZmVyOiBUcmFuc2ZlckJ1aWxkZXIgPSB0eEJ1aWxkZXIudHJhbnNmZXIoKTtcbiAgICAgIHRyYW5zZmVyXG4gICAgICAgIC5hbW91bnQoYW1vdW50KVxuICAgICAgICAudG8ocmVjaXBpZW50KVxuICAgICAgICAuZXhwaXJhdGlvblRpbWUoZXhwaXJlVGltZSlcbiAgICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZChzZXF1ZW5jZUlkKVxuICAgICAgICAuaXNGaXJzdFNpZ25lcih0cnVlKTtcbiAgICAgIGNvbnN0IHR4OiBUcmFuc2FjdGlvbiA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBjb25zdCBtZXRob2RJZCA9IEV0aGVyZXVtQWJpLm1ldGhvZElEKCdzZW5kTXVsdGlTaWcnLCBzZW5kTXVsdGlTaWdUeXBlcyk7XG4gICAgICBjb25zdCBkZWNvZGVkRGF0YSA9IEV0aGVyZXVtQWJpLnJhd0RlY29kZShcbiAgICAgICAgWydzdHJpbmcnLCAnYWRkcmVzcycsICd1aW50JywgJ2J5dGVzJywgJ3VpbnQnLCAndWludCddLFxuICAgICAgICBCdWZmZXIuZnJvbShldGhVdGlsLnN0cmlwSGV4UHJlZml4KHR4LnRvSnNvbigpLmRhdGEpLnNsaWNlKG1ldGhvZElkLnRvU3RyaW5nKCdoZXgnKS5sZW5ndGgsIC0yKSwgJ2hleCcpXG4gICAgICApO1xuXG4gICAgICBzaG91bGQuZXF1YWwoZGVjb2RlZERhdGFbMF0sICdFVEhFUicpO1xuICAgICAgc2hvdWxkLmVxdWFsKGRlY29kZWREYXRhWzFdLCBldGhVdGlsLnN0cmlwSGV4UHJlZml4KHJlY2lwaWVudCkpO1xuICAgICAgc2hvdWxkLmVxdWFsKGRlY29kZWREYXRhWzJdLnRvU3RyaW5nKCksIGFtb3VudCk7XG4gICAgICBzaG91bGQuZXF1YWwoZGVjb2RlZERhdGFbM10udG9TdHJpbmcoJ2hleCcpLCAnJyk7XG4gICAgICBzaG91bGQuZXF1YWwoZGVjb2RlZERhdGFbNF0udG9TdHJpbmcoKSwgZXhwaXJlVGltZSk7XG4gICAgICBzaG91bGQuZXF1YWwoZGVjb2RlZERhdGFbNV0udG9TdHJpbmcoKSwgc2VxdWVuY2VJZCk7XG4gICAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkuY2hhaW5JZCwgNTYwMDQ4KTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0ZXN0RGF0YS5TRU5EX1RYX0JST0FEQ0FTVF9SRUNPVkVSWSk7XG4gICAgICBzaG91bGQuZXF1YWwodHguc2lnbmF0dXJlLmxlbmd0aCwgMCk7XG4gICAgICBzaG91bGQuZXF1YWwodHguaW5wdXRzLmxlbmd0aCwgMSk7XG4gICAgICBzaG91bGQuZXF1YWwodHguaW5wdXRzWzBdLmFkZHJlc3MsIGNvbnRyYWN0QWRkcmVzcyk7XG4gICAgICBzaG91bGQuZXF1YWwodHguaW5wdXRzWzBdLnZhbHVlLCBhbW91bnQpO1xuXG4gICAgICBzaG91bGQuZXF1YWwodHgub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4Lm91dHB1dHNbMF0uYWRkcmVzcywgcmVjaXBpZW50KTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5vdXRwdXRzWzBdLnZhbHVlLCBhbW91bnQpO1xuXG4gICAgICBjb25zdCBkYXRhID0gdHgudG9Kc29uKCkuZGF0YTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdG8sXG4gICAgICAgIGFtb3VudDogcGFyc2VkQW1vdW50LFxuICAgICAgICBleHBpcmVUaW1lOiBwYXJzZWRFeHBpcmVUaW1lLFxuICAgICAgICBzZXF1ZW5jZUlkOiBwYXJzZWRTZXF1ZW5jZUlkLFxuICAgICAgfSA9IGRlY29kZVRyYW5zZmVyRGF0YShkYXRhLCB0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0bywgcmVjaXBpZW50KTtcbiAgICAgIHNob3VsZC5lcXVhbChwYXJzZWRBbW91bnQsIGFtb3VudCk7XG4gICAgICBzaG91bGQuZXF1YWwocGFyc2VkRXhwaXJlVGltZSwgZXhwaXJlVGltZSk7XG4gICAgICBzaG91bGQuZXF1YWwocGFyc2VkU2VxdWVuY2VJZCwgc2VxdWVuY2VJZCk7XG4gICAgICAvLyBBZGQgc2lnbmF0dXJlIGZyb20gZmlyc3Qgc2lnbmVyXG4gICAgICB0cmFuc2Zlci5zZXRTaWduYXR1cmUoJzB4MTIzNDU2Nzg5MGFiY2RlZicpLmlzRmlyc3RTaWduZXIoZmFsc2UpO1xuICAgICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdG86IHRvU2lnbmVkLFxuICAgICAgICBhbW91bnQ6IHBhcnNlZEFtb3VudFNpZ25lZCxcbiAgICAgICAgZXhwaXJlVGltZTogcGFyc2VkRXhwaXJlVGltZVNpZ25lZCxcbiAgICAgICAgc2VxdWVuY2VJZDogcGFyc2VkU2VxdWVuY2VJZFNpZ25lZCxcbiAgICAgICAgc2lnbmF0dXJlLFxuICAgICAgfSA9IGRlY29kZVRyYW5zZmVyRGF0YShzaWduZWRUeC50b0pzb24oKS5kYXRhKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0b1NpZ25lZCwgcmVjaXBpZW50KTtcbiAgICAgIHNob3VsZC5lcXVhbChwYXJzZWRBbW91bnRTaWduZWQsIGFtb3VudCk7XG4gICAgICBzaG91bGQuZXF1YWwocGFyc2VkRXhwaXJlVGltZVNpZ25lZCwgZXhwaXJlVGltZSk7XG4gICAgICBzaG91bGQuZXF1YWwocGFyc2VkU2VxdWVuY2VJZFNpZ25lZCwgc2VxdWVuY2VJZCk7XG4gICAgICBzaG91bGQuZXF1YWwoc2lnbmF0dXJlLCAnMHgxMjM0NTY3ODkwYWJjZGVmJyk7XG5cbiAgICAgIGNvbnN0IGZyb21TZXJpYWxpemVkVHhCdWlsZGVyID0gZ2V0QnVpbGRlcignaHRldGgnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgICBmcm9tU2VyaWFsaXplZFR4QnVpbGRlci5mcm9tKHRlc3REYXRhLlNFTkRfVFhfQlJPQURDQVNUX1JFQ09WRVJZLCB0cnVlKTtcbiAgICAgIGNvbnN0IGZyb21TZXJpYWxpemVkVHggPSBhd2FpdCBmcm9tU2VyaWFsaXplZFR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3Qge1xuICAgICAgICB0bzogdG9Gcm9tU2VyaWFsaXplZCxcbiAgICAgICAgYW1vdW50OiBhbW91bnRGcm9tU2VyaWFsaXplZCxcbiAgICAgICAgZXhwaXJlVGltZTogZXhwaXJlVGltZUZyb21TZXJpYWxpemVkLFxuICAgICAgICBzZXF1ZW5jZUlkOiBzZXF1ZW5jZUlkRnJvbVNlcmlhbGl6ZWQsXG4gICAgICB9ID0gZGVjb2RlVHJhbnNmZXJEYXRhKGZyb21TZXJpYWxpemVkVHgudG9Kc29uKCkuZGF0YSwgdHJ1ZSk7XG4gICAgICBzaG91bGQuZXF1YWwodG9Gcm9tU2VyaWFsaXplZCwgcmVjaXBpZW50KTtcbiAgICAgIHNob3VsZC5lcXVhbChhbW91bnRGcm9tU2VyaWFsaXplZCwgYW1vdW50KTtcbiAgICAgIHNob3VsZC5lcXVhbChleHBpcmVUaW1lRnJvbVNlcmlhbGl6ZWQsIGV4cGlyZVRpbWUpO1xuICAgICAgc2hvdWxkLmVxdWFsKHNlcXVlbmNlSWRGcm9tU2VyaWFsaXplZCwgc2VxdWVuY2VJZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNlbmQgZnVuZHMgZm9yIHdhbGxldCB2ZXJzaW9uIDQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZWNpcGllbnQgPSAnMHgxOTY0NTAzMmM3ZjE1MzMzOTVkNDRhNjI5NDYyZTc1MTA4NGQzZTRjJztcbiAgICAgIGNvbnN0IGFtb3VudCA9ICcxMDAwMDAwMDAwJztcbiAgICAgIGNvbnN0IGV4cGlyZVRpbWUgPSAxNTkwMDY2NzI4O1xuICAgICAgY29uc3Qgc2VxdWVuY2VJZCA9IDU7XG4gICAgICB0eEJ1aWxkZXIud2FsbGV0VmVyc2lvbig0KTtcbiAgICAgIHR4QnVpbGRlclxuICAgICAgICAudHJhbnNmZXIoKVxuICAgICAgICAuYW1vdW50KGFtb3VudClcbiAgICAgICAgLnRvKHJlY2lwaWVudClcbiAgICAgICAgLmV4cGlyYXRpb25UaW1lKGV4cGlyZVRpbWUpXG4gICAgICAgIC5jb250cmFjdFNlcXVlbmNlSWQoc2VxdWVuY2VJZClcbiAgICAgICAgLmtleShrZXkpO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLlBSSVZBVEVfS0VZIH0pO1xuICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBvcGVyYXRpb25EYXRhID0gdHhCdWlsZGVyLnRyYW5zZmVyKCkuZ2V0T3BlcmF0aW9uRGF0YSgpO1xuICAgICAgc2hvdWxkLmVxdWFsKG9wZXJhdGlvbkRhdGFbMV1bMF0sICc1NjAwNDgnKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEJ1aWxkZXIuY29pblVzZXNOb25QYWNrZWRFbmNvZGluZ0ZvclR4RGF0YSgpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHNlbmQgZnVuZHMgd2l0aCBhbW91bnQgMCB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIHR4QnVpbGRlclxuICAgICAgICAudHJhbnNmZXIoKVxuICAgICAgICAuYW1vdW50KCcwJylcbiAgICAgICAgLnRvKCcweDE5NjQ1MDMyYzdmMTUzMzM5NWQ0NGE2Mjk0NjJlNzUxMDg0ZDNlNGMnKVxuICAgICAgICAuZXhwaXJhdGlvblRpbWUoMTU5MDA2NjcyOClcbiAgICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZCg1KVxuICAgICAgICAua2V5KGtleSk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuUFJJVkFURV9LRVkgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLlNFTkRfVFhfQU1PVU5UX1pFUk9fQlJPQURDQVNUKTtcbiAgICB9KTtcblxuICAgIGl0KCdHb2VybGkgY2hhaW4gaWQgc2hvdWxkIGJlIGNvcnJlY3QnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdndGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgICBmZWU6ICcxMDAwMDAwMDAwJyxcbiAgICAgICAgZ2FzTGltaXQ6ICcxMjEwMDAwMCcsXG4gICAgICB9KTtcbiAgICAgIHR4QnVpbGRlci5jb3VudGVyKDIpO1xuICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KGNvbnRyYWN0QWRkcmVzcyk7XG4gICAgICBjb25zdCB0cmFuc2ZlckJ1aWxkZXIgPSB0eEJ1aWxkZXIudHJhbnNmZXIoKSBhcyBUcmFuc2ZlckJ1aWxkZXI7XG4gICAgICB0cmFuc2ZlckJ1aWxkZXJcbiAgICAgICAgLmFtb3VudCgnMCcpXG4gICAgICAgIC50bygnMHgxOTY0NTAzMmM3ZjE1MzMzOTVkNDRhNjI5NDYyZTc1MTA4NGQzZTRjJylcbiAgICAgICAgLmV4cGlyYXRpb25UaW1lKDE1OTAwNjY3MjgpXG4gICAgICAgIC5jb250cmFjdFNlcXVlbmNlSWQoNSlcbiAgICAgICAgLmtleShrZXkpO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLlBSSVZBVEVfS0VZIH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC50b0pzb24oKS5jaGFpbklkLCA1KTtcbiAgICB9KTtcblxuICAgIGl0KCdIb29kaSBjaGFpbiBpZCBzaG91bGQgYmUgY29ycmVjdCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ2h0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgICAgdHhCdWlsZGVyLmZlZSh7XG4gICAgICAgIGZlZTogJzEwMDAwMDAwMDAnLFxuICAgICAgICBnYXNMaW1pdDogJzEyMTAwMDAwJyxcbiAgICAgIH0pO1xuICAgICAgdHhCdWlsZGVyLmNvdW50ZXIoMik7XG4gICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgICB0eEJ1aWxkZXIuY29udHJhY3QoY29udHJhY3RBZGRyZXNzKTtcbiAgICAgIGNvbnN0IHRyYW5zZmVyQnVpbGRlciA9IHR4QnVpbGRlci50cmFuc2ZlcigpIGFzIFRyYW5zZmVyQnVpbGRlcjtcbiAgICAgIHRyYW5zZmVyQnVpbGRlclxuICAgICAgICAuYW1vdW50KCcwJylcbiAgICAgICAgLnRvKCcweDE5NjQ1MDMyYzdmMTUzMzM5NWQ0NGE2Mjk0NjJlNzUxMDg0ZDNlNGMnKVxuICAgICAgICAuZXhwaXJhdGlvblRpbWUoMTU5MDA2NjcyOClcbiAgICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZCg1KVxuICAgICAgICAua2V5KGtleSk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuUFJJVkFURV9LRVkgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnRvSnNvbigpLmNoYWluSWQsIDU2MDA0OCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSBzZW5kIHRva2VuIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVjaXBpZW50ID0gJzB4NzJjMmM4ZTA4YmY5MWQ3NTVjZDdkMjZiNDlhMmVlM2RjOTlkZTFiOSc7XG4gICAgICBjb25zdCBjb250cmFjdEFkZHJlc3MgPSAnMHhkZjdkZWNiMWJhYThmNTI5ZjBjODk4MmNiYjRiZTUwMzU3MTk1Mjk5JztcbiAgICAgIGNvbnN0IGFtb3VudCA9ICcxMDAnO1xuICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KGNvbnRyYWN0QWRkcmVzcyk7XG4gICAgICB0eEJ1aWxkZXJcbiAgICAgICAgLnRyYW5zZmVyKClcbiAgICAgICAgLmNvaW4oJ3RyaWYnKVxuICAgICAgICAuYW1vdW50KGFtb3VudClcbiAgICAgICAgLnRvKHJlY2lwaWVudClcbiAgICAgICAgLmV4cGlyYXRpb25UaW1lKDE1OTAwNjY3MjgpXG4gICAgICAgIC5jb250cmFjdFNlcXVlbmNlSWQoNSlcbiAgICAgICAgLmtleShrZXkpO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oe1xuICAgICAgICBrZXk6IHRlc3REYXRhLlBSSVZBVEVfS0VZLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLlNFTkRfVE9LRU5fVFhfQlJPQURDQVNUKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5zaWduYXR1cmUubGVuZ3RoLCAyKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5pbnB1dHMubGVuZ3RoLCAxKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5pbnB1dHNbMF0uYWRkcmVzcywgY29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eC5pbnB1dHNbMF0udmFsdWUsIGFtb3VudCk7XG4gICAgICBzaG91bGQuZXF1YWwodHguaW5wdXRzWzBdLmNvaW4sICd0cmlmJyk7XG5cbiAgICAgIHNob3VsZC5lcXVhbCh0eC5vdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgICBzaG91bGQuZXF1YWwodHgub3V0cHV0c1swXS5hZGRyZXNzLCByZWNpcGllbnQpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4Lm91dHB1dHNbMF0udmFsdWUsIGFtb3VudCk7XG4gICAgICBzaG91bGQuZXF1YWwodHgub3V0cHV0c1swXS5jb2luLCAndHJpZicpO1xuXG4gICAgICBjb25zdCB7IHNpZ25hdHVyZSB9ID0gZGVjb2RlVHJhbnNmZXJEYXRhKHR4LnRvSnNvbigpLmRhdGEpO1xuICAgICAgY29uc3Qgb3BlcmF0aW9uSGFzaCA9IGdldE9wZXJhdGlvbkhhc2godHgpO1xuXG4gICAgICBjb25zdCB7IHYsIHIsIHMgfSA9IGV0aFV0aWwuZnJvbVJwY1NpZyhzaWduYXR1cmUpO1xuICAgICAgY29uc3Qgc2VuZGVyUHViS2V5ID0gZXRoVXRpbC5lY3JlY292ZXIoQnVmZmVyLmZyb20ob3BlcmF0aW9uSGFzaCwgJ2hleCcpLCB2LCByLCBzKTtcbiAgICAgIGNvbnN0IHNlbmRlckFkZHJlc3MgPSBldGhVdGlsLnB1YlRvQWRkcmVzcyhzZW5kZXJQdWJLZXkpO1xuICAgICAgY29uc3Qgc2VuZGVyS2V5ID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLlBSSVZBVEVfS0VZIH0pO1xuICAgICAgZXRoVXRpbC5idWZmZXJUb0hleChzZW5kZXJBZGRyZXNzKS5zaG91bGQuZXF1YWwoc2VuZGVyS2V5LmdldEFkZHJlc3MoKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSBzZW5kIHRva2VuIHRyYW5zYWN0aW9ucyBmcm9tIHNlcmlhbGl6ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyKGNvaW5zLmdldCgnaHRldGgnKSk7XG4gICAgICB0eEJ1aWxkZXIuZnJvbSh0ZXN0RGF0YS5TRU5EX1RPS0VOX1RYX0JST0FEQ0FTVCk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLlNFTkRfVE9LRU5fVFhfQlJPQURDQVNUKTtcblxuICAgICAgY29uc3QgeyBzaWduYXR1cmUgfSA9IGRlY29kZVRyYW5zZmVyRGF0YSh0eC50b0pzb24oKS5kYXRhKTtcbiAgICAgIGNvbnN0IG9wZXJhdGlvbkhhc2ggPSBnZXRPcGVyYXRpb25IYXNoKHR4KTtcblxuICAgICAgY29uc3QgeyB2LCByLCBzIH0gPSBldGhVdGlsLmZyb21ScGNTaWcoc2lnbmF0dXJlKTtcbiAgICAgIGNvbnN0IHNlbmRlclB1YktleSA9IGV0aFV0aWwuZWNyZWNvdmVyKEJ1ZmZlci5mcm9tKG9wZXJhdGlvbkhhc2ggfHwgJycpLCB2LCByLCBzKTtcbiAgICAgIGNvbnN0IHNlbmRlckFkZHJlc3MgPSBldGhVdGlsLnB1YlRvQWRkcmVzcyhzZW5kZXJQdWJLZXkpO1xuICAgICAgY29uc3Qgc2VuZGVyS2V5ID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLlBSSVZBVEVfS0VZIH0pO1xuICAgICAgZXRoVXRpbC5idWZmZXJUb0hleChzZW5kZXJBZGRyZXNzKS5zaG91bGQuZXF1YWwoc2VuZGVyS2V5LmdldEFkZHJlc3MoKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaWduIGFuZCBidWlsZCBmcm9tIHNlcmlhbGl6ZWQnLCAoKSA9PiB7XG4gICAge1xuICAgICAgY29uc3QgdGVzdFBhcmFtcyA9IFtcbiAgICAgICAgWydMZWdhY3knLCB0ZXN0RGF0YS5TRU5EX1RYX0JST0FEQ0FTVF9MRUdBQ1ldLFxuICAgICAgICBbJ0VJUDE1NTknLCB0ZXN0RGF0YS5TRU5EX1RYX0JST0FEQ0FTVF9FSVAxNTU5XSxcbiAgICAgIF07XG5cbiAgICAgIHRlc3RQYXJhbXMubWFwKChbdHhuVHlwZSwgdHhuSGV4XSkgPT4ge1xuICAgICAgICBpdChgc2hvdWxkIGJlIGFibGUgdG8gY3JlYXRlIGEgc2VuZCB0cmFuc2FjdGlvbiBmcm9tIHNlcmlhbGl6ZWQgJHt0eG5UeXBlfSB0eCBoZXhgLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcignaHRldGgnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgICAgICAgdHhCdWlsZGVyLmZyb20odHhuSGV4KTtcbiAgICAgICAgICBjb25zdCBzaWduZWRUeCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICAgIHNob3VsZC5lcXVhbChzaWduZWRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLCB0eG5IZXgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGl0KCdhIHNlbmQgZnVuZHMgdHJhbnNhY3Rpb24gd2l0aCBhbW91bnQgMCBmcm9tIHNlcmlhbGl6ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICAgIHR4QnVpbGRlci5mcm9tKHRlc3REYXRhLlNFTkRfVFhfQU1PVU5UX1pFUk9fQlJPQURDQVNUKTtcbiAgICAgIGNvbnN0IHNpZ25lZFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXF1YWwoc2lnbmVkVHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuU0VORF9UWF9BTU9VTlRfWkVST19CUk9BRENBU1QpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendERC7984Token.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/sendERC7984Token.ts"],"names":[],"mappings":""}
|