@bitgo-beta/abstract-eth 1.2.3-alpha.503 → 1.2.3-alpha.505

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/src/lib/decryptionDelegationBuilder.d.ts +90 -0
  2. package/dist/src/lib/decryptionDelegationBuilder.d.ts.map +1 -0
  3. package/dist/src/lib/decryptionDelegationBuilder.js +59 -0
  4. package/dist/src/lib/index.d.ts +2 -0
  5. package/dist/src/lib/index.d.ts.map +1 -1
  6. package/dist/src/lib/index.js +3 -1
  7. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  8. package/dist/src/lib/transactionBuilder.js +9 -2
  9. package/dist/src/lib/utils.d.ts.map +1 -1
  10. package/dist/src/lib/utils.js +9 -1
  11. package/dist/src/lib/zamaUtils.d.ts +61 -0
  12. package/dist/src/lib/zamaUtils.d.ts.map +1 -0
  13. package/dist/src/lib/zamaUtils.js +105 -0
  14. package/dist/test/unit/decryptionDelegationBuilder.d.ts +2 -0
  15. package/dist/test/unit/decryptionDelegationBuilder.d.ts.map +1 -0
  16. package/dist/test/unit/decryptionDelegationBuilder.js +265 -0
  17. package/dist/test/unit/index.d.ts +2 -0
  18. package/dist/test/unit/index.d.ts.map +1 -1
  19. package/dist/test/unit/index.js +3 -1
  20. package/dist/test/unit/transactionBuilder/decryptionDelegation.d.ts +3 -0
  21. package/dist/test/unit/transactionBuilder/decryptionDelegation.d.ts.map +1 -0
  22. package/dist/test/unit/transactionBuilder/decryptionDelegation.js +161 -0
  23. package/dist/test/unit/transactionBuilder/index.d.ts +1 -0
  24. package/dist/test/unit/transactionBuilder/index.d.ts.map +1 -1
  25. package/dist/test/unit/transactionBuilder/index.js +2 -1
  26. package/dist/test/unit/zamaUtils.d.ts +2 -0
  27. package/dist/test/unit/zamaUtils.d.ts.map +1 -0
  28. package/dist/test/unit/zamaUtils.js +251 -0
  29. package/dist/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +7 -7
@@ -0,0 +1,105 @@
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
+ exports.callFromParentMethodId = exports.aclMulticallMethodId = exports.delegateForUserDecryptionMethodId = exports.aclMulticallTypes = exports.callFromParentTypes = exports.delegateForUserDecryptionTypes = void 0;
7
+ exports.buildDelegationCalldata = buildDelegationCalldata;
8
+ exports.buildMulticallDelegationCalldata = buildMulticallDelegationCalldata;
9
+ exports.wrapInCallFromParent = wrapInCallFromParent;
10
+ const ethereumjs_util_1 = require("ethereumjs-util");
11
+ const ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
12
+ // ---------------------------------------------------------------------------
13
+ // Constants
14
+ // ---------------------------------------------------------------------------
15
+ // ABI parameter type arrays
16
+ exports.delegateForUserDecryptionTypes = ['address', 'address', 'uint64'];
17
+ exports.callFromParentTypes = ['address', 'uint256', 'bytes'];
18
+ exports.aclMulticallTypes = ['bytes[]'];
19
+ /**
20
+ * Function selector for ACL.delegateForUserDecryption(address,address,uint64)
21
+ * = keccak256('delegateForUserDecryption(address,address,uint64)')[0:4]
22
+ */
23
+ exports.delegateForUserDecryptionMethodId = (0, ethereumjs_util_1.addHexPrefix)(ethereumjs_abi_1.default.methodID('delegateForUserDecryption', [...exports.delegateForUserDecryptionTypes]).toString('hex'));
24
+ /**
25
+ * Function selector for ACL.multicall(bytes[])
26
+ * = keccak256('multicall(bytes[])')[0:4]
27
+ * ACL inherits OpenZeppelin MulticallUpgradeable — preserves msg.sender via delegatecall.
28
+ */
29
+ exports.aclMulticallMethodId = (0, ethereumjs_util_1.addHexPrefix)(ethereumjs_abi_1.default.methodID('multicall', [...exports.aclMulticallTypes]).toString('hex'));
30
+ /**
31
+ * Function selector for ForwarderV4.callFromParent(address,uint256,bytes)
32
+ * = keccak256('callFromParent(address,uint256,bytes)')[0:4]
33
+ */
34
+ exports.callFromParentMethodId = (0, ethereumjs_util_1.addHexPrefix)(ethereumjs_abi_1.default.methodID('callFromParent', [...exports.callFromParentTypes]).toString('hex'));
35
+ // ---------------------------------------------------------------------------
36
+ // Encoding functions
37
+ // ---------------------------------------------------------------------------
38
+ /**
39
+ * Encodes a single ACL.delegateForUserDecryption() call.
40
+ *
41
+ * Grants `delegateAddress` the right to decrypt ERC-7984 token balances on
42
+ * behalf of the calling address (msg.sender) for the specified token contract.
43
+ *
44
+ * @param delegateAddress BitGo enterprise viewing key address
45
+ * @param tokenContractAddress ERC-7984 token contract address
46
+ * @param expiryTimestamp Unix seconds; recommended: Math.floor(Date.now()/1000) + 365*86400
47
+ * @returns ABI-encoded calldata hex string (0x-prefixed)
48
+ */
49
+ function buildDelegationCalldata(delegateAddress, tokenContractAddress, expiryTimestamp) {
50
+ const method = ethereumjs_abi_1.default.methodID('delegateForUserDecryption', [...exports.delegateForUserDecryptionTypes]);
51
+ const args = ethereumjs_abi_1.default.rawEncode([...exports.delegateForUserDecryptionTypes], [delegateAddress, tokenContractAddress, expiryTimestamp]);
52
+ return (0, ethereumjs_util_1.addHexPrefix)(Buffer.concat([method, args]).toString('hex'));
53
+ }
54
+ /**
55
+ * Encodes N delegateForUserDecryption calls batched inside ACL.multicall().
56
+ *
57
+ * Produces a single TX that grants delegation for all specified token contracts.
58
+ * Requires tokenContractAddresses.length >= 1.
59
+ * Note: DecryptionDelegationBuilder always uses this function (even for a single token)
60
+ * to keep the transaction shape consistent regardless of token count.
61
+ *
62
+ * @param delegateAddress BitGo enterprise viewing key address
63
+ * @param tokenContractAddresses Array of ERC-7984 token contract addresses
64
+ * @param expiryTimestamp Unix seconds
65
+ * @returns ABI-encoded calldata hex string (0x-prefixed)
66
+ */
67
+ function buildMulticallDelegationCalldata(delegateAddress, tokenContractAddresses, expiryTimestamp) {
68
+ if (tokenContractAddresses.length === 0) {
69
+ throw new Error('buildMulticallDelegationCalldata: tokenContractAddresses must not be empty');
70
+ }
71
+ // Build each inner delegateForUserDecryption call as raw bytes
72
+ const innerCalls = tokenContractAddresses.map((tokenAddress) => {
73
+ const innerMethod = ethereumjs_abi_1.default.methodID('delegateForUserDecryption', [...exports.delegateForUserDecryptionTypes]);
74
+ const innerArgs = ethereumjs_abi_1.default.rawEncode([...exports.delegateForUserDecryptionTypes], [delegateAddress, tokenAddress, expiryTimestamp]);
75
+ return Buffer.concat([innerMethod, innerArgs]);
76
+ });
77
+ // Encode outer multicall(bytes[])
78
+ const outerMethod = ethereumjs_abi_1.default.methodID('multicall', [...exports.aclMulticallTypes]);
79
+ const outerArgs = ethereumjs_abi_1.default.rawEncode([...exports.aclMulticallTypes], [innerCalls]);
80
+ return (0, ethereumjs_util_1.addHexPrefix)(Buffer.concat([outerMethod, outerArgs]).toString('hex'));
81
+ }
82
+ /**
83
+ * Wraps calldata in a ForwarderV4.callFromParent(target, 0, data) call.
84
+ *
85
+ * Used when a forwarder contract must be msg.sender for an external contract
86
+ * call — for example, when the forwarder itself needs to call
87
+ * ACL.delegateForUserDecryption() so that its own balance can be decrypted.
88
+ *
89
+ * Only the parentAddress (root wallet) is allowed to call callFromParent
90
+ * (enforced by the forwarder's onlyParent modifier).
91
+ *
92
+ * @param targetAddress Address of the contract the forwarder will call (e.g. ACL)
93
+ * @param calldata ABI-encoded inner calldata (e.g. from buildDelegationCalldata)
94
+ * @returns ABI-encoded callFromParent calldata hex string (0x-prefixed)
95
+ */
96
+ function wrapInCallFromParent(targetAddress, calldata) {
97
+ const method = ethereumjs_abi_1.default.methodID('callFromParent', [...exports.callFromParentTypes]);
98
+ const args = ethereumjs_abi_1.default.rawEncode([...exports.callFromParentTypes], [
99
+ targetAddress,
100
+ 0, // value: no ETH transfer
101
+ (0, ethereumjs_util_1.toBuffer)(calldata), // inner calldata as bytes
102
+ ]);
103
+ return (0, ethereumjs_util_1.addHexPrefix)(Buffer.concat([method, args]).toString('hex'));
104
+ }
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemFtYVV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi96YW1hVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBb0RBLDBEQVdDO0FBZUQsNEVBdUJDO0FBZ0JELG9EQVdDO0FBaElELHFEQUF5RDtBQUN6RCxvRUFBeUM7QUFFekMsOEVBQThFO0FBQzlFLFlBQVk7QUFDWiw4RUFBOEU7QUFFOUUsNEJBQTRCO0FBQ2YsUUFBQSw4QkFBOEIsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFVLENBQUM7QUFDM0UsUUFBQSxtQkFBbUIsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFVLENBQUM7QUFDL0QsUUFBQSxpQkFBaUIsR0FBRyxDQUFDLFNBQVMsQ0FBVSxDQUFDO0FBRXREOzs7R0FHRztBQUNVLFFBQUEsaUNBQWlDLEdBQUcsSUFBQSw4QkFBWSxFQUMzRCx3QkFBVyxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsRUFBRSxDQUFDLEdBQUcsc0NBQThCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FDdkcsQ0FBQztBQUVGOzs7O0dBSUc7QUFDVSxRQUFBLG9CQUFvQixHQUFHLElBQUEsOEJBQVksRUFDOUMsd0JBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyx5QkFBaUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUMxRSxDQUFDO0FBRUY7OztHQUdHO0FBQ1UsUUFBQSxzQkFBc0IsR0FBRyxJQUFBLDhCQUFZLEVBQ2hELHdCQUFXLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUMsR0FBRywyQkFBbUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUNqRixDQUFDO0FBRUYsOEVBQThFO0FBQzlFLHFCQUFxQjtBQUNyQiw4RUFBOEU7QUFFOUU7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLHVCQUF1QixDQUNyQyxlQUF1QixFQUN2QixvQkFBNEIsRUFDNUIsZUFBdUI7SUFFdkIsTUFBTSxNQUFNLEdBQUcsd0JBQVcsQ0FBQyxRQUFRLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxHQUFHLHNDQUE4QixDQUFDLENBQUMsQ0FBQztJQUN0RyxNQUFNLElBQUksR0FBRyx3QkFBVyxDQUFDLFNBQVMsQ0FDaEMsQ0FBQyxHQUFHLHNDQUE4QixDQUFDLEVBQ25DLENBQUMsZUFBZSxFQUFFLG9CQUFvQixFQUFFLGVBQWUsQ0FBQyxDQUN6RCxDQUFDO0lBQ0YsT0FBTyxJQUFBLDhCQUFZLEVBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFnQixnQ0FBZ0MsQ0FDOUMsZUFBdUIsRUFDdkIsc0JBQWdDLEVBQ2hDLGVBQXVCO0lBRXZCLElBQUksc0JBQXNCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMsNEVBQTRFLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRUQsK0RBQStEO0lBQy9ELE1BQU0sVUFBVSxHQUFhLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO1FBQ3ZFLE1BQU0sV0FBVyxHQUFHLHdCQUFXLENBQUMsUUFBUSxDQUFDLDJCQUEyQixFQUFFLENBQUMsR0FBRyxzQ0FBOEIsQ0FBQyxDQUFDLENBQUM7UUFDM0csTUFBTSxTQUFTLEdBQUcsd0JBQVcsQ0FBQyxTQUFTLENBQ3JDLENBQUMsR0FBRyxzQ0FBOEIsQ0FBQyxFQUNuQyxDQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQ2pELENBQUM7UUFDRixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDLENBQUMsQ0FBQztJQUVILGtDQUFrQztJQUNsQyxNQUFNLFdBQVcsR0FBRyx3QkFBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLHlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUM5RSxNQUFNLFNBQVMsR0FBRyx3QkFBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcseUJBQWlCLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDOUUsT0FBTyxJQUFBLDhCQUFZLEVBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQy9FLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsYUFBcUIsRUFBRSxRQUFnQjtJQUMxRSxNQUFNLE1BQU0sR0FBRyx3QkFBVyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsMkJBQW1CLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sSUFBSSxHQUFHLHdCQUFXLENBQUMsU0FBUyxDQUNoQyxDQUFDLEdBQUcsMkJBQW1CLENBQUMsRUFDeEI7UUFDRSxhQUFhO1FBQ2IsQ0FBQyxFQUFFLHlCQUF5QjtRQUM1QixJQUFBLDBCQUFRLEVBQUMsUUFBUSxDQUFDLEVBQUUsMEJBQTBCO0tBQy9DLENBQ0YsQ0FBQztJQUNGLE9BQU8sSUFBQSw4QkFBWSxFQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNyRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWRkSGV4UHJlZml4LCB0b0J1ZmZlciB9IGZyb20gJ2V0aGVyZXVtanMtdXRpbCc7XG5pbXBvcnQgRXRoZXJldW1BYmkgZnJvbSAnZXRoZXJldW1qcy1hYmknO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENvbnN0YW50c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEFCSSBwYXJhbWV0ZXIgdHlwZSBhcnJheXNcbmV4cG9ydCBjb25zdCBkZWxlZ2F0ZUZvclVzZXJEZWNyeXB0aW9uVHlwZXMgPSBbJ2FkZHJlc3MnLCAnYWRkcmVzcycsICd1aW50NjQnXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBjYWxsRnJvbVBhcmVudFR5cGVzID0gWydhZGRyZXNzJywgJ3VpbnQyNTYnLCAnYnl0ZXMnXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBhY2xNdWx0aWNhbGxUeXBlcyA9IFsnYnl0ZXNbXSddIGFzIGNvbnN0O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHNlbGVjdG9yIGZvciBBQ0wuZGVsZWdhdGVGb3JVc2VyRGVjcnlwdGlvbihhZGRyZXNzLGFkZHJlc3MsdWludDY0KVxuICogPSBrZWNjYWsyNTYoJ2RlbGVnYXRlRm9yVXNlckRlY3J5cHRpb24oYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCknKVswOjRdXG4gKi9cbmV4cG9ydCBjb25zdCBkZWxlZ2F0ZUZvclVzZXJEZWNyeXB0aW9uTWV0aG9kSWQgPSBhZGRIZXhQcmVmaXgoXG4gIEV0aGVyZXVtQWJpLm1ldGhvZElEKCdkZWxlZ2F0ZUZvclVzZXJEZWNyeXB0aW9uJywgWy4uLmRlbGVnYXRlRm9yVXNlckRlY3J5cHRpb25UeXBlc10pLnRvU3RyaW5nKCdoZXgnKVxuKTtcblxuLyoqXG4gKiBGdW5jdGlvbiBzZWxlY3RvciBmb3IgQUNMLm11bHRpY2FsbChieXRlc1tdKVxuICogPSBrZWNjYWsyNTYoJ211bHRpY2FsbChieXRlc1tdKScpWzA6NF1cbiAqIEFDTCBpbmhlcml0cyBPcGVuWmVwcGVsaW4gTXVsdGljYWxsVXBncmFkZWFibGUg4oCUIHByZXNlcnZlcyBtc2cuc2VuZGVyIHZpYSBkZWxlZ2F0ZWNhbGwuXG4gKi9cbmV4cG9ydCBjb25zdCBhY2xNdWx0aWNhbGxNZXRob2RJZCA9IGFkZEhleFByZWZpeChcbiAgRXRoZXJldW1BYmkubWV0aG9kSUQoJ211bHRpY2FsbCcsIFsuLi5hY2xNdWx0aWNhbGxUeXBlc10pLnRvU3RyaW5nKCdoZXgnKVxuKTtcblxuLyoqXG4gKiBGdW5jdGlvbiBzZWxlY3RvciBmb3IgRm9yd2FyZGVyVjQuY2FsbEZyb21QYXJlbnQoYWRkcmVzcyx1aW50MjU2LGJ5dGVzKVxuICogPSBrZWNjYWsyNTYoJ2NhbGxGcm9tUGFyZW50KGFkZHJlc3MsdWludDI1NixieXRlcyknKVswOjRdXG4gKi9cbmV4cG9ydCBjb25zdCBjYWxsRnJvbVBhcmVudE1ldGhvZElkID0gYWRkSGV4UHJlZml4KFxuICBFdGhlcmV1bUFiaS5tZXRob2RJRCgnY2FsbEZyb21QYXJlbnQnLCBbLi4uY2FsbEZyb21QYXJlbnRUeXBlc10pLnRvU3RyaW5nKCdoZXgnKVxuKTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFbmNvZGluZyBmdW5jdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEVuY29kZXMgYSBzaW5nbGUgQUNMLmRlbGVnYXRlRm9yVXNlckRlY3J5cHRpb24oKSBjYWxsLlxuICpcbiAqIEdyYW50cyBgZGVsZWdhdGVBZGRyZXNzYCB0aGUgcmlnaHQgdG8gZGVjcnlwdCBFUkMtNzk4NCB0b2tlbiBiYWxhbmNlcyBvblxuICogYmVoYWxmIG9mIHRoZSBjYWxsaW5nIGFkZHJlc3MgKG1zZy5zZW5kZXIpIGZvciB0aGUgc3BlY2lmaWVkIHRva2VuIGNvbnRyYWN0LlxuICpcbiAqIEBwYXJhbSBkZWxlZ2F0ZUFkZHJlc3MgICAgICAgQml0R28gZW50ZXJwcmlzZSB2aWV3aW5nIGtleSBhZGRyZXNzXG4gKiBAcGFyYW0gdG9rZW5Db250cmFjdEFkZHJlc3MgIEVSQy03OTg0IHRva2VuIGNvbnRyYWN0IGFkZHJlc3NcbiAqIEBwYXJhbSBleHBpcnlUaW1lc3RhbXAgICAgICAgVW5peCBzZWNvbmRzOyByZWNvbW1lbmRlZDogTWF0aC5mbG9vcihEYXRlLm5vdygpLzEwMDApICsgMzY1Kjg2NDAwXG4gKiBAcmV0dXJucyBBQkktZW5jb2RlZCBjYWxsZGF0YSBoZXggc3RyaW5nICgweC1wcmVmaXhlZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKFxuICBkZWxlZ2F0ZUFkZHJlc3M6IHN0cmluZyxcbiAgdG9rZW5Db250cmFjdEFkZHJlc3M6IHN0cmluZyxcbiAgZXhwaXJ5VGltZXN0YW1wOiBudW1iZXJcbik6IHN0cmluZyB7XG4gIGNvbnN0IG1ldGhvZCA9IEV0aGVyZXVtQWJpLm1ldGhvZElEKCdkZWxlZ2F0ZUZvclVzZXJEZWNyeXB0aW9uJywgWy4uLmRlbGVnYXRlRm9yVXNlckRlY3J5cHRpb25UeXBlc10pO1xuICBjb25zdCBhcmdzID0gRXRoZXJldW1BYmkucmF3RW5jb2RlKFxuICAgIFsuLi5kZWxlZ2F0ZUZvclVzZXJEZWNyeXB0aW9uVHlwZXNdLFxuICAgIFtkZWxlZ2F0ZUFkZHJlc3MsIHRva2VuQ29udHJhY3RBZGRyZXNzLCBleHBpcnlUaW1lc3RhbXBdXG4gICk7XG4gIHJldHVybiBhZGRIZXhQcmVmaXgoQnVmZmVyLmNvbmNhdChbbWV0aG9kLCBhcmdzXSkudG9TdHJpbmcoJ2hleCcpKTtcbn1cblxuLyoqXG4gKiBFbmNvZGVzIE4gZGVsZWdhdGVGb3JVc2VyRGVjcnlwdGlvbiBjYWxscyBiYXRjaGVkIGluc2lkZSBBQ0wubXVsdGljYWxsKCkuXG4gKlxuICogUHJvZHVjZXMgYSBzaW5nbGUgVFggdGhhdCBncmFudHMgZGVsZWdhdGlvbiBmb3IgYWxsIHNwZWNpZmllZCB0b2tlbiBjb250cmFjdHMuXG4gKiBSZXF1aXJlcyB0b2tlbkNvbnRyYWN0QWRkcmVzc2VzLmxlbmd0aCA+PSAxLlxuICogTm90ZTogRGVjcnlwdGlvbkRlbGVnYXRpb25CdWlsZGVyIGFsd2F5cyB1c2VzIHRoaXMgZnVuY3Rpb24gKGV2ZW4gZm9yIGEgc2luZ2xlIHRva2VuKVxuICogdG8ga2VlcCB0aGUgdHJhbnNhY3Rpb24gc2hhcGUgY29uc2lzdGVudCByZWdhcmRsZXNzIG9mIHRva2VuIGNvdW50LlxuICpcbiAqIEBwYXJhbSBkZWxlZ2F0ZUFkZHJlc3MgICAgICAgICAgQml0R28gZW50ZXJwcmlzZSB2aWV3aW5nIGtleSBhZGRyZXNzXG4gKiBAcGFyYW0gdG9rZW5Db250cmFjdEFkZHJlc3NlcyAgIEFycmF5IG9mIEVSQy03OTg0IHRva2VuIGNvbnRyYWN0IGFkZHJlc3Nlc1xuICogQHBhcmFtIGV4cGlyeVRpbWVzdGFtcCAgICAgICAgICBVbml4IHNlY29uZHNcbiAqIEByZXR1cm5zIEFCSS1lbmNvZGVkIGNhbGxkYXRhIGhleCBzdHJpbmcgKDB4LXByZWZpeGVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoXG4gIGRlbGVnYXRlQWRkcmVzczogc3RyaW5nLFxuICB0b2tlbkNvbnRyYWN0QWRkcmVzc2VzOiBzdHJpbmdbXSxcbiAgZXhwaXJ5VGltZXN0YW1wOiBudW1iZXJcbik6IHN0cmluZyB7XG4gIGlmICh0b2tlbkNvbnRyYWN0QWRkcmVzc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGE6IHRva2VuQ29udHJhY3RBZGRyZXNzZXMgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgfVxuXG4gIC8vIEJ1aWxkIGVhY2ggaW5uZXIgZGVsZWdhdGVGb3JVc2VyRGVjcnlwdGlvbiBjYWxsIGFzIHJhdyBieXRlc1xuICBjb25zdCBpbm5lckNhbGxzOiBCdWZmZXJbXSA9IHRva2VuQ29udHJhY3RBZGRyZXNzZXMubWFwKCh0b2tlbkFkZHJlc3MpID0+IHtcbiAgICBjb25zdCBpbm5lck1ldGhvZCA9IEV0aGVyZXVtQWJpLm1ldGhvZElEKCdkZWxlZ2F0ZUZvclVzZXJEZWNyeXB0aW9uJywgWy4uLmRlbGVnYXRlRm9yVXNlckRlY3J5cHRpb25UeXBlc10pO1xuICAgIGNvbnN0IGlubmVyQXJncyA9IEV0aGVyZXVtQWJpLnJhd0VuY29kZShcbiAgICAgIFsuLi5kZWxlZ2F0ZUZvclVzZXJEZWNyeXB0aW9uVHlwZXNdLFxuICAgICAgW2RlbGVnYXRlQWRkcmVzcywgdG9rZW5BZGRyZXNzLCBleHBpcnlUaW1lc3RhbXBdXG4gICAgKTtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbaW5uZXJNZXRob2QsIGlubmVyQXJnc10pO1xuICB9KTtcblxuICAvLyBFbmNvZGUgb3V0ZXIgbXVsdGljYWxsKGJ5dGVzW10pXG4gIGNvbnN0IG91dGVyTWV0aG9kID0gRXRoZXJldW1BYmkubWV0aG9kSUQoJ211bHRpY2FsbCcsIFsuLi5hY2xNdWx0aWNhbGxUeXBlc10pO1xuICBjb25zdCBvdXRlckFyZ3MgPSBFdGhlcmV1bUFiaS5yYXdFbmNvZGUoWy4uLmFjbE11bHRpY2FsbFR5cGVzXSwgW2lubmVyQ2FsbHNdKTtcbiAgcmV0dXJuIGFkZEhleFByZWZpeChCdWZmZXIuY29uY2F0KFtvdXRlck1ldGhvZCwgb3V0ZXJBcmdzXSkudG9TdHJpbmcoJ2hleCcpKTtcbn1cblxuLyoqXG4gKiBXcmFwcyBjYWxsZGF0YSBpbiBhIEZvcndhcmRlclY0LmNhbGxGcm9tUGFyZW50KHRhcmdldCwgMCwgZGF0YSkgY2FsbC5cbiAqXG4gKiBVc2VkIHdoZW4gYSBmb3J3YXJkZXIgY29udHJhY3QgbXVzdCBiZSBtc2cuc2VuZGVyIGZvciBhbiBleHRlcm5hbCBjb250cmFjdFxuICogY2FsbCDigJQgZm9yIGV4YW1wbGUsIHdoZW4gdGhlIGZvcndhcmRlciBpdHNlbGYgbmVlZHMgdG8gY2FsbFxuICogQUNMLmRlbGVnYXRlRm9yVXNlckRlY3J5cHRpb24oKSBzbyB0aGF0IGl0cyBvd24gYmFsYW5jZSBjYW4gYmUgZGVjcnlwdGVkLlxuICpcbiAqIE9ubHkgdGhlIHBhcmVudEFkZHJlc3MgKHJvb3Qgd2FsbGV0KSBpcyBhbGxvd2VkIHRvIGNhbGwgY2FsbEZyb21QYXJlbnRcbiAqIChlbmZvcmNlZCBieSB0aGUgZm9yd2FyZGVyJ3Mgb25seVBhcmVudCBtb2RpZmllcikuXG4gKlxuICogQHBhcmFtIHRhcmdldEFkZHJlc3MgIEFkZHJlc3Mgb2YgdGhlIGNvbnRyYWN0IHRoZSBmb3J3YXJkZXIgd2lsbCBjYWxsIChlLmcuIEFDTClcbiAqIEBwYXJhbSBjYWxsZGF0YSAgICAgICBBQkktZW5jb2RlZCBpbm5lciBjYWxsZGF0YSAoZS5nLiBmcm9tIGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKVxuICogQHJldHVybnMgQUJJLWVuY29kZWQgY2FsbEZyb21QYXJlbnQgY2FsbGRhdGEgaGV4IHN0cmluZyAoMHgtcHJlZml4ZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cmFwSW5DYWxsRnJvbVBhcmVudCh0YXJnZXRBZGRyZXNzOiBzdHJpbmcsIGNhbGxkYXRhOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtZXRob2QgPSBFdGhlcmV1bUFiaS5tZXRob2RJRCgnY2FsbEZyb21QYXJlbnQnLCBbLi4uY2FsbEZyb21QYXJlbnRUeXBlc10pO1xuICBjb25zdCBhcmdzID0gRXRoZXJldW1BYmkucmF3RW5jb2RlKFxuICAgIFsuLi5jYWxsRnJvbVBhcmVudFR5cGVzXSxcbiAgICBbXG4gICAgICB0YXJnZXRBZGRyZXNzLFxuICAgICAgMCwgLy8gdmFsdWU6IG5vIEVUSCB0cmFuc2ZlclxuICAgICAgdG9CdWZmZXIoY2FsbGRhdGEpLCAvLyBpbm5lciBjYWxsZGF0YSBhcyBieXRlc1xuICAgIF1cbiAgKTtcbiAgcmV0dXJuIGFkZEhleFByZWZpeChCdWZmZXIuY29uY2F0KFttZXRob2QsIGFyZ3NdKS50b1N0cmluZygnaGV4JykpO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=decryptionDelegationBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decryptionDelegationBuilder.d.ts","sourceRoot":"","sources":["../../../test/unit/decryptionDelegationBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,265 @@
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
+ const should_1 = __importDefault(require("should"));
7
+ const decryptionDelegationBuilder_1 = require("../../src/lib/decryptionDelegationBuilder");
8
+ const ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
9
+ const zamaUtils_1 = require("../../src/lib/zamaUtils");
10
+ describe('DecryptionDelegationBuilder', () => {
11
+ const ACL_ADDRESS = '0xf0Ffdc93b7E186bC2f8CB3dAA75D86d1930A433D';
12
+ const DELEGATE_ADDRESS = '0x1111111111111111111111111111111111111111';
13
+ const TOKEN_ADDRESS = '0x94167129172A35ab093B44b8b96213DDbc3cD387';
14
+ const TOKEN_ADDRESS_2 = '0x4E7B06D78965594eB5EF5414c357ca21E1554491';
15
+ const TOKEN_ADDRESS_3 = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48';
16
+ const FORWARDER_ADDRESS = '0xDeADbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF';
17
+ const EXPIRY = Math.floor(Date.now() / 1000) + 365 * 86400;
18
+ let builder;
19
+ beforeEach(() => {
20
+ builder = new decryptionDelegationBuilder_1.DecryptionDelegationBuilder();
21
+ });
22
+ // -------------------------------------------------------------------------
23
+ describe('Scenario 1: root wallet (multicall to ACL)', () => {
24
+ it('should set to=ACL and selector=multicall for a single token', () => {
25
+ const req = builder.build({
26
+ aclContractAddress: ACL_ADDRESS,
27
+ delegateAddress: DELEGATE_ADDRESS,
28
+ tokenContractAddresses: [TOKEN_ADDRESS],
29
+ expiryTimestamp: EXPIRY,
30
+ });
31
+ req.to.should.equal(ACL_ADDRESS);
32
+ req.data.slice(0, 10).should.equal(zamaUtils_1.aclMulticallMethodId);
33
+ req.value.should.equal('0');
34
+ });
35
+ it('should set to=ACL and selector=multicall for multiple tokens', () => {
36
+ const req = builder.build({
37
+ aclContractAddress: ACL_ADDRESS,
38
+ delegateAddress: DELEGATE_ADDRESS,
39
+ tokenContractAddresses: [TOKEN_ADDRESS, TOKEN_ADDRESS_2],
40
+ expiryTimestamp: EXPIRY,
41
+ });
42
+ req.to.should.equal(ACL_ADDRESS);
43
+ req.data.slice(0, 10).should.equal(zamaUtils_1.aclMulticallMethodId);
44
+ req.value.should.equal('0');
45
+ });
46
+ it('single-token build should embed the correct decryption delegation inner call', () => {
47
+ const req = builder.build({
48
+ aclContractAddress: ACL_ADDRESS,
49
+ delegateAddress: DELEGATE_ADDRESS,
50
+ tokenContractAddresses: [TOKEN_ADDRESS],
51
+ expiryTimestamp: EXPIRY,
52
+ });
53
+ const expectedInner = (0, zamaUtils_1.buildDelegationCalldata)(DELEGATE_ADDRESS, TOKEN_ADDRESS, EXPIRY).slice(2);
54
+ req.data.should.containEql(expectedInner);
55
+ });
56
+ it('multi-token build should embed inner calls for all tokens', () => {
57
+ const req = builder.build({
58
+ aclContractAddress: ACL_ADDRESS,
59
+ delegateAddress: DELEGATE_ADDRESS,
60
+ tokenContractAddresses: [TOKEN_ADDRESS, TOKEN_ADDRESS_2, TOKEN_ADDRESS_3],
61
+ expiryTimestamp: EXPIRY,
62
+ });
63
+ const tokens = [TOKEN_ADDRESS, TOKEN_ADDRESS_2, TOKEN_ADDRESS_3];
64
+ for (const token of tokens) {
65
+ const expectedInner = (0, zamaUtils_1.buildDelegationCalldata)(DELEGATE_ADDRESS, token, EXPIRY).slice(2);
66
+ req.data.should.containEql(expectedInner);
67
+ }
68
+ });
69
+ it('inner calls should not contain other tokens not in the list', () => {
70
+ const req = builder.build({
71
+ aclContractAddress: ACL_ADDRESS,
72
+ delegateAddress: DELEGATE_ADDRESS,
73
+ tokenContractAddresses: [TOKEN_ADDRESS],
74
+ expiryTimestamp: EXPIRY,
75
+ });
76
+ const unexpectedInner = (0, zamaUtils_1.buildDelegationCalldata)(DELEGATE_ADDRESS, TOKEN_ADDRESS_2, EXPIRY).slice(2);
77
+ req.data.should.not.containEql(unexpectedInner);
78
+ });
79
+ it('should produce longer calldata for more tokens', () => {
80
+ const single = builder.build({
81
+ aclContractAddress: ACL_ADDRESS,
82
+ delegateAddress: DELEGATE_ADDRESS,
83
+ tokenContractAddresses: [TOKEN_ADDRESS],
84
+ expiryTimestamp: EXPIRY,
85
+ });
86
+ const triple = builder.build({
87
+ aclContractAddress: ACL_ADDRESS,
88
+ delegateAddress: DELEGATE_ADDRESS,
89
+ tokenContractAddresses: [TOKEN_ADDRESS, TOKEN_ADDRESS_2, TOKEN_ADDRESS_3],
90
+ expiryTimestamp: EXPIRY,
91
+ });
92
+ triple.data.length.should.be.greaterThan(single.data.length);
93
+ });
94
+ });
95
+ // -------------------------------------------------------------------------
96
+ describe('Scenario 2: forwarder (callFromParent wrapping multicall)', () => {
97
+ it('should set to=forwarder and selector=callFromParent for a single token', () => {
98
+ const req = builder.build({
99
+ aclContractAddress: ACL_ADDRESS,
100
+ delegateAddress: DELEGATE_ADDRESS,
101
+ tokenContractAddresses: [TOKEN_ADDRESS],
102
+ expiryTimestamp: EXPIRY,
103
+ forwarderAddress: FORWARDER_ADDRESS,
104
+ });
105
+ req.to.should.equal(FORWARDER_ADDRESS);
106
+ req.data.slice(0, 10).should.equal(zamaUtils_1.callFromParentMethodId);
107
+ req.value.should.equal('0');
108
+ });
109
+ it('should set to=forwarder and selector=callFromParent for multiple tokens', () => {
110
+ const req = builder.build({
111
+ aclContractAddress: ACL_ADDRESS,
112
+ delegateAddress: DELEGATE_ADDRESS,
113
+ tokenContractAddresses: [TOKEN_ADDRESS, TOKEN_ADDRESS_2],
114
+ expiryTimestamp: EXPIRY,
115
+ forwarderAddress: FORWARDER_ADDRESS,
116
+ });
117
+ req.to.should.equal(FORWARDER_ADDRESS);
118
+ req.data.slice(0, 10).should.equal(zamaUtils_1.callFromParentMethodId);
119
+ req.value.should.equal('0');
120
+ });
121
+ it('should encode ACL address as the callFromParent target', () => {
122
+ const req = builder.build({
123
+ aclContractAddress: ACL_ADDRESS,
124
+ delegateAddress: DELEGATE_ADDRESS,
125
+ tokenContractAddresses: [TOKEN_ADDRESS],
126
+ expiryTimestamp: EXPIRY,
127
+ forwarderAddress: FORWARDER_ADDRESS,
128
+ });
129
+ const payload = Buffer.from(req.data.slice(10), 'hex');
130
+ const [target] = ethereumjs_abi_1.default.rawDecode(['address', 'uint256', 'bytes'], payload);
131
+ target.toString('hex').should.equal(ACL_ADDRESS.slice(2).toLowerCase());
132
+ });
133
+ it('should encode value=0 inside callFromParent', () => {
134
+ const req = builder.build({
135
+ aclContractAddress: ACL_ADDRESS,
136
+ delegateAddress: DELEGATE_ADDRESS,
137
+ tokenContractAddresses: [TOKEN_ADDRESS],
138
+ expiryTimestamp: EXPIRY,
139
+ forwarderAddress: FORWARDER_ADDRESS,
140
+ });
141
+ const payload = Buffer.from(req.data.slice(10), 'hex');
142
+ const [, value] = ethereumjs_abi_1.default.rawDecode(['address', 'uint256', 'bytes'], payload);
143
+ value.toString().should.equal('0');
144
+ });
145
+ it('inner data (decoded from callFromParent) should be a valid multicall containing all tokens', () => {
146
+ const req = builder.build({
147
+ aclContractAddress: ACL_ADDRESS,
148
+ delegateAddress: DELEGATE_ADDRESS,
149
+ tokenContractAddresses: [TOKEN_ADDRESS, TOKEN_ADDRESS_2],
150
+ expiryTimestamp: EXPIRY,
151
+ forwarderAddress: FORWARDER_ADDRESS,
152
+ });
153
+ const outerPayload = Buffer.from(req.data.slice(10), 'hex');
154
+ const [, , innerData] = ethereumjs_abi_1.default.rawDecode(['address', 'uint256', 'bytes'], outerPayload);
155
+ const innerHex = '0x' + innerData.toString('hex');
156
+ innerHex.slice(0, 10).should.equal(zamaUtils_1.aclMulticallMethodId);
157
+ const inner1 = (0, zamaUtils_1.buildDelegationCalldata)(DELEGATE_ADDRESS, TOKEN_ADDRESS, EXPIRY).slice(2);
158
+ const inner2 = (0, zamaUtils_1.buildDelegationCalldata)(DELEGATE_ADDRESS, TOKEN_ADDRESS_2, EXPIRY).slice(2);
159
+ innerHex.should.containEql(inner1);
160
+ innerHex.should.containEql(inner2);
161
+ });
162
+ });
163
+ // -------------------------------------------------------------------------
164
+ describe('parameter isolation', () => {
165
+ it('changing ACL address should change the to field (root wallet path)', () => {
166
+ const ACL_2 = '0x2222222222222222222222222222222222222222';
167
+ const r1 = builder.build({
168
+ aclContractAddress: ACL_ADDRESS,
169
+ delegateAddress: DELEGATE_ADDRESS,
170
+ tokenContractAddresses: [TOKEN_ADDRESS],
171
+ expiryTimestamp: EXPIRY,
172
+ });
173
+ const r2 = builder.build({
174
+ aclContractAddress: ACL_2,
175
+ delegateAddress: DELEGATE_ADDRESS,
176
+ tokenContractAddresses: [TOKEN_ADDRESS],
177
+ expiryTimestamp: EXPIRY,
178
+ });
179
+ r1.to.should.equal(ACL_ADDRESS);
180
+ r2.to.should.equal(ACL_2);
181
+ });
182
+ it('changing forwarder address should change the to field', () => {
183
+ const FWD_2 = '0x3333333333333333333333333333333333333333';
184
+ const r1 = builder.build({
185
+ aclContractAddress: ACL_ADDRESS,
186
+ delegateAddress: DELEGATE_ADDRESS,
187
+ tokenContractAddresses: [TOKEN_ADDRESS],
188
+ expiryTimestamp: EXPIRY,
189
+ forwarderAddress: FORWARDER_ADDRESS,
190
+ });
191
+ const r2 = builder.build({
192
+ aclContractAddress: ACL_ADDRESS,
193
+ delegateAddress: DELEGATE_ADDRESS,
194
+ tokenContractAddresses: [TOKEN_ADDRESS],
195
+ expiryTimestamp: EXPIRY,
196
+ forwarderAddress: FWD_2,
197
+ });
198
+ r1.to.should.equal(FORWARDER_ADDRESS);
199
+ r2.to.should.equal(FWD_2);
200
+ });
201
+ it('changing delegate address should change the calldata', () => {
202
+ const DELEGATE_2 = '0x2222222222222222222222222222222222222222';
203
+ const r1 = builder.build({
204
+ aclContractAddress: ACL_ADDRESS,
205
+ delegateAddress: DELEGATE_ADDRESS,
206
+ tokenContractAddresses: [TOKEN_ADDRESS],
207
+ expiryTimestamp: EXPIRY,
208
+ });
209
+ const r2 = builder.build({
210
+ aclContractAddress: ACL_ADDRESS,
211
+ delegateAddress: DELEGATE_2,
212
+ tokenContractAddresses: [TOKEN_ADDRESS],
213
+ expiryTimestamp: EXPIRY,
214
+ });
215
+ r1.data.should.not.equal(r2.data);
216
+ });
217
+ it('changing expiry should change the calldata', () => {
218
+ const r1 = builder.build({
219
+ aclContractAddress: ACL_ADDRESS,
220
+ delegateAddress: DELEGATE_ADDRESS,
221
+ tokenContractAddresses: [TOKEN_ADDRESS],
222
+ expiryTimestamp: EXPIRY,
223
+ });
224
+ const r2 = builder.build({
225
+ aclContractAddress: ACL_ADDRESS,
226
+ delegateAddress: DELEGATE_ADDRESS,
227
+ tokenContractAddresses: [TOKEN_ADDRESS],
228
+ expiryTimestamp: EXPIRY + 86400,
229
+ });
230
+ r1.data.should.not.equal(r2.data);
231
+ });
232
+ });
233
+ // -------------------------------------------------------------------------
234
+ describe('value field', () => {
235
+ it('should always be "0" for all scenarios', () => {
236
+ const scenarios = [
237
+ { tokenContractAddresses: [TOKEN_ADDRESS] },
238
+ { tokenContractAddresses: [TOKEN_ADDRESS, TOKEN_ADDRESS_2] },
239
+ { tokenContractAddresses: [TOKEN_ADDRESS], forwarderAddress: FORWARDER_ADDRESS },
240
+ { tokenContractAddresses: [TOKEN_ADDRESS, TOKEN_ADDRESS_2], forwarderAddress: FORWARDER_ADDRESS },
241
+ ];
242
+ for (const extra of scenarios) {
243
+ const req = builder.build({
244
+ aclContractAddress: ACL_ADDRESS,
245
+ delegateAddress: DELEGATE_ADDRESS,
246
+ expiryTimestamp: EXPIRY,
247
+ ...extra,
248
+ });
249
+ req.value.should.equal('0');
250
+ }
251
+ });
252
+ });
253
+ // -------------------------------------------------------------------------
254
+ describe('error handling', () => {
255
+ it('should throw when tokenContractAddresses is empty', () => {
256
+ should_1.default.throws(() => builder.build({
257
+ aclContractAddress: ACL_ADDRESS,
258
+ delegateAddress: DELEGATE_ADDRESS,
259
+ tokenContractAddresses: [],
260
+ expiryTimestamp: EXPIRY,
261
+ }), /DecryptionDelegationBuilder: tokenContractAddresses must not be empty/);
262
+ });
263
+ });
264
+ });
265
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjcnlwdGlvbkRlbGVnYXRpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2RlY3J5cHRpb25EZWxlZ2F0aW9uQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1QiwyRkFBd0Y7QUFDeEYsb0VBQXlDO0FBQ3pDLHVEQUFnSDtBQUVoSCxRQUFRLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxFQUFFO0lBQzNDLE1BQU0sV0FBVyxHQUFHLDRDQUE0QyxDQUFDO0lBQ2pFLE1BQU0sZ0JBQWdCLEdBQUcsNENBQTRDLENBQUM7SUFDdEUsTUFBTSxhQUFhLEdBQUcsNENBQTRDLENBQUM7SUFDbkUsTUFBTSxlQUFlLEdBQUcsNENBQTRDLENBQUM7SUFDckUsTUFBTSxlQUFlLEdBQUcsNENBQTRDLENBQUM7SUFDckUsTUFBTSxpQkFBaUIsR0FBRyw0Q0FBNEMsQ0FBQztJQUN2RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBRTNELElBQUksT0FBb0MsQ0FBQztJQUV6QyxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsT0FBTyxHQUFHLElBQUkseURBQTJCLEVBQUUsQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FBQztJQUVILDRFQUE0RTtJQUM1RSxRQUFRLENBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFO1FBQzFELEVBQUUsQ0FBQyw2REFBNkQsRUFBRSxHQUFHLEVBQUU7WUFDckUsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDeEIsa0JBQWtCLEVBQUUsV0FBVztnQkFDL0IsZUFBZSxFQUFFLGdCQUFnQjtnQkFDakMsc0JBQXNCLEVBQUUsQ0FBQyxhQUFhLENBQUM7Z0JBQ3ZDLGVBQWUsRUFBRSxNQUFNO2FBQ3hCLENB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RyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7b0JBQ3hCLGtCQUFrQixFQUFFLFdBQVc7b0JBQy9CLGVBQWUsRUFBRSxnQkFBZ0I7b0JBQ2pDLGVBQWUsRUFBRSxNQUFNO29CQUN2QixHQUFHLEtBQUs7aUJBQ1QsQ0FBQyxDQUFDO2dCQUNILEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILDRFQUE0RTtJQUM1RSxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO1FBQzlCLEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7WUFDM0QsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDWixrQkFBa0IsRUFBRSxXQUFXO2dCQUMvQixlQUFlLEVBQUUsZ0JBQWdCO2dCQUNqQyxzQkFBc0IsRUFBRSxFQUFFO2dCQUMxQixlQUFlLEVBQUUsTUFBTTthQUN4QixDQUFDLEVBQ0osdUVBQXVFLENBQ3hFLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBEZWNyeXB0aW9uRGVsZWdhdGlvbkJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zcmMvbGliL2RlY3J5cHRpb25EZWxlZ2F0aW9uQnVpbGRlcic7XG5pbXBvcnQgRXRoZXJldW1BYmkgZnJvbSAnZXRoZXJldW1qcy1hYmknO1xuaW1wb3J0IHsgYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEsIGFjbE11bHRpY2FsbE1ldGhvZElkLCBjYWxsRnJvbVBhcmVudE1ldGhvZElkIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi96YW1hVXRpbHMnO1xuXG5kZXNjcmliZSgnRGVjcnlwdGlvbkRlbGVnYXRpb25CdWlsZGVyJywgKCkgPT4ge1xuICBjb25zdCBBQ0xfQUREUkVTUyA9ICcweGYwRmZkYzkzYjdFMTg2YkMyZjhDQjNkQUE3NUQ4NmQxOTMwQTQzM0QnO1xuICBjb25zdCBERUxFR0FURV9BRERSRVNTID0gJzB4MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSc7XG4gIGNvbnN0IFRPS0VOX0FERFJFU1MgPSAnMHg5NDE2NzEyOTE3MkEzNWFiMDkzQjQ0YjhiOTYyMTNERGJjM2NEMzg3JztcbiAgY29uc3QgVE9LRU5fQUREUkVTU18yID0gJzB4NEU3QjA2RDc4OTY1NTk0ZUI1RUY1NDE0YzM1N2NhMjFFMTU1NDQ5MSc7XG4gIGNvbnN0IFRPS0VOX0FERFJFU1NfMyA9ICcweEEwYjg2OTkxYzYyMThiMzZjMWQxOUQ0YTJlOUViMGNFMzYwNmVCNDgnO1xuICBjb25zdCBGT1JXQVJERVJfQUREUkVTUyA9ICcweERlQURiZWVmZEVBZGJlZWZkRWFkYkVFRmRlYWRiZUVGZEVhRGJlZUYnO1xuICBjb25zdCBFWFBJUlkgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSArIDM2NSAqIDg2NDAwO1xuXG4gIGxldCBidWlsZGVyOiBEZWNyeXB0aW9uRGVsZWdhdGlvbkJ1aWxkZXI7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgYnVpbGRlciA9IG5ldyBEZWNyeXB0aW9uRGVsZWdhdGlvbkJ1aWxkZXIoKTtcbiAgfSk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBkZXNjcmliZSgnU2NlbmFyaW8gMTogcm9vdCB3YWxsZXQgKG11bHRpY2FsbCB0byBBQ0wpJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc2V0IHRvPUFDTCBhbmQgc2VsZWN0b3I9bXVsdGljYWxsIGZvciBhIHNpbmdsZSB0b2tlbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlcSA9IGJ1aWxkZXIuYnVpbGQoe1xuICAgICAgICBhY2xDb250cmFjdEFkZHJlc3M6IEFDTF9BRERSRVNTLFxuICAgICAgICBkZWxlZ2F0ZUFkZHJlc3M6IERFTEVHQVRFX0FERFJFU1MsXG4gICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzZXM6IFtUT0tFTl9BRERSRVNTXSxcbiAgICAgICAgZXhwaXJ5VGltZXN0YW1wOiBFWFBJUlksXG4gICAgICB9KTtcblxuICAgICAgcmVxLnRvLnNob3VsZC5lcXVhbChBQ0xfQUREUkVTUyk7XG4gICAgICByZXEuZGF0YS5zbGljZSgwLCAxMCkuc2hvdWxkLmVxdWFsKGFjbE11bHRpY2FsbE1ldGhvZElkKTtcbiAgICAgIHJlcS52YWx1ZS5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2V0IHRvPUFDTCBhbmQgc2VsZWN0b3I9bXVsdGljYWxsIGZvciBtdWx0aXBsZSB0b2tlbnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXEgPSBidWlsZGVyLmJ1aWxkKHtcbiAgICAgICAgYWNsQ29udHJhY3RBZGRyZXNzOiBBQ0xfQUREUkVTUyxcbiAgICAgICAgZGVsZWdhdGVBZGRyZXNzOiBERUxFR0FURV9BRERSRVNTLFxuICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzc2VzOiBbVE9LRU5fQUREUkVTUywgVE9LRU5fQUREUkVTU18yXSxcbiAgICAgICAgZXhwaXJ5VGltZXN0YW1wOiBFWFBJUlksXG4gICAgICB9KTtcblxuICAgICAgcmVxLnRvLnNob3VsZC5lcXVhbChBQ0xfQUREUkVTUyk7XG4gICAgICByZXEuZGF0YS5zbGljZSgwLCAxMCkuc2hvdWxkLmVxdWFsKGFjbE11bHRpY2FsbE1ldGhvZElkKTtcbiAgICAgIHJlcS52YWx1ZS5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaW5nbGUtdG9rZW4gYnVpbGQgc2hvdWxkIGVtYmVkIHRoZSBjb3JyZWN0IGRlY3J5cHRpb24gZGVsZWdhdGlvbiBpbm5lciBjYWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVxID0gYnVpbGRlci5idWlsZCh7XG4gICAgICAgIGFjbENvbnRyYWN0QWRkcmVzczogQUNMX0FERFJFU1MsXG4gICAgICAgIGRlbGVnYXRlQWRkcmVzczogREVMRUdBVEVfQUREUkVTUyxcbiAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3NlczogW1RPS0VOX0FERFJFU1NdLFxuICAgICAgICBleHBpcnlUaW1lc3RhbXA6IEVYUElSWSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBleHBlY3RlZElubmVyID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgVE9LRU5fQUREUkVTUywgRVhQSVJZKS5zbGljZSgyKTtcbiAgICAgIHJlcS5kYXRhLnNob3VsZC5jb250YWluRXFsKGV4cGVjdGVkSW5uZXIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ211bHRpLXRva2VuIGJ1aWxkIHNob3VsZCBlbWJlZCBpbm5lciBjYWxscyBmb3IgYWxsIHRva2VucycsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlcSA9IGJ1aWxkZXIuYnVpbGQoe1xuICAgICAgICBhY2xDb250cmFjdEFkZHJlc3M6IEFDTF9BRERSRVNTLFxuICAgICAgICBkZWxlZ2F0ZUFkZHJlc3M6IERFTEVHQVRFX0FERFJFU1MsXG4gICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzZXM6IFtUT0tFTl9BRERSRVNTLCBUT0tFTl9BRERSRVNTXzIsIFRPS0VOX0FERFJFU1NfM10sXG4gICAgICAgIGV4cGlyeVRpbWVzdGFtcDogRVhQSVJZLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRva2VucyA9IFtUT0tFTl9BRERSRVNTLCBUT0tFTl9BRERSRVNTXzIsIFRPS0VOX0FERFJFU1NfM107XG4gICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgICAgICBjb25zdCBleHBlY3RlZElubmVyID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgdG9rZW4sIEVYUElSWSkuc2xpY2UoMik7XG4gICAgICAgIHJlcS5kYXRhLnNob3VsZC5jb250YWluRXFsKGV4cGVjdGVkSW5uZXIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ2lubmVyIGNhbGxzIHNob3VsZCBub3QgY29udGFpbiBvdGhlciB0b2tlbnMgbm90IGluIHRoZSBsaXN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVxID0gYnVpbGRlci5idWlsZCh7XG4gICAgICAgIGFjbENvbnRyYWN0QWRkcmVzczogQUNMX0FERFJFU1MsXG4gICAgICAgIGRlbGVnYXRlQWRkcmVzczogREVMRUdBVEVfQUREUkVTUyxcbiAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3NlczogW1RPS0VOX0FERFJFU1NdLFxuICAgICAgICBleHBpcnlUaW1lc3RhbXA6IEVYUElSWSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB1bmV4cGVjdGVkSW5uZXIgPSBidWlsZERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBUT0tFTl9BRERSRVNTXzIsIEVYUElSWSkuc2xpY2UoMik7XG4gICAgICByZXEuZGF0YS5zaG91bGQubm90LmNvbnRhaW5FcWwodW5leHBlY3RlZElubmVyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJvZHVjZSBsb25nZXIgY2FsbGRhdGEgZm9yIG1vcmUgdG9rZW5zJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2luZ2xlID0gYnVpbGRlci5idWlsZCh7XG4gICAgICAgIGFjbENvbnRyYWN0QWRkcmVzczogQUNMX0FERFJFU1MsXG4gICAgICAgIGRlbGVnYXRlQWRkcmVzczogREVMRUdBVEVfQUREUkVTUyxcbiAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3NlczogW1RPS0VOX0FERFJFU1NdLFxuICAgICAgICBleHBpcnlUaW1lc3RhbXA6IEVYUElSWSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdHJpcGxlID0gYnVpbGRlci5idWlsZCh7XG4gICAgICAgIGFjbENvbnRyYWN0QWRkcmVzczogQUNMX0FERFJFU1MsXG4gICAgICAgIGRlbGVnYXRlQWRkcmVzczogREVMRUdBVEVfQUREUkVTUyxcbiAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3NlczogW1RPS0VOX0FERFJFU1MsIFRPS0VOX0FERFJFU1NfMiwgVE9LRU5fQUREUkVTU18zXSxcbiAgICAgICAgZXhwaXJ5VGltZXN0YW1wOiBFWFBJUlksXG4gICAgICB9KTtcbiAgICAgIHRyaXBsZS5kYXRhLmxlbmd0aC5zaG91bGQuYmUuZ3JlYXRlclRoYW4oc2luZ2xlLmRhdGEubGVuZ3RoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBkZXNjcmliZSgnU2NlbmFyaW8gMjogZm9yd2FyZGVyIChjYWxsRnJvbVBhcmVudCB3cmFwcGluZyBtdWx0aWNhbGwpJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc2V0IHRvPWZvcndhcmRlciBhbmQgc2VsZWN0b3I9Y2FsbEZyb21QYXJlbnQgZm9yIGEgc2luZ2xlIHRva2VuJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVxID0gYnVpbGRlci5idWlsZCh7XG4gICAgICAgIGFjbENvbnRyYWN0QWRkcmVzczogQUNMX0FERFJFU1MsXG4gICAgICAgIGRlbGVnYXRlQWRkcmVzczogREVMRUdBVEVfQUREUkVTUyxcbiAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3NlczogW1RPS0VOX0FERFJFU1NdLFxuICAgICAgICBleHBpcnlUaW1lc3RhbXA6IEVYUElSWSxcbiAgICAgICAgZm9yd2FyZGVyQWRkcmVzczogRk9SV0FSREVSX0FERFJFU1MsXG4gICAgICB9KTtcblxuICAgICAgcmVxLnRvLnNob3VsZC5lcXVhbChGT1JXQVJERVJfQUREUkVTUyk7XG4gICAgICByZXEuZGF0YS5zbGljZSgwLCAxMCkuc2hvdWxkLmVxdWFsKGNhbGxGcm9tUGFyZW50TWV0aG9kSWQpO1xuICAgICAgcmVxLnZhbHVlLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzZXQgdG89Zm9yd2FyZGVyIGFuZCBzZWxlY3Rvcj1jYWxsRnJvbVBhcmVudCBmb3IgbXVsdGlwbGUgdG9rZW5zJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVxID0gYnVpbGRlci5idWlsZCh7XG4gICAgICAgIGFjbENvbnRyYWN0QWRkcmVzczogQUNMX0FERFJFU1MsXG4gICAgICAgIGRlbGVnYXRlQWRkcmVzczogREVMRUdBVEVfQUREUkVTUyxcbiAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3NlczogW1RPS0VOX0FERFJFU1MsIFRPS0VOX0FERFJFU1NfMl0sXG4gICAgICAgIGV4cGlyeVRpbWVzdGFtcDogRVhQSVJZLFxuICAgICAgICBmb3J3YXJkZXJBZGRyZXNzOiBGT1JXQVJERVJfQUREUkVTUyxcbiAgICAgIH0pO1xuXG4gICAgICByZXEudG8uc2hvdWxkLmVxdWFsKEZPUldBUkRFUl9BRERSRVNTKTtcbiAgICAgIHJlcS5kYXRhLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoY2FsbEZyb21QYXJlbnRNZXRob2RJZCk7XG4gICAgICByZXEudmFsdWUuc2hvdWxkLmVxdWFsKCcwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGVuY29kZSBBQ0wgYWRkcmVzcyBhcyB0aGUgY2FsbEZyb21QYXJlbnQgdGFyZ2V0JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVxID0gYnVpbGRlci5idWlsZCh7XG4gICAgICAgIGFjbENvbnRyYWN0QWRkcmVzczogQUNMX0FERFJFU1MsXG4gICAgICAgIGRlbGVnYXRlQWRkcmVzczogREVMRUdBVEVfQUREUkVTUyxcbiAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3NlczogW1RPS0VOX0FERFJFU1NdLFxuICAgICAgICBleHBpcnlUaW1lc3RhbXA6IEVYUElSWSxcbiAgICAgICAgZm9yd2FyZGVyQWRkcmVzczogRk9SV0FSREVSX0FERFJFU1MsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IEJ1ZmZlci5mcm9tKHJlcS5kYXRhLnNsaWNlKDEwKSwgJ2hleCcpO1xuICAgICAgY29uc3QgW3RhcmdldF0gPSBFdGhlcmV1bUFiaS5yYXdEZWNvZGUoWydhZGRyZXNzJywgJ3VpbnQyNTYnLCAnYnl0ZXMnXSwgcGF5bG9hZCk7XG4gICAgICAodGFyZ2V0IGFzIEJ1ZmZlcikudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbChBQ0xfQUREUkVTUy5zbGljZSgyKS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZW5jb2RlIHZhbHVlPTAgaW5zaWRlIGNhbGxGcm9tUGFyZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVxID0gYnVpbGRlci5idWlsZCh7XG4gICAgICAgIGFjbENvbnRyYWN0QWRkcmVzczogQUNMX0FERFJFU1MsXG4gICAgICAgIGRlbGVnYXRlQWRkcmVzczogREVMRUdBVEVfQUREUkVTUyxcbiAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3NlczogW1RPS0VOX0FERFJFU1NdLFxuICAgICAgICBleHBpcnlUaW1lc3RhbXA6IEVYUElSWSxcbiAgICAgICAgZm9yd2FyZGVyQWRkcmVzczogRk9SV0FSREVSX0FERFJFU1MsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcGF5bG9hZCA9IEJ1ZmZlci5mcm9tKHJlcS5kYXRhLnNsaWNlKDEwKSwgJ2hleCcpO1xuICAgICAgY29uc3QgWywgdmFsdWVdID0gRXRoZXJldW1BYmkucmF3RGVjb2RlKFsnYWRkcmVzcycsICd1aW50MjU2JywgJ2J5dGVzJ10sIHBheWxvYWQpO1xuICAgICAgdmFsdWUudG9TdHJpbmcoKS5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdpbm5lciBkYXRhIChkZWNvZGVkIGZyb20gY2FsbEZyb21QYXJlbnQpIHNob3VsZCBiZSBhIHZhbGlkIG11bHRpY2FsbCBjb250YWluaW5nIGFsbCB0b2tlbnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXEgPSBidWlsZGVyLmJ1aWxkKHtcbiAgICAgICAgYWNsQ29udHJhY3RBZGRyZXNzOiBBQ0xfQUREUkVTUyxcbiAgICAgICAgZGVsZWdhdGVBZGRyZXNzOiBERUxFR0FURV9BRERSRVNTLFxuICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzc2VzOiBbVE9LRU5fQUREUkVTUywgVE9LRU5fQUREUkVTU18yXSxcbiAgICAgICAgZXhwaXJ5VGltZXN0YW1wOiBFWFBJUlksXG4gICAgICAgIGZvcndhcmRlckFkZHJlc3M6IEZPUldBUkRFUl9BRERSRVNTLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG91dGVyUGF5bG9hZCA9IEJ1ZmZlci5mcm9tKHJlcS5kYXRhLnNsaWNlKDEwKSwgJ2hleCcpO1xuICAgICAgY29uc3QgWywgLCBpbm5lckRhdGFdID0gRXRoZXJldW1BYmkucmF3RGVjb2RlKFsnYWRkcmVzcycsICd1aW50MjU2JywgJ2J5dGVzJ10sIG91dGVyUGF5bG9hZCk7XG4gICAgICBjb25zdCBpbm5lckhleCA9ICcweCcgKyAoaW5uZXJEYXRhIGFzIEJ1ZmZlcikudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgICBpbm5lckhleC5zbGljZSgwLCAxMCkuc2hvdWxkLmVxdWFsKGFjbE11bHRpY2FsbE1ldGhvZElkKTtcblxuICAgICAgY29uc3QgaW5uZXIxID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgVE9LRU5fQUREUkVTUywgRVhQSVJZKS5zbGljZSgyKTtcbiAgICAgIGNvbnN0IGlubmVyMiA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1NfMiwgRVhQSVJZKS5zbGljZSgyKTtcbiAgICAgIGlubmVySGV4LnNob3VsZC5jb250YWluRXFsKGlubmVyMSk7XG4gICAgICBpbm5lckhleC5zaG91bGQuY29udGFpbkVxbChpbm5lcjIpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGRlc2NyaWJlKCdwYXJhbWV0ZXIgaXNvbGF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdjaGFuZ2luZyBBQ0wgYWRkcmVzcyBzaG91bGQgY2hhbmdlIHRoZSB0byBmaWVsZCAocm9vdCB3YWxsZXQgcGF0aCknLCAoKSA9PiB7XG4gICAgICBjb25zdCBBQ0xfMiA9ICcweDIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjInO1xuICAgICAgY29uc3QgcjEgPSBidWlsZGVyLmJ1aWxkKHtcbiAgICAgICAgYWNsQ29udHJhY3RBZGRyZXNzOiBBQ0xfQUREUkVTUyxcbiAgICAgICAgZGVsZWdhdGVBZGRyZXNzOiBERUxFR0FURV9BRERSRVNTLFxuICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzc2VzOiBbVE9LRU5fQUREUkVTU10sXG4gICAgICAgIGV4cGlyeVRpbWVzdGFtcDogRVhQSVJZLFxuICAgICAgfSk7XG4gICAgICBjb25zdCByMiA9IGJ1aWxkZXIuYnVpbGQoe1xuICAgICAgICBhY2xDb250cmFjdEFkZHJlc3M6IEFDTF8yLFxuICAgICAgICBkZWxlZ2F0ZUFkZHJlc3M6IERFTEVHQVRFX0FERFJFU1MsXG4gICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzZXM6IFtUT0tFTl9BRERSRVNTXSxcbiAgICAgICAgZXhwaXJ5VGltZXN0YW1wOiBFWFBJUlksXG4gICAgICB9KTtcbiAgICAgIHIxLnRvLnNob3VsZC5lcXVhbChBQ0xfQUREUkVTUyk7XG4gICAgICByMi50by5zaG91bGQuZXF1YWwoQUNMXzIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NoYW5naW5nIGZvcndhcmRlciBhZGRyZXNzIHNob3VsZCBjaGFuZ2UgdGhlIHRvIGZpZWxkJywgKCkgPT4ge1xuICAgICAgY29uc3QgRldEXzIgPSAnMHgzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzJztcbiAgICAgIGNvbnN0IHIxID0gYnVpbGRlci5idWlsZCh7XG4gICAgICAgIGFjbENvbnRyYWN0QWRkcmVzczogQUNMX0FERFJFU1MsXG4gICAgICAgIGRlbGVnYXRlQWRkcmVzczogREVMRUdBVEVfQUREUkVTUyxcbiAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3NlczogW1RPS0VOX0FERFJFU1NdLFxuICAgICAgICBleHBpcnlUaW1lc3RhbXA6IEVYUElSWSxcbiAgICAgICAgZm9yd2FyZGVyQWRkcmVzczogRk9SV0FSREVSX0FERFJFU1MsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHIyID0gYnVpbGRlci5idWlsZCh7XG4gICAgICAgIGFjbENvbnRyYWN0QWRkcmVzczogQUNMX0FERFJFU1MsXG4gICAgICAgIGRlbGVnYXRlQWRkcmVzczogREVMRUdBVEVfQUREUkVTUyxcbiAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3NlczogW1RPS0VOX0FERFJFU1NdLFxuICAgICAgICBleHBpcnlUaW1lc3RhbXA6IEVYUElSWSxcbiAgICAgICAgZm9yd2FyZGVyQWRkcmVzczogRldEXzIsXG4gICAgICB9KTtcbiAgICAgIHIxLnRvLnNob3VsZC5lcXVhbChGT1JXQVJERVJfQUREUkVTUyk7XG4gICAgICByMi50by5zaG91bGQuZXF1YWwoRldEXzIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NoYW5naW5nIGRlbGVnYXRlIGFkZHJlc3Mgc2hvdWxkIGNoYW5nZSB0aGUgY2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgICBjb25zdCBERUxFR0FURV8yID0gJzB4MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMic7XG4gICAgICBjb25zdCByMSA9IGJ1aWxkZXIuYnVpbGQoe1xuICAgICAgICBhY2xDb250cmFjdEFkZHJlc3M6IEFDTF9BRERSRVNTLFxuICAgICAgICBkZWxlZ2F0ZUFkZHJlc3M6IERFTEVHQVRFX0FERFJFU1MsXG4gICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzZXM6IFtUT0tFTl9BRERSRVNTXSxcbiAgICAgICAgZXhwaXJ5VGltZXN0YW1wOiBFWFBJUlksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHIyID0gYnVpbGRlci5idWlsZCh7XG4gICAgICAgIGFjbENvbnRyYWN0QWRkcmVzczogQUNMX0FERFJFU1MsXG4gICAgICAgIGRlbGVnYXRlQWRkcmVzczogREVMRUdBVEVfMixcbiAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3NlczogW1RPS0VOX0FERFJFU1NdLFxuICAgICAgICBleHBpcnlUaW1lc3RhbXA6IEVYUElSWSxcbiAgICAgIH0pO1xuICAgICAgcjEuZGF0YS5zaG91bGQubm90LmVxdWFsKHIyLmRhdGEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NoYW5naW5nIGV4cGlyeSBzaG91bGQgY2hhbmdlIHRoZSBjYWxsZGF0YScsICgpID0+IHtcbiAgICAgIGNvbnN0IHIxID0gYnVpbGRlci5idWlsZCh7XG4gICAgICAgIGFjbENvbnRyYWN0QWRkcmVzczogQUNMX0FERFJFU1MsXG4gICAgICAgIGRlbGVnYXRlQWRkcmVzczogREVMRUdBVEVfQUREUkVTUyxcbiAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3NlczogW1RPS0VOX0FERFJFU1NdLFxuICAgICAgICBleHBpcnlUaW1lc3RhbXA6IEVYUElSWSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcjIgPSBidWlsZGVyLmJ1aWxkKHtcbiAgICAgICAgYWNsQ29udHJhY3RBZGRyZXNzOiBBQ0xfQUREUkVTUyxcbiAgICAgICAgZGVsZWdhdGVBZGRyZXNzOiBERUxFR0FURV9BRERSRVNTLFxuICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzc2VzOiBbVE9LRU5fQUREUkVTU10sXG4gICAgICAgIGV4cGlyeVRpbWVzdGFtcDogRVhQSVJZICsgODY0MDAsXG4gICAgICB9KTtcbiAgICAgIHIxLmRhdGEuc2hvdWxkLm5vdC5lcXVhbChyMi5kYXRhKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBkZXNjcmliZSgndmFsdWUgZmllbGQnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBhbHdheXMgYmUgXCIwXCIgZm9yIGFsbCBzY2VuYXJpb3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzY2VuYXJpb3MgPSBbXG4gICAgICAgIHsgdG9rZW5Db250cmFjdEFkZHJlc3NlczogW1RPS0VOX0FERFJFU1NdIH0sXG4gICAgICAgIHsgdG9rZW5Db250cmFjdEFkZHJlc3NlczogW1RPS0VOX0FERFJFU1MsIFRPS0VOX0FERFJFU1NfMl0gfSxcbiAgICAgICAgeyB0b2tlbkNvbnRyYWN0QWRkcmVzc2VzOiBbVE9LRU5fQUREUkVTU10sIGZvcndhcmRlckFkZHJlc3M6IEZPUldBUkRFUl9BRERSRVNTIH0sXG4gICAgICAgIHsgdG9rZW5Db250cmFjdEFkZHJlc3NlczogW1RPS0VOX0FERFJFU1MsIFRPS0VOX0FERFJFU1NfMl0sIGZvcndhcmRlckFkZHJlc3M6IEZPUldBUkRFUl9BRERSRVNTIH0sXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IGV4dHJhIG9mIHNjZW5hcmlvcykge1xuICAgICAgICBjb25zdCByZXEgPSBidWlsZGVyLmJ1aWxkKHtcbiAgICAgICAgICBhY2xDb250cmFjdEFkZHJlc3M6IEFDTF9BRERSRVNTLFxuICAgICAgICAgIGRlbGVnYXRlQWRkcmVzczogREVMRUdBVEVfQUREUkVTUyxcbiAgICAgICAgICBleHBpcnlUaW1lc3RhbXA6IEVYUElSWSxcbiAgICAgICAgICAuLi5leHRyYSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcS52YWx1ZS5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBkZXNjcmliZSgnZXJyb3IgaGFuZGxpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHRva2VuQ29udHJhY3RBZGRyZXNzZXMgaXMgZW1wdHknLCAoKSA9PiB7XG4gICAgICBzaG91bGQudGhyb3dzKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIGJ1aWxkZXIuYnVpbGQoe1xuICAgICAgICAgICAgYWNsQ29udHJhY3RBZGRyZXNzOiBBQ0xfQUREUkVTUyxcbiAgICAgICAgICAgIGRlbGVnYXRlQWRkcmVzczogREVMRUdBVEVfQUREUkVTUyxcbiAgICAgICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzZXM6IFtdLFxuICAgICAgICAgICAgZXhwaXJ5VGltZXN0YW1wOiBFWFBJUlksXG4gICAgICAgICAgfSksXG4gICAgICAgIC9EZWNyeXB0aW9uRGVsZWdhdGlvbkJ1aWxkZXI6IHRva2VuQ29udHJhY3RBZGRyZXNzZXMgbXVzdCBub3QgYmUgZW1wdHkvXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -3,4 +3,6 @@ export * from './token';
3
3
  export * from './transaction';
4
4
  export * from './coin';
5
5
  export * from './messages';
6
+ export * from './zamaUtils';
7
+ export * from './decryptionDelegationBuilder';
6
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../test/unit/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../test/unit/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,+BAA+B,CAAC"}
@@ -19,4 +19,6 @@ __exportStar(require("./token"), exports);
19
19
  __exportStar(require("./transaction"), exports);
20
20
  __exportStar(require("./coin"), exports);
21
21
  __exportStar(require("./messages"), exports);
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVEQUFxQztBQUNyQywwQ0FBd0I7QUFDeEIsZ0RBQThCO0FBQzlCLHlDQUF1QjtBQUN2Qiw2Q0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5leHBvcnQgKiBmcm9tICcuL3Rva2VuJztcbmV4cG9ydCAqIGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9jb2luJztcbmV4cG9ydCAqIGZyb20gJy4vbWVzc2FnZXMnO1xuIl19
22
+ __exportStar(require("./zamaUtils"), exports);
23
+ __exportStar(require("./decryptionDelegationBuilder"), exports);
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVEQUFxQztBQUNyQywwQ0FBd0I7QUFDeEIsZ0RBQThCO0FBQzlCLHlDQUF1QjtBQUN2Qiw2Q0FBMkI7QUFDM0IsOENBQTRCO0FBQzVCLGdFQUE4QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdG9rZW4nO1xuZXhwb3J0ICogZnJvbSAnLi90cmFuc2FjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2NvaW4nO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNzYWdlcyc7XG5leHBvcnQgKiBmcm9tICcuL3phbWFVdGlscyc7XG5leHBvcnQgKiBmcm9tICcuL2RlY3J5cHRpb25EZWxlZ2F0aW9uQnVpbGRlcic7XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { TransactionBuilder } from '../../../src';
2
+ export declare function runDecryptionDelegationTests(coinName: string, getBuilder: (coin: string) => TransactionBuilder): void;
3
+ //# sourceMappingURL=decryptionDelegation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decryptionDelegation.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/decryptionDelegation.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAgBlD,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,kBAAkB,GAAG,IAAI,CAqKrH"}