@bitgo-beta/sdk-coin-eth 4.4.1-beta.182 → 4.4.1-beta.1821

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 (119) hide show
  1. package/dist/src/erc20Token.d.ts +1 -1
  2. package/dist/src/erc20Token.d.ts.map +1 -1
  3. package/dist/src/erc20Token.js +49 -28
  4. package/dist/src/erc721Token.d.ts +60 -0
  5. package/dist/src/erc721Token.d.ts.map +1 -0
  6. package/dist/src/erc721Token.js +334 -0
  7. package/dist/src/erc7984Token.d.ts +94 -0
  8. package/dist/src/erc7984Token.d.ts.map +1 -0
  9. package/dist/src/erc7984Token.js +328 -0
  10. package/dist/src/eth.d.ts +10 -8
  11. package/dist/src/eth.d.ts.map +1 -1
  12. package/dist/src/eth.js +49 -35
  13. package/dist/src/index.d.ts +2 -0
  14. package/dist/src/index.d.ts.map +1 -1
  15. package/dist/src/index.js +8 -2
  16. package/dist/src/lib/index.d.ts +1 -0
  17. package/dist/src/lib/index.d.ts.map +1 -1
  18. package/dist/src/lib/index.js +7 -2
  19. package/dist/src/lib/messages/index.d.ts +3 -0
  20. package/dist/src/lib/messages/index.d.ts.map +1 -0
  21. package/dist/src/lib/messages/index.js +6 -0
  22. package/dist/src/lib/transactionBuilder.d.ts +10 -5
  23. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  24. package/dist/src/lib/transactionBuilder.js +17 -7
  25. package/dist/src/lib/transferBuilders/index.d.ts +2 -2
  26. package/dist/src/lib/transferBuilders/index.d.ts.map +1 -1
  27. package/dist/src/lib/transferBuilders/index.js +3 -2
  28. package/dist/src/register.d.ts +2 -0
  29. package/dist/src/register.d.ts.map +1 -1
  30. package/dist/src/register.js +36 -2
  31. package/dist/test/fixtures/eth.d.ts +39 -0
  32. package/dist/test/fixtures/eth.d.ts.map +1 -0
  33. package/dist/test/fixtures/eth.js +262 -0
  34. package/dist/test/resources/erc1155Abi.d.ts +40 -0
  35. package/dist/test/resources/erc1155Abi.d.ts.map +1 -0
  36. package/dist/test/resources/erc1155Abi.js +329 -0
  37. package/dist/test/resources/erc721Abi.d.ts +12 -0
  38. package/dist/test/resources/erc721Abi.d.ts.map +1 -0
  39. package/dist/test/resources/erc721Abi.js +34 -0
  40. package/dist/test/resources/eth.d.ts +51 -0
  41. package/dist/test/resources/eth.d.ts.map +1 -0
  42. package/dist/test/resources/eth.js +72 -0
  43. package/dist/test/resources/nftEncodings.d.ts +4 -0
  44. package/dist/test/resources/nftEncodings.d.ts.map +1 -0
  45. package/dist/test/resources/nftEncodings.js +7 -0
  46. package/dist/test/resources/walletSimpleAbi.d.ts +12 -0
  47. package/dist/test/resources/walletSimpleAbi.d.ts.map +1 -0
  48. package/dist/test/resources/walletSimpleAbi.js +44 -0
  49. package/dist/test/unit/erc7984Token.d.ts +2 -0
  50. package/dist/test/unit/erc7984Token.d.ts.map +1 -0
  51. package/dist/test/unit/erc7984Token.js +743 -0
  52. package/dist/test/unit/eth.d.ts +2 -0
  53. package/dist/test/unit/eth.d.ts.map +1 -0
  54. package/dist/test/unit/eth.js +2442 -0
  55. package/dist/test/unit/ethWallet.d.ts +2 -0
  56. package/dist/test/unit/ethWallet.d.ts.map +1 -0
  57. package/dist/test/unit/ethWallet.js +472 -0
  58. package/dist/test/unit/fixtures/ethMultiSigBackupKey.d.ts +4 -0
  59. package/dist/test/unit/fixtures/ethMultiSigBackupKey.d.ts.map +1 -0
  60. package/dist/test/unit/fixtures/ethMultiSigBackupKey.js +10 -0
  61. package/dist/test/unit/fixtures/ethTssBackupKey.d.ts +5 -0
  62. package/dist/test/unit/fixtures/ethTssBackupKey.d.ts.map +1 -0
  63. package/dist/test/unit/fixtures/ethTssBackupKey.js +25 -0
  64. package/dist/test/unit/getBuilder.d.ts +3 -0
  65. package/dist/test/unit/getBuilder.d.ts.map +1 -0
  66. package/dist/test/unit/getBuilder.js +10 -0
  67. package/dist/test/unit/keyPair.d.ts +2 -0
  68. package/dist/test/unit/keyPair.d.ts.map +1 -0
  69. package/dist/test/unit/keyPair.js +175 -0
  70. package/dist/test/unit/register.d.ts +2 -0
  71. package/dist/test/unit/register.d.ts.map +1 -0
  72. package/dist/test/unit/register.js +73 -0
  73. package/dist/test/unit/transaction.d.ts +2 -0
  74. package/dist/test/unit/transaction.d.ts.map +1 -0
  75. package/dist/test/unit/transaction.js +117 -0
  76. package/dist/test/unit/transactionBuilder/addressInitialization.d.ts +2 -0
  77. package/dist/test/unit/transactionBuilder/addressInitialization.d.ts.map +1 -0
  78. package/dist/test/unit/transactionBuilder/addressInitialization.js +101 -0
  79. package/dist/test/unit/transactionBuilder/contractCall.d.ts +2 -0
  80. package/dist/test/unit/transactionBuilder/contractCall.d.ts.map +1 -0
  81. package/dist/test/unit/transactionBuilder/contractCall.js +101 -0
  82. package/dist/test/unit/transactionBuilder/decryptionDelegation.d.ts +2 -0
  83. package/dist/test/unit/transactionBuilder/decryptionDelegation.d.ts.map +1 -0
  84. package/dist/test/unit/transactionBuilder/decryptionDelegation.js +59 -0
  85. package/dist/test/unit/transactionBuilder/decryptionDelegationTxBuilder.d.ts +2 -0
  86. package/dist/test/unit/transactionBuilder/decryptionDelegationTxBuilder.d.ts.map +1 -0
  87. package/dist/test/unit/transactionBuilder/decryptionDelegationTxBuilder.js +136 -0
  88. package/dist/test/unit/transactionBuilder/flushCoins.d.ts +2 -0
  89. package/dist/test/unit/transactionBuilder/flushCoins.d.ts.map +1 -0
  90. package/dist/test/unit/transactionBuilder/flushCoins.js +133 -0
  91. package/dist/test/unit/transactionBuilder/flushTokens.d.ts +2 -0
  92. package/dist/test/unit/transactionBuilder/flushTokens.d.ts.map +1 -0
  93. package/dist/test/unit/transactionBuilder/flushTokens.js +281 -0
  94. package/dist/test/unit/transactionBuilder/send.d.ts +2 -0
  95. package/dist/test/unit/transactionBuilder/send.d.ts.map +1 -0
  96. package/dist/test/unit/transactionBuilder/send.js +331 -0
  97. package/dist/test/unit/transactionBuilder/sendERC7984Token.d.ts +2 -0
  98. package/dist/test/unit/transactionBuilder/sendERC7984Token.d.ts.map +1 -0
  99. package/dist/test/unit/transactionBuilder/sendERC7984Token.js +361 -0
  100. package/dist/test/unit/transactionBuilder/sendNFT.d.ts +2 -0
  101. package/dist/test/unit/transactionBuilder/sendNFT.d.ts.map +1 -0
  102. package/dist/test/unit/transactionBuilder/sendNFT.js +295 -0
  103. package/dist/test/unit/transactionBuilder/singleSigSend.d.ts +2 -0
  104. package/dist/test/unit/transactionBuilder/singleSigSend.d.ts.map +1 -0
  105. package/dist/test/unit/transactionBuilder/singleSigSend.js +196 -0
  106. package/dist/test/unit/transactionBuilder/walletInitialization.d.ts +2 -0
  107. package/dist/test/unit/transactionBuilder/walletInitialization.d.ts.map +1 -0
  108. package/dist/test/unit/transactionBuilder/walletInitialization.js +436 -0
  109. package/dist/test/unit/transferBuilder.d.ts +2 -0
  110. package/dist/test/unit/transferBuilder.d.ts.map +1 -0
  111. package/dist/test/unit/transferBuilder.js +124 -0
  112. package/dist/test/unit/utils.d.ts +2 -0
  113. package/dist/test/unit/utils.d.ts.map +1 -0
  114. package/dist/test/unit/utils.js +74 -0
  115. package/dist/tsconfig.tsbuildinfo +1 -0
  116. package/package.json +17 -13
  117. package/.eslintignore +0 -5
  118. package/.mocharc.yml +0 -8
  119. package/CHANGELOG.md +0 -609
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=contractCall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contractCall.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/contractCall.ts"],"names":[],"mappings":""}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const should_1 = __importDefault(require("should"));
40
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
41
+ const testData = __importStar(require("../../resources/eth"));
42
+ const getBuilder_1 = require("../getBuilder");
43
+ describe('Eth contract call transaction builder', () => {
44
+ let txBuilder;
45
+ let contractAddress;
46
+ const rawTx = '0xf889398506fc23ac0083be8c72947fc37878dca69c9ac48397500279305f798b157280a42bf90baacecf367fdc11132a0ccfeb91692cb31ff126083c353459e0572a0b34c48e952377a0206c902a536c5327ea2861965538963b6180f7d13e36ffd4abb7aa9628f72eb9a05ee209b7b02a2ea3fbf6033701d6e959dfc1e78452235245cf2b8d3f9110c6af';
47
+ beforeEach(() => {
48
+ contractAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
49
+ // testData.KEYPAIR_PRV.getKeys().prv as string;
50
+ txBuilder = (0, getBuilder_1.getBuilder)('teth');
51
+ txBuilder.type(sdk_core_1.TransactionType.ContractCall);
52
+ txBuilder.fee({
53
+ fee: '30000000000',
54
+ gasLimit: '12487794',
55
+ });
56
+ txBuilder.counter(57);
57
+ });
58
+ it('should build a contract call type transaction', async () => {
59
+ txBuilder.contract('0x7Fc37878DCa69C9AC48397500279305F798b1572');
60
+ txBuilder.data('0x2bf90baacecf367fdc11132a0ccfeb91692cb31ff126083c353459e0572a0b34c48e9523');
61
+ txBuilder.sign({ key: '064A3BF8B08A3426E8A719AE5E4115228A75E7A1449CB1B734E51C7DC8A867BE' });
62
+ const tx = await txBuilder.build();
63
+ should_1.default.exist(tx);
64
+ should_1.default.equal(tx.toBroadcastFormat(), rawTx);
65
+ });
66
+ it('should deserialize an serialize raw transaction', async () => {
67
+ txBuilder.from(rawTx);
68
+ const tx = await txBuilder.build();
69
+ should_1.default.equal(tx.toBroadcastFormat(), rawTx);
70
+ });
71
+ it('should build a contract call type transaction, deserialize it, sign it and serialize it again', async () => {
72
+ txBuilder.contract('0x7Fc37878DCa69C9AC48397500279305F798b1572');
73
+ txBuilder.data('0x2bf90baacecf367fdc11132a0ccfeb91692cb31ff126083c353459e0572a0b34c48e9523');
74
+ const txUnsigned = await txBuilder.build();
75
+ const builderFrom = (0, getBuilder_1.getBuilder)('teth');
76
+ builderFrom.from(txUnsigned.toBroadcastFormat());
77
+ builderFrom.sign({ key: '064A3BF8B08A3426E8A719AE5E4115228A75E7A1449CB1B734E51C7DC8A867BE' });
78
+ const tx = await builderFrom.build();
79
+ should_1.default.equal(tx.toBroadcastFormat(), rawTx);
80
+ should_1.default.equal(txUnsigned.toJson().v, '0x77');
81
+ });
82
+ it('should thrown if contract or data is missing', async () => {
83
+ await txBuilder.build().should.be.rejectedWith('Invalid transaction: missing contract address');
84
+ txBuilder.contract(contractAddress);
85
+ await txBuilder.build().should.be.rejectedWith('Invalid transaction: missing contract call data field');
86
+ });
87
+ it('should properly build tx for eth2 staking staking deposit', async () => {
88
+ txBuilder.contract(testData.ETH2_STAKING_CONTRACT_ADDRESS);
89
+ txBuilder.data(testData.ETH2_STAKING_CONTRACT_DATA);
90
+ txBuilder.sign({ key: '064A3BF8B08A3426E8A719AE5E4115228A75E7A1449CB1B734E51C7DC8A867BE' });
91
+ const tx = await txBuilder.build();
92
+ should_1.default.exist(tx);
93
+ const txData = tx.toJson();
94
+ should_1.default.equal(txData.to, testData.ETH2_STAKING_CONTRACT_ADDRESS);
95
+ should_1.default.equal(txData.from, '0x14fc903e3025a3aad66fad7a7862b1ec232f8df2');
96
+ should_1.default.equal(txData.data, testData.ETH2_STAKING_CONTRACT_DATA);
97
+ should_1.default.equal(txData.nonce, 57);
98
+ should_1.default.equal(txData.chainId, '0x2a');
99
+ });
100
+ });
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3RDYWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci9jb250cmFjdENhbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFFNUIsbURBQXVEO0FBQ3ZELDhEQUFnRDtBQUNoRCw4Q0FBMkM7QUFFM0MsUUFBUSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtJQUNyRCxJQUFJLFNBQVMsQ0FBQztJQUNkLElBQUksZUFBZSxDQUFDO0lBQ3BCLE1BQU0sS0FBSyxHQUNULDBSQUEwUixDQUFDO0lBRTdSLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxlQUFlLEdBQUcsNENBQTRDLENBQUM7UUFDL0QsZ0RBQWdEO1FBQ2hELFNBQVMsR0FBRyxJQUFBLHVCQUFVLEVBQUMsTUFBTSxDQUF1QixDQUFDO1FBQ3JELFNBQVMsQ0FBQyxJQUFJLENBQUMsMEJBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3QyxTQUFTLENBQUMsR0FBRyxDQUFDO1lBQ1osR0FBRyxFQUFFLGFBQWE7WUFDbEIsUUFBUSxFQUFFLFVBQVU7U0FDckIsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4QixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUM3RCxTQUFTLENBQUMsUUFBUSxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDakUsU0FBUyxDQUFDLElBQUksQ0FBQyw0RUFBNEUsQ0FBQyxDQUFDO1FBQzdGLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsa0VBQWtFLEVBQUUsQ0FBQyxDQUFDO1FBQzVGLE1BQU0sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFD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SyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZXRoJztcbmltcG9ydCB7IGdldEJ1aWxkZXIgfSBmcm9tICcuLi9nZXRCdWlsZGVyJztcblxuZGVzY3JpYmUoJ0V0aCBjb250cmFjdCBjYWxsIHRyYW5zYWN0aW9uIGJ1aWxkZXInLCAoKSA9PiB7XG4gIGxldCB0eEJ1aWxkZXI7XG4gIGxldCBjb250cmFjdEFkZHJlc3M7XG4gIGNvbnN0IHJhd1R4ID1cbiAgICAnMHhmODg5Mzk4NTA2ZmMyM2FjMDA4M2JlOGM3Mjk0N2ZjMzc4NzhkY2E2OWM5YWM0ODM5NzUwMDI3OTMwNWY3OThiMTU3MjgwYTQyYmY5MGJhYWNlY2YzNjdmZGMxMTEzMmEwY2NmZWI5MTY5MmNiMzFmZjEyNjA4M2MzNTM0NTllMDU3MmEwYjM0YzQ4ZTk1MjM3N2EwMjA2YzkwMmE1MzZjNTMyN2VhMjg2MTk2NTUzODk2M2I2MTgwZjdkMTNlMzZmZmQ0YWJiN2FhOTYyOGY3MmViOWEwNWVlMjA5YjdiMDJhMmVhM2ZiZjYwMzM3MDFkNmU5NTlkZmMxZTc4NDUyMjM1MjQ1Y2YyYjhkM2Y5MTEwYzZhZic7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgY29udHJhY3RBZGRyZXNzID0gJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MSc7XG4gICAgLy8gdGVzdERhdGEuS0VZUEFJUl9QUlYuZ2V0S2V5cygpLnBydiBhcyBzdHJpbmc7XG4gICAgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcigndGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzMwMDAwMDAwMDAwJyxcbiAgICAgIGdhc0xpbWl0OiAnMTI0ODc3OTQnLFxuICAgIH0pO1xuICAgIHR4QnVpbGRlci5jb3VudGVyKDU3KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBidWlsZCBhIGNvbnRyYWN0IGNhbGwgdHlwZSB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3QoJzB4N0ZjMzc4NzhEQ2E2OUM5QUM0ODM5NzUwMDI3OTMwNUY3OThiMTU3MicpO1xuICAgIHR4QnVpbGRlci5kYXRhKCcweDJiZjkwYmFhY2VjZjM2N2ZkYzExMTMyYTBjY2ZlYjkxNjkyY2IzMWZmMTI2MDgzYzM1MzQ1OWUwNTcyYTBiMzRjNDhlOTUyMycpO1xuICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiAnMDY0QTNCRjhCMDhBMzQyNkU4QTcxOUFFNUU0MTE1MjI4QTc1RTdBMTQ0OUNCMUI3MzRFNTFDN0RDOEE4NjdCRScgfSk7XG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBzaG91bGQuZXhpc3QodHgpO1xuICAgIHNob3VsZC5lcXVhbCh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCByYXdUeCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZGVzZXJpYWxpemUgYW4gc2VyaWFsaXplIHJhdyB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICB0eEJ1aWxkZXIuZnJvbShyYXdUeCk7XG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgcmF3VHgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGJ1aWxkIGEgY29udHJhY3QgY2FsbCB0eXBlIHRyYW5zYWN0aW9uLCBkZXNlcmlhbGl6ZSBpdCwgc2lnbiBpdCBhbmQgc2VyaWFsaXplIGl0IGFnYWluJywgYXN5bmMgKCkgPT4ge1xuICAgIHR4QnVpbGRlci5jb250cmFjdCgnMHg3RmMzNzg3OERDYTY5QzlBQzQ4Mzk3NTAwMjc5MzA1Rjc5OGIxNTcyJyk7XG4gICAgdHhCdWlsZGVyLmRhdGEoJzB4MmJmOTBiYWFjZWNmMzY3ZmRjMTExMzJhMGNjZmViOTE2OTJjYjMxZmYxMjYwODNjMzUzNDU5ZTA1NzJhMGIzNGM0OGU5NTIzJyk7XG4gICAgY29uc3QgdHhVbnNpZ25lZCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgY29uc3QgYnVpbGRlckZyb20gPSBnZXRCdWlsZGVyKCd0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgIGJ1aWxkZXJGcm9tLmZyb20odHhVbnNpZ25lZC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICBidWlsZGVyRnJvbS5zaWduKHsga2V5OiAnMDY0QTNCRjhCMDhBMzQyNkU4QTcxOUFFNUU0MTE1MjI4QTc1RTdBMTQ0OUNCMUI3MzRFNTFDN0RDOEE4NjdCRScgfSk7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyRnJvbS5idWlsZCgpO1xuXG4gICAgc2hvdWxkLmVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHJhd1R4KTtcbiAgICBzaG91bGQuZXF1YWwodHhVbnNpZ25lZC50b0pzb24oKS52LCAnMHg3NycpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93biBpZiBjb250cmFjdCBvciBkYXRhIGlzIG1pc3NpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBjb250cmFjdCBhZGRyZXNzJyk7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0KGNvbnRyYWN0QWRkcmVzcyk7XG4gICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBjb250cmFjdCBjYWxsIGRhdGEgZmllbGQnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwcm9wZXJseSBidWlsZCB0eCBmb3IgZXRoMiBzdGFraW5nIHN0YWtpbmcgZGVwb3NpdCcsIGFzeW5jICgpID0+IHtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3QodGVzdERhdGEuRVRIMl9TVEFLSU5HX0NPTlRSQUNUX0FERFJFU1MpO1xuICAgIHR4QnVpbGRlci5kYXRhKHRlc3REYXRhLkVUSDJfU1RBS0lOR19DT05UUkFDVF9EQVRBKTtcbiAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogJzA2NEEzQkY4QjA4QTM0MjZFOEE3MTlBRTVFNDExNTIyOEE3NUU3QTE0NDlDQjFCNzM0RTUxQzdEQzhBODY3QkUnIH0pO1xuXG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBzaG91bGQuZXhpc3QodHgpO1xuXG4gICAgY29uc3QgdHhEYXRhID0gdHgudG9Kc29uKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4RGF0YS50bywgdGVzdERhdGEuRVRIMl9TVEFLSU5HX0NPTlRSQUNUX0FERFJFU1MpO1xuICAgIHNob3VsZC5lcXVhbCh0eERhdGEuZnJvbSwgJzB4MTRmYzkwM2UzMDI1YTNhYWQ2NmZhZDdhNzg2MmIxZWMyMzJmOGRmMicpO1xuICAgIHNob3VsZC5lcXVhbCh0eERhdGEuZGF0YSwgdGVzdERhdGEuRVRIMl9TVEFLSU5HX0NPTlRSQUNUX0RBVEEpO1xuICAgIHNob3VsZC5lcXVhbCh0eERhdGEubm9uY2UsIDU3KTtcbiAgICBzaG91bGQuZXF1YWwodHhEYXRhLmNoYWluSWQsICcweDJhJyk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=decryptionDelegation.d.ts.map
@@ -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-beta/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-beta/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-beta/sdk-core");
17
+ const abstract_eth_1 = require("@bitgo-beta/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjcnlwdGlvbkRlbGVnYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL2RlY3J5cHRpb25EZWxlZ2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7Ozs7O0dBUUc7QUFDSCxvREFBNEI7QUFDNUIsbURBQXVEO0FBQ3ZELDJEQUtrQztBQUVsQyxNQUFNLGdCQUFnQixHQUFHLDRDQUE0QyxDQUFDO0FBQ3RFLE1BQU0sYUFBYSxHQUFHLDRDQUE0QyxDQUFDO0FBQ25FLE1BQU0sZUFBZSxHQUFHLDRDQUE0QyxDQUFDO0FBQ3JFLE1BQU0sV0FBVyxHQUFHLDRDQUE0QyxDQUFDO0FBQ2pFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFFM0QsUUFBUSxDQUFDLG1EQUFtRCxFQUFFLEdBQUcsRUFBRTtJQUNqRSxFQUFFLENBQUMsNEVBQTRFLEVBQUUsR0FBRyxFQUFFO1FBQ3BGLGdCQUFNLENBQUMsS0FBSyxDQUFDLDBCQUFlLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNuRCxDQUFDLE9BQU8sMEJBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckUsMEJBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQywwQkFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BGLDBCQUFlLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsMEJBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RSwwQkFBZSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLDBC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dGFuZGFsb25lIGNhbGxkYXRhIHRlc3RzIGZvciBaYW1hIEVSQy03OTg0IGRlY3J5cHRpb24gZGVsZWdhdGlvbi5cbiAqXG4gKiBaYW1hIGhlbHBlcnMgYXJlIGltcG9ydGVkIGZyb20gdGhlIEBiaXRnby1iZXRhL2Fic3RyYWN0LWV0aCBwdWJsaWMgcGFja2FnZSBlbnRyeSAocmUtZXhwb3J0c1xuICogLi9saWIgaW5jbHVkaW5nIHphbWFVdGlscykuIFRyYW5zYWN0aW9uVHlwZSBpcyBpbXBvcnRlZCBmcm9tIHRoZSBzZGstY29yZSBlbnVtIGRpc3QgcGF0aFxuICogdG8gYXZvaWQgbG9hZGluZyB0aGUgZnVsbCBAYml0Z28tYmV0YS9zZGstY29yZSBiYXJyZWwgKHByZS1leGlzdGluZyBpby10cyBpc3N1ZSBpbiB0aGUgVFNTIGdyYXBoKS5cbiAqXG4gKiBUcmFuc2FjdGlvbkJ1aWxkZXIgYnVpbGQvcmVidWlsZCB0ZXN0cyBsaXZlIGluIGRlY3J5cHRpb25EZWxlZ2F0aW9uVHhCdWlsZGVyLnRzLlxuICovXG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQge1xuICBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YSxcbiAgY2FsbEZyb21QYXJlbnRNZXRob2RJZCxcbiAgYWNsTXVsdGljYWxsTWV0aG9kSWQsXG4gIHdyYXBJbkNhbGxGcm9tUGFyZW50LFxufSBmcm9tICdAYml0Z28tYmV0YS9hYnN0cmFjdC1ldGgnO1xuXG5jb25zdCBERUxFR0FURV9BRERSRVNTID0gJzB4MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSc7XG5jb25zdCBUT0tFTl9BRERSRVNTID0gJzB4OTQxNjcxMjkxNzJBMzVhYjA5M0I0NGI4Yjk2MjEzRERiYzNjRDM4Nyc7XG5jb25zdCBUT0tFTl9BRERSRVNTXzIgPSAnMHg0RTdCMDZENzg5NjU1OTRlQjVFRjU0MTRjMzU3Y2EyMUUxNTU0NDkxJztcbmNvbnN0IEFDTF9BRERSRVNTID0gJzB4ZjBGZmRjOTNiN0UxODZiQzJmOENCM2RBQTc1RDg2ZDE5MzBBNDMzRCc7XG5jb25zdCBFWFBJUlkgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSArIDM2NSAqIDg2NDAwO1xuXG5kZXNjcmliZSgnRGVjcnlwdGlvbkRlbGVnYXRpb24gVHJhbnNhY3Rpb25UeXBlIChzdGFuZGFsb25lKScsICgpID0+IHtcbiAgaXQoJ3Nob3VsZCBiZSBhIHZhbGlkIG51bWVyaWMgdHlwZSBkaXN0aW5jdCBmcm9tIENvbnRyYWN0Q2FsbC9TZW5kL0ZsdXNoVG9rZW5zJywgKCkgPT4ge1xuICAgIHNob3VsZC5leGlzdChUcmFuc2FjdGlvblR5cGUuRGVjcnlwdGlvbkRlbGVnYXRpb24pO1xuICAgICh0eXBlb2YgVHJhbnNhY3Rpb25UeXBlLkRlY3J5cHRpb25EZWxlZ2F0aW9uKS5zaG91bGQuZXF1YWwoJ251bWJlcicpO1xuICAgIFRyYW5zYWN0aW9uVHlwZS5EZWNyeXB0aW9uRGVsZWdhdGlvbi5zaG91bGQubm90LmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICAgIFRyYW5zYWN0aW9uVHlwZS5EZWNyeXB0aW9uRGVsZWdhdGlvbi5zaG91bGQubm90LmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICBUcmFuc2FjdGlvblR5cGUuRGVjcnlwdGlvbkRlbGVnYXRpb24uc2hvdWxkLm5vdC5lcXVhbChUcmFuc2FjdGlvblR5cGUuRmx1c2hUb2tlbnMpO1xuICAgIFRyYW5zYWN0aW9uVHlwZS5EZWNyeXB0aW9uRGVsZWdhdGlvbi5zaG91bGQubm90LmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzcyMSk7XG4gICAgVHJhbnNhY3Rpb25UeXBlLkRlY3J5cHRpb25EZWxlZ2F0aW9uLnNob3VsZC5ub3QuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDMTE1NSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdEZWNyeXB0aW9uRGVsZWdhdGlvbiBjYWxsZGF0YSBzZWxlY3RvcnMgKHN0YW5kYWxvbmUpJywgKCkgPT4ge1xuICBpdCgnc2luZ2xlLXRva2VuIGNhbGxkYXRhIHVzZXMgbXVsdGljYWxsIHNlbGVjdG9yIDB4YWM5NjUwZDgnLCAoKSA9PiB7XG4gICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBbVE9LRU5fQUREUkVTU10sIEVYUElSWSk7XG4gICAgY2FsbGRhdGEuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbChhY2xNdWx0aWNhbGxNZXRob2RJZCk7XG4gICAgY2FsbGRhdGEuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbCgnMHhhYzk2NTBkOCcpO1xuICB9KTtcblxuICBpdCgnbXVsdGktdG9rZW4gY2FsbGRhdGEgdXNlcyBtdWx0aWNhbGwgc2VsZWN0b3IgMHhhYzk2NTBkOCcsICgpID0+IHtcbiAgICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFtUT0tFTl9BRERSRVNTLCBUT0tFTl9BRERSRVNTXzJdLCBFWFBJUlkpO1xuICAgIGNhbGxkYXRhLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoYWNsTXVsdGljYWxsTWV0aG9kSWQpO1xuICB9KTtcblxuICBpdCgnZm9yd2FyZGVyLXdyYXBwZWQgY2FsbGRhdGEgdXNlcyBjYWxsRnJvbVBhcmVudCBzZWxlY3RvciAweDc3ZTYwYjM1JywgKCkgPT4ge1xuICAgIGNvbnN0IGlubmVyID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW1RPS0VOX0FERFJFU1NdLCBFWFBJUlkpO1xuICAgIGNvbnN0IHdyYXBwZWQgPSB3cmFwSW5DYWxsRnJvbVBhcmVudChBQ0xfQUREUkVTUywgaW5uZXIpO1xuICAgIHdyYXBwZWQuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbChjYWxsRnJvbVBhcmVudE1ldGhvZElkKTtcbiAgICB3cmFwcGVkLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoJzB4NzdlNjBiMzUnKTtcbiAgfSk7XG5cbiAgaXQoJ2RlbGVnYXRlIGFkZHJlc3MgaXMgQUJJLWVuY29kZWQgaW4gY2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBbVE9LRU5fQUREUkVTU10sIEVYUElSWSk7XG4gICAgY2FsbGRhdGEuc2hvdWxkLmNvbnRhaW5FcWwoREVMRUdBVEVfQUREUkVTUy5zbGljZSgyKS50b0xvd2VyQ2FzZSgpLnBhZFN0YXJ0KDY0LCAnMCcpKTtcbiAgfSk7XG5cbiAgaXQoJ3Rva2VuIGFkZHJlc3MgaXMgQUJJLWVuY29kZWQgaW4gY2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBbVE9LRU5fQUREUkVTU10sIEVYUElSWSk7XG4gICAgY2FsbGRhdGEuc2hvdWxkLmNvbnRhaW5FcWwoVE9LRU5fQUREUkVTUy5zbGljZSgyKS50b0xvd2VyQ2FzZSgpLnBhZFN0YXJ0KDY0LCAnMCcpKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=decryptionDelegationTxBuilder.d.ts.map
@@ -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-beta/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-beta/sdk-core");
21
+ const abstract_eth_1 = require("@bitgo-beta/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjcnlwdGlvbkRlbGVnYXRpb25UeEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL2RlY3J5cHRpb25EZWxlZ2F0aW9uVHhCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsb0RBQTRCO0FBQzVCLG1EQUF1RDtBQUV2RCwyREFLa0M7QUFDbEMsOENBQTJDO0FBRTNDLE1BQU0sV0FBVyxHQUFHLDRDQUE0QyxDQUFDO0FBQ2pFLE1BQU0sZ0JBQWdCLEdBQUcsNENBQTRDLENBQUM7QUFDdEUsTUFBTSxhQUFhLEdBQUcsNENBQTRDLENBQUM7QUFDbkUsTUFBTSxlQUFlLEdBQUcsNENBQTRDLENBQUM7QUFDckUsTUFBTSxpQkFBaUIsR0FBRyw0Q0FBNEMsQ0FBQztBQUN2RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBRTNELFFBQVEsQ0FBQyx5Q0FBeUMsRUFBRSxHQUFHLEVBQUU7SUFDdkQsSUFBSSxTQUE2QixDQUFDO0lBRWxDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxTQUFTLEdBQUcsSUFBQSx1QkFBVSxFQUFDLE9BQU8sQ0FBdUIsQ0FBQztRQUN0RCxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN6RCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBRUgsK0VBQStFO0lBRS9FLEVBQUUsQ0FBQyx1RUFBdUUsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNyRixNQUFNLFFBQVEsR0FBRyxJQUFBLCtDQUFnQyxFQUFDLGdC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QVksQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0lBQ2xHLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2hGLFNBQVMsQ0FBQyxJQUFJLENBQUMsMEJBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3JELFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEMsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsdURBQXVELENBQUMsQ0FBQztJQUMxRyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywrRUFBK0UsRUFBRSxHQUFHLEVBQUU7UUFDdkYsTUFBTSxRQUFRLEdBQUcsSUFBQSwrQ0FBZ0MsRUFBQyxnQkFBZ0IsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdGLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsMERBQTBELENBQUMsQ0FBQztJQUM1RyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUcmFuc2FjdGlvbkJ1aWxkZXIgYnVpbGQgYW5kIHJlYnVpbGQgdGVzdHMgZm9yIFphbWEgRVJDLTc5ODQgZGVjcnlwdGlvbiBkZWxlZ2F0aW9uLlxuICpcbiAqIFBhdHRlcm4gbWlycm9ycyBjb250cmFjdENhbGwudHM6IGltcG9ydHMgVHJhbnNhY3Rpb25UeXBlIGZyb20gQGJpdGdvLWJldGEvc2RrLWNvcmUgYW5kXG4gKiBUcmFuc2FjdGlvbkJ1aWxkZXIgZnJvbSAnLi4vLi4vLi4vc3JjJy4gVGhlc2UgYXJlIHN1YmplY3QgdG8gdGhlIHNhbWUgcHJlLWV4aXN0aW5nXG4gKiBpby10cyBjcmFzaCAoc2RrLWNvcmUvc3JjL2JpdGdvL3V0aWxzL3Rzcy9lZGRzYS90eXBlc0VkZHNhTVBDdjIpIHRoYXQgYWZmZWN0cyBBTExcbiAqIFRyYW5zYWN0aW9uQnVpbGRlciB0ZXN0cyBpbiB0aGlzIG1vbm9yZXBvLiBUaGV5IHJ1biBpbiB0aGUgZnVsbCBDSSB0ZXN0IHN1aXRlLlxuICpcbiAqIFRocmVlIGZsb3dzIHZlcmlmaWVkOlxuICogICBGbG93IDEg4oCUIHJvb3Qgd2FsbGV0OiBDb250cmFjdENhbGwgKyBtdWx0aWNhbGwgZGF0YSDihpIgYnVpbGQg4oaSIGZyb20oaGV4KSDihpIgcmVidWlsZFxuICogICBGbG93IDIg4oCUIGV4cGxpY2l0IERlY3J5cHRpb25EZWxlZ2F0aW9uIHR5cGUg4oaSIGJ1aWxkIOKGkiBmcm9tKGhleCkg4oaSIHJlYnVpbGRcbiAqICAgRmxvdyAzIOKAlCBmb3J3YXJkZXI6IENvbnRyYWN0Q2FsbCArIGNhbGxGcm9tUGFyZW50IGRhdGEg4oaSIGJ1aWxkIOKGkiBmcm9tKGhleCkg4oaSIHJlYnVpbGRcbiAqL1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7XG4gIGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhLFxuICB3cmFwSW5DYWxsRnJvbVBhcmVudCxcbiAgYWNsTXVsdGljYWxsTWV0aG9kSWQsXG4gIGNhbGxGcm9tUGFyZW50TWV0aG9kSWQsXG59IGZyb20gJ0BiaXRnby1iZXRhL2Fic3RyYWN0LWV0aCc7XG5pbXBvcnQgeyBnZXRCdWlsZGVyIH0gZnJvbSAnLi4vZ2V0QnVpbGRlcic7XG5cbmNvbnN0IEFDTF9BRERSRVNTID0gJzB4ZjBGZmRjOTNiN0UxODZiQzJmOENCM2RBQTc1RDg2ZDE5MzBBNDMzRCc7XG5jb25zdCBERUxFR0FURV9BRERSRVNTID0gJzB4MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSc7XG5jb25zdCBUT0tFTl9BRERSRVNTID0gJzB4OTQxNjcxMjkxNzJBMzVhYjA5M0I0NGI4Yjk2MjEzRERiYzNjRDM4Nyc7XG5jb25zdCBUT0tFTl9BRERSRVNTXzIgPSAnMHg0RTdCMDZENzg5NjU1OTRlQjVFRjU0MTRjMzU3Y2EyMUUxNTU0NDkxJztcbmNvbnN0IEZPUldBUkRFUl9BRERSRVNTID0gJzB4RGVBRGJlZWZkRUFkYmVlZmRFYWRiRUVGZGVhZGJlRUZkRWFEYmVlRic7XG5jb25zdCBFWFBJUlkgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSArIDM2NSAqIDg2NDAwO1xuXG5kZXNjcmliZSgnRGVjcnlwdGlvbkRlbGVnYXRpb24gVHJhbnNhY3Rpb25CdWlsZGVyJywgKCkgPT4ge1xuICBsZXQgdHhCdWlsZGVyOiBUcmFuc2FjdGlvbkJ1aWxkZXI7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcignaHRldGgnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgdHhCdWlsZGVyLmZlZSh7IGZlZTogJzEwMDAwMDAwMDAnLCBnYXNMaW1pdDogJzIwMDAwMCcgfSk7XG4gICAgdHhCdWlsZGVyLmNvdW50ZXIoMSk7XG4gIH0pO1xuXG4gIC8vIC0tLS0gRmxvdyAxOiByb290IHdhbGxldCwgQ29udHJhY3RDYWxsIHR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBpdCgnRmxvdyAxOiBzaG91bGQgYnVpbGQgYSBDb250cmFjdENhbGwgdHggd2l0aCBtdWx0aWNhbGwgZGVsZWdhdGlvbiBkYXRhJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW1RPS0VOX0FERFJFU1MsIFRPS0VOX0FERFJFU1NfMl0sIEVYUElSWSk7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCk7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0KEFDTF9BRERSRVNTKTtcbiAgICB0eEJ1aWxkZXIuZGF0YShjYWxsZGF0YSk7XG5cbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IGpzb24gPSB0eC50b0pzb24oKTtcblxuICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICBqc29uLnRvLnNob3VsZC5lcXVhbChBQ0xfQUREUkVTUy50b0xvd2VyQ2FzZSgpKTtcbiAgICBqc29uLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aChhY2xNdWx0aWNhbGxNZXRob2RJZCk7XG4gICAganNvbi52YWx1ZS5zaG91bGQuZXF1YWwoJzAnKTtcbiAgfSk7XG5cbiAgaXQoJ0Zsb3cgMTogc2hvdWxkIHJlYnVpbGQgZnJvbSBoZXgg4oCUIG11bHRpY2FsbCBkZWxlZ2F0aW9uIHJvdW5kLXRyaXAnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBbVE9LRU5fQUREUkVTUywgVE9LRU5fQUREUkVTU18yXSwgRVhQSVJZKTtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3QoQUNMX0FERFJFU1MpO1xuICAgIHR4QnVpbGRlci5kYXRhKGNhbGxkYXRhKTtcblxuICAgIGNvbnN0IG9yaWdpbmFsVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCByYXdIZXggPSBvcmlnaW5hbFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICBjb25zdCByZWJ1aWx0QnVpbGRlciA9IGdldEJ1aWxkZXIoJ2h0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgIHJlYnVpbHRCdWlsZGVyLmZyb20ocmF3SGV4KTtcbiAgICBjb25zdCByZWJ1aWx0VHggPSBhd2FpdCByZWJ1aWx0QnVpbGRlci5idWlsZCgpO1xuXG4gICAgc2hvdWxkLmVxdWFsKHJlYnVpbHRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLCByYXdIZXgpO1xuICAgIHJlYnVpbHRUeC50b0pzb24oKS50by5zaG91bGQuZXF1YWwoQUNMX0FERFJFU1MudG9Mb3dlckNhc2UoKSk7XG4gICAgcmVidWlsdFR4LnRvSnNvbigpLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aChhY2xNdWx0aWNhbGxNZXRob2RJZCk7XG4gIH0pO1xuXG4gIC8vIC0tLS0gRmxvdyAyOiBleHBsaWNpdCBEZWNyeXB0aW9uRGVsZWdhdGlvbiB0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGl0KCdGbG93IDI6IHNob3VsZCBidWlsZCB3aXRoIGV4cGxpY2l0IERlY3J5cHRpb25EZWxlZ2F0aW9uIHR5cGUnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBbVE9LRU5fQUREUkVTU10sIEVYUElSWSk7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkRlY3J5cHRpb25EZWxlZ2F0aW9uKTtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3QoQUNMX0FERFJFU1MpO1xuICAgIHR4QnVpbGRlci5kYXRhKGNhbGxkYXRhKTtcblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QganNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICAgIGpzb24udG8uc2hvdWxkLmVxdWFsKEFDTF9BRERSRVNTLnRvTG93ZXJDYXNlKCkpO1xuICAgIGpzb24uZGF0YS5zaG91bGQuc3RhcnRXaXRoKGFjbE11bHRpY2FsbE1ldGhvZElkKTtcbiAgICBqc29uLnZhbHVlLnNob3VsZC5lcXVhbCgnMCcpO1xuICB9KTtcblxuICBpdCgnRmxvdyAyOiBzaG91bGQgcmVidWlsZCBmcm9tIGhleCDigJQgRGVjcnlwdGlvbkRlbGVnYXRpb24gdHlwZSByb3VuZC10cmlwJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW1RPS0VOX0FERFJFU1NdLCBFWFBJUlkpO1xuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5EZWNyeXB0aW9uRGVsZWdhdGlvbik7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0KEFDTF9BRERSRVNTKTtcbiAgICB0eEJ1aWxkZXIuZGF0YShjYWxsZGF0YSk7XG5cbiAgICBjb25zdCBvcmlnaW5hbFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgcmF3SGV4ID0gb3JpZ2luYWxUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgLy8gY2xhc3NpZnlUcmFuc2FjdGlvbiBzZWVzIDB4YWM5NjUwZDgg4oaSIENvbnRyYWN0Q2FsbCAobXVsdGljYWxsIG5vdCBtYXBwZWQpXG4gICAgLy8gQ29udHJhY3RDYWxsIHJlYnVpbGQgcGF0aCBoYW5kbGVzIGl0IGlkZW50aWNhbGx5IHRvIERlY3J5cHRpb25EZWxlZ2F0aW9uXG4gICAgY29uc3QgcmVidWlsdEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICByZWJ1aWx0QnVpbGRlci5mcm9tKHJhd0hleCk7XG4gICAgY29uc3QgcmVidWlsdFR4ID0gYXdhaXQgcmVidWlsdEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgIHNob3VsZC5lcXVhbChyZWJ1aWx0VHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgcmF3SGV4KTtcbiAgfSk7XG5cbiAgLy8gLS0tLSBGbG93IDM6IGZvcndhcmRlciBjYWxsRnJvbVBhcmVudCBwYXRoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgaXQoJ0Zsb3cgMzogc2hvdWxkIGJ1aWxkIGEgZm9yd2FyZGVyIGRlbGVnYXRpb24gdHggdGFyZ2V0aW5nIHRoZSBmb3J3YXJkZXInLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgaW5uZXJDYWxsZGF0YSA9IGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFtUT0tFTl9BRERSRVNTXSwgRVhQSVJZKTtcbiAgICBjb25zdCBvdXRlckNhbGxkYXRhID0gd3JhcEluQ2FsbEZyb21QYXJlbnQoQUNMX0FERFJFU1MsIGlubmVyQ2FsbGRhdGEpO1xuXG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCk7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0KEZPUldBUkRFUl9BRERSRVNTKTtcbiAgICB0eEJ1aWxkZXIuZGF0YShvdXRlckNhbGxkYXRhKTtcblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QganNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICAgIGpzb24udG8uc2hvdWxkLmVxdWFsKEZPUldBUkRFUl9BRERSRVNTLnRvTG93ZXJDYXNlKCkpO1xuICAgIGpzb24uZGF0YS5zaG91bGQuc3RhcnRXaXRoKGNhbGxGcm9tUGFyZW50TWV0aG9kSWQpO1xuICAgIGpzb24udmFsdWUuc2hvdWxkLmVxdWFsKCcwJyk7XG4gIH0pO1xuXG4gIGl0KCdGbG93IDM6IHNob3VsZCByZWJ1aWxkIGZyb20gaGV4IOKAlCBmb3J3YXJkZXIgZGVsZWdhdGlvbiByb3VuZC10cmlwJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGlubmVyQ2FsbGRhdGEgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBbVE9LRU5fQUREUkVTU10sIEVYUElSWSk7XG4gICAgY29uc3Qgb3V0ZXJDYWxsZGF0YSA9IHdyYXBJbkNhbGxGcm9tUGFyZW50KEFDTF9BRERSRVNTLCBpbm5lckNhbGxkYXRhKTtcblxuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICAgIHR4QnVpbGRlci5jb250cmFjdChGT1JXQVJERVJfQUREUkVTUyk7XG4gICAgdHhCdWlsZGVyLmRhdGEob3V0ZXJDYWxsZGF0YSk7XG5cbiAgICBjb25zdCBvcmlnaW5hbFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgcmF3SGV4ID0gb3JpZ2luYWxUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgY29uc3QgcmVidWlsdEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICByZWJ1aWx0QnVpbGRlci5mcm9tKHJhd0hleCk7XG4gICAgY29uc3QgcmVidWlsdFR4ID0gYXdhaXQgcmVidWlsdEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgIHNob3VsZC5lcXVhbChyZWJ1aWx0VHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgcmF3SGV4KTtcbiAgICByZWJ1aWx0VHgudG9Kc29uKCkudG8uc2hvdWxkLmVxdWFsKEZPUldBUkRFUl9BRERSRVNTLnRvTG93ZXJDYXNlKCkpO1xuICAgIHJlYnVpbHRUeC50b0pzb24oKS5kYXRhLnNob3VsZC5zdGFydFdpdGgoY2FsbEZyb21QYXJlbnRNZXRob2RJZCk7XG4gIH0pO1xuXG4gIC8vIC0tLS0gVmFsaWRhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGl0KCdzaG91bGQgdGhyb3cgZm9yIERlY3J5cHRpb25EZWxlZ2F0aW9uIHdoZW4gY29udHJhY3QgYWRkcmVzcyBpcyBtaXNzaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW1RPS0VOX0FERFJFU1NdLCBFWFBJUlkpO1xuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5EZWNyeXB0aW9uRGVsZWdhdGlvbik7XG4gICAgdHhCdWlsZGVyLmRhdGEoY2FsbGRhdGEpO1xuICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3NpbmcgY29udHJhY3QgYWRkcmVzcycpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHRocm93IGZvciBEZWNyeXB0aW9uRGVsZWdhdGlvbiB3aGVuIGRhdGEgZmllbGQgaXMgbWlzc2luZycsIGFzeW5jICgpID0+IHtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuRGVjcnlwdGlvbkRlbGVnYXRpb24pO1xuICAgIHR4QnVpbGRlci5jb250cmFjdChBQ0xfQUREUkVTUyk7XG4gICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBjb250cmFjdCBjYWxsIGRhdGEgZmllbGQnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGRhdGEoKSBpcyBjYWxsZWQgYmVmb3JlIHR5cGUgaXMgc2V0IHRvIGEgY29udHJhY3QgY2FsbCB0eXBlJywgKCkgPT4ge1xuICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW1RPS0VOX0FERFJFU1NdLCBFWFBJUlkpO1xuICAgIHNob3VsZC50aHJvd3MoKCkgPT4gdHhCdWlsZGVyLmRhdGEoY2FsbGRhdGEpLCAvZGF0YSBjYW4gb25seSBiZSBzZXQgZm9yIGNvbnRyYWN0IGNhbGwgdHJhbnNhY3Rpb24gdHlwZXMvKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=flushCoins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flushCoins.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/flushCoins.ts"],"names":[],"mappings":""}
@@ -0,0 +1,133 @@
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 sdk_core_1 = require("@bitgo-beta/sdk-core");
8
+ const src_1 = require("../../../src");
9
+ const getBuilder_1 = require("../getBuilder");
10
+ describe('Eth Transaction builder flush native coins', function () {
11
+ const defaultKeyPair = new src_1.KeyPair({
12
+ prv: 'FAC4D04AA0025ECF200D74BC9B5E4616E4B8338B69B61362AAAD49F76E68EF28',
13
+ });
14
+ const buildTransaction = async function (details) {
15
+ const txBuilder = (0, getBuilder_1.getBuilder)('teth');
16
+ txBuilder.type(sdk_core_1.TransactionType.FlushCoins);
17
+ if (details.fee !== undefined) {
18
+ txBuilder.fee(details.fee);
19
+ }
20
+ if (details.contractAddress !== undefined) {
21
+ txBuilder.contract(details.contractAddress);
22
+ }
23
+ if (details.counter !== undefined) {
24
+ txBuilder.counter(details.counter);
25
+ }
26
+ if (details.key !== undefined) {
27
+ txBuilder.sign({ key: details.key.getKeys().prv });
28
+ }
29
+ return (await txBuilder.build());
30
+ };
31
+ describe('should build', () => {
32
+ it('a wallet flush forwarder transaction', async () => {
33
+ const tx = await buildTransaction({
34
+ fee: {
35
+ fee: '10',
36
+ gasLimit: '1000',
37
+ },
38
+ counter: 1,
39
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
40
+ });
41
+ tx.type.should.equal(sdk_core_1.TransactionType.FlushCoins);
42
+ const txJson = tx.toJson();
43
+ txJson.gasLimit.should.equal('1000');
44
+ txJson._type.should.equals(src_1.ETHTransactionType.LEGACY);
45
+ txJson.gasPrice.should.equal('10');
46
+ should_1.default.equal(txJson.nonce, 1);
47
+ txJson.data.should.startWith(src_1.flushCoinsMethodId);
48
+ });
49
+ it('a wallet flush forwarder transaction with nonce 0', async () => {
50
+ const tx = await buildTransaction({
51
+ fee: {
52
+ fee: '10',
53
+ gasLimit: '1000',
54
+ },
55
+ counter: 0,
56
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
57
+ });
58
+ tx.type.should.equal(sdk_core_1.TransactionType.FlushCoins);
59
+ const txJson = tx.toJson();
60
+ txJson.gasLimit.should.equal('1000');
61
+ txJson._type.should.equals(src_1.ETHTransactionType.LEGACY);
62
+ txJson.gasPrice.should.equal('10');
63
+ should_1.default.equal(txJson.nonce, 0);
64
+ });
65
+ it('an unsigned flush transaction from serialized', async () => {
66
+ const tx = await buildTransaction({
67
+ fee: {
68
+ fee: '10',
69
+ gasLimit: '1000',
70
+ },
71
+ counter: 0,
72
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
73
+ });
74
+ const serialized = tx.toBroadcastFormat();
75
+ // now rebuild from the signed serialized tx and make sure it stays the same
76
+ const newTxBuilder = (0, getBuilder_1.getBuilder)('teth');
77
+ newTxBuilder.from(serialized);
78
+ const newTx = await newTxBuilder.build();
79
+ should_1.default.equal(newTx.toBroadcastFormat(), serialized);
80
+ newTx.toJson().data.should.startWith(src_1.flushCoinsMethodId);
81
+ newTx.toJson().v.should.equal('0x77');
82
+ });
83
+ it('a signed flush coin transaction from serialized', async () => {
84
+ const tx = await buildTransaction({
85
+ fee: {
86
+ fee: '10',
87
+ gasLimit: '1000',
88
+ },
89
+ counter: 0,
90
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
91
+ key: defaultKeyPair,
92
+ });
93
+ const serialized = tx.toBroadcastFormat();
94
+ // now rebuild from the signed serialized tx and make sure it stays the same
95
+ const newTxBuilder = (0, getBuilder_1.getBuilder)('teth');
96
+ newTxBuilder.from(serialized);
97
+ const newTx = await newTxBuilder.build();
98
+ should_1.default.equal(newTx.toBroadcastFormat(), serialized);
99
+ const txJson = newTx.toJson();
100
+ should_1.default.exist(txJson.v);
101
+ should_1.default.exist(txJson.r);
102
+ should_1.default.exist(txJson.s);
103
+ should_1.default.exist(txJson.from);
104
+ });
105
+ });
106
+ describe('should fail to build', () => {
107
+ it('a transaction without fee', async () => {
108
+ await buildTransaction({
109
+ counter: 0,
110
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
111
+ }).should.be.rejectedWith('Invalid transaction: missing fee');
112
+ });
113
+ it('a transaction without contractAddress', async () => {
114
+ await buildTransaction({
115
+ fee: {
116
+ fee: '10',
117
+ gasLimit: '10',
118
+ },
119
+ counter: 0,
120
+ }).should.be.rejectedWith('Invalid transaction: missing contract address');
121
+ });
122
+ it('a transaction with invalid counter', async () => {
123
+ await buildTransaction({
124
+ fee: {
125
+ fee: '10',
126
+ gasLimit: '10',
127
+ },
128
+ counter: -1,
129
+ }).should.be.rejectedWith('Invalid counter: -1');
130
+ });
131
+ });
132
+ });
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmx1c2hDb2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvZmx1c2hDb2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1QixtREFBdUQ7QUFDdkQsc0NBQXFIO0FBQ3JILDhDQUEyQztBQUUzQyxRQUFRLENBQUMsNENBQTRDLEVBQUU7SUFDckQsTUFBTSxjQUFjLEdBQUcsSUFBSSxhQUFPLENBQUM7UUFDakMsR0FBRyxFQUFFLGtFQUFrRTtLQUN4RSxDQUFDLENBQUM7SUFTSCxNQUFNLGdCQUFnQixHQUFHLEtBQUssV0FBVyxPQUEwQjtRQUNqRSxNQUFNLFNBQVMsR0FBdUIsSUFBQSx1QkFBVSxFQUFDLE1BQU0sQ0FBdUIsQ0FBQztRQUMvRSxTQUFTLENBQUMsSUFBSSxDQUFDLDBCQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFM0MsSUFBSSxPQUFPLENBQUMsR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlCLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNsQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlCLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUs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IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEVUSFRyYW5zYWN0aW9uVHlwZSwgRmVlLCBmbHVzaENvaW5zTWV0aG9kSWQsIEtleVBhaXIsIFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlciB9IGZyb20gJy4uL2dldEJ1aWxkZXInO1xuXG5kZXNjcmliZSgnRXRoIFRyYW5zYWN0aW9uIGJ1aWxkZXIgZmx1c2ggbmF0aXZlIGNvaW5zJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBkZWZhdWx0S2V5UGFpciA9IG5ldyBLZXlQYWlyKHtcbiAgICBwcnY6ICdGQUM0RDA0QUEwMDI1RUNGMjAwRDc0QkM5QjVFNDYxNkU0QjgzMzhCNjlCNjEzNjJBQUFENDlGNzZFNjhFRjI4JyxcbiAgfSk7XG5cbiAgaW50ZXJmYWNlIEZsdXNoQ29pbnNEZXRhaWxzIHtcbiAgICBjb250cmFjdEFkZHJlc3M/OiBzdHJpbmc7XG4gICAgY291bnRlcj86IG51bWJlcjtcbiAgICBmZWU/OiBGZWU7XG4gICAga2V5PzogS2V5UGFpcjtcbiAgfVxuXG4gIGNvbnN0IGJ1aWxkVHJhbnNhY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAoZGV0YWlsczogRmx1c2hDb2luc0RldGFpbHMpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHhCdWlsZGVyOiBUcmFuc2FjdGlvbkJ1aWxkZXIgPSBnZXRCdWlsZGVyKCd0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5GbHVzaENvaW5zKTtcblxuICAgIGlmIChkZXRhaWxzLmZlZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0eEJ1aWxkZXIuZmVlKGRldGFpbHMuZmVlKTtcbiAgICB9XG5cbiAgICBpZiAoZGV0YWlscy5jb250cmFjdEFkZHJlc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KGRldGFpbHMuY29udHJhY3RBZGRyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoZGV0YWlscy5jb3VudGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHR4QnVpbGRlci5jb3VudGVyKGRldGFpbHMuY291bnRlcik7XG4gICAgfVxuXG4gICAgaWYgKGRldGFpbHMua2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBkZXRhaWxzLmtleS5nZXRLZXlzKCkucHJ2IH0pO1xuICAgIH1cblxuICAgIHJldHVybiAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgYnVpbGQnLCAoKSA9PiB7XG4gICAgaXQoJ2Egd2FsbGV0IGZsdXNoIGZvcndhcmRlciB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgIGZlZToge1xuICAgICAgICAgIGZlZTogJzEwJyxcbiAgICAgICAgICBnYXNMaW1pdDogJzEwMDAnLFxuICAgICAgICB9LFxuICAgICAgICBjb3VudGVyOiAxLFxuICAgICAgICBjb250cmFjdEFkZHJlc3M6ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnLFxuICAgICAgfSk7XG5cbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5GbHVzaENvaW5zKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgdHhKc29uLmdhc0xpbWl0LnNob3VsZC5lcXVhbCgnMTAwMCcpO1xuICAgICAgdHhKc29uLl90eXBlLnNob3VsZC5lcXVhbHMoRVRIVHJhbnNhY3Rpb25UeXBlLkxFR0FDWSk7XG4gICAgICB0eEpzb24uZ2FzUHJpY2UhLnNob3VsZC5lcXVhbCgnMTAnKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24ubm9uY2UsIDEpO1xuICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aChmbHVzaENvaW5zTWV0aG9kSWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Egd2FsbGV0IGZsdXNoIGZvcndhcmRlciB0cmFuc2FjdGlvbiB3aXRoIG5vbmNlIDAnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6ICcxMCcsXG4gICAgICAgICAgZ2FzTGltaXQ6ICcxMDAwJyxcbiAgICAgICAgfSxcbiAgICAgICAgY291bnRlcjogMCxcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJyxcbiAgICAgIH0pO1xuXG4gICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuRmx1c2hDb2lucyk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHR4SnNvbi5nYXNMaW1pdC5zaG91bGQuZXF1YWwoJzEwMDAnKTtcbiAgICAgIHR4SnNvbi5fdHlwZS5zaG91bGQuZXF1YWxzKEVUSFRyYW5zYWN0aW9uVHlwZS5MRUdBQ1kpO1xuICAgICAgdHhKc29uLmdhc1ByaWNlIS5zaG91bGQuZXF1YWwoJzEwJyk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICB9KTtcblxuICAgIGl0KCdhbiB1bnNpZ25lZCBmbHVzaCB0cmFuc2FjdGlvbiBmcm9tIHNlcmlhbGl6ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6ICcxMCcsXG4gICAgICAgICAgZ2FzTGltaXQ6ICcxMDAwJyxcbiAgICAgICAgfSxcbiAgICAgICAgY291bnRlcjogMCxcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIC8vIG5vdyByZWJ1aWxkIGZyb20gdGhlIHNpZ25lZCBzZXJpYWxpemVkIHR4IGFuZCBtYWtlIHN1cmUgaXQgc3RheXMgdGhlIHNhbWVcbiAgICAgIGNvbnN0IG5ld1R4QnVpbGRlcjogYW55ID0gZ2V0QnVpbGRlcigndGV0aCcpO1xuICAgICAgbmV3VHhCdWlsZGVyLmZyb20oc2VyaWFsaXplZCk7XG4gICAgICBjb25zdCBuZXdUeCA9IGF3YWl0IG5ld1R4QnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKG5ld1R4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHNlcmlhbGl6ZWQpO1xuICAgICAgbmV3VHgudG9Kc29uKCkuZGF0YS5zaG91bGQuc3RhcnRXaXRoKGZsdXNoQ29pbnNNZXRob2RJZCk7XG4gICAgICBuZXdUeC50b0pzb24oKS52LnNob3VsZC5lcXVhbCgnMHg3NycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Egc2lnbmVkIGZsdXNoIGNvaW4gdHJhbnNhY3Rpb24gZnJvbSBzZXJpYWxpemVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgZmVlOiB7XG4gICAgICAgICAgZmVlOiAnMTAnLFxuICAgICAgICAgIGdhc0xpbWl0OiAnMTAwMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvdW50ZXI6IDAsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MScsXG4gICAgICAgIGtleTogZGVmYXVsdEtleVBhaXIsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBub3cgcmVidWlsZCBmcm9tIHRoZSBzaWduZWQgc2VyaWFsaXplZCB0eCBhbmQgbWFrZSBzdXJlIGl0IHN0YXlzIHRoZSBzYW1lXG4gICAgICBjb25zdCBuZXdUeEJ1aWxkZXI6IGFueSA9IGdldEJ1aWxkZXIoJ3RldGgnKTtcbiAgICAgIG5ld1R4QnVpbGRlci5mcm9tKHNlcmlhbGl6ZWQpO1xuICAgICAgY29uc3QgbmV3VHggPSBhd2FpdCBuZXdUeEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChuZXdUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLCBzZXJpYWxpemVkKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IG5ld1R4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi52KTtcbiAgICAgIHNob3VsZC5leGlzdCh0eEpzb24ucik7XG4gICAgICBzaG91bGQuZXhpc3QodHhKc29uLnMpO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi5mcm9tKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZCBmYWlsIHRvIGJ1aWxkJywgKCkgPT4ge1xuICAgIGl0KCdhIHRyYW5zYWN0aW9uIHdpdGhvdXQgZmVlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgIGNvdW50ZXI6IDAsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MScsXG4gICAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIGZlZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2EgdHJhbnNhY3Rpb24gd2l0aG91dCBjb250cmFjdEFkZHJlc3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgZmVlOiB7XG4gICAgICAgICAgZmVlOiAnMTAnLFxuICAgICAgICAgIGdhc0xpbWl0OiAnMTAnLFxuICAgICAgICB9LFxuICAgICAgICBjb3VudGVyOiAwLFxuICAgICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBjb250cmFjdCBhZGRyZXNzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSB0cmFuc2FjdGlvbiB3aXRoIGludmFsaWQgY291bnRlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6ICcxMCcsXG4gICAgICAgICAgZ2FzTGltaXQ6ICcxMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvdW50ZXI6IC0xLFxuICAgICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCBjb3VudGVyOiAtMScpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=flushTokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flushTokens.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/flushTokens.ts"],"names":[],"mappings":""}