@bitgo-beta/sdk-coin-eth 4.4.1-beta.192 → 4.4.1-beta.1921

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 +118 -0
  8. package/dist/src/erc7984Token.d.ts.map +1 -0
  9. package/dist/src/erc7984Token.js +459 -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 +54 -39
  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 +1034 -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 +2568 -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 +552 -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 +285 -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 -717
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmx1c2hDb2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvZmx1c2hDb2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1QixtREFBdUQ7QUFDdkQsc0NBQXFIO0FBQ3JILDhDQUEyQztBQUUzQyxRQUFRLENBQUMsNENBQTRDLEVBQUU7SUFDckQsTUFBTSxjQUFjLEdBQUcsSUFBSSxhQUFPLENBQUM7UUFDakMsR0FBRyxFQUFFLGtFQUFrRTtLQUN4RSxDQUFDLENBQUM7SUFTSCxNQUFNLGdCQUFnQixHQUFHLEtBQUssV0FBVyxPQUEwQjtRQUNqRSxNQUFNLFNBQVMsR0FBdUIsSUFBQSx1QkFBVSxFQUFDLE1BQU0sQ0FBdUIsQ0FBQztRQUMvRSxTQUFTLENBQUMsSUFBSSxDQUFDLDBCQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFM0MsSUFBSSxPQUFPLENBQUMsR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlCLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNsQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlCLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFFRCxPQUFPLENBQUMsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQWdCLENBQUM7SUFDbEQsQ0FBQyxDQUFDO0lBRUYsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7UUFDNUIsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3BELE1BQU0sRUFBRSxHQUFHLE1BQU0sZ0JBQWdCLENBQUM7Z0JBQ2hDLEdBQUcsRUFBRTtvQkFDSCxHQUFHLEVBQUUsSUFBSTtvQkFDVCxRQUFRLEVBQUUsTUFBTTtpQkFDakI7Z0JBQ0QsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsZUFBZSxFQUFFLDRDQUE0QzthQUM5RCxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNqRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyx3QkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0RCxNQUFNLENBQUMsUUFBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsd0JBQWtCLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNqRSxNQUFNLEVBQUUsR0FBRyxNQUFNLGdCQUFnQixDQUFDO2dCQUNoQyxHQUFHLEVBQUU7b0JBQ0gsR0FBRyxFQUFFLElBQUk7b0JBQ1QsUUFBUSxFQUFFLE1BQU07aUJBQ2pCO2dCQUNELE9BQU8sRUFBRSxDQUFDO2dCQUNWLGVBQWUsRUFBRSw0Q0FBNEM7YUFDOUQsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDakQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsd0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEQsTUFBTSxDQUFDLFFBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0NBQStDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDN0QsTUFBTSxFQUFFLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQztnQkFDaEMsR0FBRyxFQUFFO29CQUNILEdBQUcsRUFBRSxJQUFJO29CQUNULFFBQVEsRUFBRSxNQUFNO2lCQUNqQjtnQkFDRCxPQUFPLEVBQUUsQ0FBQztnQkFDVixlQUFlLEVBQUUsNENBQTRDO2FBQzlELENBQUMsQ0FBQztZQUNILE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBRTFDLDRFQUE0RTtZQUM1RSxNQUFNLFlBQVksR0FBUSxJQUFBLHVCQUFVLEVBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5QixNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN6QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNwRCxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsd0JBQWtCLENBQUMsQ0FBQztZQUN6RCxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaURBQWlELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDL0QsTUFBTSxFQUFFLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQztnQkFDaEMsR0FBRyxFQUFFO29CQUNILEdBQUcsRUFBRSxJQUFJO29CQUNULFFBQVEsRUFBRSxNQUFNO2lCQUNqQjtnQkFDRCxPQUFPLEVBQUUsQ0FBQztnQkFDVixlQUFlLEVBQUUsNENBQTRDO2dCQUM3RCxHQUFHLEVBQUUsY0FBYzthQUNwQixDQUFDLENBQUM7WUFDSCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUUxQyw0RUFBNEU7WUFDNUUsTUFBTSxZQUFZLEdBQVEsSUFBQSx1QkFBVSxFQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDOUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDcEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzlCLGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QixnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRTtRQUNwQyxFQUFFLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDekMsTUFBTSxnQkFBZ0IsQ0FBQztnQkFDckIsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsZUFBZSxFQUFFLDRDQUE0QzthQUM5RCxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNyRCxNQUFNLGdCQUFnQixDQUFDO2dCQUNyQixHQUFHLEVBQUU7b0JBQ0gsR0FBRyxFQUFFLElBQUk7b0JBQ1QsUUFBUSxFQUFFLElBQUk7aUJBQ2Y7Z0JBQ0QsT0FBTyxFQUFFLENBQUM7YUFDWCxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUM3RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNsRCxNQUFNLGdCQUFnQixDQUFDO2dCQUNyQixHQUFHLEVBQUU7b0JBQ0gsR0FBRyxFQUFFLElBQUk7b0JBQ1QsUUFBUSxFQUFFLElBQUk7aUJBQ2Y7Z0JBQ0QsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUNaLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEVUSFRyYW5zYWN0aW9uVHlwZSwgRmVlLCBmbHVzaENvaW5zTWV0aG9kSWQsIEtleVBhaXIsIFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlciB9IGZyb20gJy4uL2dldEJ1aWxkZXInO1xuXG5kZXNjcmliZSgnRXRoIFRyYW5zYWN0aW9uIGJ1aWxkZXIgZmx1c2ggbmF0aXZlIGNvaW5zJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBkZWZhdWx0S2V5UGFpciA9IG5ldyBLZXlQYWlyKHtcbiAgICBwcnY6ICdGQUM0RDA0QUEwMDI1RUNGMjAwRDc0QkM5QjVFNDYxNkU0QjgzMzhCNjlCNjEzNjJBQUFENDlGNzZFNjhFRjI4JyxcbiAgfSk7XG5cbiAgaW50ZXJmYWNlIEZsdXNoQ29pbnNEZXRhaWxzIHtcbiAgICBjb250cmFjdEFkZHJlc3M/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":""}
@@ -0,0 +1,285 @@
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
+ // eslint-disable-next-line import/no-internal-modules
11
+ const transactionBuilder_1 = require("@bitgo-beta/abstract-eth/test/unit/transactionBuilder");
12
+ // Run the shared flush NFT tests from abstract-eth
13
+ describe('ETH Flush NFT Tests (from abstract-eth)', () => {
14
+ (0, transactionBuilder_1.runFlushNftTests)('eth', getBuilder_1.getBuilder);
15
+ });
16
+ // Run the shared FlushERC7984ForwarderToken tests from abstract-eth
17
+ describe('ETH FlushERC7984ForwarderToken Tests (from abstract-eth)', () => {
18
+ (0, transactionBuilder_1.runFlushERC7984Tests)('eth', getBuilder_1.getBuilder);
19
+ });
20
+ describe('Eth Transaction builder flush tokens (ETH-specific)', function () {
21
+ const defaultKeyPair = new src_1.KeyPair({
22
+ prv: 'FAC4D04AA0025ECF200D74BC9B5E4616E4B8338B69B61362AAAD49F76E68EF28',
23
+ });
24
+ const buildTransaction = async function (details) {
25
+ const txBuilder = (0, getBuilder_1.getBuilder)('teth');
26
+ txBuilder.type(sdk_core_1.TransactionType.FlushTokens);
27
+ if (details.forwarderAddress !== undefined) {
28
+ txBuilder.forwarderAddress(details.forwarderAddress);
29
+ }
30
+ if (details.tokenAddress !== undefined) {
31
+ txBuilder.tokenAddress(details.tokenAddress);
32
+ }
33
+ if (details.fee !== undefined) {
34
+ txBuilder.fee(details.fee);
35
+ }
36
+ if (details.contractAddress !== undefined) {
37
+ txBuilder.contract(details.contractAddress);
38
+ }
39
+ if (details.counter !== undefined) {
40
+ txBuilder.counter(details.counter);
41
+ }
42
+ if (details.key !== undefined) {
43
+ txBuilder.sign({ key: details.key.getKeys().prv });
44
+ }
45
+ if (details.forwarderVersion !== undefined) {
46
+ txBuilder.forwarderVersion(details.forwarderVersion);
47
+ }
48
+ return await txBuilder.build();
49
+ };
50
+ describe('should build', () => {
51
+ it('a wallet flush forwarder transaction', async () => {
52
+ const tx = await buildTransaction({
53
+ fee: {
54
+ fee: '10',
55
+ gasLimit: '1000',
56
+ },
57
+ counter: 1,
58
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
59
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
60
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
61
+ });
62
+ tx.type.should.equal(sdk_core_1.TransactionType.FlushTokens);
63
+ const txJson = tx.toJson();
64
+ txJson.gasLimit.should.equal('1000');
65
+ txJson._type.should.equals(src_1.ETHTransactionType.LEGACY);
66
+ txJson.gasPrice.should.equal('10');
67
+ should_1.default.equal(txJson.nonce, 1);
68
+ txJson.data.should.startWith(src_1.flushForwarderTokensMethodId);
69
+ });
70
+ it('a wallet flush forwarder transaction with eip1559 fee model', async () => {
71
+ const tx = await buildTransaction({
72
+ fee: {
73
+ fee: '30',
74
+ eip1559: {
75
+ maxPriorityFeePerGas: '5',
76
+ maxFeePerGas: '30',
77
+ },
78
+ gasLimit: '1000',
79
+ },
80
+ counter: 1,
81
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
82
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
83
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
84
+ });
85
+ tx.type.should.equal(sdk_core_1.TransactionType.FlushTokens);
86
+ const txJson = tx.toJson();
87
+ txJson.gasLimit.should.equal('1000');
88
+ txJson._type.should.equals(src_1.ETHTransactionType.EIP1559);
89
+ txJson.maxFeePerGas.should.equal('30');
90
+ txJson.maxPriorityFeePerGas.should.equal('5');
91
+ should_1.default.equal(txJson.nonce, 1);
92
+ txJson.data.should.startWith(src_1.flushForwarderTokensMethodId);
93
+ });
94
+ it('a wallet flush forwarder transaction with nonce 0', async () => {
95
+ const tx = await buildTransaction({
96
+ fee: {
97
+ fee: '10',
98
+ gasLimit: '1000',
99
+ },
100
+ counter: 0,
101
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
102
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
103
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
104
+ });
105
+ tx.type.should.equal(sdk_core_1.TransactionType.FlushTokens);
106
+ const txJson = tx.toJson();
107
+ txJson.gasLimit.should.equal('1000');
108
+ txJson._type.should.equals(src_1.ETHTransactionType.LEGACY);
109
+ txJson.gasPrice.should.equal('10');
110
+ should_1.default.equal(txJson.nonce, 0);
111
+ txJson.data.should.startWith(src_1.flushForwarderTokensMethodId);
112
+ });
113
+ it('a wallet flush forwarder transaction with forwarder Version 4', async () => {
114
+ const tx = await buildTransaction({
115
+ fee: {
116
+ fee: '10',
117
+ gasLimit: '1000',
118
+ },
119
+ counter: 0,
120
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
121
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
122
+ contractAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
123
+ forwarderVersion: 4,
124
+ });
125
+ tx.type.should.equal(sdk_core_1.TransactionType.FlushTokens);
126
+ const txJson = tx.toJson();
127
+ txJson.gasLimit.should.equal('1000');
128
+ txJson._type.should.equals(src_1.ETHTransactionType.LEGACY);
129
+ should_1.default.equal(txJson.nonce, 0);
130
+ txJson.data.should.startWith(src_1.flushForwarderTokensMethodIdV4);
131
+ });
132
+ it('decode wallet flush forwarder transaction with forwarder Version 4', async () => {
133
+ const tx = await buildTransaction({
134
+ fee: {
135
+ fee: '10',
136
+ gasLimit: '1000',
137
+ },
138
+ counter: 0,
139
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
140
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
141
+ contractAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
142
+ forwarderVersion: 4,
143
+ });
144
+ const txBuiderFromRaw = (0, getBuilder_1.getBuilder)('teth');
145
+ txBuiderFromRaw.from(tx.toBroadcastFormat());
146
+ const result = await txBuiderFromRaw.build();
147
+ const txJson = result.toJson();
148
+ txJson.to.should.equal('0x53b8e91bb3b8f618b5f01004ef108f134f219573');
149
+ txJson.data.should.containEql('bcf935d206ca32929e1b887a07ed240f0d8ccd22');
150
+ });
151
+ it('decode wallet flush forwarder transaction with forwarder Version < 4', async () => {
152
+ const tx = await buildTransaction({
153
+ fee: {
154
+ fee: '10',
155
+ gasLimit: '1000',
156
+ },
157
+ counter: 0,
158
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
159
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
160
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
161
+ forwarderVersion: 2,
162
+ });
163
+ const txBuiderFromRaw = (0, getBuilder_1.getBuilder)('teth');
164
+ txBuiderFromRaw.from(tx.toBroadcastFormat());
165
+ const result = await txBuiderFromRaw.build();
166
+ const txJson = result.toJson();
167
+ txJson.to.should.equal('0x8f977e912ef500548a0c3be6ddde9899f1199b81');
168
+ txJson.data.should.containEql('bcf935d206ca32929e1b887a07ed240f0d8ccd22');
169
+ txJson.data.should.containEql('53b8e91bb3b8f618b5f01004ef108f134f219573');
170
+ });
171
+ it('an unsigned flush transaction from serialized', async () => {
172
+ const tx = await buildTransaction({
173
+ fee: {
174
+ fee: '10',
175
+ gasLimit: '1000',
176
+ },
177
+ counter: 0,
178
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
179
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
180
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
181
+ });
182
+ const serialized = tx.toBroadcastFormat();
183
+ // now rebuild from the signed serialized tx and make sure it stays the same
184
+ const newTxBuilder = (0, getBuilder_1.getBuilder)('teth');
185
+ newTxBuilder.from(serialized);
186
+ const newTx = await newTxBuilder.build();
187
+ should_1.default.equal(newTx.toBroadcastFormat(), serialized);
188
+ newTx.toJson().data.should.startWith(src_1.flushForwarderTokensMethodId);
189
+ should_1.default.equal(newTx.toJson().v, '0x77');
190
+ });
191
+ it('a signed flush transaction from serialized', async () => {
192
+ const tx = await buildTransaction({
193
+ fee: {
194
+ fee: '10',
195
+ gasLimit: '1000',
196
+ },
197
+ counter: 0,
198
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
199
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
200
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
201
+ key: defaultKeyPair,
202
+ });
203
+ const serialized = tx.toBroadcastFormat();
204
+ // now rebuild from the signed serialized tx and make sure it stays the same
205
+ const newTxBuilder = (0, getBuilder_1.getBuilder)('teth');
206
+ newTxBuilder.from(serialized);
207
+ const newTx = await newTxBuilder.build();
208
+ should_1.default.equal(newTx.toBroadcastFormat(), serialized);
209
+ should_1.default.equal(newTx.id, '0x5bfd4c6b9ae9dfbc9e062247c0debe4e1c6870a76c420ce7f6e335390420dcd6');
210
+ const txJson = newTx.toJson();
211
+ should_1.default.exist(txJson.v);
212
+ should_1.default.exist(txJson.r);
213
+ should_1.default.exist(txJson.s);
214
+ should_1.default.exist(txJson.from);
215
+ });
216
+ });
217
+ describe('should fail to build', () => {
218
+ it('a transaction without fee', async () => {
219
+ await buildTransaction({
220
+ counter: 0,
221
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
222
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
223
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
224
+ }).should.be.rejectedWith('Invalid transaction: missing fee');
225
+ });
226
+ it('a transaction without contractAddress', async () => {
227
+ await buildTransaction({
228
+ fee: {
229
+ fee: '10',
230
+ gasLimit: '10',
231
+ },
232
+ counter: 0,
233
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
234
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
235
+ }).should.be.rejectedWith('Invalid transaction: missing contract address');
236
+ });
237
+ it('a wallet flush forwarder V4 transaction with different contract address', async () => {
238
+ await buildTransaction({
239
+ fee: {
240
+ fee: '10',
241
+ gasLimit: '1000',
242
+ },
243
+ counter: 0,
244
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
245
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
246
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
247
+ forwarderVersion: 4,
248
+ }).should.be.rejectedWith('Invalid contract address: 0x8f977e912ef500548a0c3be6ddde9899f1199b81');
249
+ });
250
+ it('a transaction without tokenAddress', async () => {
251
+ await buildTransaction({
252
+ fee: {
253
+ fee: '10',
254
+ gasLimit: '10',
255
+ },
256
+ counter: 0,
257
+ forwarderAddress: '0x53b8e91bb3b8f618b5f01004ef108f134f219573',
258
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
259
+ }).should.be.rejectedWith('Invalid transaction: missing token address');
260
+ });
261
+ it('a transaction without forwarderAddress', async () => {
262
+ await buildTransaction({
263
+ fee: {
264
+ fee: '10',
265
+ gasLimit: '10',
266
+ },
267
+ counter: 0,
268
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
269
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
270
+ }).should.be.rejectedWith('Invalid transaction: missing forwarder address');
271
+ });
272
+ it('a transaction with invalid counter', async () => {
273
+ await buildTransaction({
274
+ fee: {
275
+ fee: '10',
276
+ gasLimit: '10',
277
+ },
278
+ counter: -1,
279
+ tokenAddress: '0xbcf935d206ca32929e1b887a07ed240f0d8ccd22',
280
+ contractAddress: '0x8f977e912ef500548a0c3be6ddde9899f1199b81',
281
+ }).should.be.rejectedWith('Invalid counter: -1');
282
+ });
283
+ });
284
+ });
285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmx1c2hUb2tlbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL2ZsdXNoVG9rZW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG1EQUF1RDtBQUN2RCxzQ0FPc0I7QUFDdEIsOENBQTJDO0FBQzNDLHNEQUFzRDtBQUN0RCw4RkFBK0c7QUFFL0csbURBQW1EO0FBQ25ELFFBQVEsQ0FBQyx5Q0FBeUMsRUFBRSxHQUFHLEVBQUU7SUFDdkQsSUFBQSxxQ0FBZ0IsRUFBQyxLQUFLLEVBQUUsdUJBQVUsQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxDQUFDO0FBRUgsb0VBQW9FO0FBQ3BFLFFBQVEsQ0FBQywwREFBMEQsRUFBRSxHQUFHLEVBQUU7SUFDeEUsSUFBQSx5Q0FBb0IsRUFBQyxLQUFLLEVBQUUsdUJBQVUsQ0FBQyxDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLHFEQUFxRCxFQUFFO0lBQzlELE1BQU0sY0FBYyxHQUFHLElBQUksYUFBTyxDQUFDO1FBQ2pDLEdBQUcsRUFBRSxrRUFBa0U7S0FDeEUsQ0FBQyxDQUFDO0lBWUgsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLFdBQVcsT0FBMkI7UUFDbEUsTUFBTSxTQUFTLEdBQVEsSUFBQSx1QkFBVSxFQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsMEJBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU1QyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMzQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN2QyxTQUFTLENBQUMsWUFBWSxDQUFDLE9B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QUssSUFBSSxFQUFFO1lBQ2xELE1BQU0sZ0JBQWdCLENBQUM7Z0JBQ3JCLEdBQUcsRUFBRTtvQkFDSCxHQUFHLEVBQUUsSUFBSTtvQkFDVCxRQUFRLEVBQUUsSUFBSTtpQkFDZjtnQkFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUNYLFlBQVksRUFBRSw0Q0FBNEM7Z0JBQzFELGVBQWUsRUFBRSw0Q0FBNEM7YUFDOUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHtcbiAgRVRIVHJhbnNhY3Rpb25UeXBlLFxuICBGZWUsXG4gIGZsdXNoRm9yd2FyZGVyVG9rZW5zTWV0aG9kSWQsXG4gIGZsdXNoRm9yd2FyZGVyVG9rZW5zTWV0aG9kSWRWNCxcbiAgS2V5UGFpcixcbiAgVHJhbnNhY3Rpb24sXG59IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBnZXRCdWlsZGVyIH0gZnJvbSAnLi4vZ2V0QnVpbGRlcic7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWludGVybmFsLW1vZHVsZXNcbmltcG9ydCB7IHJ1bkZsdXNoTmZ0VGVzdHMsIHJ1bkZsdXNoRVJDNzk4NFRlc3RzIH0gZnJvbSAnQGJpdGdvLWJldGEvYWJzdHJhY3QtZXRoL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXInO1xuXG4vLyBSdW4gdGhlIHNoYXJlZCBmbHVzaCBORlQgdGVzdHMgZnJvbSBhYnN0cmFjdC1ldGhcbmRlc2NyaWJlKCdFVEggRmx1c2ggTkZUIFRlc3RzIChmcm9tIGFic3RyYWN0LWV0aCknLCAoKSA9PiB7XG4gIHJ1bkZsdXNoTmZ0VGVzdHMoJ2V0aCcsIGdldEJ1aWxkZXIpO1xufSk7XG5cbi8vIFJ1biB0aGUgc2hhcmVkIEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuIHRlc3RzIGZyb20gYWJzdHJhY3QtZXRoXG5kZXNjcmliZSgnRVRIIEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuIFRlc3RzIChmcm9tIGFic3RyYWN0LWV0aCknLCAoKSA9PiB7XG4gIHJ1bkZsdXNoRVJDNzk4NFRlc3RzKCdldGgnLCBnZXRCdWlsZGVyKTtcbn0pO1xuXG5kZXNjcmliZSgnRXRoIFRyYW5zYWN0aW9uIGJ1aWxkZXIgZmx1c2ggdG9rZW5zIChFVEgtc3BlY2lmaWMpJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBkZWZhdWx0S2V5UGFpciA9IG5ldyBLZXlQYWlyKHtcbiAgICBwcnY6ICdGQUM0RDA0QUEwMDI1RUNGMjAwRDc0QkM5QjVFNDYxNkU0QjgzMzhCNjlCNjEzNjJBQUFENDlGNzZFNjhFRjI4JyxcbiAgfSk7XG5cbiAgaW50ZXJmYWNlIEZsdXNoVG9rZW5zRGV0YWlscyB7XG4gICAgZm9yd2FyZGVyQWRkcmVzcz86IHN0cmluZztcbiAgICB0b2tlbkFkZHJlc3M/OiBzdHJpbmc7XG4gICAgY29udHJhY3RBZGRyZXNzPzogc3RyaW5nO1xuICAgIGNvdW50ZXI/OiBudW1iZXI7XG4gICAgZmVlPzogRmVlO1xuICAgIGtleT86IEtleVBhaXI7XG4gICAgZm9yd2FyZGVyVmVyc2lvbj86IG51bWJlcjtcbiAgfVxuXG4gIGNvbnN0IGJ1aWxkVHJhbnNhY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAoZGV0YWlsczogRmx1c2hUb2tlbnNEZXRhaWxzKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHR4QnVpbGRlcjogYW55ID0gZ2V0QnVpbGRlcigndGV0aCcpO1xuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5GbHVzaFRva2Vucyk7XG5cbiAgICBpZiAoZGV0YWlscy5mb3J3YXJkZXJBZGRyZXNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHR4QnVpbGRlci5mb3J3YXJkZXJBZGRyZXNzKGRldGFpbHMuZm9yd2FyZGVyQWRkcmVzcyk7XG4gICAgfVxuXG4gICAgaWYgKGRldGFpbHMudG9rZW5BZGRyZXNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHR4QnVpbGRlci50b2tlbkFkZHJlc3MoZGV0YWlscy50b2tlbkFkZHJlc3MpO1xuICAgIH1cblxuICAgIGlmIChkZXRhaWxzLmZlZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0eEJ1aWxkZXIuZmVlKGRldGFpbHMuZmVlKTtcbiAgICB9XG5cbiAgICBpZiAoZGV0YWlscy5jb250cmFjdEFkZHJlc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KGRldGFpbHMuY29udHJhY3RBZGRyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoZGV0YWlscy5jb3VudGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHR4QnVpbGRlci5jb3VudGVyKGRldGFpbHMuY291bnRlcik7XG4gICAgfVxuXG4gICAgaWYgKGRldGFpbHMua2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBkZXRhaWxzLmtleS5nZXRLZXlzKCkucHJ2IH0pO1xuICAgIH1cblxuICAgIGlmIChkZXRhaWxzLmZvcndhcmRlclZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHhCdWlsZGVyLmZvcndhcmRlclZlcnNpb24oZGV0YWlscy5mb3J3YXJkZXJWZXJzaW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gIH07XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZCBidWlsZCcsICgpID0+IHtcbiAgICBpdCgnYSB3YWxsZXQgZmx1c2ggZm9yd2FyZGVyIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgZmVlOiB7XG4gICAgICAgICAgZmVlOiAnMTAnLFxuICAgICAgICAgIGdhc0xpbWl0OiAnMTAwMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvdW50ZXI6IDEsXG4gICAgICAgIGZvcndhcmRlckFkZHJlc3M6ICcweDUzYjhlOTFiYjNiOGY2MThiNWYwMTAwNGVmMTA4ZjEzNGYyMTk1NzMnLFxuICAgICAgICB0b2tlbkFkZHJlc3M6ICcweGJjZjkzNWQyMDZjYTMyOTI5ZTFiODg3YTA3ZWQyNDBmMGQ4Y2NkMjInLFxuICAgICAgICBjb250cmFjdEFkZHJlc3M6ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnLFxuICAgICAgfSk7XG5cbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5GbHVzaFRva2Vucyk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHR4SnNvbi5nYXNMaW1pdC5zaG91bGQuZXF1YWwoJzEwMDAnKTtcbiAgICAgIHR4SnNvbi5fdHlwZS5zaG91bGQuZXF1YWxzKEVUSFRyYW5zYWN0aW9uVHlwZS5MRUdBQ1kpO1xuICAgICAgdHhKc29uLmdhc1ByaWNlIS5zaG91bGQuZXF1YWwoJzEwJyk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLm5vbmNlLCAxKTtcbiAgICAgIHR4SnNvbi5kYXRhLnNob3VsZC5zdGFydFdpdGgoZmx1c2hGb3J3YXJkZXJUb2tlbnNNZXRob2RJZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSB3YWxsZXQgZmx1c2ggZm9yd2FyZGVyIHRyYW5zYWN0aW9uIHdpdGggZWlwMTU1OSBmZWUgbW9kZWwnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6ICczMCcsXG4gICAgICAgICAgZWlwMTU1OToge1xuICAgICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6ICc1JyxcbiAgICAgICAgICAgIG1heEZlZVBlckdhczogJzMwJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdhc0xpbWl0OiAnMTAwMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvdW50ZXI6IDEsXG4gICAgICAgIGZvcndhcmRlckFkZHJlc3M6ICcweDUzYjhlOTFiYjNiOGY2MThiNWYwMTAwNGVmMTA4ZjEzNGYyMTk1NzMnLFxuICAgICAgICB0b2tlbkFkZHJlc3M6ICcweGJjZjkzNWQyMDZjYTMyOTI5ZTFiODg3YTA3ZWQyNDBmMGQ4Y2NkMjInLFxuICAgICAgICBjb250cmFjdEFkZHJlc3M6ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnLFxuICAgICAgfSk7XG5cbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5GbHVzaFRva2Vucyk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHR4SnNvbi5nYXNMaW1pdC5zaG91bGQuZXF1YWwoJzEwMDAnKTtcbiAgICAgIHR4SnNvbi5fdHlwZS5zaG91bGQuZXF1YWxzKEVUSFRyYW5zYWN0aW9uVHlwZS5FSVAxNTU5KTtcbiAgICAgIHR4SnNvbi5tYXhGZWVQZXJHYXMhLnNob3VsZC5lcXVhbCgnMzAnKTtcbiAgICAgIHR4SnNvbi5tYXhQcmlvcml0eUZlZVBlckdhcyEuc2hvdWxkLmVxdWFsKCc1Jyk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLm5vbmNlLCAxKTtcbiAgICAgIHR4SnNvbi5kYXRhLnNob3VsZC5zdGFydFdpdGgoZmx1c2hGb3J3YXJkZXJUb2tlbnNNZXRob2RJZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSB3YWxsZXQgZmx1c2ggZm9yd2FyZGVyIHRyYW5zYWN0aW9uIHdpdGggbm9uY2UgMCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgIGZlZToge1xuICAgICAgICAgIGZlZTogJzEwJyxcbiAgICAgICAgICBnYXNMaW1pdDogJzEwMDAnLFxuICAgICAgICB9LFxuICAgICAgICBjb3VudGVyOiAwLFxuICAgICAgICBmb3J3YXJkZXJBZGRyZXNzOiAnMHg1M2I4ZTkxYmIzYjhmNjE4YjVmMDEwMDRlZjEwOGYxMzRmMjE5NTczJyxcbiAgICAgICAgdG9rZW5BZGRyZXNzOiAnMHhiY2Y5MzVkMjA2Y2EzMjkyOWUxYjg4N2EwN2VkMjQwZjBkOGNjZDIyJyxcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJyxcbiAgICAgIH0pO1xuXG4gICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuRmx1c2hUb2tlbnMpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICB0eEpzb24uZ2FzTGltaXQuc2hvdWxkLmVxdWFsKCcxMDAwJyk7XG4gICAgICB0eEpzb24uX3R5cGUuc2hvdWxkLmVxdWFscyhFVEhUcmFuc2FjdGlvblR5cGUuTEVHQUNZKTtcbiAgICAgIHR4SnNvbi5nYXNQcmljZSEuc2hvdWxkLmVxdWFsKCcxMCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICB0eEpzb24uZGF0YS5zaG91bGQuc3RhcnRXaXRoKGZsdXNoRm9yd2FyZGVyVG9rZW5zTWV0aG9kSWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Egd2FsbGV0IGZsdXNoIGZvcndhcmRlciB0cmFuc2FjdGlvbiB3aXRoIGZvcndhcmRlciBWZXJzaW9uIDQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6ICcxMCcsXG4gICAgICAgICAgZ2FzTGltaXQ6ICcxMDAwJyxcbiAgICAgICAgfSxcbiAgICAgICAgY291bnRlcjogMCxcbiAgICAgICAgZm9yd2FyZGVyQWRkcmVzczogJzB4NTNiOGU5MWJiM2I4ZjYxOGI1ZjAxMDA0ZWYxMDhmMTM0ZjIxOTU3MycsXG4gICAgICAgIHRva2VuQWRkcmVzczogJzB4YmNmOTM1ZDIwNmNhMzI5MjllMWI4ODdhMDdlZDI0MGYwZDhjY2QyMicsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogJzB4NTNiOGU5MWJiM2I4ZjYxOGI1ZjAxMDA0ZWYxMDhmMTM0ZjIxOTU3MycsXG4gICAgICAgIGZvcndhcmRlclZlcnNpb246IDQsXG4gICAgICB9KTtcblxuICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkZsdXNoVG9rZW5zKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgdHhKc29uLmdhc0xpbWl0LnNob3VsZC5lcXVhbCgnMTAwMCcpO1xuICAgICAgdHhKc29uLl90eXBlLnNob3VsZC5lcXVhbHMoRVRIVHJhbnNhY3Rpb25UeXBlLkxFR0FDWSk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLm5vbmNlLCAwKTtcbiAgICAgIHR4SnNvbi5kYXRhLnNob3VsZC5zdGFydFdpdGgoZmx1c2hGb3J3YXJkZXJUb2tlbnNNZXRob2RJZFY0KTtcbiAgICB9KTtcblxuICAgIGl0KCdkZWNvZGUgd2FsbGV0IGZsdXNoIGZvcndhcmRlciB0cmFuc2FjdGlvbiB3aXRoIGZvcndhcmRlciBWZXJzaW9uIDQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6ICcxMCcsXG4gICAgICAgICAgZ2FzTGltaXQ6ICcxMDAwJyxcbiAgICAgICAgfSxcbiAgICAgICAgY291bnRlcjogMCxcbiAgICAgICAgZm9yd2FyZGVyQWRkcmVzczogJzB4NTNiOGU5MWJiM2I4ZjYxOGI1ZjAxMDA0ZWYxMDhmMTM0ZjIxOTU3MycsXG4gICAgICAgIHRva2VuQWRkcmVzczogJzB4YmNmOTM1ZDIwNmNhMzI5MjllMWI4ODdhMDdlZDI0MGYwZDhjY2QyMicsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogJzB4NTNiOGU5MWJiM2I4ZjYxOGI1ZjAxMDA0ZWYxMDhmMTM0ZjIxOTU3MycsXG4gICAgICAgIGZvcndhcmRlclZlcnNpb246IDQsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHR4QnVpZGVyRnJvbVJhdzogYW55ID0gZ2V0QnVpbGRlcigndGV0aCcpO1xuICAgICAgdHhCdWlkZXJGcm9tUmF3LmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0eEJ1aWRlckZyb21SYXcuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHJlc3VsdC50b0pzb24oKTtcbiAgICAgIHR4SnNvbi50by5zaG91bGQuZXF1YWwoJzB4NTNiOGU5MWJiM2I4ZjYxOGI1ZjAxMDA0ZWYxMDhmMTM0ZjIxOTU3MycpO1xuICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLmNvbnRhaW5FcWwoJ2JjZjkzNWQyMDZjYTMyOTI5ZTFiODg3YTA3ZWQyNDBmMGQ4Y2NkMjInKTtcbiAgICB9KTtcblxuICAgIGl0KCdkZWNvZGUgd2FsbGV0IGZsdXNoIGZvcndhcmRlciB0cmFuc2FjdGlvbiB3aXRoIGZvcndhcmRlciBWZXJzaW9uIDwgNCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgIGZlZToge1xuICAgICAgICAgIGZlZTogJzEwJyxcbiAgICAgICAgICBnYXNMaW1pdDogJzEwMDAnLFxuICAgICAgICB9LFxuICAgICAgICBjb3VudGVyOiAwLFxuICAgICAgICBmb3J3YXJkZXJBZGRyZXNzOiAnMHg1M2I4ZTkxYmIzYjhmNjE4YjVmMDEwMDRlZjEwOGYxMzRmMjE5NTczJyxcbiAgICAgICAgdG9rZW5BZGRyZXNzOiAnMHhiY2Y5MzVkMjA2Y2EzMjkyOWUxYjg4N2EwN2VkMjQwZjBkOGNjZDIyJyxcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJyxcbiAgICAgICAgZm9yd2FyZGVyVmVyc2lvbjogMixcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdHhCdWlkZXJGcm9tUmF3OiBhbnkgPSBnZXRCdWlsZGVyKCd0ZXRoJyk7XG4gICAgICB0eEJ1aWRlckZyb21SYXcuZnJvbSh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHR4QnVpZGVyRnJvbVJhdy5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gcmVzdWx0LnRvSnNvbigpO1xuICAgICAgdHhKc29uLnRvLnNob3VsZC5lcXVhbCgnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJyk7XG4gICAgICB0eEpzb24uZGF0YS5zaG91bGQuY29udGFpbkVxbCgnYmNmOTM1ZDIwNmNhMzI5MjllMWI4ODdhMDdlZDI0MGYwZDhjY2QyMicpO1xuICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLmNvbnRhaW5FcWwoJzUzYjhlOTFiYjNiOGY2MThiNWYwMTAwNGVmMTA4ZjEzNGYyMTk1NzMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdhbiB1bnNpZ25lZCBmbHVzaCB0cmFuc2FjdGlvbiBmcm9tIHNlcmlhbGl6ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6ICcxMCcsXG4gICAgICAgICAgZ2FzTGltaXQ6ICcxMDAwJyxcbiAgICAgICAgfSxcbiAgICAgICAgY291bnRlcjogMCxcbiAgICAgICAgZm9yd2FyZGVyQWRkcmVzczogJzB4NTNiOGU5MWJiM2I4ZjYxOGI1ZjAxMDA0ZWYxMDhmMTM0ZjIxOTU3MycsXG4gICAgICAgIHRva2VuQWRkcmVzczogJzB4YmNmOTM1ZDIwNmNhMzI5MjllMWI4ODdhMDdlZDI0MGYwZDhjY2QyMicsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MScsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBub3cgcmVidWlsZCBmcm9tIHRoZSBzaWduZWQgc2VyaWFsaXplZCB0eCBhbmQgbWFrZSBzdXJlIGl0IHN0YXlzIHRoZSBzYW1lXG4gICAgICBjb25zdCBuZXdUeEJ1aWxkZXI6IGFueSA9IGdldEJ1aWxkZXIoJ3RldGgnKTtcbiAgICAgIG5ld1R4QnVpbGRlci5mcm9tKHNlcmlhbGl6ZWQpO1xuICAgICAgY29uc3QgbmV3VHggPSBhd2FpdCBuZXdUeEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5lcXVhbChuZXdUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLCBzZXJpYWxpemVkKTtcbiAgICAgIG5ld1R4LnRvSnNvbigpLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aChmbHVzaEZvcndhcmRlclRva2Vuc01ldGhvZElkKTtcbiAgICAgIHNob3VsZC5lcXVhbChuZXdUeC50b0pzb24oKS52LCAnMHg3NycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Egc2lnbmVkIGZsdXNoIHRyYW5zYWN0aW9uIGZyb20gc2VyaWFsaXplZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgIGZlZToge1xuICAgICAgICAgIGZlZTogJzEwJyxcbiAgICAgICAgICBnYXNMaW1pdDogJzEwMDAnLFxuICAgICAgICB9LFxuICAgICAgICBjb3VudGVyOiAwLFxuICAgICAgICBmb3J3YXJkZXJBZGRyZXNzOiAnMHg1M2I4ZTkxYmIzYjhmNjE4YjVmMDEwMDRlZjEwOGYxMzRmMjE5NTczJyxcbiAgICAgICAgdG9rZW5BZGRyZXNzOiAnMHhiY2Y5MzVkMjA2Y2EzMjkyOWUxYjg4N2EwN2VkMjQwZjBkOGNjZDIyJyxcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJyxcbiAgICAgICAga2V5OiBkZWZhdWx0S2V5UGFpcixcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIC8vIG5vdyByZWJ1aWxkIGZyb20gdGhlIHNpZ25lZCBzZXJpYWxpemVkIHR4IGFuZCBtYWtlIHN1cmUgaXQgc3RheXMgdGhlIHNhbWVcbiAgICAgIGNvbnN0IG5ld1R4QnVpbGRlcjogYW55ID0gZ2V0QnVpbGRlcigndGV0aCcpO1xuICAgICAgbmV3VHhCdWlsZGVyLmZyb20oc2VyaWFsaXplZCk7XG4gICAgICBjb25zdCBuZXdUeCA9IGF3YWl0IG5ld1R4QnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmVxdWFsKG5ld1R4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHNlcmlhbGl6ZWQpO1xuICAgICAgc2hvdWxkLmVxdWFsKG5ld1R4LmlkLCAnMHg1YmZkNGM2YjlhZTlkZmJjOWUwNjIyNDdjMGRlYmU0ZTFjNjg3MGE3NmM0MjBjZTdmNmUzMzUzOTA0MjBkY2Q2Jyk7XG4gICAgICBjb25zdCB0eEpzb24gPSBuZXdUeC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5leGlzdCh0eEpzb24udik7XG4gICAgICBzaG91bGQuZXhpc3QodHhKc29uLnIpO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi5zKTtcbiAgICAgIHNob3VsZC5leGlzdCh0eEpzb24uZnJvbSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgZmFpbCB0byBidWlsZCcsICgpID0+IHtcbiAgICBpdCgnYSB0cmFuc2FjdGlvbiB3aXRob3V0IGZlZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICBjb3VudGVyOiAwLFxuICAgICAgICBmb3J3YXJkZXJBZGRyZXNzOiAnMHg1M2I4ZTkxYmIzYjhmNjE4YjVmMDEwMDRlZjEwOGYxMzRmMjE5NTczJyxcbiAgICAgICAgdG9rZW5BZGRyZXNzOiAnMHhiY2Y5MzVkMjA2Y2EzMjkyOWUxYjg4N2EwN2VkMjQwZjBkOGNjZDIyJyxcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJyxcbiAgICAgIH0pLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3NpbmcgZmVlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSB0cmFuc2FjdGlvbiB3aXRob3V0IGNvbnRyYWN0QWRkcmVzcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6ICcxMCcsXG4gICAgICAgICAgZ2FzTGltaXQ6ICcxMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvdW50ZXI6IDAsXG4gICAgICAgIGZvcndhcmRlckFkZHJlc3M6ICcweDUzYjhlOTFiYjNiOGY2MThiNWYwMTAwNGVmMTA4ZjEzNGYyMTk1NzMnLFxuICAgICAgICB0b2tlbkFkZHJlc3M6ICcweGJjZjkzNWQyMDZjYTMyOTI5ZTFiODg3YTA3ZWQyNDBmMGQ4Y2NkMjInLFxuICAgICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBjb250cmFjdCBhZGRyZXNzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSB3YWxsZXQgZmx1c2ggZm9yd2FyZGVyIFY0IHRyYW5zYWN0aW9uIHdpdGggZGlmZmVyZW50IGNvbnRyYWN0IGFkZHJlc3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBidWlsZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgZmVlOiB7XG4gICAgICAgICAgZmVlOiAnMTAnLFxuICAgICAgICAgIGdhc0xpbWl0OiAnMTAwMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvdW50ZXI6IDAsXG4gICAgICAgIGZvcndhcmRlckFkZHJlc3M6ICcweDUzYjhlOTFiYjNiOGY2MThiNWYwMTAwNGVmMTA4ZjEzNGYyMTk1NzMnLFxuICAgICAgICB0b2tlbkFkZHJlc3M6ICcweGJjZjkzNWQyMDZjYTMyOTI5ZTFiODg3YTA3ZWQyNDBmMGQ4Y2NkMjInLFxuICAgICAgICBjb250cmFjdEFkZHJlc3M6ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnLFxuICAgICAgICBmb3J3YXJkZXJWZXJzaW9uOiA0LFxuICAgICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCBjb250cmFjdCBhZGRyZXNzOiAweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHRyYW5zYWN0aW9uIHdpdGhvdXQgdG9rZW5BZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgIGZlZToge1xuICAgICAgICAgIGZlZTogJzEwJyxcbiAgICAgICAgICBnYXNMaW1pdDogJzEwJyxcbiAgICAgICAgfSxcbiAgICAgICAgY291bnRlcjogMCxcbiAgICAgICAgZm9yd2FyZGVyQWRkcmVzczogJzB4NTNiOGU5MWJiM2I4ZjYxOGI1ZjAxMDA0ZWYxMDhmMTM0ZjIxOTU3MycsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MScsXG4gICAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIHRva2VuIGFkZHJlc3MnKTtcbiAgICB9KTtcblxuICAgIGl0KCdhIHRyYW5zYWN0aW9uIHdpdGhvdXQgZm9yd2FyZGVyQWRkcmVzcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6ICcxMCcsXG4gICAgICAgICAgZ2FzTGltaXQ6ICcxMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvdW50ZXI6IDAsXG4gICAgICAgIHRva2VuQWRkcmVzczogJzB4YmNmOTM1ZDIwNmNhMzI5MjllMWI4ODdhMDdlZDI0MGYwZDhjY2QyMicsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MScsXG4gICAgICB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIGZvcndhcmRlciBhZGRyZXNzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSB0cmFuc2FjdGlvbiB3aXRoIGludmFsaWQgY291bnRlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICBmZWU6IHtcbiAgICAgICAgICBmZWU6ICcxMCcsXG4gICAgICAgICAgZ2FzTGltaXQ6ICcxMCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNvdW50ZXI6IC0xLFxuICAgICAgICB0b2tlbkFkZHJlc3M6ICcweGJjZjkzNWQyMDZjYTMyOTI5ZTFiODg3YTA3ZWQyNDBmMGQ4Y2NkMjInLFxuICAgICAgICBjb250cmFjdEFkZHJlc3M6ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnLFxuICAgICAgfSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCBjb3VudGVyOiAtMScpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=send.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/send.ts"],"names":[],"mappings":""}