@bitgo-beta/abstract-eth 1.2.3-alpha.401 → 1.2.3-alpha.402

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 (153) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/tsconfig.tsbuildinfo +1 -1
  3. package/package.json +8 -8
  4. package/dist/src/abstractEthLikeCoin.d.ts +0 -95
  5. package/dist/src/abstractEthLikeCoin.d.ts.map +0 -1
  6. package/dist/src/abstractEthLikeCoin.js +0 -160
  7. package/dist/src/abstractEthLikeNewCoins.d.ts +0 -749
  8. package/dist/src/abstractEthLikeNewCoins.d.ts.map +0 -1
  9. package/dist/src/abstractEthLikeNewCoins.js +0 -2229
  10. package/dist/src/ethLikeToken.d.ts +0 -70
  11. package/dist/src/ethLikeToken.d.ts.map +0 -1
  12. package/dist/src/ethLikeToken.js +0 -360
  13. package/dist/src/index.d.ts +0 -5
  14. package/dist/src/index.d.ts.map +0 -1
  15. package/dist/src/index.js +0 -21
  16. package/dist/src/lib/contractCall.d.ts +0 -8
  17. package/dist/src/lib/contractCall.d.ts.map +0 -1
  18. package/dist/src/lib/contractCall.js +0 -17
  19. package/dist/src/lib/iface.d.ts +0 -133
  20. package/dist/src/lib/iface.d.ts.map +0 -1
  21. package/dist/src/lib/iface.js +0 -8
  22. package/dist/src/lib/index.d.ts +0 -16
  23. package/dist/src/lib/index.d.ts.map +0 -1
  24. package/dist/src/lib/index.js +0 -57
  25. package/dist/src/lib/keyPair.d.ts +0 -26
  26. package/dist/src/lib/keyPair.d.ts.map +0 -1
  27. package/dist/src/lib/keyPair.js +0 -65
  28. package/dist/src/lib/messages/eip191/eip191Message.d.ts +0 -12
  29. package/dist/src/lib/messages/eip191/eip191Message.d.ts.map +0 -1
  30. package/dist/src/lib/messages/eip191/eip191Message.js +0 -25
  31. package/dist/src/lib/messages/eip191/eip191MessageBuilder.d.ts +0 -19
  32. package/dist/src/lib/messages/eip191/eip191MessageBuilder.d.ts.map +0 -1
  33. package/dist/src/lib/messages/eip191/eip191MessageBuilder.js +0 -27
  34. package/dist/src/lib/messages/eip191/index.d.ts +0 -3
  35. package/dist/src/lib/messages/eip191/index.d.ts.map +0 -1
  36. package/dist/src/lib/messages/eip191/index.js +0 -19
  37. package/dist/src/lib/messages/eip712/eip712Message.d.ts +0 -6
  38. package/dist/src/lib/messages/eip712/eip712Message.d.ts.map +0 -1
  39. package/dist/src/lib/messages/eip712/eip712Message.js +0 -27
  40. package/dist/src/lib/messages/eip712/eip712MessageBuilder.d.ts +0 -7
  41. package/dist/src/lib/messages/eip712/eip712MessageBuilder.d.ts.map +0 -1
  42. package/dist/src/lib/messages/eip712/eip712MessageBuilder.js +0 -15
  43. package/dist/src/lib/messages/eip712/index.d.ts +0 -3
  44. package/dist/src/lib/messages/eip712/index.d.ts.map +0 -1
  45. package/dist/src/lib/messages/eip712/index.js +0 -19
  46. package/dist/src/lib/messages/index.d.ts +0 -4
  47. package/dist/src/lib/messages/index.d.ts.map +0 -1
  48. package/dist/src/lib/messages/index.js +0 -20
  49. package/dist/src/lib/messages/messageBuilderFactory.d.ts +0 -7
  50. package/dist/src/lib/messages/messageBuilderFactory.d.ts.map +0 -1
  51. package/dist/src/lib/messages/messageBuilderFactory.js +0 -23
  52. package/dist/src/lib/transaction.d.ts +0 -67
  53. package/dist/src/lib/transaction.d.ts.map +0 -1
  54. package/dist/src/lib/transaction.js +0 -142
  55. package/dist/src/lib/transactionBuilder.d.ts +0 -270
  56. package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
  57. package/dist/src/lib/transactionBuilder.js +0 -822
  58. package/dist/src/lib/transferBuilder.d.ts +0 -76
  59. package/dist/src/lib/transferBuilder.d.ts.map +0 -1
  60. package/dist/src/lib/transferBuilder.js +0 -307
  61. package/dist/src/lib/transferBuilders/baseNFTTransferBuilder.d.ts +0 -54
  62. package/dist/src/lib/transferBuilders/baseNFTTransferBuilder.d.ts.map +0 -1
  63. package/dist/src/lib/transferBuilders/baseNFTTransferBuilder.js +0 -120
  64. package/dist/src/lib/transferBuilders/index.d.ts +0 -4
  65. package/dist/src/lib/transferBuilders/index.d.ts.map +0 -1
  66. package/dist/src/lib/transferBuilders/index.js +0 -20
  67. package/dist/src/lib/transferBuilders/transferBuilderERC1155.d.ts +0 -17
  68. package/dist/src/lib/transferBuilders/transferBuilderERC1155.d.ts.map +0 -1
  69. package/dist/src/lib/transferBuilders/transferBuilderERC1155.js +0 -96
  70. package/dist/src/lib/transferBuilders/transferBuilderERC721.d.ts +0 -16
  71. package/dist/src/lib/transferBuilders/transferBuilderERC721.d.ts.map +0 -1
  72. package/dist/src/lib/transferBuilders/transferBuilderERC721.js +0 -81
  73. package/dist/src/lib/types.d.ts +0 -39
  74. package/dist/src/lib/types.d.ts.map +0 -1
  75. package/dist/src/lib/types.js +0 -137
  76. package/dist/src/lib/utils.d.ts +0 -310
  77. package/dist/src/lib/utils.d.ts.map +0 -1
  78. package/dist/src/lib/utils.js +0 -829
  79. package/dist/src/lib/walletUtil.d.ts +0 -40
  80. package/dist/src/lib/walletUtil.d.ts.map +0 -1
  81. package/dist/src/lib/walletUtil.js +0 -43
  82. package/dist/src/types.d.ts +0 -9
  83. package/dist/src/types.d.ts.map +0 -1
  84. package/dist/src/types.js +0 -3
  85. package/dist/test/index.d.ts +0 -2
  86. package/dist/test/index.d.ts.map +0 -1
  87. package/dist/test/index.js +0 -18
  88. package/dist/test/unit/coin.d.ts +0 -8
  89. package/dist/test/unit/coin.d.ts.map +0 -1
  90. package/dist/test/unit/coin.js +0 -577
  91. package/dist/test/unit/index.d.ts +0 -6
  92. package/dist/test/unit/index.d.ts.map +0 -1
  93. package/dist/test/unit/index.js +0 -22
  94. package/dist/test/unit/messages/abstractEthMessageBuilderTests.d.ts +0 -3
  95. package/dist/test/unit/messages/abstractEthMessageBuilderTests.d.ts.map +0 -1
  96. package/dist/test/unit/messages/abstractEthMessageBuilderTests.js +0 -110
  97. package/dist/test/unit/messages/abstractEthMessageTestTypes.d.ts +0 -43
  98. package/dist/test/unit/messages/abstractEthMessageTestTypes.d.ts.map +0 -1
  99. package/dist/test/unit/messages/abstractEthMessageTestTypes.js +0 -3
  100. package/dist/test/unit/messages/abstractEthMessagesTests.d.ts +0 -3
  101. package/dist/test/unit/messages/abstractEthMessagesTests.d.ts.map +0 -1
  102. package/dist/test/unit/messages/abstractEthMessagesTests.js +0 -129
  103. package/dist/test/unit/messages/eip191/eip191Message.d.ts +0 -2
  104. package/dist/test/unit/messages/eip191/eip191Message.d.ts.map +0 -1
  105. package/dist/test/unit/messages/eip191/eip191Message.js +0 -15
  106. package/dist/test/unit/messages/eip191/eip191MessageBuilder.d.ts +0 -2
  107. package/dist/test/unit/messages/eip191/eip191MessageBuilder.d.ts.map +0 -1
  108. package/dist/test/unit/messages/eip191/eip191MessageBuilder.js +0 -16
  109. package/dist/test/unit/messages/eip191/fixtures.d.ts +0 -109
  110. package/dist/test/unit/messages/eip191/fixtures.d.ts.map +0 -1
  111. package/dist/test/unit/messages/eip191/fixtures.js +0 -63
  112. package/dist/test/unit/messages/eip712/eip712Message.d.ts +0 -2
  113. package/dist/test/unit/messages/eip712/eip712Message.d.ts.map +0 -1
  114. package/dist/test/unit/messages/eip712/eip712Message.js +0 -15
  115. package/dist/test/unit/messages/eip712/eip712MessageBuilder.d.ts +0 -2
  116. package/dist/test/unit/messages/eip712/eip712MessageBuilder.d.ts.map +0 -1
  117. package/dist/test/unit/messages/eip712/eip712MessageBuilder.js +0 -16
  118. package/dist/test/unit/messages/eip712/fixtures.d.ts +0 -76
  119. package/dist/test/unit/messages/eip712/fixtures.d.ts.map +0 -1
  120. package/dist/test/unit/messages/eip712/fixtures.js +0 -120
  121. package/dist/test/unit/messages/index.d.ts +0 -4
  122. package/dist/test/unit/messages/index.d.ts.map +0 -1
  123. package/dist/test/unit/messages/index.js +0 -20
  124. package/dist/test/unit/messages/messageBuilderFactory.d.ts +0 -2
  125. package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +0 -1
  126. package/dist/test/unit/messages/messageBuilderFactory.js +0 -52
  127. package/dist/test/unit/token.d.ts +0 -2
  128. package/dist/test/unit/token.d.ts.map +0 -1
  129. package/dist/test/unit/token.js +0 -37
  130. package/dist/test/unit/transaction.d.ts +0 -3
  131. package/dist/test/unit/transaction.d.ts.map +0 -1
  132. package/dist/test/unit/transaction.js +0 -60
  133. package/dist/test/unit/transactionBuilder/addressInitialization.d.ts +0 -8
  134. package/dist/test/unit/transactionBuilder/addressInitialization.d.ts.map +0 -1
  135. package/dist/test/unit/transactionBuilder/addressInitialization.js +0 -95
  136. package/dist/test/unit/transactionBuilder/flushNft.d.ts +0 -2
  137. package/dist/test/unit/transactionBuilder/flushNft.d.ts.map +0 -1
  138. package/dist/test/unit/transactionBuilder/flushNft.js +0 -381
  139. package/dist/test/unit/transactionBuilder/index.d.ts +0 -5
  140. package/dist/test/unit/transactionBuilder/index.d.ts.map +0 -1
  141. package/dist/test/unit/transactionBuilder/index.js +0 -21
  142. package/dist/test/unit/transactionBuilder/send.d.ts +0 -3
  143. package/dist/test/unit/transactionBuilder/send.d.ts.map +0 -1
  144. package/dist/test/unit/transactionBuilder/send.js +0 -197
  145. package/dist/test/unit/transactionBuilder/walletInitialization.d.ts +0 -10
  146. package/dist/test/unit/transactionBuilder/walletInitialization.d.ts.map +0 -1
  147. package/dist/test/unit/transactionBuilder/walletInitialization.js +0 -124
  148. package/dist/test/unit/transferBuilder.d.ts +0 -2
  149. package/dist/test/unit/transferBuilder.d.ts.map +0 -1
  150. package/dist/test/unit/transferBuilder.js +0 -76
  151. package/dist/test/unit/utils.d.ts +0 -2
  152. package/dist/test/unit/utils.d.ts.map +0 -1
  153. package/dist/test/unit/utils.js +0 -184
@@ -1,95 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.testAddressInitializationWithoutContractAddress = testAddressInitializationWithoutContractAddress;
7
- exports.testFailsWithInvalidForwarderVersion = testFailsWithInvalidForwarderVersion;
8
- exports.testAddressInitializationBuildsCorrectlyAndReturnsAddress = testAddressInitializationBuildsCorrectlyAndReturnsAddress;
9
- exports.testAddressInitializationBuildsFromSerializedData = testAddressInitializationBuildsFromSerializedData;
10
- exports.testAddressInitializationBuildsFromSignedSerializedData = testAddressInitializationBuildsFromSignedSerializedData;
11
- exports.testContractCallForCreateForwarder = testContractCallForCreateForwarder;
12
- const should_1 = __importDefault(require("should"));
13
- const sdk_core_1 = require("@bitgo-beta/sdk-core");
14
- async function testAddressInitializationWithoutContractAddress(txBuilder) {
15
- it('should fail if there is no contract address', async () => {
16
- txBuilder.type(sdk_core_1.TransactionType.AddressInitialization);
17
- txBuilder.fee({
18
- fee: '10',
19
- gasLimit: '1000',
20
- });
21
- txBuilder.counter(1);
22
- await txBuilder.build().should.be.rejectedWith('Invalid transaction: missing contract address');
23
- });
24
- }
25
- async function testFailsWithInvalidForwarderVersion(txBuilder, testData) {
26
- it('should fail if forwarder version is invalid', async () => {
27
- try {
28
- txBuilder.type(sdk_core_1.TransactionType.AddressInitialization);
29
- txBuilder.fee({
30
- fee: '10',
31
- gasLimit: '1000',
32
- });
33
- txBuilder.contract(testData.FORWARDER_FACTORY_ADDRESS);
34
- txBuilder.forwarderVersion(3);
35
- }
36
- catch (e) {
37
- should_1.default.equal(e.message, 'Invalid forwarder version: 3');
38
- }
39
- });
40
- }
41
- async function testAddressInitializationBuildsCorrectlyAndReturnsAddress(txBuilder, testData) {
42
- it('should build properly and return a correct address', async () => {
43
- txBuilder.type(sdk_core_1.TransactionType.AddressInitialization);
44
- txBuilder.fee({
45
- fee: '10',
46
- gasLimit: '1000',
47
- });
48
- txBuilder.counter(1);
49
- txBuilder.contract(testData.FORWARDER_FACTORY_ADDRESS);
50
- txBuilder.baseAddress(testData.BASE_ADDRESS);
51
- txBuilder.feeAddress(testData.FEE_ADDRESS);
52
- txBuilder.forwarderVersion(4);
53
- txBuilder.salt('0x1');
54
- txBuilder.initCode(testData.FORWARDER_IMPLEMENTATION_ADDRESS);
55
- txBuilder.sign({ key: testData.KEYPAIR_PRV.getKeys().prv });
56
- const tx = await txBuilder.build();
57
- const txJson = tx.toJson();
58
- should_1.default.equal(txJson.deployedAddress, testData.DEPLOYED_ADDRESS);
59
- should_1.default.equal(txJson.to, testData.FORWARDER_FACTORY_ADDRESS);
60
- });
61
- }
62
- async function testAddressInitializationBuildsFromSerializedData(txBuilder, testData) {
63
- it('should build properly from serialized', async () => {
64
- txBuilder.type(sdk_core_1.TransactionType.AddressInitialization);
65
- txBuilder.from(testData.UNSIGNED_ADDRESS_INIT);
66
- const tx = await txBuilder.build();
67
- const txJson = tx.toJson();
68
- should_1.default.equal(txJson.to, testData.FORWARDER_FACTORY_ADDRESS);
69
- });
70
- }
71
- async function testAddressInitializationBuildsFromSignedSerializedData(txBuilder, testData) {
72
- it('should build properly from signed serialized', async () => {
73
- txBuilder.type(sdk_core_1.TransactionType.AddressInitialization);
74
- txBuilder.from(testData.SIGNED_ADDRESS_INIT);
75
- const tx = await txBuilder.build();
76
- const txJson = tx.toJson();
77
- should_1.default.equal(txJson.to, testData.FORWARDER_FACTORY_ADDRESS);
78
- should_1.default.equal(txJson.from, testData.ACCOUNT_1);
79
- });
80
- }
81
- async function testContractCallForCreateForwarder(txBuilder, testData) {
82
- it('should build properly createForwarder call for recovery', async () => {
83
- txBuilder.type(sdk_core_1.TransactionType.ContractCall);
84
- txBuilder.contract(testData.BASE_ADDRESS);
85
- txBuilder.data(testData.CREATE_FORWARDER_METHOD);
86
- txBuilder.fee({
87
- fee: '10',
88
- gasLimit: '1000',
89
- });
90
- const tx = await txBuilder.build();
91
- const txJson = tx.toJson();
92
- should_1.default.equal(txJson.to, testData.BASE_ADDRESS);
93
- });
94
- }
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzc0luaXRpYWxpemF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci9hZGRyZXNzSW5pdGlhbGl6YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFJQSwwR0FVQztBQUVELG9GQWNDO0FBRUQsOEhBd0JDO0FBRUQsOEdBUUM7QUFFRCwwSEFZQztBQUVELGdGQWFDO0FBL0ZELG9EQUE0QjtBQUM1QixtREFBdUQ7QUFHaEQsS0FBSyxVQUFVLCtDQUErQyxDQUFDLFNBQTZCO0lBQ2pHLEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMzRCxTQUFTLENBQUMsSUFBSSxDQUFDLDBCQUFlLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN0RCxTQUFTLENBQUMsR0FBRyxDQUFDO1lBQ1osR0FBRyxFQUFFLElBQUk7WUFDVCxRQUFRLEVBQUUsTUFBTTtTQUNqQixDQUFDLENBQUM7UUFDSCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLCtDQUErQyxDQUFDLENBQUM7SUFDbEcsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRU0sS0FBSyxVQUFVLG9DQUFvQyxDQUFDLFNBQTZCLEVBQUUsUUFBYTtJQUNyRyxFQUFFLENBQUMsNkNBQTZDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDM0QsSUFBSSxDQUFDO1lBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBZSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDdEQsU0FBUyxDQUFDLEdBQUcsQ0FBQztnQkFDWixHQUFHLEVBQUUsSUFBSTtnQkFDVCxRQUFRLEVBQUUsTUFBTTthQUNqQixDQUFDLENBQUM7WUFDSCxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEs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QUMsTUFBTSxFQUFFLENBQUM7UUFDM0IsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM1RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFTSxLQUFLLFVBQVUsa0NBQWtDLENBQUMsU0FBNkIsRUFBRSxRQUFhO0lBQ25HLEVBQUUsQ0FBQyx5REFBeUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN2RSxTQUFTLENBQUMsSUFBSSxDQUFDLDBCQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0MsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNqRCxTQUFTLENBQUMsR0FBRyxDQUFDO1lBQ1osR0FBRyxFQUFFLElBQUk7WUFDVCxRQUFRLEVBQUUsTUFBTTtTQUNqQixDQUFDLENBQUM7UUFDSCxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0IsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDakQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RBZGRyZXNzSW5pdGlhbGl6YXRpb25XaXRob3V0Q29udHJhY3RBZGRyZXNzKHR4QnVpbGRlcjogVHJhbnNhY3Rpb25CdWlsZGVyKSB7XG4gIGl0KCdzaG91bGQgZmFpbCBpZiB0aGVyZSBpcyBubyBjb250cmFjdCBhZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5BZGRyZXNzSW5pdGlhbGl6YXRpb24pO1xuICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgZmVlOiAnMTAnLFxuICAgICAgZ2FzTGltaXQ6ICcxMDAwJyxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIuY291bnRlcigxKTtcbiAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIGNvbnRyYWN0IGFkZHJlc3MnKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0RmFpbHNXaXRoSW52YWxpZEZvcndhcmRlclZlcnNpb24odHhCdWlsZGVyOiBUcmFuc2FjdGlvbkJ1aWxkZXIsIHRlc3REYXRhOiBhbnkpIHtcbiAgaXQoJ3Nob3VsZCBmYWlsIGlmIGZvcndhcmRlciB2ZXJzaW9uIGlzIGludmFsaWQnLCBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5BZGRyZXNzSW5pdGlhbGl6YXRpb24pO1xuICAgICAgdHhCdWlsZGVyLmZlZSh7XG4gICAgICAgIGZlZTogJzEwJyxcbiAgICAgICAgZ2FzTGltaXQ6ICcxMDAwJyxcbiAgICAgIH0pO1xuICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KHRlc3REYXRhLkZPUldBUkRFUl9GQUNUT1JZX0FERFJFU1MpO1xuICAgICAgdHhCdWlsZGVyLmZvcndhcmRlclZlcnNpb24oMyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2hvdWxkLmVxdWFsKGUubWVzc2FnZSwgJ0ludmFsaWQgZm9yd2FyZGVyIHZlcnNpb246IDMnKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdEFkZHJlc3NJbml0aWFsaXphdGlvbkJ1aWxkc0NvcnJlY3RseUFuZFJldHVybnNBZGRyZXNzKFxuICB0eEJ1aWxkZXI6IFRyYW5zYWN0aW9uQnVpbGRlcixcbiAgdGVzdERhdGE6IGFueVxuKSB7XG4gIGl0KCdzaG91bGQgYnVpbGQgcHJvcGVybHkgYW5kIHJldHVybiBhIGNvcnJlY3QgYWRkcmVzcycsIGFzeW5jICgpID0+IHtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuQWRkcmVzc0luaXRpYWxpemF0aW9uKTtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzEwJyxcbiAgICAgIGdhc0xpbWl0OiAnMTAwMCcsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLmNvdW50ZXIoMSk7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0KHRlc3REYXRhLkZPUldBUkRFUl9GQUNUT1JZX0FERFJFU1MpO1xuICAgIHR4QnVpbGRlci5iYXNlQWRkcmVzcyh0ZXN0RGF0YS5CQVNFX0FERFJFU1MpO1xuICAgIHR4QnVpbGRlci5mZWVBZGRyZXNzKHRlc3REYXRhLkZFRV9BRERSRVNTKTtcbiAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyVmVyc2lvbig0KTtcbiAgICB0eEJ1aWxkZXIuc2FsdCgnMHgxJyk7XG4gICAgdHhCdWlsZGVyLmluaXRDb2RlKHRlc3REYXRhLkZPUldBUkRFUl9JTVBMRU1FTlRBVElPTl9BRERSRVNTKTtcbiAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuS0VZUEFJUl9QUlYuZ2V0S2V5cygpLnBydiB9KTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5kZXBsb3llZEFkZHJlc3MsIHRlc3REYXRhLkRFUExPWUVEX0FERFJFU1MpO1xuICAgIHNob3VsZC5lcXVhbCh0eEpzb24udG8sIHRlc3REYXRhLkZPUldBUkRFUl9GQUNUT1JZX0FERFJFU1MpO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RBZGRyZXNzSW5pdGlhbGl6YXRpb25CdWlsZHNGcm9tU2VyaWFsaXplZERhdGEodHhCdWlsZGVyOiBUcmFuc2FjdGlvbkJ1aWxkZXIsIHRlc3REYXRhOiBhbnkpIHtcbiAgaXQoJ3Nob3VsZCBidWlsZCBwcm9wZXJseSBmcm9tIHNlcmlhbGl6ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkFkZHJlc3NJbml0aWFsaXphdGlvbik7XG4gICAgdHhCdWlsZGVyLmZyb20odGVzdERhdGEuVU5TSUdORURfQUREUkVTU19JTklUKTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgIHNob3VsZC5lcXVhbCh0eEpzb24udG8sIHRlc3REYXRhLkZPUldBUkRFUl9GQUNUT1JZX0FERFJFU1MpO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RBZGRyZXNzSW5pdGlhbGl6YXRpb25CdWlsZHNGcm9tU2lnbmVkU2VyaWFsaXplZERhdGEoXG4gIHR4QnVpbGRlcjogVHJhbnNhY3Rpb25CdWlsZGVyLFxuICB0ZXN0RGF0YTogYW55XG4pIHtcbiAgaXQoJ3Nob3VsZCBidWlsZCBwcm9wZXJseSBmcm9tIHNpZ25lZCBzZXJpYWxpemVkJywgYXN5bmMgKCkgPT4ge1xuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5BZGRyZXNzSW5pdGlhbGl6YXRpb24pO1xuICAgIHR4QnVpbGRlci5mcm9tKHRlc3REYXRhLlNJR05FRF9BRERSRVNTX0lOSVQpO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4SnNvbi50bywgdGVzdERhdGEuRk9SV0FSREVSX0ZBQ1RPUllfQUREUkVTUyk7XG4gICAgc2hvdWxkLmVxdWFsKHR4SnNvbi5mcm9tLCB0ZXN0RGF0YS5BQ0NPVU5UXzEpO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RDb250cmFjdENhbGxGb3JDcmVhdGVGb3J3YXJkZXIodHhCdWlsZGVyOiBUcmFuc2FjdGlvbkJ1aWxkZXIsIHRlc3REYXRhOiBhbnkpIHtcbiAgaXQoJ3Nob3VsZCBidWlsZCBwcm9wZXJseSBjcmVhdGVGb3J3YXJkZXIgY2FsbCBmb3IgcmVjb3ZlcnknLCBhc3luYyAoKSA9PiB7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCk7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0KHRlc3REYXRhLkJBU0VfQUREUkVTUyk7XG4gICAgdHhCdWlsZGVyLmRhdGEodGVzdERhdGEuQ1JFQVRFX0ZPUldBUkRFUl9NRVRIT0QpO1xuICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgZmVlOiAnMTAnLFxuICAgICAgZ2FzTGltaXQ6ICcxMDAwJyxcbiAgICB9KTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgIHNob3VsZC5lcXVhbCh0eEpzb24udG8sIHRlc3REYXRhLkJBU0VfQUREUkVTUyk7XG4gIH0pO1xufVxuIl19
@@ -1,2 +0,0 @@
1
- export declare function runFlushNftTests(coinName: string, getBuilder: any): void;
2
- //# sourceMappingURL=flushNft.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flushNft.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/flushNft.ts"],"names":[],"mappings":"AAIA,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,KAAA,GAAG,IAAI,CAucnE"}
@@ -1,381 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.runFlushNftTests = runFlushNftTests;
7
- const sdk_core_1 = require("@bitgo-beta/sdk-core");
8
- const should_1 = __importDefault(require("should"));
9
- function runFlushNftTests(coinName, getBuilder) {
10
- describe(`${coinName} transaction builder flush NFTs`, () => {
11
- let txBuilder;
12
- beforeEach(() => {
13
- txBuilder = getBuilder(coinName);
14
- txBuilder.fee({
15
- fee: '1000000000',
16
- gasLimit: '100000',
17
- });
18
- txBuilder.counter(1);
19
- });
20
- describe('ERC721 Flush', () => {
21
- it('should build a flush ERC721 transaction with forwarder v4', async () => {
22
- const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
23
- const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
24
- const tokenId = '12345';
25
- txBuilder.type(sdk_core_1.TransactionType.FlushERC721);
26
- txBuilder.contract(forwarderAddress);
27
- txBuilder.tokenAddress(tokenAddress);
28
- txBuilder.forwarderAddress(forwarderAddress);
29
- txBuilder.forwarderVersion(4);
30
- txBuilder.tokenId(tokenId);
31
- const tx = await txBuilder.build();
32
- const txJson = tx.toJson();
33
- should_1.default.equal(tx.type, sdk_core_1.TransactionType.FlushERC721);
34
- should_1.default.equal(txJson.to, forwarderAddress);
35
- should_1.default.exist(txJson.data);
36
- txJson.data.should.startWith('0x159e44d7');
37
- should_1.default.exist(txJson.value);
38
- txJson.value.should.equal('0');
39
- should_1.default.exist(txJson.gasLimit);
40
- txJson.gasLimit.should.equal('100000');
41
- should_1.default.exist(txJson.gasPrice);
42
- txJson.gasPrice.should.equal('1000000000');
43
- // Verify the encoded parameters in the data
44
- const encodedTokenAddress = tokenAddress.slice(2).toLowerCase().padStart(64, '0');
45
- const encodedTokenId = BigInt(tokenId).toString(16).padStart(64, '0');
46
- txJson.data.should.containEql(encodedTokenAddress);
47
- txJson.data.should.containEql(encodedTokenId);
48
- });
49
- it('should build a flush ERC721 transaction with forwarder version < v4', async () => {
50
- const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
51
- const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
52
- const contractAddress = '0x9e2c5712ab4caf402a98c4bf58c79a0dfe718ad1';
53
- const tokenId = '54321';
54
- txBuilder.type(sdk_core_1.TransactionType.FlushERC721);
55
- txBuilder.contract(contractAddress);
56
- txBuilder.tokenAddress(tokenAddress);
57
- txBuilder.forwarderAddress(forwarderAddress);
58
- txBuilder.forwarderVersion(2);
59
- txBuilder.tokenId(tokenId);
60
- const tx = await txBuilder.build();
61
- const txJson = tx.toJson();
62
- should_1.default.equal(tx.type, sdk_core_1.TransactionType.FlushERC721);
63
- should_1.default.equal(txJson.to, contractAddress);
64
- should_1.default.exist(txJson.data);
65
- txJson.data.should.startWith('0x5a953d0a'); // flushERC721Tokens method ID for v2 and below
66
- should_1.default.equal(txJson.value, '0');
67
- // Verify the encoded parameters
68
- const encodedForwarderAddress = forwarderAddress.slice(2).toLowerCase().padStart(64, '0');
69
- const encodedTokenAddress = tokenAddress.slice(2).toLowerCase().padStart(64, '0');
70
- const encodedTokenId = BigInt(tokenId).toString(16).padStart(64, '0');
71
- txJson.data.should.containEql(encodedForwarderAddress);
72
- txJson.data.should.containEql(encodedTokenAddress);
73
- txJson.data.should.containEql(encodedTokenId);
74
- });
75
- it('should build a flush ERC721 with large token ID', async () => {
76
- const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
77
- const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
78
- const tokenId = '115792089237316195423570985008687907853269984665640564039457584007913129639935'; // max uint256
79
- txBuilder.type(sdk_core_1.TransactionType.FlushERC721);
80
- txBuilder.contract(forwarderAddress);
81
- txBuilder.tokenAddress(tokenAddress);
82
- txBuilder.forwarderAddress(forwarderAddress);
83
- txBuilder.forwarderVersion(4);
84
- txBuilder.tokenId(tokenId);
85
- const tx = await txBuilder.build();
86
- const txJson = tx.toJson();
87
- should_1.default.equal(tx.type, sdk_core_1.TransactionType.FlushERC721);
88
- should_1.default.equal(txJson.to, forwarderAddress);
89
- should_1.default.exist(txJson.data);
90
- txJson.data.should.startWith('0x159e44d7');
91
- // Verify large token ID is properly encoded
92
- const maxUint256Hex = 'f'.repeat(64);
93
- txJson.data.should.containEql(maxUint256Hex);
94
- });
95
- it('should build flush ERC721 with token ID as string zero', async () => {
96
- const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
97
- const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
98
- const tokenId = '0';
99
- txBuilder.type(sdk_core_1.TransactionType.FlushERC721);
100
- txBuilder.contract(forwarderAddress);
101
- txBuilder.tokenAddress(tokenAddress);
102
- txBuilder.forwarderAddress(forwarderAddress);
103
- txBuilder.forwarderVersion(4);
104
- txBuilder.tokenId(tokenId);
105
- const tx = await txBuilder.build();
106
- const txJson = tx.toJson();
107
- should_1.default.equal(tx.type, sdk_core_1.TransactionType.FlushERC721);
108
- should_1.default.equal(txJson.to, forwarderAddress);
109
- should_1.default.exist(txJson.data);
110
- // Verify token ID 0 is properly encoded
111
- const encodedZeroTokenId = '0'.padStart(64, '0');
112
- txJson.data.should.containEql(encodedZeroTokenId);
113
- });
114
- it('should fail to build flush ERC721 without token address', async () => {
115
- const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
116
- const tokenId = '12345';
117
- txBuilder.type(sdk_core_1.TransactionType.FlushERC721);
118
- txBuilder.contract(forwarderAddress);
119
- txBuilder.tokenId(tokenId);
120
- txBuilder.forwarderVersion(4);
121
- await txBuilder.build().should.be.rejectedWith('Invalid transaction: missing token address');
122
- });
123
- it('should fail to build flush ERC721 without token ID', async () => {
124
- const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
125
- const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
126
- txBuilder.type(sdk_core_1.TransactionType.FlushERC721);
127
- txBuilder.contract(forwarderAddress);
128
- txBuilder.tokenAddress(tokenAddress);
129
- txBuilder.forwarderVersion(4);
130
- await txBuilder.build().should.be.rejectedWith('Token ID is required for ERC721 flush');
131
- });
132
- it('should fail to build flush ERC721 without contract address', async () => {
133
- const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
134
- const tokenId = '12345';
135
- txBuilder.type(sdk_core_1.TransactionType.FlushERC721);
136
- txBuilder.tokenAddress(tokenAddress);
137
- txBuilder.tokenId(tokenId);
138
- txBuilder.forwarderVersion(4);
139
- await txBuilder.build().should.be.rejected();
140
- });
141
- it('should decode flush ERC721 transaction from raw tx with v4', async () => {
142
- const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
143
- const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
144
- const tokenId = '12345';
145
- // Build a transaction first
146
- txBuilder.type(sdk_core_1.TransactionType.FlushERC721);
147
- txBuilder.contract(forwarderAddress);
148
- txBuilder.forwarderAddress(forwarderAddress);
149
- txBuilder.tokenAddress(tokenAddress);
150
- txBuilder.tokenId(tokenId);
151
- txBuilder.forwarderVersion(4);
152
- const builtTx = await txBuilder.build();
153
- const txHex = builtTx.toBroadcastFormat();
154
- // Create a new builder and parse the transaction
155
- const rebuilder = getBuilder(coinName);
156
- rebuilder.from(txHex);
157
- const rebuiltTx = await rebuilder.build();
158
- should_1.default.equal(rebuiltTx.type, sdk_core_1.TransactionType.FlushERC721);
159
- const txJson = rebuiltTx.toJson();
160
- should_1.default.equal(txJson.to, forwarderAddress);
161
- should_1.default.exist(txJson.data);
162
- txJson.data.should.startWith('0x159e44d7');
163
- });
164
- it('should decode flush ERC721 transaction from raw tx with version < v4', async () => {
165
- const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
166
- const contractAddress = '0x9e2c5712ab4caf402a98c4bf58c79a0dfe718ad1';
167
- const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
168
- const tokenId = '99999';
169
- // Build a transaction first
170
- txBuilder.type(sdk_core_1.TransactionType.FlushERC721);
171
- txBuilder.contract(contractAddress);
172
- txBuilder.tokenAddress(tokenAddress);
173
- txBuilder.forwarderAddress(forwarderAddress);
174
- txBuilder.tokenId(tokenId);
175
- txBuilder.forwarderVersion(2);
176
- const builtTx = await txBuilder.build();
177
- const txHex = builtTx.toBroadcastFormat();
178
- // Create a new builder and parse the transaction
179
- const rebuilder = getBuilder(coinName);
180
- rebuilder.from(txHex);
181
- const rebuiltTx = await rebuilder.build();
182
- should_1.default.equal(rebuiltTx.type, sdk_core_1.TransactionType.FlushERC721);
183
- const txJson = rebuiltTx.toJson();
184
- should_1.default.equal(txJson.to, contractAddress);
185
- should_1.default.exist(txJson.data);
186
- txJson.data.should.startWith('0x5a953d0a');
187
- });
188
- });
189
- describe('ERC1155 Flush', () => {
190
- it('should build a flush ERC1155 transaction with forwarder v4', async () => {
191
- const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
192
- const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
193
- const tokenId = '99999';
194
- txBuilder.type(sdk_core_1.TransactionType.FlushERC1155);
195
- txBuilder.contract(forwarderAddress);
196
- txBuilder.tokenAddress(tokenAddress);
197
- txBuilder.forwarderAddress(forwarderAddress);
198
- txBuilder.tokenId(tokenId);
199
- txBuilder.forwarderVersion(4);
200
- const tx = await txBuilder.build();
201
- const txJson = tx.toJson();
202
- should_1.default.equal(tx.type, sdk_core_1.TransactionType.FlushERC1155);
203
- should_1.default.equal(txJson.to, forwarderAddress);
204
- should_1.default.exist(txJson.data);
205
- txJson.data.should.startWith('0x8972c17c'); // flushERC1155Tokens v4 method ID
206
- should_1.default.exist(txJson.value);
207
- txJson.value.should.equal('0');
208
- should_1.default.exist(txJson.gasLimit);
209
- txJson.gasLimit.should.equal('100000');
210
- should_1.default.exist(txJson.gasPrice);
211
- txJson.gasPrice.should.equal('1000000000');
212
- // Verify the encoded parameters in the data
213
- const encodedTokenAddress = tokenAddress.slice(2).toLowerCase().padStart(64, '0');
214
- const encodedTokenId = BigInt(tokenId).toString(16).padStart(64, '0');
215
- txJson.data.should.containEql(encodedTokenAddress);
216
- txJson.data.should.containEql(encodedTokenId);
217
- });
218
- it('should build a flush ERC1155 transaction with forwarder version < v4', async () => {
219
- const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
220
- const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
221
- const contractAddress = '0x9e2c5712ab4caf402a98c4bf58c79a0dfe718ad1';
222
- const tokenId = '555';
223
- txBuilder.type(sdk_core_1.TransactionType.FlushERC1155);
224
- txBuilder.contract(contractAddress);
225
- txBuilder.tokenAddress(tokenAddress);
226
- txBuilder.forwarderAddress(forwarderAddress);
227
- txBuilder.forwarderVersion(2);
228
- txBuilder.tokenId(tokenId);
229
- const tx = await txBuilder.build();
230
- const txJson = tx.toJson();
231
- should_1.default.equal(tx.type, sdk_core_1.TransactionType.FlushERC1155);
232
- should_1.default.equal(txJson.to, contractAddress);
233
- should_1.default.exist(txJson.data);
234
- txJson.data.should.startWith('0xe6bd0aa4'); // flushForwarderERC1155Tokens method ID for v3 and below
235
- should_1.default.equal(txJson.value, '0');
236
- // Verify the encoded parameters
237
- const encodedForwarderAddress = forwarderAddress.slice(2).toLowerCase().padStart(64, '0');
238
- const encodedTokenAddress = tokenAddress.slice(2).toLowerCase().padStart(64, '0');
239
- const encodedTokenId = BigInt(tokenId).toString(16).padStart(64, '0');
240
- txJson.data.should.containEql(encodedForwarderAddress);
241
- txJson.data.should.containEql(encodedTokenAddress);
242
- txJson.data.should.containEql(encodedTokenId);
243
- });
244
- it('should fail to build flush ERC1155 without token address', async () => {
245
- const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
246
- const tokenId = '99999';
247
- txBuilder.type(sdk_core_1.TransactionType.FlushERC1155);
248
- txBuilder.contract(forwarderAddress);
249
- txBuilder.tokenId(tokenId);
250
- txBuilder.forwarderVersion(4);
251
- await txBuilder.build().should.be.rejectedWith('Invalid transaction: missing token address');
252
- });
253
- it('should fail to build flush ERC1155 without token ID', async () => {
254
- const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
255
- const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
256
- txBuilder.type(sdk_core_1.TransactionType.FlushERC1155);
257
- txBuilder.contract(forwarderAddress);
258
- txBuilder.tokenAddress(tokenAddress);
259
- txBuilder.forwarderVersion(4);
260
- await txBuilder.build().should.be.rejectedWith('Token ID is required for ERC1155 flush');
261
- });
262
- it('should fail to build flush ERC1155 without contract address', async () => {
263
- const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
264
- const tokenId = '12345';
265
- txBuilder.type(sdk_core_1.TransactionType.FlushERC1155);
266
- txBuilder.tokenAddress(tokenAddress);
267
- txBuilder.tokenId(tokenId);
268
- txBuilder.forwarderVersion(4);
269
- await txBuilder.build().should.be.rejected();
270
- });
271
- it('should build flush ERC1155 with token ID as string zero', async () => {
272
- const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
273
- const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
274
- const tokenId = '0';
275
- txBuilder.type(sdk_core_1.TransactionType.FlushERC1155);
276
- txBuilder.contract(forwarderAddress);
277
- txBuilder.tokenAddress(tokenAddress);
278
- txBuilder.forwarderAddress(forwarderAddress);
279
- txBuilder.tokenId(tokenId);
280
- txBuilder.forwarderVersion(4);
281
- const tx = await txBuilder.build();
282
- const txJson = tx.toJson();
283
- should_1.default.equal(tx.type, sdk_core_1.TransactionType.FlushERC1155);
284
- should_1.default.equal(txJson.to, forwarderAddress);
285
- should_1.default.exist(txJson.data);
286
- // Verify token ID 0 is properly encoded
287
- const encodedZeroTokenId = '0'.padStart(64, '0');
288
- txJson.data.should.containEql(encodedZeroTokenId);
289
- });
290
- it('should handle large token IDs for ERC1155 with v4', async () => {
291
- const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
292
- const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
293
- const tokenId = '115792089237316195423570985008687907853269984665640564039457584007913129639935'; // max uint256
294
- txBuilder.type(sdk_core_1.TransactionType.FlushERC1155);
295
- txBuilder.contract(forwarderAddress);
296
- txBuilder.forwarderAddress(forwarderAddress);
297
- txBuilder.tokenAddress(tokenAddress);
298
- txBuilder.tokenId(tokenId);
299
- txBuilder.forwarderVersion(4);
300
- const tx = await txBuilder.build();
301
- const txJson = tx.toJson();
302
- should_1.default.equal(tx.type, sdk_core_1.TransactionType.FlushERC1155);
303
- should_1.default.equal(txJson.to, forwarderAddress);
304
- should_1.default.exist(txJson.data);
305
- txJson.data.should.startWith('0x8972c17c');
306
- // Verify large token ID is properly encoded
307
- const maxUint256Hex = 'f'.repeat(64);
308
- txJson.data.should.containEql(maxUint256Hex);
309
- });
310
- it('should handle large token IDs for ERC1155 with version < v4', async () => {
311
- const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
312
- const contractAddress = '0x9e2c5712ab4caf402a98c4bf58c79a0dfe718ad1';
313
- const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
314
- const tokenId = '115792089237316195423570985008687907853269984665640564039457584007913129639935'; // max uint256
315
- txBuilder.type(sdk_core_1.TransactionType.FlushERC1155);
316
- txBuilder.contract(contractAddress);
317
- txBuilder.tokenAddress(tokenAddress);
318
- txBuilder.forwarderAddress(forwarderAddress);
319
- txBuilder.tokenId(tokenId);
320
- txBuilder.forwarderVersion(2);
321
- const tx = await txBuilder.build();
322
- const txJson = tx.toJson();
323
- should_1.default.equal(tx.type, sdk_core_1.TransactionType.FlushERC1155);
324
- should_1.default.equal(txJson.to, contractAddress);
325
- should_1.default.exist(txJson.data);
326
- txJson.data.should.startWith('0xe6bd0aa4');
327
- // Verify large token ID is properly encoded
328
- const maxUint256Hex = 'f'.repeat(64);
329
- txJson.data.should.containEql(maxUint256Hex);
330
- });
331
- it('should decode flush ERC1155 transaction from raw tx with v4', async () => {
332
- const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
333
- const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
334
- const tokenId = '99999';
335
- // Build a transaction first
336
- txBuilder.type(sdk_core_1.TransactionType.FlushERC1155);
337
- txBuilder.contract(forwarderAddress);
338
- txBuilder.forwarderAddress(forwarderAddress);
339
- txBuilder.tokenAddress(tokenAddress);
340
- txBuilder.tokenId(tokenId);
341
- txBuilder.forwarderVersion(4);
342
- const builtTx = await txBuilder.build();
343
- const txHex = builtTx.toBroadcastFormat();
344
- // Create a new builder and parse the transaction
345
- const rebuilder = getBuilder(coinName);
346
- rebuilder.from(txHex);
347
- const rebuiltTx = await rebuilder.build();
348
- should_1.default.equal(rebuiltTx.type, sdk_core_1.TransactionType.FlushERC1155);
349
- const txJson = rebuiltTx.toJson();
350
- should_1.default.equal(txJson.to, forwarderAddress);
351
- should_1.default.exist(txJson.data);
352
- txJson.data.should.startWith('0x8972c17c');
353
- });
354
- it('should decode flush ERC1155 transaction from raw tx with version < v4', async () => {
355
- const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
356
- const contractAddress = '0x9e2c5712ab4caf402a98c4bf58c79a0dfe718ad1';
357
- const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
358
- const tokenId = '7777';
359
- // Build a transaction first
360
- txBuilder.type(sdk_core_1.TransactionType.FlushERC1155);
361
- txBuilder.contract(contractAddress);
362
- txBuilder.tokenAddress(tokenAddress);
363
- txBuilder.forwarderAddress(forwarderAddress);
364
- txBuilder.tokenId(tokenId);
365
- txBuilder.forwarderVersion(1);
366
- const builtTx = await txBuilder.build();
367
- const txHex = builtTx.toBroadcastFormat();
368
- // Create a new builder and parse the transaction
369
- const rebuilder = getBuilder(coinName);
370
- rebuilder.from(txHex);
371
- const rebuiltTx = await rebuilder.build();
372
- should_1.default.equal(rebuiltTx.type, sdk_core_1.TransactionType.FlushERC1155);
373
- const txJson = rebuiltTx.toJson();
374
- should_1.default.equal(txJson.to, contractAddress);
375
- should_1.default.exist(txJson.data);
376
- txJson.data.should.startWith('0xe6bd0aa4');
377
- });
378
- });
379
- });
380
- }
381
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmx1c2hOZnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL2ZsdXNoTmZ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBSUEsNENBdWNDO0FBM2NELG1EQUF1RDtBQUN2RCxvREFBNEI7QUFHNUIsU0FBZ0IsZ0JBQWdCLENBQUMsUUFBZ0IsRUFBRSxVQUFVO0lBQzNELFFBQVEsQ0FBQyxHQUFHLFFBQVEsaUNBQWlDLEVBQUUsR0FBRyxFQUFFO1FBQzFELElBQUksU0FBNkIsQ0FBQztRQUVsQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsU0FBUyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQXVCLENBQUM7WUFDdkQsU0FBUyxDQUFDLEdBQUcsQ0FBQztnQkFDWixHQUFHLEVBQUUsWUFBWTtnQkFDakIsUUFBUSxFQUFFLFFBQVE7YUFDbkIsQ0FBQyxDQUFDO1lBQ0gsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO1lBQzVCLEVBQUUsQ0FBQywyREFBMkQsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDekUsTUFBTSxnQkFBZ0IsR0FBRyw0Q0FBNEMsQ0FBQztnQkFDdEUsTUFBTSxZQUFZLEdBQUcsNENBQTRDLENBQUM7Z0JBQ2xFLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQztnQkFFeEIsU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUM1QyxTQUFTLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ3JDLFNBQVMsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3JDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUM3QyxTQUFTLENBQUMsZ0JBQWdCLENBQUMs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Z0JBQ3RCLE1BQU0sU0FBUyxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUUxQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLDBCQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzNELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQztnQkFDekMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5GbHVzaE5mdFRlc3RzKGNvaW5OYW1lOiBzdHJpbmcsIGdldEJ1aWxkZXIpOiB2b2lkIHtcbiAgZGVzY3JpYmUoYCR7Y29pbk5hbWV9IHRyYW5zYWN0aW9uIGJ1aWxkZXIgZmx1c2ggTkZUc2AsICgpID0+IHtcbiAgICBsZXQgdHhCdWlsZGVyOiBUcmFuc2FjdGlvbkJ1aWxkZXI7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoY29pbk5hbWUpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgICBmZWU6ICcxMDAwMDAwMDAwJyxcbiAgICAgICAgZ2FzTGltaXQ6ICcxMDAwMDAnLFxuICAgICAgfSk7XG4gICAgICB0eEJ1aWxkZXIuY291bnRlcigxKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdFUkM3MjEgRmx1c2gnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgZmx1c2ggRVJDNzIxIHRyYW5zYWN0aW9uIHdpdGggZm9yd2FyZGVyIHY0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBmb3J3YXJkZXJBZGRyZXNzID0gJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MSc7XG4gICAgICAgIGNvbnN0IHRva2VuQWRkcmVzcyA9ICcweGRmN2RlY2IxYmFhOGY1MjlmMGM4OTgyY2JiNGJlNTAzNTcxOTUyOTknO1xuICAgICAgICBjb25zdCB0b2tlbklkID0gJzEyMzQ1JztcblxuICAgICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3MjEpO1xuICAgICAgICB0eEJ1aWxkZXIuY29udHJhY3QoZm9yd2FyZGVyQWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci50b2tlbkFkZHJlc3ModG9rZW5BZGRyZXNzKTtcbiAgICAgICAgdHhCdWlsZGVyLmZvcndhcmRlckFkZHJlc3MoZm9yd2FyZGVyQWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci5mb3J3YXJkZXJWZXJzaW9uKDQpO1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5JZCh0b2tlbklkKTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcblxuICAgICAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzIxKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi50bywgZm9yd2FyZGVyQWRkcmVzcyk7XG4gICAgICAgIHNob3VsZC5leGlzdCh0eEpzb24uZGF0YSk7XG4gICAgICAgIHR4SnNvbi5kYXRhLnNob3VsZC5zdGFydFdpdGgoJzB4MTU5ZTQ0ZDcnKTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi52YWx1ZSk7XG4gICAgICAgIHR4SnNvbi52YWx1ZS5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi5nYXNMaW1pdCk7XG4gICAgICAgIHR4SnNvbi5nYXNMaW1pdC5zaG91bGQuZXF1YWwoJzEwMDAwMCcpO1xuICAgICAgICBzaG91bGQuZXhpc3QodHhKc29uLmdhc1ByaWNlKTtcbiAgICAgICAgdHhKc29uLmdhc1ByaWNlLnNob3VsZC5lcXVhbCgnMTAwMDAwMDAwMCcpO1xuXG4gICAgICAgIC8vIFZlcmlmeSB0aGUgZW5jb2RlZCBwYXJhbWV0ZXJzIGluIHRoZSBkYXRhXG4gICAgICAgIGNvbnN0IGVuY29kZWRUb2tlbkFkZHJlc3MgPSB0b2tlbkFkZHJlc3Muc2xpY2UoMikudG9Mb3dlckNhc2UoKS5wYWRTdGFydCg2NCwgJzAnKTtcbiAgICAgICAgY29uc3QgZW5jb2RlZFRva2VuSWQgPSBCaWdJbnQodG9rZW5JZCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDY0LCAnMCcpO1xuICAgICAgICB0eEpzb24uZGF0YS5zaG91bGQuY29udGFpbkVxbChlbmNvZGVkVG9rZW5BZGRyZXNzKTtcbiAgICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLmNvbnRhaW5FcWwoZW5jb2RlZFRva2VuSWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSBmbHVzaCBFUkM3MjEgdHJhbnNhY3Rpb24gd2l0aCBmb3J3YXJkZXIgdmVyc2lvbiA8IHY0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBmb3J3YXJkZXJBZGRyZXNzID0gJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MSc7XG4gICAgICAgIGNvbnN0IHRva2VuQWRkcmVzcyA9ICcweGRmN2RlY2IxYmFhOGY1MjlmMGM4OTgyY2JiNGJlNTAzNTcxOTUyOTknO1xuICAgICAgICBjb25zdCBjb250cmFjdEFkZHJlc3MgPSAnMHg5ZTJjNTcxMmFiNGNhZjQwMmE5OGM0YmY1OGM3OWEwZGZlNzE4YWQxJztcbiAgICAgICAgY29uc3QgdG9rZW5JZCA9ICc1NDMyMSc7XG5cbiAgICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzIxKTtcbiAgICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KGNvbnRyYWN0QWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci50b2tlbkFkZHJlc3ModG9rZW5BZGRyZXNzKTtcbiAgICAgICAgdHhCdWlsZGVyLmZvcndhcmRlckFkZHJlc3MoZm9yd2FyZGVyQWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci5mb3J3YXJkZXJWZXJzaW9uKDIpO1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5JZCh0b2tlbklkKTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcblxuICAgICAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzIxKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi50bywgY29udHJhY3RBZGRyZXNzKTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi5kYXRhKTtcbiAgICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aCgnMHg1YTk1M2QwYScpOyAvLyBmbHVzaEVSQzcyMVRva2VucyBtZXRob2QgSUQgZm9yIHYyIGFuZCBiZWxvd1xuICAgICAgICBzaG91bGQuZXF1YWwodHhKc29uLnZhbHVlLCAnMCcpO1xuXG4gICAgICAgIC8vIFZlcmlmeSB0aGUgZW5jb2RlZCBwYXJhbWV0ZXJzXG4gICAgICAgIGNvbnN0IGVuY29kZWRGb3J3YXJkZXJBZGRyZXNzID0gZm9yd2FyZGVyQWRkcmVzcy5zbGljZSgyKS50b0xvd2VyQ2FzZSgpLnBhZFN0YXJ0KDY0LCAnMCcpO1xuICAgICAgICBjb25zdCBlbmNvZGVkVG9rZW5BZGRyZXNzID0gdG9rZW5BZGRyZXNzLnNsaWNlKDIpLnRvTG93ZXJDYXNlKCkucGFkU3RhcnQoNjQsICcwJyk7XG4gICAgICAgIGNvbnN0IGVuY29kZWRUb2tlbklkID0gQmlnSW50KHRva2VuSWQpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg2NCwgJzAnKTtcbiAgICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLmNvbnRhaW5FcWwoZW5jb2RlZEZvcndhcmRlckFkZHJlc3MpO1xuICAgICAgICB0eEpzb24uZGF0YS5zaG91bGQuY29udGFpbkVxbChlbmNvZGVkVG9rZW5BZGRyZXNzKTtcbiAgICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLmNvbnRhaW5FcWwoZW5jb2RlZFRva2VuSWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSBmbHVzaCBFUkM3MjEgd2l0aCBsYXJnZSB0b2tlbiBJRCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgZm9yd2FyZGVyQWRkcmVzcyA9ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnO1xuICAgICAgICBjb25zdCB0b2tlbkFkZHJlc3MgPSAnMHhkZjdkZWNiMWJhYThmNTI5ZjBjODk4MmNiYjRiZTUwMzU3MTk1Mjk5JztcbiAgICAgICAgY29uc3QgdG9rZW5JZCA9ICcxMTU3OTIwODkyMzczMTYxOTU0MjM1NzA5ODUwMDg2ODc5MDc4NTMyNjk5ODQ2NjU2NDA1NjQwMzk0NTc1ODQwMDc5MTMxMjk2Mzk5MzUnOyAvLyBtYXggdWludDI1NlxuXG4gICAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzcyMSk7XG4gICAgICAgIHR4QnVpbGRlci5jb250cmFjdChmb3J3YXJkZXJBZGRyZXNzKTtcbiAgICAgICAgdHhCdWlsZGVyLnRva2VuQWRkcmVzcyh0b2tlbkFkZHJlc3MpO1xuICAgICAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyQWRkcmVzcyhmb3J3YXJkZXJBZGRyZXNzKTtcbiAgICAgICAgdHhCdWlsZGVyLmZvcndhcmRlclZlcnNpb24oNCk7XG4gICAgICAgIHR4QnVpbGRlci50b2tlbklkKHRva2VuSWQpO1xuXG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3MjEpO1xuICAgICAgICBzaG91bGQuZXF1YWwodHhKc29uLnRvLCBmb3J3YXJkZXJBZGRyZXNzKTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi5kYXRhKTtcbiAgICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aCgnMHgxNTllNDRkNycpO1xuXG4gICAgICAgIC8vIFZlcmlmeSBsYXJnZSB0b2tlbiBJRCBpcyBwcm9wZXJseSBlbmNvZGVkXG4gICAgICAgIGNvbnN0IG1heFVpbnQyNTZIZXggPSAnZicucmVwZWF0KDY0KTtcbiAgICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLmNvbnRhaW5FcWwobWF4VWludDI1NkhleCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBmbHVzaCBFUkM3MjEgd2l0aCB0b2tlbiBJRCBhcyBzdHJpbmcgemVybycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgZm9yd2FyZGVyQWRkcmVzcyA9ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnO1xuICAgICAgICBjb25zdCB0b2tlbkFkZHJlc3MgPSAnMHhkZjdkZWNiMWJhYThmNTI5ZjBjODk4MmNiYjRiZTUwMzU3MTk1Mjk5JztcbiAgICAgICAgY29uc3QgdG9rZW5JZCA9ICcwJztcblxuICAgICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3MjEpO1xuICAgICAgICB0eEJ1aWxkZXIuY29udHJhY3QoZm9yd2FyZGVyQWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci50b2tlbkFkZHJlc3ModG9rZW5BZGRyZXNzKTtcbiAgICAgICAgdHhCdWlsZGVyLmZvcndhcmRlckFkZHJlc3MoZm9yd2FyZGVyQWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci5mb3J3YXJkZXJWZXJzaW9uKDQpO1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5JZCh0b2tlbklkKTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcblxuICAgICAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzIxKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi50bywgZm9yd2FyZGVyQWRkcmVzcyk7XG4gICAgICAgIHNob3VsZC5leGlzdCh0eEpzb24uZGF0YSk7XG5cbiAgICAgICAgLy8gVmVyaWZ5IHRva2VuIElEIDAgaXMgcHJvcGVybHkgZW5jb2RlZFxuICAgICAgICBjb25zdCBlbmNvZGVkWmVyb1Rva2VuSWQgPSAnMCcucGFkU3RhcnQoNjQsICcwJyk7XG4gICAgICAgIHR4SnNvbi5kYXRhLnNob3VsZC5jb250YWluRXFsKGVuY29kZWRaZXJvVG9rZW5JZCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGJ1aWxkIGZsdXNoIEVSQzcyMSB3aXRob3V0IHRva2VuIGFkZHJlc3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvcndhcmRlckFkZHJlc3MgPSAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJztcbiAgICAgICAgY29uc3QgdG9rZW5JZCA9ICcxMjM0NSc7XG5cbiAgICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzIxKTtcbiAgICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KGZvcndhcmRlckFkZHJlc3MpO1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5JZCh0b2tlbklkKTtcbiAgICAgICAgdHhCdWlsZGVyLmZvcndhcmRlclZlcnNpb24oNCk7XG5cbiAgICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyB0b2tlbiBhZGRyZXNzJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGJ1aWxkIGZsdXNoIEVSQzcyMSB3aXRob3V0IHRva2VuIElEJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBmb3J3YXJkZXJBZGRyZXNzID0gJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MSc7XG4gICAgICAgIGNvbnN0IHRva2VuQWRkcmVzcyA9ICcweGRmN2RlY2IxYmFhOGY1MjlmMGM4OTgyY2JiNGJlNTAzNTcxOTUyOTknO1xuXG4gICAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzcyMSk7XG4gICAgICAgIHR4QnVpbGRlci5jb250cmFjdChmb3J3YXJkZXJBZGRyZXNzKTtcbiAgICAgICAgdHhCdWlsZGVyLnRva2VuQWRkcmVzcyh0b2tlbkFkZHJlc3MpO1xuICAgICAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyVmVyc2lvbig0KTtcblxuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdUb2tlbiBJRCBpcyByZXF1aXJlZCBmb3IgRVJDNzIxIGZsdXNoJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGJ1aWxkIGZsdXNoIEVSQzcyMSB3aXRob3V0IGNvbnRyYWN0IGFkZHJlc3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRva2VuQWRkcmVzcyA9ICcweGRmN2RlY2IxYmFhOGY1MjlmMGM4OTgyY2JiNGJlNTAzNTcxOTUyOTknO1xuICAgICAgICBjb25zdCB0b2tlbklkID0gJzEyMzQ1JztcblxuICAgICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3MjEpO1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5BZGRyZXNzKHRva2VuQWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci50b2tlbklkKHRva2VuSWQpO1xuICAgICAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyVmVyc2lvbig0KTtcblxuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWQoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGRlY29kZSBmbHVzaCBFUkM3MjEgdHJhbnNhY3Rpb24gZnJvbSByYXcgdHggd2l0aCB2NCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgZm9yd2FyZGVyQWRkcmVzcyA9ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnO1xuICAgICAgICBjb25zdCB0b2tlbkFkZHJlc3MgPSAnMHhkZjdkZWNiMWJhYThmNTI5ZjBjODk4MmNiYjRiZTUwMzU3MTk1Mjk5JztcbiAgICAgICAgY29uc3QgdG9rZW5JZCA9ICcxMjM0NSc7XG5cbiAgICAgICAgLy8gQnVpbGQgYSB0cmFuc2FjdGlvbiBmaXJzdFxuICAgICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkM3MjEpO1xuICAgICAgICB0eEJ1aWxkZXIuY29udHJhY3QoZm9yd2FyZGVyQWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci5mb3J3YXJkZXJBZGRyZXNzKGZvcndhcmRlckFkZHJlc3MpO1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5BZGRyZXNzKHRva2VuQWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci50b2tlbklkKHRva2VuSWQpO1xuICAgICAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyVmVyc2lvbig0KTtcblxuICAgICAgICBjb25zdCBidWlsdFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SGV4ID0gYnVpbHRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBidWlsZGVyIGFuZCBwYXJzZSB0aGUgdHJhbnNhY3Rpb25cbiAgICAgICAgY29uc3QgcmVidWlsZGVyID0gZ2V0QnVpbGRlcihjb2luTmFtZSkgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgICAgICByZWJ1aWxkZXIuZnJvbSh0eEhleCk7XG4gICAgICAgIGNvbnN0IHJlYnVpbHRUeCA9IGF3YWl0IHJlYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICAgIHNob3VsZC5lcXVhbChyZWJ1aWx0VHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzIxKTtcbiAgICAgICAgY29uc3QgdHhKc29uID0gcmVidWlsdFR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZXF1YWwodHhKc29uLnRvLCBmb3J3YXJkZXJBZGRyZXNzKTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi5kYXRhKTtcbiAgICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aCgnMHgxNTllNDRkNycpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZGVjb2RlIGZsdXNoIEVSQzcyMSB0cmFuc2FjdGlvbiBmcm9tIHJhdyB0eCB3aXRoIHZlcnNpb24gPCB2NCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgZm9yd2FyZGVyQWRkcmVzcyA9ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnO1xuICAgICAgICBjb25zdCBjb250cmFjdEFkZHJlc3MgPSAnMHg5ZTJjNTcxMmFiNGNhZjQwMmE5OGM0YmY1OGM3OWEwZGZlNzE4YWQxJztcbiAgICAgICAgY29uc3QgdG9rZW5BZGRyZXNzID0gJzB4ZGY3ZGVjYjFiYWE4ZjUyOWYwYzg5ODJjYmI0YmU1MDM1NzE5NTI5OSc7XG4gICAgICAgIGNvbnN0IHRva2VuSWQgPSAnOTk5OTknO1xuXG4gICAgICAgIC8vIEJ1aWxkIGEgdHJhbnNhY3Rpb24gZmlyc3RcbiAgICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzIxKTtcbiAgICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KGNvbnRyYWN0QWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci50b2tlbkFkZHJlc3ModG9rZW5BZGRyZXNzKTtcbiAgICAgICAgdHhCdWlsZGVyLmZvcndhcmRlckFkZHJlc3MoZm9yd2FyZGVyQWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci50b2tlbklkKHRva2VuSWQpO1xuICAgICAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyVmVyc2lvbigyKTtcblxuICAgICAgICBjb25zdCBidWlsdFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SGV4ID0gYnVpbHRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBidWlsZGVyIGFuZCBwYXJzZSB0aGUgdHJhbnNhY3Rpb25cbiAgICAgICAgY29uc3QgcmVidWlsZGVyID0gZ2V0QnVpbGRlcihjb2luTmFtZSkgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgICAgICByZWJ1aWxkZXIuZnJvbSh0eEhleCk7XG4gICAgICAgIGNvbnN0IHJlYnVpbHRUeCA9IGF3YWl0IHJlYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICAgIHNob3VsZC5lcXVhbChyZWJ1aWx0VHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDNzIxKTtcbiAgICAgICAgY29uc3QgdHhKc29uID0gcmVidWlsdFR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZXF1YWwodHhKc29uLnRvLCBjb250cmFjdEFkZHJlc3MpO1xuICAgICAgICBzaG91bGQuZXhpc3QodHhKc29uLmRhdGEpO1xuICAgICAgICB0eEpzb24uZGF0YS5zaG91bGQuc3RhcnRXaXRoKCcweDVhOTUzZDBhJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdFUkMxMTU1IEZsdXNoJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhIGZsdXNoIEVSQzExNTUgdHJhbnNhY3Rpb24gd2l0aCBmb3J3YXJkZXIgdjQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvcndhcmRlckFkZHJlc3MgPSAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJztcbiAgICAgICAgY29uc3QgdG9rZW5BZGRyZXNzID0gJzB4ZGY3ZGVjYjFiYWE4ZjUyOWYwYzg5ODJjYmI0YmU1MDM1NzE5NTI5OSc7XG4gICAgICAgIGNvbnN0IHRva2VuSWQgPSAnOTk5OTknO1xuXG4gICAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzExNTUpO1xuICAgICAgICB0eEJ1aWxkZXIuY29udHJhY3QoZm9yd2FyZGVyQWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci50b2tlbkFkZHJlc3ModG9rZW5BZGRyZXNzKTtcbiAgICAgICAgdHhCdWlsZGVyLmZvcndhcmRlckFkZHJlc3MoZm9yd2FyZGVyQWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci50b2tlbklkKHRva2VuSWQpO1xuICAgICAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyVmVyc2lvbig0KTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcblxuICAgICAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDMTE1NSk7XG4gICAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24udG8sIGZvcndhcmRlckFkZHJlc3MpO1xuICAgICAgICBzaG91bGQuZXhpc3QodHhKc29uLmRhdGEpO1xuICAgICAgICB0eEpzb24uZGF0YS5zaG91bGQuc3RhcnRXaXRoKCcweDg5NzJjMTdjJyk7IC8vIGZsdXNoRVJDMTE1NVRva2VucyB2NCBtZXRob2QgSURcbiAgICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi52YWx1ZSk7XG4gICAgICAgIHR4SnNvbi52YWx1ZS5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi5nYXNMaW1pdCk7XG4gICAgICAgIHR4SnNvbi5nYXNMaW1pdC5zaG91bGQuZXF1YWwoJzEwMDAwMCcpO1xuICAgICAgICBzaG91bGQuZXhpc3QodHhKc29uLmdhc1ByaWNlKTtcbiAgICAgICAgdHhKc29uLmdhc1ByaWNlLnNob3VsZC5lcXVhbCgnMTAwMDAwMDAwMCcpO1xuXG4gICAgICAgIC8vIFZlcmlmeSB0aGUgZW5jb2RlZCBwYXJhbWV0ZXJzIGluIHRoZSBkYXRhXG4gICAgICAgIGNvbnN0IGVuY29kZWRUb2tlbkFkZHJlc3MgPSB0b2tlbkFkZHJlc3Muc2xpY2UoMikudG9Mb3dlckNhc2UoKS5wYWRTdGFydCg2NCwgJzAnKTtcbiAgICAgICAgY29uc3QgZW5jb2RlZFRva2VuSWQgPSBCaWdJbnQodG9rZW5JZCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDY0LCAnMCcpO1xuICAgICAgICB0eEpzb24uZGF0YS5zaG91bGQuY29udGFpbkVxbChlbmNvZGVkVG9rZW5BZGRyZXNzKTtcbiAgICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLmNvbnRhaW5FcWwoZW5jb2RlZFRva2VuSWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYnVpbGQgYSBmbHVzaCBFUkMxMTU1IHRyYW5zYWN0aW9uIHdpdGggZm9yd2FyZGVyIHZlcnNpb24gPCB2NCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgZm9yd2FyZGVyQWRkcmVzcyA9ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnO1xuICAgICAgICBjb25zdCB0b2tlbkFkZHJlc3MgPSAnMHhkZjdkZWNiMWJhYThmNTI5ZjBjODk4MmNiYjRiZTUwMzU3MTk1Mjk5JztcbiAgICAgICAgY29uc3QgY29udHJhY3RBZGRyZXNzID0gJzB4OWUyYzU3MTJhYjRjYWY0MDJhOThjNGJmNThjNzlhMGRmZTcxOGFkMSc7XG4gICAgICAgIGNvbnN0IHRva2VuSWQgPSAnNTU1JztcblxuICAgICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkMxMTU1KTtcbiAgICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KGNvbnRyYWN0QWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci50b2tlbkFkZHJlc3ModG9rZW5BZGRyZXNzKTtcbiAgICAgICAgdHhCdWlsZGVyLmZvcndhcmRlckFkZHJlc3MoZm9yd2FyZGVyQWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci5mb3J3YXJkZXJWZXJzaW9uKDIpO1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5JZCh0b2tlbklkKTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcblxuICAgICAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDMTE1NSk7XG4gICAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24udG8sIGNvbnRyYWN0QWRkcmVzcyk7XG4gICAgICAgIHNob3VsZC5leGlzdCh0eEpzb24uZGF0YSk7XG4gICAgICAgIHR4SnNvbi5kYXRhLnNob3VsZC5zdGFydFdpdGgoJzB4ZTZiZDBhYTQnKTsgLy8gZmx1c2hGb3J3YXJkZXJFUkMxMTU1VG9rZW5zIG1ldGhvZCBJRCBmb3IgdjMgYW5kIGJlbG93XG4gICAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24udmFsdWUsICcwJyk7XG5cbiAgICAgICAgLy8gVmVyaWZ5IHRoZSBlbmNvZGVkIHBhcmFtZXRlcnNcbiAgICAgICAgY29uc3QgZW5jb2RlZEZvcndhcmRlckFkZHJlc3MgPSBmb3J3YXJkZXJBZGRyZXNzLnNsaWNlKDIpLnRvTG93ZXJDYXNlKCkucGFkU3RhcnQoNjQsICcwJyk7XG4gICAgICAgIGNvbnN0IGVuY29kZWRUb2tlbkFkZHJlc3MgPSB0b2tlbkFkZHJlc3Muc2xpY2UoMikudG9Mb3dlckNhc2UoKS5wYWRTdGFydCg2NCwgJzAnKTtcbiAgICAgICAgY29uc3QgZW5jb2RlZFRva2VuSWQgPSBCaWdJbnQodG9rZW5JZCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDY0LCAnMCcpO1xuICAgICAgICB0eEpzb24uZGF0YS5zaG91bGQuY29udGFpbkVxbChlbmNvZGVkRm9yd2FyZGVyQWRkcmVzcyk7XG4gICAgICAgIHR4SnNvbi5kYXRhLnNob3VsZC5jb250YWluRXFsKGVuY29kZWRUb2tlbkFkZHJlc3MpO1xuICAgICAgICB0eEpzb24uZGF0YS5zaG91bGQuY29udGFpbkVxbChlbmNvZGVkVG9rZW5JZCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGJ1aWxkIGZsdXNoIEVSQzExNTUgd2l0aG91dCB0b2tlbiBhZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBmb3J3YXJkZXJBZGRyZXNzID0gJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MSc7XG4gICAgICAgIGNvbnN0IHRva2VuSWQgPSAnOTk5OTknO1xuXG4gICAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzExNTUpO1xuICAgICAgICB0eEJ1aWxkZXIuY29udHJhY3QoZm9yd2FyZGVyQWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci50b2tlbklkKHRva2VuSWQpO1xuICAgICAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyVmVyc2lvbig0KTtcblxuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIHRva2VuIGFkZHJlc3MnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgdG8gYnVpbGQgZmx1c2ggRVJDMTE1NSB3aXRob3V0IHRva2VuIElEJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBmb3J3YXJkZXJBZGRyZXNzID0gJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MSc7XG4gICAgICAgIGNvbnN0IHRva2VuQWRkcmVzcyA9ICcweGRmN2RlY2IxYmFhOGY1MjlmMGM4OTgyY2JiNGJlNTAzNTcxOTUyOTknO1xuXG4gICAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzExNTUpO1xuICAgICAgICB0eEJ1aWxkZXIuY29udHJhY3QoZm9yd2FyZGVyQWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci50b2tlbkFkZHJlc3ModG9rZW5BZGRyZXNzKTtcbiAgICAgICAgdHhCdWlsZGVyLmZvcndhcmRlclZlcnNpb24oNCk7XG5cbiAgICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVG9rZW4gSUQgaXMgcmVxdWlyZWQgZm9yIEVSQzExNTUgZmx1c2gnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgdG8gYnVpbGQgZmx1c2ggRVJDMTE1NSB3aXRob3V0IGNvbnRyYWN0IGFkZHJlc3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRva2VuQWRkcmVzcyA9ICcweGRmN2RlY2IxYmFhOGY1MjlmMGM4OTgyY2JiNGJlNTAzNTcxOTUyOTknO1xuICAgICAgICBjb25zdCB0b2tlbklkID0gJzEyMzQ1JztcblxuICAgICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkMxMTU1KTtcbiAgICAgICAgdHhCdWlsZGVyLnRva2VuQWRkcmVzcyh0b2tlbkFkZHJlc3MpO1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5JZCh0b2tlbklkKTtcbiAgICAgICAgdHhCdWlsZGVyLmZvcndhcmRlclZlcnNpb24oNCk7XG5cbiAgICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBmbHVzaCBFUkMxMTU1IHdpdGggdG9rZW4gSUQgYXMgc3RyaW5nIHplcm8nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvcndhcmRlckFkZHJlc3MgPSAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJztcbiAgICAgICAgY29uc3QgdG9rZW5BZGRyZXNzID0gJzB4ZGY3ZGVjYjFiYWE4ZjUyOWYwYzg5ODJjYmI0YmU1MDM1NzE5NTI5OSc7XG4gICAgICAgIGNvbnN0IHRva2VuSWQgPSAnMCc7XG5cbiAgICAgICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDMTE1NSk7XG4gICAgICAgIHR4QnVpbGRlci5jb250cmFjdChmb3J3YXJkZXJBZGRyZXNzKTtcbiAgICAgICAgdHhCdWlsZGVyLnRva2VuQWRkcmVzcyh0b2tlbkFkZHJlc3MpO1xuICAgICAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyQWRkcmVzcyhmb3J3YXJkZXJBZGRyZXNzKTtcbiAgICAgICAgdHhCdWlsZGVyLnRva2VuSWQodG9rZW5JZCk7XG4gICAgICAgIHR4QnVpbGRlci5mb3J3YXJkZXJWZXJzaW9uKDQpO1xuXG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkMxMTU1KTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi50bywgZm9yd2FyZGVyQWRkcmVzcyk7XG4gICAgICAgIHNob3VsZC5leGlzdCh0eEpzb24uZGF0YSk7XG5cbiAgICAgICAgLy8gVmVyaWZ5IHRva2VuIElEIDAgaXMgcHJvcGVybHkgZW5jb2RlZFxuICAgICAgICBjb25zdCBlbmNvZGVkWmVyb1Rva2VuSWQgPSAnMCcucGFkU3RhcnQoNjQsICcwJyk7XG4gICAgICAgIHR4SnNvbi5kYXRhLnNob3VsZC5jb250YWluRXFsKGVuY29kZWRaZXJvVG9rZW5JZCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgbGFyZ2UgdG9rZW4gSURzIGZvciBFUkMxMTU1IHdpdGggdjQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvcndhcmRlckFkZHJlc3MgPSAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJztcbiAgICAgICAgY29uc3QgdG9rZW5BZGRyZXNzID0gJzB4ZGY3ZGVjYjFiYWE4ZjUyOWYwYzg5ODJjYmI0YmU1MDM1NzE5NTI5OSc7XG4gICAgICAgIGNvbnN0IHRva2VuSWQgPSAnMTE1NzkyMDg5MjM3MzE2MTk1NDIzNTcwOTg1MDA4Njg3OTA3ODUzMjY5OTg0NjY1NjQwNTY0MDM5NDU3NTg0MDA3OTEzMTI5NjM5OTM1JzsgLy8gbWF4IHVpbnQyNTZcblxuICAgICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkMxMTU1KTtcbiAgICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0KGZvcndhcmRlckFkZHJlc3MpO1xuICAgICAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyQWRkcmVzcyhmb3J3YXJkZXJBZGRyZXNzKTtcbiAgICAgICAgdHhCdWlsZGVyLnRva2VuQWRkcmVzcyh0b2tlbkFkZHJlc3MpO1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5JZCh0b2tlbklkKTtcbiAgICAgICAgdHhCdWlsZGVyLmZvcndhcmRlclZlcnNpb24oNCk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICAgICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzExNTUpO1xuICAgICAgICBzaG91bGQuZXF1YWwodHhKc29uLnRvLCBmb3J3YXJkZXJBZGRyZXNzKTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi5kYXRhKTtcbiAgICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aCgnMHg4OTcyYzE3YycpO1xuXG4gICAgICAgIC8vIFZlcmlmeSBsYXJnZSB0b2tlbiBJRCBpcyBwcm9wZXJseSBlbmNvZGVkXG4gICAgICAgIGNvbnN0IG1heFVpbnQyNTZIZXggPSAnZicucmVwZWF0KDY0KTtcbiAgICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLmNvbnRhaW5FcWwobWF4VWludDI1NkhleCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgbGFyZ2UgdG9rZW4gSURzIGZvciBFUkMxMTU1IHdpdGggdmVyc2lvbiA8IHY0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBmb3J3YXJkZXJBZGRyZXNzID0gJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MSc7XG4gICAgICAgIGNvbnN0IGNvbnRyYWN0QWRkcmVzcyA9ICcweDllMmM1NzEyYWI0Y2FmNDAyYTk4YzRiZjU4Yzc5YTBkZmU3MThhZDEnO1xuICAgICAgICBjb25zdCB0b2tlbkFkZHJlc3MgPSAnMHhkZjdkZWNiMWJhYThmNTI5ZjBjODk4MmNiYjRiZTUwMzU3MTk1Mjk5JztcbiAgICAgICAgY29uc3QgdG9rZW5JZCA9ICcxMTU3OTIwODkyMzczMTYxOTU0MjM1NzA5ODUwMDg2ODc5MDc4NTMyNjk5ODQ2NjU2NDA1NjQwMzk0NTc1ODQwMDc5MTMxMjk2Mzk5MzUnOyAvLyBtYXggdWludDI1NlxuXG4gICAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzExNTUpO1xuICAgICAgICB0eEJ1aWxkZXIuY29udHJhY3QoY29udHJhY3RBZGRyZXNzKTtcbiAgICAgICAgdHhCdWlsZGVyLnRva2VuQWRkcmVzcyh0b2tlbkFkZHJlc3MpO1xuICAgICAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyQWRkcmVzcyhmb3J3YXJkZXJBZGRyZXNzKTtcbiAgICAgICAgdHhCdWlsZGVyLnRva2VuSWQodG9rZW5JZCk7XG4gICAgICAgIHR4QnVpbGRlci5mb3J3YXJkZXJWZXJzaW9uKDIpO1xuXG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgICAgIHNob3VsZC5lcXVhbCh0eC50eXBlLCBUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkMxMTU1KTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi50bywgY29udHJhY3RBZGRyZXNzKTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KHR4SnNvbi5kYXRhKTtcbiAgICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLnN0YXJ0V2l0aCgnMHhlNmJkMGFhNCcpO1xuXG4gICAgICAgIC8vIFZlcmlmeSBsYXJnZSB0b2tlbiBJRCBpcyBwcm9wZXJseSBlbmNvZGVkXG4gICAgICAgIGNvbnN0IG1heFVpbnQyNTZIZXggPSAnZicucmVwZWF0KDY0KTtcbiAgICAgICAgdHhKc29uLmRhdGEuc2hvdWxkLmNvbnRhaW5FcWwobWF4VWludDI1NkhleCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBkZWNvZGUgZmx1c2ggRVJDMTE1NSB0cmFuc2FjdGlvbiBmcm9tIHJhdyB0eCB3aXRoIHY0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBmb3J3YXJkZXJBZGRyZXNzID0gJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MSc7XG4gICAgICAgIGNvbnN0IHRva2VuQWRkcmVzcyA9ICcweGRmN2RlY2IxYmFhOGY1MjlmMGM4OTgyY2JiNGJlNTAzNTcxOTUyOTknO1xuICAgICAgICBjb25zdCB0b2tlbklkID0gJzk5OTk5JztcblxuICAgICAgICAvLyBCdWlsZCBhIHRyYW5zYWN0aW9uIGZpcnN0XG4gICAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzExNTUpO1xuICAgICAgICB0eEJ1aWxkZXIuY29udHJhY3QoZm9yd2FyZGVyQWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci5mb3J3YXJkZXJBZGRyZXNzKGZvcndhcmRlckFkZHJlc3MpO1xuICAgICAgICB0eEJ1aWxkZXIudG9rZW5BZGRyZXNzKHRva2VuQWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci50b2tlbklkKHRva2VuSWQpO1xuICAgICAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyVmVyc2lvbig0KTtcblxuICAgICAgICBjb25zdCBidWlsdFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SGV4ID0gYnVpbHRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBidWlsZGVyIGFuZCBwYXJzZSB0aGUgdHJhbnNhY3Rpb25cbiAgICAgICAgY29uc3QgcmVidWlsZGVyID0gZ2V0QnVpbGRlcihjb2luTmFtZSkgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgICAgICByZWJ1aWxkZXIuZnJvbSh0eEhleCk7XG4gICAgICAgIGNvbnN0IHJlYnVpbHRUeCA9IGF3YWl0IHJlYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICAgIHNob3VsZC5lcXVhbChyZWJ1aWx0VHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLkZsdXNoRVJDMTE1NSk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHJlYnVpbHRUeC50b0pzb24oKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHR4SnNvbi50bywgZm9yd2FyZGVyQWRkcmVzcyk7XG4gICAgICAgIHNob3VsZC5leGlzdCh0eEpzb24uZGF0YSk7XG4gICAgICAgIHR4SnNvbi5kYXRhLnNob3VsZC5zdGFydFdpdGgoJzB4ODk3MmMxN2MnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGRlY29kZSBmbHVzaCBFUkMxMTU1IHRyYW5zYWN0aW9uIGZyb20gcmF3IHR4IHdpdGggdmVyc2lvbiA8IHY0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBmb3J3YXJkZXJBZGRyZXNzID0gJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MSc7XG4gICAgICAgIGNvbnN0IGNvbnRyYWN0QWRkcmVzcyA9ICcweDllMmM1NzEyYWI0Y2FmNDAyYTk4YzRiZjU4Yzc5YTBkZmU3MThhZDEnO1xuICAgICAgICBjb25zdCB0b2tlbkFkZHJlc3MgPSAnMHhkZjdkZWNiMWJhYThmNTI5ZjBjODk4MmNiYjRiZTUwMzU3MTk1Mjk5JztcbiAgICAgICAgY29uc3QgdG9rZW5JZCA9ICc3Nzc3JztcblxuICAgICAgICAvLyBCdWlsZCBhIHRyYW5zYWN0aW9uIGZpcnN0XG4gICAgICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5GbHVzaEVSQzExNTUpO1xuICAgICAgICB0eEJ1aWxkZXIuY29udHJhY3QoY29udHJhY3RBZGRyZXNzKTtcbiAgICAgICAgdHhCdWlsZGVyLnRva2VuQWRkcmVzcyh0b2tlbkFkZHJlc3MpO1xuICAgICAgICB0eEJ1aWxkZXIuZm9yd2FyZGVyQWRkcmVzcyhmb3J3YXJkZXJBZGRyZXNzKTtcbiAgICAgICAgdHhCdWlsZGVyLnRva2VuSWQodG9rZW5JZCk7XG4gICAgICAgIHR4QnVpbGRlci5mb3J3YXJkZXJWZXJzaW9uKDEpO1xuXG4gICAgICAgIGNvbnN0IGJ1aWx0VHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3QgdHhIZXggPSBidWlsdFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGJ1aWxkZXIgYW5kIHBhcnNlIHRoZSB0cmFuc2FjdGlvblxuICAgICAgICBjb25zdCByZWJ1aWxkZXIgPSBnZXRCdWlsZGVyKGNvaW5OYW1lKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgICAgIHJlYnVpbGRlci5mcm9tKHR4SGV4KTtcbiAgICAgICAgY29uc3QgcmVidWlsdFR4ID0gYXdhaXQgcmVidWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgICAgc2hvdWxkLmVxdWFsKHJlYnVpbHRUeC50eXBlLCBUcmFuc2FjdGlvblR5cGUuRmx1c2hFUkMxMTU1KTtcbiAgICAgICAgY29uc3QgdHhKc29uID0gcmVidWlsdFR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZXF1YWwodHhKc29uLnRvLCBjb250cmFjdEFkZHJlc3MpO1xuICAgICAgICBzaG91bGQuZXhpc3QodHhKc29uLmRhdGEpO1xuICAgICAgICB0eEpzb24uZGF0YS5zaG91bGQuc3RhcnRXaXRoKCcweGU2YmQwYWE0Jyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXX0=
@@ -1,5 +0,0 @@
1
- export * from './addressInitialization';
2
- export * from './send';
3
- export * from './walletInitialization';
4
- export * from './flushNft';
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,QAAQ,CAAC;AACvB,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC"}