@bitgo/sdk-coin-eth 25.9.1 → 25.10.1
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/erc7984Token.d.ts +63 -0
- package/dist/src/erc7984Token.d.ts.map +1 -0
- package/dist/src/erc7984Token.js +111 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +13 -2
- package/dist/test/unit/eth.js +62 -1
- package/dist/test/unit/register.js +8 -6
- 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/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
|
@@ -11,6 +11,7 @@ const statics_1 = require("@bitgo/statics");
|
|
|
11
11
|
const register_1 = require("../../src/register");
|
|
12
12
|
const erc20Token_1 = require("../../src/erc20Token");
|
|
13
13
|
const erc721Token_1 = require("../../src/erc721Token");
|
|
14
|
+
const erc7984Token_1 = require("../../src/erc7984Token");
|
|
14
15
|
describe('ETH Register', function () {
|
|
15
16
|
let bitgo;
|
|
16
17
|
let registerSpy;
|
|
@@ -33,10 +34,11 @@ describe('ETH Register', function () {
|
|
|
33
34
|
assert_1.default.ok(registeredNames.includes('gteth'));
|
|
34
35
|
assert_1.default.ok(registeredNames.includes('teth'));
|
|
35
36
|
assert_1.default.ok(registeredNames.includes('hteth'));
|
|
36
|
-
// ERC20 and
|
|
37
|
+
// ERC20, ERC721 and ERC7984 tokens should be registered
|
|
37
38
|
const erc20Count = erc20Token_1.Erc20Token.createTokenConstructors().length;
|
|
38
39
|
const erc721Count = erc721Token_1.Erc721Token.createTokenConstructors().length;
|
|
39
|
-
|
|
40
|
+
const erc7984Count = erc7984Token_1.Erc7984Token.createTokenConstructors().length;
|
|
41
|
+
assert_1.default.strictEqual(registerSpy.callCount, 4 + erc20Count + erc721Count + erc7984Count);
|
|
40
42
|
});
|
|
41
43
|
});
|
|
42
44
|
describe('registerWithCoinMap', function () {
|
|
@@ -60,12 +62,12 @@ describe('ETH Register', function () {
|
|
|
60
62
|
assert_1.default.ok(statics_1.coins.has(staticsCoin.name), `${staticsCoin.name} should exist in the coin map`);
|
|
61
63
|
}
|
|
62
64
|
});
|
|
63
|
-
it('should not add tokens to the global coin map when coin map has no
|
|
64
|
-
const limitedCoinMap = statics_1.coins.filter((coin) => !(coin instanceof statics_1.Erc20Coin));
|
|
65
|
+
it('should not add tokens to the global coin map when coin map has no contract-address tokens', function () {
|
|
66
|
+
const limitedCoinMap = statics_1.coins.filter((coin) => !(coin instanceof statics_1.Erc20Coin) && !(coin instanceof statics_1.Erc7984Coin));
|
|
65
67
|
(0, register_1.registerWithCoinMap)(bitgo, limitedCoinMap);
|
|
66
|
-
// registerToken should not be called since no ERC20 tokens are in the map
|
|
68
|
+
// registerToken should not be called since no ERC20 or ERC7984 tokens are in the map
|
|
67
69
|
assert_1.default.strictEqual(registerTokenSpy.callCount, 0);
|
|
68
70
|
});
|
|
69
71
|
});
|
|
70
72
|
});
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrREFBMEI7QUFDMUIsb0RBQTRCO0FBQzVCLDRDQUEwQztBQUMxQyw4Q0FBb0Q7QUFDcEQsNENBQStEO0FBQy9ELGlEQUFtRTtBQUNuRSxxREFBa0Q7QUFDbEQsdURBQW9EO0FBQ3BELHlEQUFzRDtBQUV0RCxRQUFRLENBQUMsY0FBYyxFQUFFO0lBQ3ZCLElBQUksS0FBZSxDQUFDO0lBQ3BCLElBQUksV0FBMkIsQ0FBQztJQUNoQyxJQUFJLGdCQUFnQyxDQUFDO0lBRXJDLFVBQVUsQ0FBQztRQUNULEtBQUssR0FBRyxJQUFJLGtCQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN0QyxXQUFXLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDM0MsZ0JBQWdCLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyw0QkFBaUIsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNuRSxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQztRQUNSLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN0QixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxVQUFVLEVBQUU7UUFDbkIsRUFBRSxDQUFDLG1EQUFtRCxFQUFFO1lBQ3RELElBQUEsbUJBQVEsRUFBQyxLQUFLLENBQUMsQ0FBQztZQUVoQixNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFM0Usa0NBQWtDO1lBQ2xDLGdCQUFNLENBQUMs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QUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBRTNDLHFGQUFxRjtZQUNyRixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgR2xvYmFsQ29pbkZhY3RvcnkgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgY29pbnMsIEVyYzIwQ29pbiwgRXJjNzk4NENvaW4gfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyByZWdpc3RlciwgcmVnaXN0ZXJXaXRoQ29pbk1hcCB9IGZyb20gJy4uLy4uL3NyYy9yZWdpc3Rlcic7XG5pbXBvcnQgeyBFcmMyMFRva2VuIH0gZnJvbSAnLi4vLi4vc3JjL2VyYzIwVG9rZW4nO1xuaW1wb3J0IHsgRXJjNzIxVG9rZW4gfSBmcm9tICcuLi8uLi9zcmMvZXJjNzIxVG9rZW4nO1xuaW1wb3J0IHsgRXJjNzk4NFRva2VuIH0gZnJvbSAnLi4vLi4vc3JjL2VyYzc5ODRUb2tlbic7XG5cbmRlc2NyaWJlKCdFVEggUmVnaXN0ZXInLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBiaXRnbzogQml0R29BUEk7XG4gIGxldCByZWdpc3RlclNweTogc2lub24uU2lub25TcHk7XG4gIGxldCByZWdpc3RlclRva2VuU3B5OiBzaW5vbi5TaW5vblNweTtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IG5ldyBCaXRHb0FQSSh7IGVudjogJ3Rlc3QnIH0pO1xuICAgIHJlZ2lzdGVyU3B5ID0gc2lub24uc3B5KGJpdGdvLCAncmVnaXN0ZXInKTtcbiAgICByZWdpc3RlclRva2VuU3B5ID0gc2lub24uc3B5KEdsb2JhbENvaW5GYWN0b3J5LCAncmVnaXN0ZXJUb2tlbicpO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHJlZ2lzdGVyU3B5LnJlc3RvcmUoKTtcbiAgICByZWdpc3RlclRva2VuU3B5LnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlZ2lzdGVyJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmVnaXN0ZXIgYmFzZSBjb2lucyBhbmQgdG9rZW4gY29uc3RydWN0b3JzJywgZnVuY3Rpb24gKCkge1xuICAgICAgcmVnaXN0ZXIoYml0Z28pO1xuXG4gICAgICBjb25zdCByZWdpc3RlcmVkTmFtZXMgPSByZWdpc3RlclNweS5nZXRDYWxscygpLm1hcCgoY2FsbCkgPT4gY2FsbC5hcmdzWzBdKTtcblxuICAgICAgLy8gQmFzZSBjb2lucyBzaG91bGQgYmUgcmVnaXN0ZXJlZFxuICAgICAgYXNzZXJ0Lm9rKHJlZ2lzdGVyZWROYW1lcy5pbmNsdWRlcygnZXRoJykpO1xuICAgICAgYXNzZXJ0Lm9rKHJlZ2lzdGVyZWROYW1lcy5pbmNsdWRlcygnZ3RldGgnKSk7XG4gICAgICBhc3NlcnQub2socmVnaXN0ZXJlZE5hbWVzLmluY2x1ZGVzKCd0ZXRoJykpO1xuICAgICAgYXNzZXJ0Lm9rKHJlZ2lzdGVyZWROYW1lcy5pbmNsdWRlcygnaHRldGgnKSk7XG5cbiAgICAgIC8vIEVSQzIwLCBFUkM3MjEgYW5kIEVSQzc5ODQgdG9rZW5zIHNob3VsZCBiZSByZWdpc3RlcmVkXG4gICAgICBjb25zdCBlcmMyMENvdW50ID0gRXJjMjBUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycygpLmxlbmd0aDtcbiAgICAgIGNvbnN0IGVyYzcyMUNvdW50ID0gRXJjNzIxVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5sZW5ndGg7XG4gICAgICBjb25zdCBlcmM3OTg0Q291bnQgPSBFcmM3OTg0VG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5sZW5ndGg7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVnaXN0ZXJTcHkuY2FsbENvdW50LCA0ICsgZXJjMjBDb3VudCArIGVyYzcyMUNvdW50ICsgZXJjNzk4NENvdW50KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlZ2lzdGVyV2l0aENvaW5NYXAnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBjYWxsIHJlZ2lzdGVyIGludGVybmFsbHkgZm9yIGJhc2UgY29pbnMgYW5kIHRva2VucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlZ2lzdGVyV2l0aENvaW5NYXAoYml0Z28sIGNvaW5zKTtcblxuICAgICAgY29uc3QgcmVnaXN0ZXJlZE5hbWVzID0gcmVnaXN0ZXJTcHkuZ2V0Q2FsbHMoKS5tYXAoKGNhbGwpID0+IGNhbGwuYXJnc1swXSk7XG5cbiAgICAgIC8vIEJhc2UgY29pbnMgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgdmlhIHJlZ2lzdGVyKClcbiAgICAgIGFzc2VydC5vayhyZWdpc3RlcmVkTmFtZXMuaW5jbHVkZXMoJ2V0aCcpKTtcbiAgICAgIGFzc2VydC5vayhyZWdpc3RlcmVkTmFtZXMuaW5jbHVkZXMoJ2d0ZXRoJykpO1xuICAgICAgYXNzZXJ0Lm9rKHJlZ2lzdGVyZWROYW1lcy5pbmNsdWRlcygndGV0aCcpKTtcbiAgICAgIGFzc2VydC5vayhyZWdpc3RlcmVkTmFtZXMuaW5jbHVkZXMoJ2h0ZXRoJykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhZGQgZHluYW1pYyBFUkMyMCB0b2tlbnMgdG8gdGhlIGdsb2JhbCBjb2luIG1hcCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlZ2lzdGVyV2l0aENvaW5NYXAoYml0Z28sIGNvaW5zKTtcblxuICAgICAgLy8gcmVnaXN0ZXJUb2tlbiBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBmb3IgZHluYW1pYyB0b2tlbnNcbiAgICAgIGFzc2VydC5vayhyZWdpc3RlclRva2VuU3B5LmNhbGxDb3VudCA+IDApO1xuXG4gICAgICAvLyBFYWNoIGNhbGwgc2hvdWxkIHBhc3MgYSB2YWxpZCBjb2luIGZyb20gdGhlIGNvaW5NYXBcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVnaXN0ZXJUb2tlblNweS5jYWxsQ291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBjYWxsID0gcmVnaXN0ZXJUb2tlblNweS5nZXRDYWxsKGkpO1xuICAgICAgICBjb25zdCBzdGF0aWNzQ29pbiA9IGNhbGwuYXJnc1swXTtcbiAgICAgICAgYXNzZXJ0Lm9rKGNvaW5zLmhhcyhzdGF0aWNzQ29pbi5uYW1lKSwgYCR7c3RhdGljc0NvaW4ubmFtZX0gc2hvdWxkIGV4aXN0IGluIHRoZSBjb2luIG1hcGApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgYWRkIHRva2VucyB0byB0aGUgZ2xvYmFsIGNvaW4gbWFwIHdoZW4gY29pbiBtYXAgaGFzIG5vIGNvbnRyYWN0LWFkZHJlc3MgdG9rZW5zJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbGltaXRlZENvaW5NYXAgPSBjb2lucy5maWx0ZXIoKGNvaW4pID0+ICEoY29pbiBpbnN0YW5jZW9mIEVyYzIwQ29pbikgJiYgIShjb2luIGluc3RhbmNlb2YgRXJjNzk4NENvaW4pKTtcblxuICAgICAgcmVnaXN0ZXJXaXRoQ29pbk1hcChiaXRnbywgbGltaXRlZENvaW5NYXApO1xuXG4gICAgICAvLyByZWdpc3RlclRva2VuIHNob3VsZCBub3QgYmUgY2FsbGVkIHNpbmNlIG5vIEVSQzIwIG9yIEVSQzc5ODQgdG9rZW5zIGFyZSBpbiB0aGUgbWFwXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVnaXN0ZXJUb2tlblNweS5jYWxsQ291bnQsIDApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decryptionDelegation.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/decryptionDelegation.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
/**
|
|
7
|
+
* Standalone calldata tests for Zama ERC-7984 decryption delegation.
|
|
8
|
+
*
|
|
9
|
+
* Zama helpers are imported from the @bitgo/abstract-eth public package entry (re-exports
|
|
10
|
+
* ./lib including zamaUtils). TransactionType is imported from the sdk-core enum dist path
|
|
11
|
+
* to avoid loading the full @bitgo/sdk-core barrel (pre-existing io-ts issue in the TSS graph).
|
|
12
|
+
*
|
|
13
|
+
* TransactionBuilder build/rebuild tests live in decryptionDelegationTxBuilder.ts.
|
|
14
|
+
*/
|
|
15
|
+
const should_1 = __importDefault(require("should"));
|
|
16
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
17
|
+
const abstract_eth_1 = require("@bitgo/abstract-eth");
|
|
18
|
+
const DELEGATE_ADDRESS = '0x1111111111111111111111111111111111111111';
|
|
19
|
+
const TOKEN_ADDRESS = '0x94167129172A35ab093B44b8b96213DDbc3cD387';
|
|
20
|
+
const TOKEN_ADDRESS_2 = '0x4E7B06D78965594eB5EF5414c357ca21E1554491';
|
|
21
|
+
const ACL_ADDRESS = '0xf0Ffdc93b7E186bC2f8CB3dAA75D86d1930A433D';
|
|
22
|
+
const EXPIRY = Math.floor(Date.now() / 1000) + 365 * 86400;
|
|
23
|
+
describe('DecryptionDelegation TransactionType (standalone)', () => {
|
|
24
|
+
it('should be a valid numeric type distinct from ContractCall/Send/FlushTokens', () => {
|
|
25
|
+
should_1.default.exist(sdk_core_1.TransactionType.DecryptionDelegation);
|
|
26
|
+
(typeof sdk_core_1.TransactionType.DecryptionDelegation).should.equal('number');
|
|
27
|
+
sdk_core_1.TransactionType.DecryptionDelegation.should.not.equal(sdk_core_1.TransactionType.ContractCall);
|
|
28
|
+
sdk_core_1.TransactionType.DecryptionDelegation.should.not.equal(sdk_core_1.TransactionType.Send);
|
|
29
|
+
sdk_core_1.TransactionType.DecryptionDelegation.should.not.equal(sdk_core_1.TransactionType.FlushTokens);
|
|
30
|
+
sdk_core_1.TransactionType.DecryptionDelegation.should.not.equal(sdk_core_1.TransactionType.FlushERC721);
|
|
31
|
+
sdk_core_1.TransactionType.DecryptionDelegation.should.not.equal(sdk_core_1.TransactionType.FlushERC1155);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe('DecryptionDelegation calldata selectors (standalone)', () => {
|
|
35
|
+
it('single-token calldata uses multicall selector 0xac9650d8', () => {
|
|
36
|
+
const calldata = (0, abstract_eth_1.buildMulticallDelegationCalldata)(DELEGATE_ADDRESS, [TOKEN_ADDRESS], EXPIRY);
|
|
37
|
+
calldata.slice(0, 10).should.equal(abstract_eth_1.aclMulticallMethodId);
|
|
38
|
+
calldata.slice(0, 10).should.equal('0xac9650d8');
|
|
39
|
+
});
|
|
40
|
+
it('multi-token calldata uses multicall selector 0xac9650d8', () => {
|
|
41
|
+
const calldata = (0, abstract_eth_1.buildMulticallDelegationCalldata)(DELEGATE_ADDRESS, [TOKEN_ADDRESS, TOKEN_ADDRESS_2], EXPIRY);
|
|
42
|
+
calldata.slice(0, 10).should.equal(abstract_eth_1.aclMulticallMethodId);
|
|
43
|
+
});
|
|
44
|
+
it('forwarder-wrapped calldata uses callFromParent selector 0x77e60b35', () => {
|
|
45
|
+
const inner = (0, abstract_eth_1.buildMulticallDelegationCalldata)(DELEGATE_ADDRESS, [TOKEN_ADDRESS], EXPIRY);
|
|
46
|
+
const wrapped = (0, abstract_eth_1.wrapInCallFromParent)(ACL_ADDRESS, inner);
|
|
47
|
+
wrapped.slice(0, 10).should.equal(abstract_eth_1.callFromParentMethodId);
|
|
48
|
+
wrapped.slice(0, 10).should.equal('0x77e60b35');
|
|
49
|
+
});
|
|
50
|
+
it('delegate address is ABI-encoded in calldata', () => {
|
|
51
|
+
const calldata = (0, abstract_eth_1.buildMulticallDelegationCalldata)(DELEGATE_ADDRESS, [TOKEN_ADDRESS], EXPIRY);
|
|
52
|
+
calldata.should.containEql(DELEGATE_ADDRESS.slice(2).toLowerCase().padStart(64, '0'));
|
|
53
|
+
});
|
|
54
|
+
it('token address is ABI-encoded in calldata', () => {
|
|
55
|
+
const calldata = (0, abstract_eth_1.buildMulticallDelegationCalldata)(DELEGATE_ADDRESS, [TOKEN_ADDRESS], EXPIRY);
|
|
56
|
+
calldata.should.containEql(TOKEN_ADDRESS.slice(2).toLowerCase().padStart(64, '0'));
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjcnlwdGlvbkRlbGVnYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL2RlY3J5cHRpb25EZWxlZ2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7Ozs7O0dBUUc7QUFDSCxvREFBNEI7QUFDNUIsOENBQWtEO0FBQ2xELHNEQUs2QjtBQUU3QixNQUFNLGdCQUFnQixHQUFHLDRDQUE0QyxDQUFDO0FBQ3RFLE1BQU0sYUFBYSxHQUFHLDRDQUE0QyxDQUFDO0FBQ25FLE1BQU0sZUFBZSxHQUFHLDRDQUE0QyxDQUFDO0FBQ3JFLE1BQU0sV0FBVyxHQUFHLDRDQUE0QyxDQUFDO0FBQ2pFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFFM0QsUUFBUSxDQUFDLG1EQUFtRCxFQUFFLEdBQUcsRUFBRTtJQUNqRSxFQUFFLENBQUMsNEVBQTRFLEVBQUUsR0FBRyxFQUFFO1FBQ3BGLGdCQUFNLENBQUMsS0FBSyxDQUFDLDBCQUFlLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNuRCxDQUFDLE9BQU8sMEJBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckUsMEJBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQywwQkFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BGLDBCQUFlLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsMEJBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RSwwQkFBZSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLDBC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dGFuZGFsb25lIGNhbGxkYXRhIHRlc3RzIGZvciBaYW1hIEVSQy03OTg0IGRlY3J5cHRpb24gZGVsZWdhdGlvbi5cbiAqXG4gKiBaYW1hIGhlbHBlcnMgYXJlIGltcG9ydGVkIGZyb20gdGhlIEBiaXRnby9hYnN0cmFjdC1ldGggcHVibGljIHBhY2thZ2UgZW50cnkgKHJlLWV4cG9ydHNcbiAqIC4vbGliIGluY2x1ZGluZyB6YW1hVXRpbHMpLiBUcmFuc2FjdGlvblR5cGUgaXMgaW1wb3J0ZWQgZnJvbSB0aGUgc2RrLWNvcmUgZW51bSBkaXN0IHBhdGhcbiAqIHRvIGF2b2lkIGxvYWRpbmcgdGhlIGZ1bGwgQGJpdGdvL3Nkay1jb3JlIGJhcnJlbCAocHJlLWV4aXN0aW5nIGlvLXRzIGlzc3VlIGluIHRoZSBUU1MgZ3JhcGgpLlxuICpcbiAqIFRyYW5zYWN0aW9uQnVpbGRlciBidWlsZC9yZWJ1aWxkIHRlc3RzIGxpdmUgaW4gZGVjcnlwdGlvbkRlbGVnYXRpb25UeEJ1aWxkZXIudHMuXG4gKi9cbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQge1xuICBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YSxcbiAgY2FsbEZyb21QYXJlbnRNZXRob2RJZCxcbiAgYWNsTXVsdGljYWxsTWV0aG9kSWQsXG4gIHdyYXBJbkNhbGxGcm9tUGFyZW50LFxufSBmcm9tICdAYml0Z28vYWJzdHJhY3QtZXRoJztcblxuY29uc3QgREVMRUdBVEVfQUREUkVTUyA9ICcweDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnO1xuY29uc3QgVE9LRU5fQUREUkVTUyA9ICcweDk0MTY3MTI5MTcyQTM1YWIwOTNCNDRiOGI5NjIxM0REYmMzY0QzODcnO1xuY29uc3QgVE9LRU5fQUREUkVTU18yID0gJzB4NEU3QjA2RDc4OTY1NTk0ZUI1RUY1NDE0YzM1N2NhMjFFMTU1NDQ5MSc7XG5jb25zdCBBQ0xfQUREUkVTUyA9ICcweGYwRmZkYzkzYjdFMTg2YkMyZjhDQjNkQUE3NUQ4NmQxOTMwQTQzM0QnO1xuY29uc3QgRVhQSVJZID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCkgKyAzNjUgKiA4NjQwMDtcblxuZGVzY3JpYmUoJ0RlY3J5cHRpb25EZWxlZ2F0aW9uIFRyYW5zYWN0aW9uVHlwZSAoc3RhbmRhbG9uZSknLCAoKSA9PiB7XG4gIGl0KCdzaG91bGQgYmUgYSB2YWxpZCBudW1lcmljIHR5cGUgZGlzdGluY3QgZnJvbSBDb250cmFjdENhbGwvU2VuZC9GbHVzaFRva2VucycsICgpID0+IHtcbiAgICBzaG91bGQuZXhpc3QoVHJhbnNhY3Rpb25UeXBlLkRlY3J5cHRpb25EZWxlZ2F0aW9uKTtcbiAgICAodHlwZW9mIFRyYW5zYWN0aW9uVHlwZS5EZWNyeXB0aW9uRGVsZWdhdGlvbikuc2hvdWxkLmVxdWFsKCdudW1iZXInKTtcbiAgICBUcmFuc2FjdGlvblR5cGUuRGVjcnlwdGlvbkRlbGVnYXRpb24uc2hvdWxkLm5vdC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICBUcmFuc2FjdGlvblR5cGUuRGVjcnlwdGlvbkRlbGVnYXRpb24uc2hvdWxkLm5vdC5lcXVhbChUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgVHJhbnNhY3Rpb25UeXBlLkRlY3J5cHRpb25EZWxlZ2F0aW9uLnNob3VsZC5ub3QuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkZsdXNoVG9rZW5zKTtcbiAgICBUcmFuc2FjdGlvblR5cGUuRGVjcnlwdGlvbkRlbGVnYXRpb24uc2hvdWxkLm5vdC5lcXVhbChUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3MjEpO1xuICAgIFRyYW5zYWN0aW9uVHlwZS5EZWNyeXB0aW9uRGVsZWdhdGlvbi5zaG91bGQubm90LmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzExNTUpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnRGVjcnlwdGlvbkRlbGVnYXRpb24gY2FsbGRhdGEgc2VsZWN0b3JzIChzdGFuZGFsb25lKScsICgpID0+IHtcbiAgaXQoJ3NpbmdsZS10b2tlbiBjYWxsZGF0YSB1c2VzIG11bHRpY2FsbCBzZWxlY3RvciAweGFjOTY1MGQ4JywgKCkgPT4ge1xuICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW1RPS0VOX0FERFJFU1NdLCBFWFBJUlkpO1xuICAgIGNhbGxkYXRhLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoYWNsTXVsdGljYWxsTWV0aG9kSWQpO1xuICAgIGNhbGxkYXRhLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoJzB4YWM5NjUwZDgnKTtcbiAgfSk7XG5cbiAgaXQoJ211bHRpLXRva2VuIGNhbGxkYXRhIHVzZXMgbXVsdGljYWxsIHNlbGVjdG9yIDB4YWM5NjUwZDgnLCAoKSA9PiB7XG4gICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBbVE9LRU5fQUREUkVTUywgVE9LRU5fQUREUkVTU18yXSwgRVhQSVJZKTtcbiAgICBjYWxsZGF0YS5zbGljZSgwLCAxMCkuc2hvdWxkLmVxdWFsKGFjbE11bHRpY2FsbE1ldGhvZElkKTtcbiAgfSk7XG5cbiAgaXQoJ2ZvcndhcmRlci13cmFwcGVkIGNhbGxkYXRhIHVzZXMgY2FsbEZyb21QYXJlbnQgc2VsZWN0b3IgMHg3N2U2MGIzNScsICgpID0+IHtcbiAgICBjb25zdCBpbm5lciA9IGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFtUT0tFTl9BRERSRVNTXSwgRVhQSVJZKTtcbiAgICBjb25zdCB3cmFwcGVkID0gd3JhcEluQ2FsbEZyb21QYXJlbnQoQUNMX0FERFJFU1MsIGlubmVyKTtcbiAgICB3cmFwcGVkLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoY2FsbEZyb21QYXJlbnRNZXRob2RJZCk7XG4gICAgd3JhcHBlZC5zbGljZSgwLCAxMCkuc2hvdWxkLmVxdWFsKCcweDc3ZTYwYjM1Jyk7XG4gIH0pO1xuXG4gIGl0KCdkZWxlZ2F0ZSBhZGRyZXNzIGlzIEFCSS1lbmNvZGVkIGluIGNhbGxkYXRhJywgKCkgPT4ge1xuICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW1RPS0VOX0FERFJFU1NdLCBFWFBJUlkpO1xuICAgIGNhbGxkYXRhLnNob3VsZC5jb250YWluRXFsKERFTEVHQVRFX0FERFJFU1Muc2xpY2UoMikudG9Mb3dlckNhc2UoKS5wYWRTdGFydCg2NCwgJzAnKSk7XG4gIH0pO1xuXG4gIGl0KCd0b2tlbiBhZGRyZXNzIGlzIEFCSS1lbmNvZGVkIGluIGNhbGxkYXRhJywgKCkgPT4ge1xuICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW1RPS0VOX0FERFJFU1NdLCBFWFBJUlkpO1xuICAgIGNhbGxkYXRhLnNob3VsZC5jb250YWluRXFsKFRPS0VOX0FERFJFU1Muc2xpY2UoMikudG9Mb3dlckNhc2UoKS5wYWRTdGFydCg2NCwgJzAnKSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decryptionDelegationTxBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/decryptionDelegationTxBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
/**
|
|
7
|
+
* TransactionBuilder build and rebuild tests for Zama ERC-7984 decryption delegation.
|
|
8
|
+
*
|
|
9
|
+
* Pattern mirrors contractCall.ts: imports TransactionType from @bitgo/sdk-core and
|
|
10
|
+
* TransactionBuilder from '../../../src'. These are subject to the same pre-existing
|
|
11
|
+
* io-ts crash (sdk-core/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2) that affects ALL
|
|
12
|
+
* TransactionBuilder tests in this monorepo. They run in the full CI test suite.
|
|
13
|
+
*
|
|
14
|
+
* Three flows verified:
|
|
15
|
+
* Flow 1 — root wallet: ContractCall + multicall data → build → from(hex) → rebuild
|
|
16
|
+
* Flow 2 — explicit DecryptionDelegation type → build → from(hex) → rebuild
|
|
17
|
+
* Flow 3 — forwarder: ContractCall + callFromParent data → build → from(hex) → rebuild
|
|
18
|
+
*/
|
|
19
|
+
const should_1 = __importDefault(require("should"));
|
|
20
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
21
|
+
const abstract_eth_1 = require("@bitgo/abstract-eth");
|
|
22
|
+
const getBuilder_1 = require("../getBuilder");
|
|
23
|
+
const ACL_ADDRESS = '0xf0Ffdc93b7E186bC2f8CB3dAA75D86d1930A433D';
|
|
24
|
+
const DELEGATE_ADDRESS = '0x1111111111111111111111111111111111111111';
|
|
25
|
+
const TOKEN_ADDRESS = '0x94167129172A35ab093B44b8b96213DDbc3cD387';
|
|
26
|
+
const TOKEN_ADDRESS_2 = '0x4E7B06D78965594eB5EF5414c357ca21E1554491';
|
|
27
|
+
const FORWARDER_ADDRESS = '0xDeADbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF';
|
|
28
|
+
const EXPIRY = Math.floor(Date.now() / 1000) + 365 * 86400;
|
|
29
|
+
describe('DecryptionDelegation TransactionBuilder', () => {
|
|
30
|
+
let txBuilder;
|
|
31
|
+
beforeEach(() => {
|
|
32
|
+
txBuilder = (0, getBuilder_1.getBuilder)('hteth');
|
|
33
|
+
txBuilder.fee({ fee: '1000000000', gasLimit: '200000' });
|
|
34
|
+
txBuilder.counter(1);
|
|
35
|
+
});
|
|
36
|
+
// ---- Flow 1: root wallet, ContractCall type --------------------------------
|
|
37
|
+
it('Flow 1: should build a ContractCall tx with multicall delegation data', async () => {
|
|
38
|
+
const calldata = (0, abstract_eth_1.buildMulticallDelegationCalldata)(DELEGATE_ADDRESS, [TOKEN_ADDRESS, TOKEN_ADDRESS_2], EXPIRY);
|
|
39
|
+
txBuilder.type(sdk_core_1.TransactionType.ContractCall);
|
|
40
|
+
txBuilder.contract(ACL_ADDRESS);
|
|
41
|
+
txBuilder.data(calldata);
|
|
42
|
+
const tx = await txBuilder.build();
|
|
43
|
+
const json = tx.toJson();
|
|
44
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.ContractCall);
|
|
45
|
+
json.to.should.equal(ACL_ADDRESS.toLowerCase());
|
|
46
|
+
json.data.should.startWith(abstract_eth_1.aclMulticallMethodId);
|
|
47
|
+
json.value.should.equal('0');
|
|
48
|
+
});
|
|
49
|
+
it('Flow 1: should rebuild from hex — multicall delegation round-trip', async () => {
|
|
50
|
+
const calldata = (0, abstract_eth_1.buildMulticallDelegationCalldata)(DELEGATE_ADDRESS, [TOKEN_ADDRESS, TOKEN_ADDRESS_2], EXPIRY);
|
|
51
|
+
txBuilder.type(sdk_core_1.TransactionType.ContractCall);
|
|
52
|
+
txBuilder.contract(ACL_ADDRESS);
|
|
53
|
+
txBuilder.data(calldata);
|
|
54
|
+
const originalTx = await txBuilder.build();
|
|
55
|
+
const rawHex = originalTx.toBroadcastFormat();
|
|
56
|
+
const rebuiltBuilder = (0, getBuilder_1.getBuilder)('hteth');
|
|
57
|
+
rebuiltBuilder.from(rawHex);
|
|
58
|
+
const rebuiltTx = await rebuiltBuilder.build();
|
|
59
|
+
should_1.default.equal(rebuiltTx.toBroadcastFormat(), rawHex);
|
|
60
|
+
rebuiltTx.toJson().to.should.equal(ACL_ADDRESS.toLowerCase());
|
|
61
|
+
rebuiltTx.toJson().data.should.startWith(abstract_eth_1.aclMulticallMethodId);
|
|
62
|
+
});
|
|
63
|
+
// ---- Flow 2: explicit DecryptionDelegation type ---------------------------
|
|
64
|
+
it('Flow 2: should build with explicit DecryptionDelegation type', async () => {
|
|
65
|
+
const calldata = (0, abstract_eth_1.buildMulticallDelegationCalldata)(DELEGATE_ADDRESS, [TOKEN_ADDRESS], EXPIRY);
|
|
66
|
+
txBuilder.type(sdk_core_1.TransactionType.DecryptionDelegation);
|
|
67
|
+
txBuilder.contract(ACL_ADDRESS);
|
|
68
|
+
txBuilder.data(calldata);
|
|
69
|
+
const tx = await txBuilder.build();
|
|
70
|
+
const json = tx.toJson();
|
|
71
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.ContractCall);
|
|
72
|
+
json.to.should.equal(ACL_ADDRESS.toLowerCase());
|
|
73
|
+
json.data.should.startWith(abstract_eth_1.aclMulticallMethodId);
|
|
74
|
+
json.value.should.equal('0');
|
|
75
|
+
});
|
|
76
|
+
it('Flow 2: should rebuild from hex — DecryptionDelegation type round-trip', async () => {
|
|
77
|
+
const calldata = (0, abstract_eth_1.buildMulticallDelegationCalldata)(DELEGATE_ADDRESS, [TOKEN_ADDRESS], EXPIRY);
|
|
78
|
+
txBuilder.type(sdk_core_1.TransactionType.DecryptionDelegation);
|
|
79
|
+
txBuilder.contract(ACL_ADDRESS);
|
|
80
|
+
txBuilder.data(calldata);
|
|
81
|
+
const originalTx = await txBuilder.build();
|
|
82
|
+
const rawHex = originalTx.toBroadcastFormat();
|
|
83
|
+
// classifyTransaction sees 0xac9650d8 → ContractCall (multicall not mapped)
|
|
84
|
+
// ContractCall rebuild path handles it identically to DecryptionDelegation
|
|
85
|
+
const rebuiltBuilder = (0, getBuilder_1.getBuilder)('hteth');
|
|
86
|
+
rebuiltBuilder.from(rawHex);
|
|
87
|
+
const rebuiltTx = await rebuiltBuilder.build();
|
|
88
|
+
should_1.default.equal(rebuiltTx.toBroadcastFormat(), rawHex);
|
|
89
|
+
});
|
|
90
|
+
// ---- Flow 3: forwarder callFromParent path --------------------------------
|
|
91
|
+
it('Flow 3: should build a forwarder delegation tx targeting the forwarder', async () => {
|
|
92
|
+
const innerCalldata = (0, abstract_eth_1.buildMulticallDelegationCalldata)(DELEGATE_ADDRESS, [TOKEN_ADDRESS], EXPIRY);
|
|
93
|
+
const outerCalldata = (0, abstract_eth_1.wrapInCallFromParent)(ACL_ADDRESS, innerCalldata);
|
|
94
|
+
txBuilder.type(sdk_core_1.TransactionType.ContractCall);
|
|
95
|
+
txBuilder.contract(FORWARDER_ADDRESS);
|
|
96
|
+
txBuilder.data(outerCalldata);
|
|
97
|
+
const tx = await txBuilder.build();
|
|
98
|
+
const json = tx.toJson();
|
|
99
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.ContractCall);
|
|
100
|
+
json.to.should.equal(FORWARDER_ADDRESS.toLowerCase());
|
|
101
|
+
json.data.should.startWith(abstract_eth_1.callFromParentMethodId);
|
|
102
|
+
json.value.should.equal('0');
|
|
103
|
+
});
|
|
104
|
+
it('Flow 3: should rebuild from hex — forwarder delegation round-trip', async () => {
|
|
105
|
+
const innerCalldata = (0, abstract_eth_1.buildMulticallDelegationCalldata)(DELEGATE_ADDRESS, [TOKEN_ADDRESS], EXPIRY);
|
|
106
|
+
const outerCalldata = (0, abstract_eth_1.wrapInCallFromParent)(ACL_ADDRESS, innerCalldata);
|
|
107
|
+
txBuilder.type(sdk_core_1.TransactionType.ContractCall);
|
|
108
|
+
txBuilder.contract(FORWARDER_ADDRESS);
|
|
109
|
+
txBuilder.data(outerCalldata);
|
|
110
|
+
const originalTx = await txBuilder.build();
|
|
111
|
+
const rawHex = originalTx.toBroadcastFormat();
|
|
112
|
+
const rebuiltBuilder = (0, getBuilder_1.getBuilder)('hteth');
|
|
113
|
+
rebuiltBuilder.from(rawHex);
|
|
114
|
+
const rebuiltTx = await rebuiltBuilder.build();
|
|
115
|
+
should_1.default.equal(rebuiltTx.toBroadcastFormat(), rawHex);
|
|
116
|
+
rebuiltTx.toJson().to.should.equal(FORWARDER_ADDRESS.toLowerCase());
|
|
117
|
+
rebuiltTx.toJson().data.should.startWith(abstract_eth_1.callFromParentMethodId);
|
|
118
|
+
});
|
|
119
|
+
// ---- Validation -----------------------------------------------------------
|
|
120
|
+
it('should throw for DecryptionDelegation when contract address is missing', async () => {
|
|
121
|
+
const calldata = (0, abstract_eth_1.buildMulticallDelegationCalldata)(DELEGATE_ADDRESS, [TOKEN_ADDRESS], EXPIRY);
|
|
122
|
+
txBuilder.type(sdk_core_1.TransactionType.DecryptionDelegation);
|
|
123
|
+
txBuilder.data(calldata);
|
|
124
|
+
await txBuilder.build().should.be.rejectedWith('Invalid transaction: missing contract address');
|
|
125
|
+
});
|
|
126
|
+
it('should throw for DecryptionDelegation when data field is missing', async () => {
|
|
127
|
+
txBuilder.type(sdk_core_1.TransactionType.DecryptionDelegation);
|
|
128
|
+
txBuilder.contract(ACL_ADDRESS);
|
|
129
|
+
await txBuilder.build().should.be.rejectedWith('Invalid transaction: missing contract call data field');
|
|
130
|
+
});
|
|
131
|
+
it('should throw when data() is called before type is set to a contract call type', () => {
|
|
132
|
+
const calldata = (0, abstract_eth_1.buildMulticallDelegationCalldata)(DELEGATE_ADDRESS, [TOKEN_ADDRESS], EXPIRY);
|
|
133
|
+
should_1.default.throws(() => txBuilder.data(calldata), /data can only be set for contract call transaction types/);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjcnlwdGlvbkRlbGVnYXRpb25UeEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL2RlY3J5cHRpb25EZWxlZ2F0aW9uVHhCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsb0RBQTRCO0FBQzVCLDhDQUFrRDtBQUVsRCxzREFLNkI7QUFDN0IsOENBQTJDO0FBRTNDLE1BQU0sV0FBVyxHQUFHLDRDQUE0QyxDQUFDO0FBQ2pFLE1BQU0sZ0JBQWdCLEdBQUcsNENBQTRDLENBQUM7QUFDdEUsTUFBTSxhQUFhLEdBQUcsNENBQTRDLENBQUM7QUFDbkUsTUFBTSxlQUFlLEdBQUcsNENBQTRDLENBQUM7QUFDckUsTUFBTSxpQkFBaUIsR0FBRyw0Q0FBNEMsQ0FBQztBQUN2RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBRTNELFFBQVEsQ0FBQyx5Q0FBeUMsRUFBRSxHQUFHLEVBQUU7SUFDdkQsSUFBSSxTQUE2QixDQUFDO0lBRWxDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxTQUFTLEdBQUcsSUFBQSx1QkFBVSxFQUFDLE9BQU8sQ0FBdUIsQ0FBQztRQUN0RCxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN6RCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBRUgsK0VBQStFO0lBRS9FLEVBQUUsQ0FBQyx1RUFBdUUsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNyRixNQUFNLFFBQVEsR0FBRyxJQUFBLCtDQUFnQyxFQUFDLGdC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QVksQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0lBQ2xHLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2hGLFNBQVMsQ0FBQyxJQUFJLENBQUMsMEJBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3JELFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEMsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsdURBQXVELENBQUMsQ0FBQztJQUMxRyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywrRUFBK0UsRUFBRSxHQUFHLEVBQUU7UUFDdkYsTUFBTSxRQUFRLEdBQUcsSUFBQSwrQ0FBZ0MsRUFBQyxnQkFBZ0IsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdGLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsMERBQTBELENBQUMsQ0FBQztJQUM1RyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUcmFuc2FjdGlvbkJ1aWxkZXIgYnVpbGQgYW5kIHJlYnVpbGQgdGVzdHMgZm9yIFphbWEgRVJDLTc5ODQgZGVjcnlwdGlvbiBkZWxlZ2F0aW9uLlxuICpcbiAqIFBhdHRlcm4gbWlycm9ycyBjb250cmFjdENhbGwudHM6IGltcG9ydHMgVHJhbnNhY3Rpb25UeXBlIGZyb20gQGJpdGdvL3Nkay1jb3JlIGFuZFxuICogVHJhbnNhY3Rpb25CdWlsZGVyIGZyb20gJy4uLy4uLy4uL3NyYycuIFRoZXNlIGFyZSBzdWJqZWN0IHRvIHRoZSBzYW1lIHByZS1leGlzdGluZ1xuICogaW8tdHMgY3Jhc2ggKHNkay1jb3JlL3NyYy9iaXRnby91dGlscy90c3MvZWRkc2EvdHlwZXNFZGRzYU1QQ3YyKSB0aGF0IGFmZmVjdHMgQUxMXG4gKiBUcmFuc2FjdGlvbkJ1aWxkZXIgdGVzdHMgaW4gdGhpcyBtb25vcmVwby4gVGhleSBydW4gaW4gdGhlIGZ1bGwgQ0kgdGVzdCBzdWl0ZS5cbiAqXG4gKiBUaHJlZSBmbG93cyB2ZXJpZmllZDpcbiAqICAgRmxvdyAxIOKAlCByb290IHdhbGxldDogQ29udHJhY3RDYWxsICsgbXVsdGljYWxsIGRhdGEg4oaSIGJ1aWxkIOKGkiBmcm9tKGhleCkg4oaSIHJlYnVpbGRcbiAqICAgRmxvdyAyIOKAlCBleHBsaWNpdCBEZWNyeXB0aW9uRGVsZWdhdGlvbiB0eXBlIOKGkiBidWlsZCDihpIgZnJvbShoZXgpIOKGkiByZWJ1aWxkXG4gKiAgIEZsb3cgMyDigJQgZm9yd2FyZGVyOiBDb250cmFjdENhbGwgKyBjYWxsRnJvbVBhcmVudCBkYXRhIOKGkiBidWlsZCDihpIgZnJvbShoZXgpIOKGkiByZWJ1aWxkXG4gKi9cbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHtcbiAgYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEsXG4gIHdyYXBJbkNhbGxGcm9tUGFyZW50LFxuICBhY2xNdWx0aWNhbGxNZXRob2RJZCxcbiAgY2FsbEZyb21QYXJlbnRNZXRob2RJZCxcbn0gZnJvbSAnQGJpdGdvL2Fic3RyYWN0LWV0aCc7XG5pbXBvcnQgeyBnZXRCdWlsZGVyIH0gZnJvbSAnLi4vZ2V0QnVpbGRlcic7XG5cbmNvbnN0IEFDTF9BRERSRVNTID0gJzB4ZjBGZmRjOTNiN0UxODZiQzJmOENCM2RBQTc1RDg2ZDE5MzBBNDMzRCc7XG5jb25zdCBERUxFR0FURV9BRERSRVNTID0gJzB4MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSc7XG5jb25zdCBUT0tFTl9BRERSRVNTID0gJzB4OTQxNjcxMjkxNzJBMzVhYjA5M0I0NGI4Yjk2MjEzRERiYzNjRDM4Nyc7XG5jb25zdCBUT0tFTl9BRERSRVNTXzIgPSAnMHg0RTdCMDZENzg5NjU1OTRlQjVFRjU0MTRjMzU3Y2EyMUUxNTU0NDkxJztcbmNvbnN0IEZPUldBUkRFUl9BRERSRVNTID0gJzB4RGVBRGJlZWZkRUFkYmVlZmRFYWRiRUVGZGVhZGJlRUZkRWFEYmVlRic7XG5jb25zdCBFWFBJUlkgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSArIDM2NSAqIDg2NDAwO1xuXG5kZXNjcmliZSgnRGVjcnlwdGlvbkRlbGVnYXRpb24gVHJhbnNhY3Rpb25CdWlsZGVyJywgKCkgPT4ge1xuICBsZXQgdHhCdWlsZGVyOiBUcmFuc2FjdGlvbkJ1aWxkZXI7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcignaHRldGgnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgdHhCdWlsZGVyLmZlZSh7IGZlZTogJzEwMDAwMDAwMDAnLCBnYXNMaW1pdDogJzIwMDAwMCcgfSk7XG4gICAgdHhCdWlsZGVyLmNvdW50ZXIoMSk7XG4gIH0pO1xuXG4gIC8vIC0tLS0gRmxvdyAxOiByb290IHdhbGxldCwgQ29udHJhY3RDYWxsIHR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBpdCgnRmxvdyAxOiBzaG91bGQgYnVpbGQgYSBDb250cmFjdENhbGwgdHggd2l0aCBtdWx0aWNhbGwgZGVsZWdhdGlvbiBkYXRhJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW1RPS0VOX0FERFJFU1MsIFRPS0VOX0FERFJFU1NfMl0sIEVYUElSWSk7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCk7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0KEFDTF9BRERSRVNTKTtcbiAgICB0eEJ1aWxkZXIuZGF0YShjYWxsZGF0YSk7XG5cbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IGpzb24gPSB0eC50b0pzb24oKTtcblxuICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICBqc29uLnRvLnNob3VsZC5lcXVhbChBQ0xfQUREUkVTUy50b0xvd2VyQ2FzZSgpKTtcbiAgICBqc29uLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aChhY2xNdWx0aWNhbGxNZXRob2RJZCk7XG4gICAganNvbi52YWx1ZS5zaG91bGQuZXF1YWwoJzAnKTtcbiAgfSk7XG5cbiAgaXQoJ0Zsb3cgMTogc2hvdWxkIHJlYnVpbGQgZnJvbSBoZXgg4oCUIG11bHRpY2FsbCBkZWxlZ2F0aW9uIHJvdW5kLXRyaXAnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBbVE9LRU5fQUREUkVTUywgVE9LRU5fQUREUkVTU18yXSwgRVhQSVJZKTtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3QoQUNMX0FERFJFU1MpO1xuICAgIHR4QnVpbGRlci5kYXRhKGNhbGxkYXRhKTtcblxuICAgIGNvbnN0IG9yaWdpbmFsVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCByYXdIZXggPSBvcmlnaW5hbFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICBjb25zdCByZWJ1aWx0QnVpbGRlciA9IGdldEJ1aWxkZXIoJ2h0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgIHJlYnVpbHRCdWlsZGVyLmZyb20ocmF3SGV4KTtcbiAgICBjb25zdCByZWJ1aWx0VHggPSBhd2FpdCByZWJ1aWx0QnVpbGRlci5idWlsZCgpO1xuXG4gICAgc2hvdWxkLmVxdWFsKHJlYnVpbHRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLCByYXdIZXgpO1xuICAgIHJlYnVpbHRUeC50b0pzb24oKS50by5zaG91bGQuZXF1YWwoQUNMX0FERFJFU1MudG9Mb3dlckNhc2UoKSk7XG4gICAgcmVidWlsdFR4LnRvSnNvbigpLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aChhY2xNdWx0aWNhbGxNZXRob2RJZCk7XG4gIH0pO1xuXG4gIC8vIC0tLS0gRmxvdyAyOiBleHBsaWNpdCBEZWNyeXB0aW9uRGVsZWdhdGlvbiB0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGl0KCdGbG93IDI6IHNob3VsZCBidWlsZCB3aXRoIGV4cGxpY2l0IERlY3J5cHRpb25EZWxlZ2F0aW9uIHR5cGUnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBbVE9LRU5fQUREUkVTU10sIEVYUElSWSk7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkRlY3J5cHRpb25EZWxlZ2F0aW9uKTtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3QoQUNMX0FERFJFU1MpO1xuICAgIHR4QnVpbGRlci5kYXRhKGNhbGxkYXRhKTtcblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QganNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICAgIGpzb24udG8uc2hvdWxkLmVxdWFsKEFDTF9BRERSRVNTLnRvTG93ZXJDYXNlKCkpO1xuICAgIGpzb24uZGF0YS5zaG91bGQuc3RhcnRXaXRoKGFjbE11bHRpY2FsbE1ldGhvZElkKTtcbiAgICBqc29uLnZhbHVlLnNob3VsZC5lcXVhbCgnMCcpO1xuICB9KTtcblxuICBpdCgnRmxvdyAyOiBzaG91bGQgcmVidWlsZCBmcm9tIGhleCDigJQgRGVjcnlwdGlvbkRlbGVnYXRpb24gdHlwZSByb3VuZC10cmlwJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW1RPS0VOX0FERFJFU1NdLCBFWFBJUlkpO1xuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5EZWNyeXB0aW9uRGVsZWdhdGlvbik7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0KEFDTF9BRERSRVNTKTtcbiAgICB0eEJ1aWxkZXIuZGF0YShjYWxsZGF0YSk7XG5cbiAgICBjb25zdCBvcmlnaW5hbFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgcmF3SGV4ID0gb3JpZ2luYWxUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgLy8gY2xhc3NpZnlUcmFuc2FjdGlvbiBzZWVzIDB4YWM5NjUwZDgg4oaSIENvbnRyYWN0Q2FsbCAobXVsdGljYWxsIG5vdCBtYXBwZWQpXG4gICAgLy8gQ29udHJhY3RDYWxsIHJlYnVpbGQgcGF0aCBoYW5kbGVzIGl0IGlkZW50aWNhbGx5IHRvIERlY3J5cHRpb25EZWxlZ2F0aW9uXG4gICAgY29uc3QgcmVidWlsdEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICByZWJ1aWx0QnVpbGRlci5mcm9tKHJhd0hleCk7XG4gICAgY29uc3QgcmVidWlsdFR4ID0gYXdhaXQgcmVidWlsdEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgIHNob3VsZC5lcXVhbChyZWJ1aWx0VHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgcmF3SGV4KTtcbiAgfSk7XG5cbiAgLy8gLS0tLSBGbG93IDM6IGZvcndhcmRlciBjYWxsRnJvbVBhcmVudCBwYXRoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgaXQoJ0Zsb3cgMzogc2hvdWxkIGJ1aWxkIGEgZm9yd2FyZGVyIGRlbGVnYXRpb24gdHggdGFyZ2V0aW5nIHRoZSBmb3J3YXJkZXInLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgaW5uZXJDYWxsZGF0YSA9IGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFtUT0tFTl9BRERSRVNTXSwgRVhQSVJZKTtcbiAgICBjb25zdCBvdXRlckNhbGxkYXRhID0gd3JhcEluQ2FsbEZyb21QYXJlbnQoQUNMX0FERFJFU1MsIGlubmVyQ2FsbGRhdGEpO1xuXG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCk7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0KEZPUldBUkRFUl9BRERSRVNTKTtcbiAgICB0eEJ1aWxkZXIuZGF0YShvdXRlckNhbGxkYXRhKTtcblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QganNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICAgIGpzb24udG8uc2hvdWxkLmVxdWFsKEZPUldBUkRFUl9BRERSRVNTLnRvTG93ZXJDYXNlKCkpO1xuICAgIGpzb24uZGF0YS5zaG91bGQuc3RhcnRXaXRoKGNhbGxGcm9tUGFyZW50TWV0aG9kSWQpO1xuICAgIGpzb24udmFsdWUuc2hvdWxkLmVxdWFsKCcwJyk7XG4gIH0pO1xuXG4gIGl0KCdGbG93IDM6IHNob3VsZCByZWJ1aWxkIGZyb20gaGV4IOKAlCBmb3J3YXJkZXIgZGVsZWdhdGlvbiByb3VuZC10cmlwJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGlubmVyQ2FsbGRhdGEgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBbVE9LRU5fQUREUkVTU10sIEVYUElSWSk7XG4gICAgY29uc3Qgb3V0ZXJDYWxsZGF0YSA9IHdyYXBJbkNhbGxGcm9tUGFyZW50KEFDTF9BRERSRVNTLCBpbm5lckNhbGxkYXRhKTtcblxuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICAgIHR4QnVpbGRlci5jb250cmFjdChGT1JXQVJERVJfQUREUkVTUyk7XG4gICAgdHhCdWlsZGVyLmRhdGEob3V0ZXJDYWxsZGF0YSk7XG5cbiAgICBjb25zdCBvcmlnaW5hbFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgcmF3SGV4ID0gb3JpZ2luYWxUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgY29uc3QgcmVidWlsdEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICByZWJ1aWx0QnVpbGRlci5mcm9tKHJhd0hleCk7XG4gICAgY29uc3QgcmVidWlsdFR4ID0gYXdhaXQgcmVidWlsdEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgIHNob3VsZC5lcXVhbChyZWJ1aWx0VHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgcmF3SGV4KTtcbiAgICByZWJ1aWx0VHgudG9Kc29uKCkudG8uc2hvdWxkLmVxdWFsKEZPUldBUkRFUl9BRERSRVNTLnRvTG93ZXJDYXNlKCkpO1xuICAgIHJlYnVpbHRUeC50b0pzb24oKS5kYXRhLnNob3VsZC5zdGFydFdpdGgoY2FsbEZyb21QYXJlbnRNZXRob2RJZCk7XG4gIH0pO1xuXG4gIC8vIC0tLS0gVmFsaWRhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGl0KCdzaG91bGQgdGhyb3cgZm9yIERlY3J5cHRpb25EZWxlZ2F0aW9uIHdoZW4gY29udHJhY3QgYWRkcmVzcyBpcyBtaXNzaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW1RPS0VOX0FERFJFU1NdLCBFWFBJUlkpO1xuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5EZWNyeXB0aW9uRGVsZWdhdGlvbik7XG4gICAgdHhCdWlsZGVyLmRhdGEoY2FsbGRhdGEpO1xuICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3NpbmcgY29udHJhY3QgYWRkcmVzcycpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGZvciBEZWNyeXB0aW9uRGVsZWdhdGlvbiB3aGVuIGRhdGEgZmllbGQgaXMgbWlzc2luZycsIGFzeW5jICgpID0+IHtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuRGVjcnlwdGlvbkRlbGVnYXRpb24pO1xuICAgIHR4QnVpbGRlci5jb250cmFjdChBQ0xfQUREUkVTUyk7XG4gICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBjb250cmFjdCBjYWxsIGRhdGEgZmllbGQnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGRhdGEoKSBpcyBjYWxsZWQgYmVmb3JlIHR5cGUgaXMgc2V0IHRvIGEgY29udHJhY3QgY2FsbCB0eXBlJywgKCkgPT4ge1xuICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW1RPS0VOX0FERFJFU1NdLCBFWFBJUlkpO1xuICAgIHNob3VsZC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLmRhdGEoY2FsbGRhdGEpLCAvZGF0YSBjYW4gb25seSBiZSBzZXQgZm9yIGNvbnRyYWN0IGNhbGwgdHJhbnNhY3Rpb24gdHlwZXMvKTtcbiAgfSk7XG59KTtcbiJdfQ==
|