@bitgo-beta/abstract-eth 1.0.2-beta.210 → 1.0.2-beta.2101

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 (178) hide show
  1. package/dist/src/abstractEthLikeCoin.d.ts +20 -9
  2. package/dist/src/abstractEthLikeCoin.d.ts.map +1 -1
  3. package/dist/src/abstractEthLikeCoin.js +46 -15
  4. package/dist/src/abstractEthLikeNewCoins.d.ts +876 -0
  5. package/dist/src/abstractEthLikeNewCoins.d.ts.map +1 -0
  6. package/dist/src/abstractEthLikeNewCoins.js +2664 -0
  7. package/dist/src/ethLikeToken.d.ts +38 -6
  8. package/dist/src/ethLikeToken.d.ts.map +1 -1
  9. package/dist/src/ethLikeToken.js +289 -10
  10. package/dist/src/index.d.ts +2 -0
  11. package/dist/src/index.d.ts.map +1 -1
  12. package/dist/src/index.js +8 -2
  13. package/dist/src/lib/constants.d.ts +4 -0
  14. package/dist/src/lib/constants.d.ts.map +1 -0
  15. package/dist/src/lib/constants.js +11 -0
  16. package/dist/src/lib/contractCall.d.ts +8 -0
  17. package/dist/src/lib/contractCall.d.ts.map +1 -0
  18. package/dist/src/lib/contractCall.js +17 -0
  19. package/dist/src/lib/decryptionDelegationBuilder.d.ts +90 -0
  20. package/dist/src/lib/decryptionDelegationBuilder.d.ts.map +1 -0
  21. package/dist/src/lib/decryptionDelegationBuilder.js +59 -0
  22. package/dist/src/lib/iface.d.ts +143 -0
  23. package/dist/src/lib/iface.d.ts.map +1 -0
  24. package/dist/src/lib/iface.js +8 -0
  25. package/dist/src/lib/index.d.ts +19 -0
  26. package/dist/src/lib/index.d.ts.map +1 -0
  27. package/dist/src/lib/index.js +60 -0
  28. package/dist/src/lib/keyPair.d.ts +26 -0
  29. package/dist/src/lib/keyPair.d.ts.map +1 -0
  30. package/dist/src/lib/keyPair.js +65 -0
  31. package/dist/src/lib/messages/eip191/eip191Message.d.ts +12 -0
  32. package/dist/src/lib/messages/eip191/eip191Message.d.ts.map +1 -0
  33. package/dist/src/lib/messages/eip191/eip191Message.js +25 -0
  34. package/dist/src/lib/messages/eip191/eip191MessageBuilder.d.ts +19 -0
  35. package/dist/src/lib/messages/eip191/eip191MessageBuilder.d.ts.map +1 -0
  36. package/dist/src/lib/messages/eip191/eip191MessageBuilder.js +27 -0
  37. package/dist/src/lib/messages/eip191/index.d.ts +3 -0
  38. package/dist/src/lib/messages/eip191/index.d.ts.map +1 -0
  39. package/dist/src/lib/messages/eip191/index.js +19 -0
  40. package/dist/src/lib/messages/eip712/eip712Message.d.ts +6 -0
  41. package/dist/src/lib/messages/eip712/eip712Message.d.ts.map +1 -0
  42. package/dist/src/lib/messages/eip712/eip712Message.js +27 -0
  43. package/dist/src/lib/messages/eip712/eip712MessageBuilder.d.ts +7 -0
  44. package/dist/src/lib/messages/eip712/eip712MessageBuilder.d.ts.map +1 -0
  45. package/dist/src/lib/messages/eip712/eip712MessageBuilder.js +15 -0
  46. package/dist/src/lib/messages/eip712/index.d.ts +3 -0
  47. package/dist/src/lib/messages/eip712/index.d.ts.map +1 -0
  48. package/dist/src/lib/messages/eip712/index.js +19 -0
  49. package/dist/src/lib/messages/index.d.ts +4 -0
  50. package/dist/src/lib/messages/index.d.ts.map +1 -0
  51. package/dist/src/lib/messages/index.js +20 -0
  52. package/dist/src/lib/messages/messageBuilderFactory.d.ts +7 -0
  53. package/dist/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
  54. package/dist/src/lib/messages/messageBuilderFactory.js +23 -0
  55. package/dist/src/lib/transaction.d.ts +69 -0
  56. package/dist/src/lib/transaction.d.ts.map +1 -0
  57. package/dist/src/lib/transaction.js +149 -0
  58. package/dist/src/lib/transactionBuilder.d.ts +313 -0
  59. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  60. package/dist/src/lib/transactionBuilder.js +926 -0
  61. package/dist/src/lib/transferBuilder.d.ts +76 -0
  62. package/dist/src/lib/transferBuilder.d.ts.map +1 -0
  63. package/dist/src/lib/transferBuilder.js +307 -0
  64. package/dist/src/lib/transferBuilders/baseNFTTransferBuilder.d.ts +54 -0
  65. package/dist/src/lib/transferBuilders/baseNFTTransferBuilder.d.ts.map +1 -0
  66. package/dist/src/lib/transferBuilders/baseNFTTransferBuilder.js +120 -0
  67. package/dist/src/lib/transferBuilders/index.d.ts +5 -0
  68. package/dist/src/lib/transferBuilders/index.d.ts.map +1 -0
  69. package/dist/src/lib/transferBuilders/index.js +21 -0
  70. package/dist/src/lib/transferBuilders/transferBuilderERC1155.d.ts +17 -0
  71. package/dist/src/lib/transferBuilders/transferBuilderERC1155.d.ts.map +1 -0
  72. package/dist/src/lib/transferBuilders/transferBuilderERC1155.js +96 -0
  73. package/dist/src/lib/transferBuilders/transferBuilderERC721.d.ts +21 -0
  74. package/dist/src/lib/transferBuilders/transferBuilderERC721.d.ts.map +1 -0
  75. package/dist/src/lib/transferBuilders/transferBuilderERC721.js +91 -0
  76. package/dist/src/lib/transferBuilders/transferBuilderERC7984.d.ts +35 -0
  77. package/dist/src/lib/transferBuilders/transferBuilderERC7984.d.ts.map +1 -0
  78. package/dist/src/lib/transferBuilders/transferBuilderERC7984.js +113 -0
  79. package/dist/src/lib/types.d.ts +40 -0
  80. package/dist/src/lib/types.d.ts.map +1 -0
  81. package/dist/src/lib/types.js +140 -0
  82. package/dist/src/lib/utils.d.ts +350 -0
  83. package/dist/src/lib/utils.d.ts.map +1 -0
  84. package/dist/src/lib/utils.js +946 -0
  85. package/dist/src/lib/walletUtil.d.ts +46 -0
  86. package/dist/src/lib/walletUtil.d.ts.map +1 -0
  87. package/dist/src/lib/walletUtil.js +53 -0
  88. package/dist/src/lib/zamaUtils.d.ts +107 -0
  89. package/dist/src/lib/zamaUtils.d.ts.map +1 -0
  90. package/dist/src/lib/zamaUtils.js +220 -0
  91. package/dist/src/types.d.ts +9 -0
  92. package/dist/src/types.d.ts.map +1 -0
  93. package/dist/src/types.js +3 -0
  94. package/dist/test/index.d.ts +2 -0
  95. package/dist/test/index.d.ts.map +1 -0
  96. package/dist/test/index.js +18 -0
  97. package/dist/test/unit/coin.d.ts +8 -0
  98. package/dist/test/unit/coin.d.ts.map +1 -0
  99. package/dist/test/unit/coin.js +577 -0
  100. package/dist/test/unit/decryptionDelegationBuilder.d.ts +2 -0
  101. package/dist/test/unit/decryptionDelegationBuilder.d.ts.map +1 -0
  102. package/dist/test/unit/decryptionDelegationBuilder.js +265 -0
  103. package/dist/test/unit/index.d.ts +8 -0
  104. package/dist/test/unit/index.d.ts.map +1 -0
  105. package/dist/test/unit/index.js +24 -0
  106. package/dist/test/unit/messages/abstractEthMessageBuilderTests.d.ts +3 -0
  107. package/dist/test/unit/messages/abstractEthMessageBuilderTests.d.ts.map +1 -0
  108. package/dist/test/unit/messages/abstractEthMessageBuilderTests.js +110 -0
  109. package/dist/test/unit/messages/abstractEthMessageTestTypes.d.ts +43 -0
  110. package/dist/test/unit/messages/abstractEthMessageTestTypes.d.ts.map +1 -0
  111. package/dist/test/unit/messages/abstractEthMessageTestTypes.js +3 -0
  112. package/dist/test/unit/messages/abstractEthMessagesTests.d.ts +3 -0
  113. package/dist/test/unit/messages/abstractEthMessagesTests.d.ts.map +1 -0
  114. package/dist/test/unit/messages/abstractEthMessagesTests.js +129 -0
  115. package/dist/test/unit/messages/eip191/eip191Message.d.ts +2 -0
  116. package/dist/test/unit/messages/eip191/eip191Message.d.ts.map +1 -0
  117. package/dist/test/unit/messages/eip191/eip191Message.js +15 -0
  118. package/dist/test/unit/messages/eip191/eip191MessageBuilder.d.ts +2 -0
  119. package/dist/test/unit/messages/eip191/eip191MessageBuilder.d.ts.map +1 -0
  120. package/dist/test/unit/messages/eip191/eip191MessageBuilder.js +16 -0
  121. package/dist/test/unit/messages/eip191/fixtures.d.ts +109 -0
  122. package/dist/test/unit/messages/eip191/fixtures.d.ts.map +1 -0
  123. package/dist/test/unit/messages/eip191/fixtures.js +63 -0
  124. package/dist/test/unit/messages/eip712/eip712Message.d.ts +2 -0
  125. package/dist/test/unit/messages/eip712/eip712Message.d.ts.map +1 -0
  126. package/dist/test/unit/messages/eip712/eip712Message.js +15 -0
  127. package/dist/test/unit/messages/eip712/eip712MessageBuilder.d.ts +2 -0
  128. package/dist/test/unit/messages/eip712/eip712MessageBuilder.d.ts.map +1 -0
  129. package/dist/test/unit/messages/eip712/eip712MessageBuilder.js +16 -0
  130. package/dist/test/unit/messages/eip712/fixtures.d.ts +76 -0
  131. package/dist/test/unit/messages/eip712/fixtures.d.ts.map +1 -0
  132. package/dist/test/unit/messages/eip712/fixtures.js +120 -0
  133. package/dist/test/unit/messages/index.d.ts +4 -0
  134. package/dist/test/unit/messages/index.d.ts.map +1 -0
  135. package/dist/test/unit/messages/index.js +20 -0
  136. package/dist/test/unit/messages/messageBuilderFactory.d.ts +2 -0
  137. package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
  138. package/dist/test/unit/messages/messageBuilderFactory.js +52 -0
  139. package/dist/test/unit/token.d.ts +2 -0
  140. package/dist/test/unit/token.d.ts.map +1 -0
  141. package/dist/test/unit/token.js +37 -0
  142. package/dist/test/unit/transaction.d.ts +3 -0
  143. package/dist/test/unit/transaction.d.ts.map +1 -0
  144. package/dist/test/unit/transaction.js +73 -0
  145. package/dist/test/unit/transactionBuilder/addressInitialization.d.ts +8 -0
  146. package/dist/test/unit/transactionBuilder/addressInitialization.d.ts.map +1 -0
  147. package/dist/test/unit/transactionBuilder/addressInitialization.js +95 -0
  148. package/dist/test/unit/transactionBuilder/decryptionDelegation.d.ts +3 -0
  149. package/dist/test/unit/transactionBuilder/decryptionDelegation.d.ts.map +1 -0
  150. package/dist/test/unit/transactionBuilder/decryptionDelegation.js +161 -0
  151. package/dist/test/unit/transactionBuilder/flushERC7984.d.ts +3 -0
  152. package/dist/test/unit/transactionBuilder/flushERC7984.d.ts.map +1 -0
  153. package/dist/test/unit/transactionBuilder/flushERC7984.js +292 -0
  154. package/dist/test/unit/transactionBuilder/flushNft.d.ts +2 -0
  155. package/dist/test/unit/transactionBuilder/flushNft.d.ts.map +1 -0
  156. package/dist/test/unit/transactionBuilder/flushNft.js +381 -0
  157. package/dist/test/unit/transactionBuilder/index.d.ts +7 -0
  158. package/dist/test/unit/transactionBuilder/index.d.ts.map +1 -0
  159. package/dist/test/unit/transactionBuilder/index.js +23 -0
  160. package/dist/test/unit/transactionBuilder/send.d.ts +3 -0
  161. package/dist/test/unit/transactionBuilder/send.d.ts.map +1 -0
  162. package/dist/test/unit/transactionBuilder/send.js +197 -0
  163. package/dist/test/unit/transactionBuilder/walletInitialization.d.ts +11 -0
  164. package/dist/test/unit/transactionBuilder/walletInitialization.d.ts.map +1 -0
  165. package/dist/test/unit/transactionBuilder/walletInitialization.js +137 -0
  166. package/dist/test/unit/transferBuilder.d.ts +2 -0
  167. package/dist/test/unit/transferBuilder.d.ts.map +1 -0
  168. package/dist/test/unit/transferBuilder.js +76 -0
  169. package/dist/test/unit/utils.d.ts +2 -0
  170. package/dist/test/unit/utils.d.ts.map +1 -0
  171. package/dist/test/unit/utils.js +214 -0
  172. package/dist/test/unit/zamaUtils.d.ts +2 -0
  173. package/dist/test/unit/zamaUtils.d.ts.map +1 -0
  174. package/dist/test/unit/zamaUtils.js +352 -0
  175. package/dist/tsconfig.tsbuildinfo +1 -8286
  176. package/package.json +34 -10
  177. package/.eslintignore +0 -5
  178. package/CHANGELOG.md +0 -166
@@ -0,0 +1,46 @@
1
+ export declare const sendMultisigMethodId = "0x39125215";
2
+ export declare const sendMultisigTokenMethodId = "0x0dcd7a6c";
3
+ export declare const v1CreateForwarderMethodId = "0xfb90b320";
4
+ export declare const v4CreateForwarderMethodId = "0x13b2f75c";
5
+ export declare const v1WalletInitializationFirstBytes = "0x60806040";
6
+ export declare const v1CreateWalletMethodId = "0x7117f3fa";
7
+ export declare const createForwarderMethodId = "0xa68a76cc";
8
+ export declare const walletInitializationFirstBytes = "0x60606040";
9
+ export declare const recoveryWalletInitializationFirstBytes = "0x60c06040";
10
+ export declare const flushForwarderTokensMethodId = "0x2da03409";
11
+ export declare const flushForwarderTokensMethodIdV4 = "0x3ef13367";
12
+ export declare const flushCoinsMethodId = "0x6b9f96ea";
13
+ export declare const flushERC721ForwarderTokensMethodId = "0x5a953d0a";
14
+ export declare const flushERC721ForwarderTokensMethodIdV4 = "0x159e44d7";
15
+ export declare const flushERC1155ForwarderTokensMethodId = "0xe6bd0aa4";
16
+ export declare const flushERC1155ForwarderTokensMethodIdV4 = "0x8972c17c";
17
+ export declare const ERC721SafeTransferTypeMethodId = "0xb88d4fde";
18
+ export declare const ERC721TransferFromMethodId = "0x23b872dd";
19
+ export declare const ERC1155SafeTransferTypeMethodId = "0xf242432a";
20
+ export declare const ERC1155BatchTransferTypeMethodId = "0x2eb2c2d6";
21
+ export declare const defaultForwarderVersion = 0;
22
+ export declare const defaultWalletVersion = 0;
23
+ export declare const walletSimpleConstructor: string[];
24
+ export declare const createV1WalletTypes: string[];
25
+ export declare const flushTokensTypes: string[];
26
+ export declare const flushTokensTypesv4: string[];
27
+ export declare const flushCoinsTypes: never[];
28
+ export declare const flushERC721TokensTypes: string[];
29
+ export declare const flushERC721TokensTypesv4: string[];
30
+ export declare const flushERC1155TokensTypes: string[];
31
+ export declare const flushERC1155TokensTypesv4: string[];
32
+ export declare const sendMultiSigTypes: string[];
33
+ export declare const sendMultiSigTypesFirstSigner: string[];
34
+ export declare const sendMultiSigTokenTypes: string[];
35
+ export declare const sendMultiSigTokenTypesFirstSigner: string[];
36
+ export declare const ERC721SafeTransferTypes: string[];
37
+ export declare const ERC721TransferFromTypes: string[];
38
+ export declare const ERC1155SafeTransferTypes: string[];
39
+ export declare const ERC1155BatchTransferTypes: string[];
40
+ export declare const createV1ForwarderTypes: string[];
41
+ export declare const createV4ForwarderTypes: string[];
42
+ export declare const confidentialTransferWithProofMethodId = "0x2fb74e62";
43
+ export declare const confidentialTransferNoProofMethodId = "0x5bebed7e";
44
+ export declare const confidentialTransferWithProofTypes: string[];
45
+ export declare const confidentialTransferNoProofTypes: string[];
46
+ //# sourceMappingURL=walletUtil.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walletUtil.d.ts","sourceRoot":"","sources":["../../../src/lib/walletUtil.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,eAAe,CAAC;AACjD,eAAO,MAAM,yBAAyB,eAAe,CAAC;AACtD,eAAO,MAAM,yBAAyB,eAAe,CAAC;AACtD,eAAO,MAAM,yBAAyB,eAAe,CAAC;AACtD,eAAO,MAAM,gCAAgC,eAAe,CAAC;AAC7D,eAAO,MAAM,sBAAsB,eAAe,CAAC;AACnD,eAAO,MAAM,uBAAuB,eAAe,CAAC;AACpD,eAAO,MAAM,8BAA8B,eAAe,CAAC;AAC3D,eAAO,MAAM,sCAAsC,eAAe,CAAC;AACnE,eAAO,MAAM,4BAA4B,eAAe,CAAC;AACzD,eAAO,MAAM,8BAA8B,eAAe,CAAC;AAC3D,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAC/C,eAAO,MAAM,kCAAkC,eAAe,CAAC;AAC/D,eAAO,MAAM,oCAAoC,eAAe,CAAC;AACjE,eAAO,MAAM,mCAAmC,eAAe,CAAC;AAChE,eAAO,MAAM,qCAAqC,eAAe,CAAC;AAElE,eAAO,MAAM,8BAA8B,eAAe,CAAC;AAC3D,eAAO,MAAM,0BAA0B,eAAe,CAAC;AACvD,eAAO,MAAM,+BAA+B,eAAe,CAAC;AAC5D,eAAO,MAAM,gCAAgC,eAAe,CAAC;AAC7D,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,eAAO,MAAM,uBAAuB,UAAgB,CAAC;AACrD,eAAO,MAAM,mBAAmB,UAA2B,CAAC;AAC5D,eAAO,MAAM,gBAAgB,UAAyB,CAAC;AACvD,eAAO,MAAM,kBAAkB,UAAc,CAAC;AAC9C,eAAO,MAAM,eAAe,SAAK,CAAC;AAClC,eAAO,MAAM,sBAAsB,UAAoC,CAAC;AACxE,eAAO,MAAM,wBAAwB,UAAyB,CAAC;AAC/D,eAAO,MAAM,uBAAuB,UAAoC,CAAC;AACzE,eAAO,MAAM,yBAAyB,UAAyB,CAAC;AAEhE,eAAO,MAAM,iBAAiB,UAAwD,CAAC;AACvF,eAAO,MAAM,4BAA4B,UAAyD,CAAC;AAEnG,eAAO,MAAM,sBAAsB,UAA0D,CAAC;AAC9F,eAAO,MAAM,iCAAiC,UAA2D,CAAC;AAE1G,eAAO,MAAM,uBAAuB,UAA6C,CAAC;AAClF,eAAO,MAAM,uBAAuB,UAAoC,CAAC;AAEzE,eAAO,MAAM,wBAAwB,UAAwD,CAAC;AAC9F,eAAO,MAAM,yBAAyB,UAA4D,CAAC;AACnG,eAAO,MAAM,sBAAsB,UAAyB,CAAC;AAC7D,eAAO,MAAM,sBAAsB,UAAoC,CAAC;AAGxE,eAAO,MAAM,qCAAqC,eAAe,CAAC;AAElE,eAAO,MAAM,mCAAmC,eAAe,CAAC;AAEhE,eAAO,MAAM,kCAAkC,UAAkC,CAAC;AAElF,eAAO,MAAM,gCAAgC,UAAyB,CAAC"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.confidentialTransferNoProofTypes = exports.confidentialTransferWithProofTypes = exports.confidentialTransferNoProofMethodId = exports.confidentialTransferWithProofMethodId = exports.createV4ForwarderTypes = exports.createV1ForwarderTypes = exports.ERC1155BatchTransferTypes = exports.ERC1155SafeTransferTypes = exports.ERC721TransferFromTypes = exports.ERC721SafeTransferTypes = exports.sendMultiSigTokenTypesFirstSigner = exports.sendMultiSigTokenTypes = exports.sendMultiSigTypesFirstSigner = exports.sendMultiSigTypes = exports.flushERC1155TokensTypesv4 = exports.flushERC1155TokensTypes = exports.flushERC721TokensTypesv4 = exports.flushERC721TokensTypes = exports.flushCoinsTypes = exports.flushTokensTypesv4 = exports.flushTokensTypes = exports.createV1WalletTypes = exports.walletSimpleConstructor = exports.defaultWalletVersion = exports.defaultForwarderVersion = exports.ERC1155BatchTransferTypeMethodId = exports.ERC1155SafeTransferTypeMethodId = exports.ERC721TransferFromMethodId = exports.ERC721SafeTransferTypeMethodId = exports.flushERC1155ForwarderTokensMethodIdV4 = exports.flushERC1155ForwarderTokensMethodId = exports.flushERC721ForwarderTokensMethodIdV4 = exports.flushERC721ForwarderTokensMethodId = exports.flushCoinsMethodId = exports.flushForwarderTokensMethodIdV4 = exports.flushForwarderTokensMethodId = exports.recoveryWalletInitializationFirstBytes = exports.walletInitializationFirstBytes = exports.createForwarderMethodId = exports.v1CreateWalletMethodId = exports.v1WalletInitializationFirstBytes = exports.v4CreateForwarderMethodId = exports.v1CreateForwarderMethodId = exports.sendMultisigTokenMethodId = exports.sendMultisigMethodId = void 0;
4
+ exports.sendMultisigMethodId = '0x39125215';
5
+ exports.sendMultisigTokenMethodId = '0x0dcd7a6c';
6
+ exports.v1CreateForwarderMethodId = '0xfb90b320';
7
+ exports.v4CreateForwarderMethodId = '0x13b2f75c';
8
+ exports.v1WalletInitializationFirstBytes = '0x60806040';
9
+ exports.v1CreateWalletMethodId = '0x7117f3fa';
10
+ exports.createForwarderMethodId = '0xa68a76cc';
11
+ exports.walletInitializationFirstBytes = '0x60606040';
12
+ exports.recoveryWalletInitializationFirstBytes = '0x60c06040';
13
+ exports.flushForwarderTokensMethodId = '0x2da03409';
14
+ exports.flushForwarderTokensMethodIdV4 = '0x3ef13367';
15
+ exports.flushCoinsMethodId = '0x6b9f96ea';
16
+ exports.flushERC721ForwarderTokensMethodId = '0x5a953d0a';
17
+ exports.flushERC721ForwarderTokensMethodIdV4 = '0x159e44d7';
18
+ exports.flushERC1155ForwarderTokensMethodId = '0xe6bd0aa4';
19
+ exports.flushERC1155ForwarderTokensMethodIdV4 = '0x8972c17c';
20
+ exports.ERC721SafeTransferTypeMethodId = '0xb88d4fde';
21
+ exports.ERC721TransferFromMethodId = '0x23b872dd';
22
+ exports.ERC1155SafeTransferTypeMethodId = '0xf242432a';
23
+ exports.ERC1155BatchTransferTypeMethodId = '0x2eb2c2d6';
24
+ exports.defaultForwarderVersion = 0;
25
+ exports.defaultWalletVersion = 0;
26
+ exports.walletSimpleConstructor = ['address[]'];
27
+ exports.createV1WalletTypes = ['address[]', 'bytes32'];
28
+ exports.flushTokensTypes = ['address', 'address'];
29
+ exports.flushTokensTypesv4 = ['address'];
30
+ exports.flushCoinsTypes = [];
31
+ exports.flushERC721TokensTypes = ['address', 'address', 'uint256'];
32
+ exports.flushERC721TokensTypesv4 = ['address', 'uint256'];
33
+ exports.flushERC1155TokensTypes = ['address', 'address', 'uint256'];
34
+ exports.flushERC1155TokensTypesv4 = ['address', 'uint256'];
35
+ exports.sendMultiSigTypes = ['address', 'uint', 'bytes', 'uint', 'uint', 'bytes'];
36
+ exports.sendMultiSigTypesFirstSigner = ['string', 'address', 'uint', 'bytes', 'uint', 'uint'];
37
+ exports.sendMultiSigTokenTypes = ['address', 'uint', 'address', 'uint', 'uint', 'bytes'];
38
+ exports.sendMultiSigTokenTypesFirstSigner = ['string', 'address', 'uint', 'address', 'uint', 'uint'];
39
+ exports.ERC721SafeTransferTypes = ['address', 'address', 'uint256', 'bytes'];
40
+ exports.ERC721TransferFromTypes = ['address', 'address', 'uint256'];
41
+ exports.ERC1155SafeTransferTypes = ['address', 'address', 'uint256', 'uint256', 'bytes'];
42
+ exports.ERC1155BatchTransferTypes = ['address', 'address', 'uint256[]', 'uint256[]', 'bytes'];
43
+ exports.createV1ForwarderTypes = ['address', 'bytes32'];
44
+ exports.createV4ForwarderTypes = ['address', 'address', 'bytes32'];
45
+ // keccak256("confidentialTransfer(address,bytes32,bytes)")[0:4]
46
+ exports.confidentialTransferWithProofMethodId = '0x2fb74e62';
47
+ // keccak256("confidentialTransfer(address,bytes32)")[0:4] — for decoding only
48
+ exports.confidentialTransferNoProofMethodId = '0x5bebed7e';
49
+ // ABI parameter types for the 3-param version
50
+ exports.confidentialTransferWithProofTypes = ['address', 'bytes32', 'bytes'];
51
+ // ABI parameter types for confidentialTransfer(address, bytes32) — no proof version
52
+ exports.confidentialTransferNoProofTypes = ['address', 'bytes32'];
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0VXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvd2FsbGV0VXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLG9CQUFvQixHQUFHLFlBQVksQ0FBQztBQUNwQyxRQUFBLHlCQUF5QixHQUFHLFlBQVksQ0FBQztBQUN6QyxRQUFBLHlCQUF5QixHQUFHLFlBQVksQ0FBQztBQUN6QyxRQUFBLHlCQUF5QixHQUFHLFlBQVksQ0FBQztBQUN6QyxRQUFBLGdDQUFnQyxHQUFHLFlBQVksQ0FBQztBQUNoRCxRQUFBLHNCQUFzQixHQUFHLFlBQVksQ0FBQztBQUN0QyxRQUFBLHVCQUF1QixHQUFHLFlBQVksQ0FBQztBQUN2QyxRQUFBLDhCQUE4QixHQUFHLFlBQVksQ0FBQztBQUM5QyxRQUFBLHNDQUFzQyxHQUFHLFlBQVksQ0FBQztBQUN0RCxRQUFBLDRCQUE0QixHQUFHLFlBQVksQ0FBQztBQUM1QyxRQUFBLDhCQUE4QixHQUFHLFlBQVksQ0FBQztBQUM5QyxRQUFBLGtCQUFrQixHQUFHLFlBQVksQ0FBQztBQUNsQyxRQUFBLGtDQUFrQyxHQUFHLFlBQVksQ0FBQztBQUNsRCxRQUFBLG9DQUFvQyxHQUFHLFlBQVksQ0FBQztBQUNwRCxRQUFBLG1DQUFtQyxHQUFHLFlBQVksQ0FBQztBQUNuRCxRQUFBLHFDQUFxQyxHQUFHLFlBQVksQ0FBQztBQUVyRCxRQUFBLDhCQUE4QixHQUFHLFlBQVksQ0FBQztBQUM5QyxRQUFBLDBCQUEwQixHQUFHLFlBQVksQ0FBQztBQUMxQyxRQUFBLCtCQUErQixHQUFHLFlBQVksQ0FBQztBQUMvQyxRQUFBLGdDQUFnQyxHQUFHLFlBQVksQ0FBQztBQUNoRCxRQUFBLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUM1QixRQUFBLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUV6QixRQUFBLHVCQUF1QixHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDeEMsUUFBQSxtQkFBbUIsR0FBRyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMvQyxRQUFBLGdCQUFnQixHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzFDLFFBQUEsa0JBQWtCLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNqQyxRQUFBLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDckIsUUFBQSxzQkFBc0IsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDM0QsUUFBQSx3QkFBd0IsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNsRCxRQUFBLHVCQUF1QixHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM1RCxRQUFBLHlCQUF5QixHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBRW5ELFFBQUEsaUJBQWlCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzFFLFFBQUEsNEJBQTRCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRXRGLFFBQUEsc0JBQXNCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2pGLFFBQUEsaUNBQWlDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRTdGLFFBQUEsdUJBQXVCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNyRSxRQUFBLHVCQUF1QixHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUU1RCxRQUFBLHdCQUF3QixHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2pGLFFBQUEseUJBQXlCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdEYsUUFBQSxzQkFBc0IsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNoRCxRQUFBLHNCQUFzQixHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUV4RSxnRUFBZ0U7QUFDbkQsUUFBQSxxQ0FBcUMsR0FBRyxZQUFZLENBQUM7QUFDbEUsOEVBQThFO0FBQ2pFLFFBQUEsbUNBQW1DLEdBQUcsWUFBWSxDQUFDO0FBQ2hFLDhDQUE4QztBQUNqQyxRQUFBLGtDQUFrQyxHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRixvRkFBb0Y7QUFDdkUsUUFBQSxnQ0FBZ0MsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBzZW5kTXVsdGlzaWdNZXRob2RJZCA9ICcweDM5MTI1MjE1JztcbmV4cG9ydCBjb25zdCBzZW5kTXVsdGlzaWdUb2tlbk1ldGhvZElkID0gJzB4MGRjZDdhNmMnO1xuZXhwb3J0IGNvbnN0IHYxQ3JlYXRlRm9yd2FyZGVyTWV0aG9kSWQgPSAnMHhmYjkwYjMyMCc7XG5leHBvcnQgY29uc3QgdjRDcmVhdGVGb3J3YXJkZXJNZXRob2RJZCA9ICcweDEzYjJmNzVjJztcbmV4cG9ydCBjb25zdCB2MVdhbGxldEluaXRpYWxpemF0aW9uRmlyc3RCeXRlcyA9ICcweDYwODA2MDQwJztcbmV4cG9ydCBjb25zdCB2MUNyZWF0ZVdhbGxldE1ldGhvZElkID0gJzB4NzExN2YzZmEnO1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUZvcndhcmRlck1ldGhvZElkID0gJzB4YTY4YTc2Y2MnO1xuZXhwb3J0IGNvbnN0IHdhbGxldEluaXRpYWxpemF0aW9uRmlyc3RCeXRlcyA9ICcweDYwNjA2MDQwJztcbmV4cG9ydCBjb25zdCByZWNvdmVyeVdhbGxldEluaXRpYWxpemF0aW9uRmlyc3RCeXRlcyA9ICcweDYwYzA2MDQwJztcbmV4cG9ydCBjb25zdCBmbHVzaEZvcndhcmRlclRva2Vuc01ldGhvZElkID0gJzB4MmRhMDM0MDknO1xuZXhwb3J0IGNvbnN0IGZsdXNoRm9yd2FyZGVyVG9rZW5zTWV0aG9kSWRWNCA9ICcweDNlZjEzMzY3JztcbmV4cG9ydCBjb25zdCBmbHVzaENvaW5zTWV0aG9kSWQgPSAnMHg2YjlmOTZlYSc7XG5leHBvcnQgY29uc3QgZmx1c2hFUkM3MjFGb3J3YXJkZXJUb2tlbnNNZXRob2RJZCA9ICcweDVhOTUzZDBhJztcbmV4cG9ydCBjb25zdCBmbHVzaEVSQzcyMUZvcndhcmRlclRva2Vuc01ldGhvZElkVjQgPSAnMHgxNTllNDRkNyc7XG5leHBvcnQgY29uc3QgZmx1c2hFUkMxMTU1Rm9yd2FyZGVyVG9rZW5zTWV0aG9kSWQgPSAnMHhlNmJkMGFhNCc7XG5leHBvcnQgY29uc3QgZmx1c2hFUkMxMTU1Rm9yd2FyZGVyVG9rZW5zTWV0aG9kSWRWNCA9ICcweDg5NzJjMTdjJztcblxuZXhwb3J0IGNvbnN0IEVSQzcyMVNhZmVUcmFuc2ZlclR5cGVNZXRob2RJZCA9ICcweGI4OGQ0ZmRlJztcbmV4cG9ydCBjb25zdCBFUkM3MjFUcmFuc2ZlckZyb21NZXRob2RJZCA9ICcweDIzYjg3MmRkJztcbmV4cG9ydCBjb25zdCBFUkMxMTU1U2FmZVRyYW5zZmVyVHlwZU1ldGhvZElkID0gJzB4ZjI0MjQzMmEnO1xuZXhwb3J0IGNvbnN0IEVSQzExNTVCYXRjaFRyYW5zZmVyVHlwZU1ldGhvZElkID0gJzB4MmViMmMyZDYnO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRGb3J3YXJkZXJWZXJzaW9uID0gMDtcbmV4cG9ydCBjb25zdCBkZWZhdWx0V2FsbGV0VmVyc2lvbiA9IDA7XG5cbmV4cG9ydCBjb25zdCB3YWxsZXRTaW1wbGVDb25zdHJ1Y3RvciA9IFsnYWRkcmVzc1tdJ107XG5leHBvcnQgY29uc3QgY3JlYXRlVjFXYWxsZXRUeXBlcyA9IFsnYWRkcmVzc1tdJywgJ2J5dGVzMzInXTtcbmV4cG9ydCBjb25zdCBmbHVzaFRva2Vuc1R5cGVzID0gWydhZGRyZXNzJywgJ2FkZHJlc3MnXTtcbmV4cG9ydCBjb25zdCBmbHVzaFRva2Vuc1R5cGVzdjQgPSBbJ2FkZHJlc3MnXTtcbmV4cG9ydCBjb25zdCBmbHVzaENvaW5zVHlwZXMgPSBbXTtcbmV4cG9ydCBjb25zdCBmbHVzaEVSQzcyMVRva2Vuc1R5cGVzID0gWydhZGRyZXNzJywgJ2FkZHJlc3MnLCAndWludDI1NiddO1xuZXhwb3J0IGNvbnN0IGZsdXNoRVJDNzIxVG9rZW5zVHlwZXN2NCA9IFsnYWRkcmVzcycsICd1aW50MjU2J107XG5leHBvcnQgY29uc3QgZmx1c2hFUkMxMTU1VG9rZW5zVHlwZXMgPSBbJ2FkZHJlc3MnLCAnYWRkcmVzcycsICd1aW50MjU2J107XG5leHBvcnQgY29uc3QgZmx1c2hFUkMxMTU1VG9rZW5zVHlwZXN2NCA9IFsnYWRkcmVzcycsICd1aW50MjU2J107XG5cbmV4cG9ydCBjb25zdCBzZW5kTXVsdGlTaWdUeXBlcyA9IFsnYWRkcmVzcycsICd1aW50JywgJ2J5dGVzJywgJ3VpbnQnLCAndWludCcsICdieXRlcyddO1xuZXhwb3J0IGNvbnN0IHNlbmRNdWx0aVNpZ1R5cGVzRmlyc3RTaWduZXIgPSBbJ3N0cmluZycsICdhZGRyZXNzJywgJ3VpbnQnLCAnYnl0ZXMnLCAndWludCcsICd1aW50J107XG5cbmV4cG9ydCBjb25zdCBzZW5kTXVsdGlTaWdUb2tlblR5cGVzID0gWydhZGRyZXNzJywgJ3VpbnQnLCAnYWRkcmVzcycsICd1aW50JywgJ3VpbnQnLCAnYnl0ZXMnXTtcbmV4cG9ydCBjb25zdCBzZW5kTXVsdGlTaWdUb2tlblR5cGVzRmlyc3RTaWduZXIgPSBbJ3N0cmluZycsICdhZGRyZXNzJywgJ3VpbnQnLCAnYWRkcmVzcycsICd1aW50JywgJ3VpbnQnXTtcblxuZXhwb3J0IGNvbnN0IEVSQzcyMVNhZmVUcmFuc2ZlclR5cGVzID0gWydhZGRyZXNzJywgJ2FkZHJlc3MnLCAndWludDI1NicsICdieXRlcyddO1xuZXhwb3J0IGNvbnN0IEVSQzcyMVRyYW5zZmVyRnJvbVR5cGVzID0gWydhZGRyZXNzJywgJ2FkZHJlc3MnLCAndWludDI1NiddO1xuXG5leHBvcnQgY29uc3QgRVJDMTE1NVNhZmVUcmFuc2ZlclR5cGVzID0gWydhZGRyZXNzJywgJ2FkZHJlc3MnLCAndWludDI1NicsICd1aW50MjU2JywgJ2J5dGVzJ107XG5leHBvcnQgY29uc3QgRVJDMTE1NUJhdGNoVHJhbnNmZXJUeXBlcyA9IFsnYWRkcmVzcycsICdhZGRyZXNzJywgJ3VpbnQyNTZbXScsICd1aW50MjU2W10nLCAnYnl0ZXMnXTtcbmV4cG9ydCBjb25zdCBjcmVhdGVWMUZvcndhcmRlclR5cGVzID0gWydhZGRyZXNzJywgJ2J5dGVzMzInXTtcbmV4cG9ydCBjb25zdCBjcmVhdGVWNEZvcndhcmRlclR5cGVzID0gWydhZGRyZXNzJywgJ2FkZHJlc3MnLCAnYnl0ZXMzMiddO1xuXG4vLyBrZWNjYWsyNTYoXCJjb25maWRlbnRpYWxUcmFuc2ZlcihhZGRyZXNzLGJ5dGVzMzIsYnl0ZXMpXCIpWzA6NF1cbmV4cG9ydCBjb25zdCBjb25maWRlbnRpYWxUcmFuc2ZlcldpdGhQcm9vZk1ldGhvZElkID0gJzB4MmZiNzRlNjInO1xuLy8ga2VjY2FrMjU2KFwiY29uZmlkZW50aWFsVHJhbnNmZXIoYWRkcmVzcyxieXRlczMyKVwiKVswOjRdIOKAlCBmb3IgZGVjb2Rpbmcgb25seVxuZXhwb3J0IGNvbnN0IGNvbmZpZGVudGlhbFRyYW5zZmVyTm9Qcm9vZk1ldGhvZElkID0gJzB4NWJlYmVkN2UnO1xuLy8gQUJJIHBhcmFtZXRlciB0eXBlcyBmb3IgdGhlIDMtcGFyYW0gdmVyc2lvblxuZXhwb3J0IGNvbnN0IGNvbmZpZGVudGlhbFRyYW5zZmVyV2l0aFByb29mVHlwZXMgPSBbJ2FkZHJlc3MnLCAnYnl0ZXMzMicsICdieXRlcyddO1xuLy8gQUJJIHBhcmFtZXRlciB0eXBlcyBmb3IgY29uZmlkZW50aWFsVHJhbnNmZXIoYWRkcmVzcywgYnl0ZXMzMikg4oCUIG5vIHByb29mIHZlcnNpb25cbmV4cG9ydCBjb25zdCBjb25maWRlbnRpYWxUcmFuc2Zlck5vUHJvb2ZUeXBlcyA9IFsnYWRkcmVzcycsICdieXRlczMyJ107XG4iXX0=
@@ -0,0 +1,107 @@
1
+ export declare const delegateForUserDecryptionTypes: readonly ["address", "address", "uint64"];
2
+ export declare const callFromParentTypes: readonly ["address", "uint256", "bytes"];
3
+ export declare const aclMulticallTypes: readonly ["bytes[]"];
4
+ /**
5
+ * Function selector for ACL.delegateForUserDecryption(address,address,uint64)
6
+ * = keccak256('delegateForUserDecryption(address,address,uint64)')[0:4]
7
+ */
8
+ export declare const delegateForUserDecryptionMethodId: string;
9
+ /**
10
+ * Function selector for ACL.multicall(bytes[])
11
+ * = keccak256('multicall(bytes[])')[0:4]
12
+ * ACL inherits OpenZeppelin MulticallUpgradeable — preserves msg.sender via delegatecall.
13
+ */
14
+ export declare const aclMulticallMethodId: string;
15
+ /**
16
+ * Function selector for ForwarderV4.callFromParent(address,uint256,bytes)
17
+ * = keccak256('callFromParent(address,uint256,bytes)')[0:4]
18
+ */
19
+ export declare const callFromParentMethodId: string;
20
+ /**
21
+ * Encodes a single ACL.delegateForUserDecryption() call.
22
+ *
23
+ * Grants `delegateAddress` the right to decrypt ERC-7984 token balances on
24
+ * behalf of the calling address (msg.sender) for the specified token contract.
25
+ *
26
+ * @param delegateAddress BitGo enterprise viewing key address
27
+ * @param tokenContractAddress ERC-7984 token contract address
28
+ * @param expiryTimestamp Unix seconds; recommended: Math.floor(Date.now()/1000) + 365*86400
29
+ * @returns ABI-encoded calldata hex string (0x-prefixed)
30
+ */
31
+ export declare function buildDelegationCalldata(delegateAddress: string, tokenContractAddress: string, expiryTimestamp: number): string;
32
+ /**
33
+ * Encodes N delegateForUserDecryption calls batched inside ACL.multicall().
34
+ *
35
+ * Produces a single TX that grants delegation for all specified token contracts.
36
+ * Requires tokenContractAddresses.length >= 1.
37
+ * Note: DecryptionDelegationBuilder always uses this function (even for a single token)
38
+ * to keep the transaction shape consistent regardless of token count.
39
+ *
40
+ * @param delegateAddress BitGo enterprise viewing key address
41
+ * @param tokenContractAddresses Array of ERC-7984 token contract addresses
42
+ * @param expiryTimestamp Unix seconds
43
+ * @returns ABI-encoded calldata hex string (0x-prefixed)
44
+ */
45
+ export declare function buildMulticallDelegationCalldata(delegateAddress: string, tokenContractAddresses: string[], expiryTimestamp: number): string;
46
+ /**
47
+ * Wraps calldata in a ForwarderV4.callFromParent(target, 0, data) call.
48
+ *
49
+ * Used when a forwarder contract must be msg.sender for an external contract
50
+ * call — for example, when the forwarder itself needs to call
51
+ * ACL.delegateForUserDecryption() so that its own balance can be decrypted.
52
+ *
53
+ * Only the parentAddress (root wallet) is allowed to call callFromParent
54
+ * (enforced by the forwarder's onlyParent modifier).
55
+ *
56
+ * @param targetAddress Address of the contract the forwarder will call (e.g. ACL)
57
+ * @param calldata ABI-encoded inner calldata (e.g. from buildDelegationCalldata)
58
+ * @returns ABI-encoded callFromParent calldata hex string (0x-prefixed)
59
+ */
60
+ export declare function wrapInCallFromParent(targetAddress: string, calldata: string): string;
61
+ /**
62
+ * Decodes token contract addresses from delegation calldata.
63
+ *
64
+ * Handles two shapes of calldata:
65
+ * - Direct ACL.multicall(bytes[]) (root wallet path)
66
+ * - ForwarderV4.callFromParent(address, uint256, bytes) wrapping a multicall (forwarder path)
67
+ *
68
+ * @param calldata ABI-encoded delegation calldata (0x-prefixed or raw hex)
69
+ * @returns Array of token contract addresses (lowercase) found in the delegation calls
70
+ * @throws {Error} if the calldata does not start with a recognised method selector
71
+ */
72
+ export declare function decodeTokenAddressesFromDelegationCalldata(calldata: string): string[];
73
+ /**
74
+ * Encodes confidentialTransfer(address to, bytes32 encryptedHandle) calldata.
75
+ * Uses the no-proof variant (selector 0x5bebed7e) — valid when the caller (forwarder)
76
+ * is already ACL-allowed on the handle from when it received the tokens.
77
+ *
78
+ * @param toAddress Address that will receive the tokens
79
+ * @param encryptedHandle bytes32 encrypted balance handle from confidentialBalanceOf
80
+ * @returns ABI-encoded calldata hex string (0x-prefixed)
81
+ */
82
+ export declare function buildConfidentialTransferByHandleCalldata(toAddress: string, encryptedHandle: string): string;
83
+ /**
84
+ * Encodes the full flush calldata for ERC-7984 forwarder consolidation:
85
+ * callFromParent(tokenContractAddress, 0, confidentialTransfer(parentAddress, encryptedHandle))
86
+ * The forwarder executes the inner confidentialTransfer with msg.sender = forwarder.
87
+ *
88
+ * @param tokenContractAddress ERC-7984 token contract address
89
+ * @param parentAddress Root wallet address (destination of flushed tokens)
90
+ * @param encryptedHandle bytes32 encrypted balance handle from confidentialBalanceOf
91
+ * @returns ABI-encoded calldata hex string (0x-prefixed)
92
+ */
93
+ export declare function buildFlushERC7984ForwarderTokenCalldata(tokenContractAddress: string, parentAddress: string, encryptedHandle: string): string;
94
+ /**
95
+ * Decodes a FlushERC7984ForwarderToken calldata.
96
+ * Strips the outer callFromParent wrapper and the inner confidentialTransfer.
97
+ * Returns { tokenContractAddress, parentAddress, encryptedHandle }.
98
+ *
99
+ * @param data ABI-encoded flush calldata (0x-prefixed)
100
+ * @returns Decoded fields
101
+ */
102
+ export declare function decodeFlushERC7984ForwarderTokenCalldata(data: string): {
103
+ tokenContractAddress: string;
104
+ parentAddress: string;
105
+ encryptedHandle: string;
106
+ };
107
+ //# sourceMappingURL=zamaUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zamaUtils.d.ts","sourceRoot":"","sources":["../../../src/lib/zamaUtils.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,8BAA8B,2CAA4C,CAAC;AACxF,eAAO,MAAM,mBAAmB,0CAA2C,CAAC;AAC5E,eAAO,MAAM,iBAAiB,sBAAuB,CAAC;AAEtD;;;GAGG;AACH,eAAO,MAAM,iCAAiC,QAE7C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,QAEhC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,QAElC,CAAC;AAMF;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,eAAe,EAAE,MAAM,EACvB,oBAAoB,EAAE,MAAM,EAC5B,eAAe,EAAE,MAAM,GACtB,MAAM,CAOR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gCAAgC,CAC9C,eAAe,EAAE,MAAM,EACvB,sBAAsB,EAAE,MAAM,EAAE,EAChC,eAAe,EAAE,MAAM,GACtB,MAAM,CAyBR;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAWpF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,0CAA0C,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAyCrF;AAED;;;;;;;;GAQG;AACH,wBAAgB,yCAAyC,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAK5G;AAED;;;;;;;;;GASG;AACH,wBAAgB,uCAAuC,CACrD,oBAAoB,EAAE,MAAM,EAC5B,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,MAAM,GACtB,MAAM,CAGR;AAED;;;;;;;GAOG;AACH,wBAAgB,wCAAwC,CAAC,IAAI,EAAE,MAAM,GAAG;IACtE,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB,CA8BA"}
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.callFromParentMethodId = exports.aclMulticallMethodId = exports.delegateForUserDecryptionMethodId = exports.aclMulticallTypes = exports.callFromParentTypes = exports.delegateForUserDecryptionTypes = void 0;
7
+ exports.buildDelegationCalldata = buildDelegationCalldata;
8
+ exports.buildMulticallDelegationCalldata = buildMulticallDelegationCalldata;
9
+ exports.wrapInCallFromParent = wrapInCallFromParent;
10
+ exports.decodeTokenAddressesFromDelegationCalldata = decodeTokenAddressesFromDelegationCalldata;
11
+ exports.buildConfidentialTransferByHandleCalldata = buildConfidentialTransferByHandleCalldata;
12
+ exports.buildFlushERC7984ForwarderTokenCalldata = buildFlushERC7984ForwarderTokenCalldata;
13
+ exports.decodeFlushERC7984ForwarderTokenCalldata = decodeFlushERC7984ForwarderTokenCalldata;
14
+ const ethereumjs_util_1 = require("ethereumjs-util");
15
+ const ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
16
+ const ethers_1 = require("ethers");
17
+ const walletUtil_1 = require("./walletUtil");
18
+ // ---------------------------------------------------------------------------
19
+ // Constants
20
+ // ---------------------------------------------------------------------------
21
+ // ABI parameter type arrays
22
+ exports.delegateForUserDecryptionTypes = ['address', 'address', 'uint64'];
23
+ exports.callFromParentTypes = ['address', 'uint256', 'bytes'];
24
+ exports.aclMulticallTypes = ['bytes[]'];
25
+ /**
26
+ * Function selector for ACL.delegateForUserDecryption(address,address,uint64)
27
+ * = keccak256('delegateForUserDecryption(address,address,uint64)')[0:4]
28
+ */
29
+ exports.delegateForUserDecryptionMethodId = (0, ethereumjs_util_1.addHexPrefix)(ethereumjs_abi_1.default.methodID('delegateForUserDecryption', [...exports.delegateForUserDecryptionTypes]).toString('hex'));
30
+ /**
31
+ * Function selector for ACL.multicall(bytes[])
32
+ * = keccak256('multicall(bytes[])')[0:4]
33
+ * ACL inherits OpenZeppelin MulticallUpgradeable — preserves msg.sender via delegatecall.
34
+ */
35
+ exports.aclMulticallMethodId = (0, ethereumjs_util_1.addHexPrefix)(ethereumjs_abi_1.default.methodID('multicall', [...exports.aclMulticallTypes]).toString('hex'));
36
+ /**
37
+ * Function selector for ForwarderV4.callFromParent(address,uint256,bytes)
38
+ * = keccak256('callFromParent(address,uint256,bytes)')[0:4]
39
+ */
40
+ exports.callFromParentMethodId = (0, ethereumjs_util_1.addHexPrefix)(ethereumjs_abi_1.default.methodID('callFromParent', [...exports.callFromParentTypes]).toString('hex'));
41
+ // ---------------------------------------------------------------------------
42
+ // Encoding functions
43
+ // ---------------------------------------------------------------------------
44
+ /**
45
+ * Encodes a single ACL.delegateForUserDecryption() call.
46
+ *
47
+ * Grants `delegateAddress` the right to decrypt ERC-7984 token balances on
48
+ * behalf of the calling address (msg.sender) for the specified token contract.
49
+ *
50
+ * @param delegateAddress BitGo enterprise viewing key address
51
+ * @param tokenContractAddress ERC-7984 token contract address
52
+ * @param expiryTimestamp Unix seconds; recommended: Math.floor(Date.now()/1000) + 365*86400
53
+ * @returns ABI-encoded calldata hex string (0x-prefixed)
54
+ */
55
+ function buildDelegationCalldata(delegateAddress, tokenContractAddress, expiryTimestamp) {
56
+ const method = ethereumjs_abi_1.default.methodID('delegateForUserDecryption', [...exports.delegateForUserDecryptionTypes]);
57
+ const args = ethereumjs_abi_1.default.rawEncode([...exports.delegateForUserDecryptionTypes], [delegateAddress, tokenContractAddress, expiryTimestamp]);
58
+ return (0, ethereumjs_util_1.addHexPrefix)(Buffer.concat([method, args]).toString('hex'));
59
+ }
60
+ /**
61
+ * Encodes N delegateForUserDecryption calls batched inside ACL.multicall().
62
+ *
63
+ * Produces a single TX that grants delegation for all specified token contracts.
64
+ * Requires tokenContractAddresses.length >= 1.
65
+ * Note: DecryptionDelegationBuilder always uses this function (even for a single token)
66
+ * to keep the transaction shape consistent regardless of token count.
67
+ *
68
+ * @param delegateAddress BitGo enterprise viewing key address
69
+ * @param tokenContractAddresses Array of ERC-7984 token contract addresses
70
+ * @param expiryTimestamp Unix seconds
71
+ * @returns ABI-encoded calldata hex string (0x-prefixed)
72
+ */
73
+ function buildMulticallDelegationCalldata(delegateAddress, tokenContractAddresses, expiryTimestamp) {
74
+ if (tokenContractAddresses.length === 0) {
75
+ throw new Error('buildMulticallDelegationCalldata: tokenContractAddresses must not be empty');
76
+ }
77
+ // Build each inner delegateForUserDecryption call as raw bytes
78
+ const innerCalls = tokenContractAddresses.map((tokenAddress) => {
79
+ const innerMethod = ethereumjs_abi_1.default.methodID('delegateForUserDecryption', [...exports.delegateForUserDecryptionTypes]);
80
+ const innerArgs = ethereumjs_abi_1.default.rawEncode([...exports.delegateForUserDecryptionTypes], [delegateAddress, tokenAddress, expiryTimestamp]);
81
+ return Buffer.concat([innerMethod, innerArgs]);
82
+ });
83
+ // Encode outer multicall(bytes[])
84
+ // ethereumjs-abi v0.6.x has a bug where it omits the per-element offset table
85
+ // for bytes[], producing malformed calldata that on-chain ABI decoders reject.
86
+ // Use ethers AbiCoder which correctly emits the head offset words.
87
+ const outerMethod = ethereumjs_abi_1.default.methodID('multicall', [...exports.aclMulticallTypes]);
88
+ const outerArgs = Buffer.from(new ethers_1.ethers.utils.AbiCoder().encode([...exports.aclMulticallTypes], [innerCalls]).slice(2), 'hex');
89
+ return (0, ethereumjs_util_1.addHexPrefix)(Buffer.concat([outerMethod, outerArgs]).toString('hex'));
90
+ }
91
+ /**
92
+ * Wraps calldata in a ForwarderV4.callFromParent(target, 0, data) call.
93
+ *
94
+ * Used when a forwarder contract must be msg.sender for an external contract
95
+ * call — for example, when the forwarder itself needs to call
96
+ * ACL.delegateForUserDecryption() so that its own balance can be decrypted.
97
+ *
98
+ * Only the parentAddress (root wallet) is allowed to call callFromParent
99
+ * (enforced by the forwarder's onlyParent modifier).
100
+ *
101
+ * @param targetAddress Address of the contract the forwarder will call (e.g. ACL)
102
+ * @param calldata ABI-encoded inner calldata (e.g. from buildDelegationCalldata)
103
+ * @returns ABI-encoded callFromParent calldata hex string (0x-prefixed)
104
+ */
105
+ function wrapInCallFromParent(targetAddress, calldata) {
106
+ const method = ethereumjs_abi_1.default.methodID('callFromParent', [...exports.callFromParentTypes]);
107
+ const args = ethereumjs_abi_1.default.rawEncode([...exports.callFromParentTypes], [
108
+ targetAddress,
109
+ 0, // value: no ETH transfer
110
+ (0, ethereumjs_util_1.toBuffer)(calldata), // inner calldata as bytes
111
+ ]);
112
+ return (0, ethereumjs_util_1.addHexPrefix)(Buffer.concat([method, args]).toString('hex'));
113
+ }
114
+ /**
115
+ * Decodes token contract addresses from delegation calldata.
116
+ *
117
+ * Handles two shapes of calldata:
118
+ * - Direct ACL.multicall(bytes[]) (root wallet path)
119
+ * - ForwarderV4.callFromParent(address, uint256, bytes) wrapping a multicall (forwarder path)
120
+ *
121
+ * @param calldata ABI-encoded delegation calldata (0x-prefixed or raw hex)
122
+ * @returns Array of token contract addresses (lowercase) found in the delegation calls
123
+ * @throws {Error} if the calldata does not start with a recognised method selector
124
+ */
125
+ function decodeTokenAddressesFromDelegationCalldata(calldata) {
126
+ const data = calldata.startsWith('0x') ? calldata : '0x' + calldata;
127
+ const methodId = data.slice(0, 10);
128
+ const abiCoder = new ethers_1.ethers.utils.AbiCoder();
129
+ let multicallHex;
130
+ if (methodId === exports.callFromParentMethodId) {
131
+ // Decode callFromParent(address, uint256, bytes) — inner bytes is the full multicall calldata.
132
+ // ethers v5 returns `bytes` as a hex string; use hexlify to normalise to a 0x-prefixed hex string
133
+ // regardless of whether the runtime returns a string or a Uint8Array.
134
+ const decoded = abiCoder.decode([...exports.callFromParentTypes], '0x' + data.slice(10));
135
+ multicallHex = ethers_1.ethers.utils.hexlify(decoded[2]);
136
+ }
137
+ else if (methodId === exports.aclMulticallMethodId) {
138
+ multicallHex = data;
139
+ }
140
+ else {
141
+ throw new Error('Not a valid delegation calldata');
142
+ }
143
+ if (multicallHex.slice(0, 10) !== exports.aclMulticallMethodId) {
144
+ throw new Error('Not a valid delegation calldata');
145
+ }
146
+ // Decode multicall(bytes[]) — each element is an inner delegateForUserDecryption call.
147
+ // ethers v5 returns bytes[] elements as hex strings; use hexlify to normalise each element.
148
+ const decoded = abiCoder.decode(['bytes[]'], '0x' + multicallHex.slice(10));
149
+ const innerCalls = decoded[0];
150
+ const tokenAddresses = [];
151
+ for (const innerCall of innerCalls) {
152
+ const innerHex = ethers_1.ethers.utils.hexlify(innerCall).slice(2); // strip 0x
153
+ const innerMethodId = '0x' + innerHex.slice(0, 8);
154
+ if (innerMethodId !== exports.delegateForUserDecryptionMethodId) {
155
+ continue;
156
+ }
157
+ // Decode delegateForUserDecryption(address delegate, address tokenAddress, uint64 expiry)
158
+ const innerDecoded = abiCoder.decode([...exports.delegateForUserDecryptionTypes], '0x' + innerHex.slice(8));
159
+ tokenAddresses.push(innerDecoded[1].toLowerCase());
160
+ }
161
+ return tokenAddresses;
162
+ }
163
+ /**
164
+ * Encodes confidentialTransfer(address to, bytes32 encryptedHandle) calldata.
165
+ * Uses the no-proof variant (selector 0x5bebed7e) — valid when the caller (forwarder)
166
+ * is already ACL-allowed on the handle from when it received the tokens.
167
+ *
168
+ * @param toAddress Address that will receive the tokens
169
+ * @param encryptedHandle bytes32 encrypted balance handle from confidentialBalanceOf
170
+ * @returns ABI-encoded calldata hex string (0x-prefixed)
171
+ */
172
+ function buildConfidentialTransferByHandleCalldata(toAddress, encryptedHandle) {
173
+ const method = Buffer.from(walletUtil_1.confidentialTransferNoProofMethodId.slice(2), 'hex');
174
+ const handleBuffer = (0, ethereumjs_util_1.toBuffer)(encryptedHandle);
175
+ const args = ethereumjs_abi_1.default.rawEncode([...walletUtil_1.confidentialTransferNoProofTypes], [toAddress, handleBuffer]);
176
+ return (0, ethereumjs_util_1.addHexPrefix)(Buffer.concat([method, args]).toString('hex'));
177
+ }
178
+ /**
179
+ * Encodes the full flush calldata for ERC-7984 forwarder consolidation:
180
+ * callFromParent(tokenContractAddress, 0, confidentialTransfer(parentAddress, encryptedHandle))
181
+ * The forwarder executes the inner confidentialTransfer with msg.sender = forwarder.
182
+ *
183
+ * @param tokenContractAddress ERC-7984 token contract address
184
+ * @param parentAddress Root wallet address (destination of flushed tokens)
185
+ * @param encryptedHandle bytes32 encrypted balance handle from confidentialBalanceOf
186
+ * @returns ABI-encoded calldata hex string (0x-prefixed)
187
+ */
188
+ function buildFlushERC7984ForwarderTokenCalldata(tokenContractAddress, parentAddress, encryptedHandle) {
189
+ const innerCalldata = buildConfidentialTransferByHandleCalldata(parentAddress, encryptedHandle);
190
+ return wrapInCallFromParent(tokenContractAddress, innerCalldata);
191
+ }
192
+ /**
193
+ * Decodes a FlushERC7984ForwarderToken calldata.
194
+ * Strips the outer callFromParent wrapper and the inner confidentialTransfer.
195
+ * Returns { tokenContractAddress, parentAddress, encryptedHandle }.
196
+ *
197
+ * @param data ABI-encoded flush calldata (0x-prefixed)
198
+ * @returns Decoded fields
199
+ */
200
+ function decodeFlushERC7984ForwarderTokenCalldata(data) {
201
+ if (!data.startsWith(exports.callFromParentMethodId)) {
202
+ throw new Error(`Invalid FlushERC7984ForwarderToken calldata: expected callFromParent selector, got ${data.slice(0, 10)}`);
203
+ }
204
+ const abiCoder = new ethers_1.ethers.utils.AbiCoder();
205
+ const outerDecoded = abiCoder.decode([...exports.callFromParentTypes], '0x' + data.slice(10));
206
+ const tokenContractAddress = outerDecoded[0];
207
+ const innerCalldata = ethers_1.ethers.utils.hexlify(outerDecoded[2]);
208
+ if (!innerCalldata.startsWith(walletUtil_1.confidentialTransferNoProofMethodId)) {
209
+ throw new Error(`Invalid FlushERC7984ForwarderToken inner calldata: expected confidentialTransfer selector, got ${innerCalldata.slice(0, 10)}`);
210
+ }
211
+ const innerDecoded = abiCoder.decode([...walletUtil_1.confidentialTransferNoProofTypes], '0x' + innerCalldata.slice(10));
212
+ const parentAddress = innerDecoded[0];
213
+ const encryptedHandle = (0, ethereumjs_util_1.bufferToHex)((0, ethereumjs_util_1.toBuffer)(innerDecoded[1]));
214
+ return {
215
+ tokenContractAddress,
216
+ parentAddress,
217
+ encryptedHandle,
218
+ };
219
+ }
220
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemFtYVV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi96YW1hVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBc0RBLDBEQVdDO0FBZUQsNEVBNkJDO0FBZ0JELG9EQVdDO0FBYUQsZ0dBeUNDO0FBV0QsOEZBS0M7QUFZRCwwRkFPQztBQVVELDRGQWtDQztBQTdRRCxxREFBc0U7QUFDdEUsb0VBQXlDO0FBQ3pDLG1DQUFnQztBQUNoQyw2Q0FBcUc7QUFFckcsOEVBQThFO0FBQzlFLFlBQVk7QUFDWiw4RUFBOEU7QUFFOUUsNEJBQTRCO0FBQ2YsUUFBQSw4QkFBOEIsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFVLENBQUM7QUFDM0UsUUFBQSxtQkFBbUIsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFVLENBQUM7QUFDL0QsUUFBQSxpQkFBaUIsR0FBRyxDQUFDLFNBQVMsQ0FBVSxDQUFDO0FBRXREOzs7R0FHRztBQUNVLFFBQUEsaUNBQWlDLEdBQUcsSUFBQSw4QkFBWSxFQUMzRCx3QkFBVyxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsRUFBRSxDQUFDLEdBQUcsc0NBQThCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FDdkcsQ0FBQztBQUVGOzs7O0dBSUc7QUFDVSxRQUFBLG9CQUFvQixHQUFHLElBQUEsOEJBQVksRUFDOUMsd0JBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyx5QkFBaUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUMxRSxDQUFDO0FBRUY7OztHQUdHO0FBQ1UsUUFBQSxzQkFBc0IsR0FBRyxJQUFBLDhCQUFZLEVBQ2hELHdCQUFXLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUMsR0FBRywyQkFBbUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUss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QUM7SUFDckQsTUFBTSxhQUFhLEdBQVcsZUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFcEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsZ0RBQW1DLENBQUMsRUFBRSxDQUFDO1FBQ25FLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0dBQWtHLGFBQWEsQ0FBQyxLQUFLLENBQ25ILENBQUMsRUFDRCxFQUFFLENBQ0gsRUFBRSxDQUNKLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsNkNBQWdDLENBQUMsRUFBRSxJQUFJLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVHLE1BQU0sYUFBYSxHQUFXLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxNQUFNLGVBQWUsR0FBVyxJQUFBLDZCQUFXLEVBQUMsSUFBQSwwQkFBUSxFQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFdkUsT0FBTztRQUNMLG9CQUFvQjtRQUNwQixhQUFhO1FBQ2IsZUFBZTtLQUNoQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFkZEhleFByZWZpeCwgYnVmZmVyVG9IZXgsIHRvQnVmZmVyIH0gZnJvbSAnZXRoZXJldW1qcy11dGlsJztcbmltcG9ydCBFdGhlcmV1bUFiaSBmcm9tICdldGhlcmV1bWpzLWFiaSc7XG5pbXBvcnQgeyBldGhlcnMgfSBmcm9tICdldGhlcnMnO1xuaW1wb3J0IHsgY29uZmlkZW50aWFsVHJhbnNmZXJOb1Byb29mTWV0aG9kSWQsIGNvbmZpZGVudGlhbFRyYW5zZmVyTm9Qcm9vZlR5cGVzIH0gZnJvbSAnLi93YWxsZXRVdGlsJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDb25zdGFudHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBBQkkgcGFyYW1ldGVyIHR5cGUgYXJyYXlzXG5leHBvcnQgY29uc3QgZGVsZWdhdGVGb3JVc2VyRGVjcnlwdGlvblR5cGVzID0gWydhZGRyZXNzJywgJ2FkZHJlc3MnLCAndWludDY0J10gYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgY2FsbEZyb21QYXJlbnRUeXBlcyA9IFsnYWRkcmVzcycsICd1aW50MjU2JywgJ2J5dGVzJ10gYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgYWNsTXVsdGljYWxsVHlwZXMgPSBbJ2J5dGVzW10nXSBhcyBjb25zdDtcblxuLyoqXG4gKiBGdW5jdGlvbiBzZWxlY3RvciBmb3IgQUNMLmRlbGVnYXRlRm9yVXNlckRlY3J5cHRpb24oYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NClcbiAqID0ga2VjY2FrMjU2KCdkZWxlZ2F0ZUZvclVzZXJEZWNyeXB0aW9uKGFkZHJlc3MsYWRkcmVzcyx1aW50NjQpJylbMDo0XVxuICovXG5leHBvcnQgY29uc3QgZGVsZWdhdGVGb3JVc2VyRGVjcnlwdGlvbk1ldGhvZElkID0gYWRkSGV4UHJlZml4KFxuICBFdGhlcmV1bUFiaS5tZXRob2RJRCgnZGVsZWdhdGVGb3JVc2VyRGVjcnlwdGlvbicsIFsuLi5kZWxlZ2F0ZUZvclVzZXJEZWNyeXB0aW9uVHlwZXNdKS50b1N0cmluZygnaGV4Jylcbik7XG5cbi8qKlxuICogRnVuY3Rpb24gc2VsZWN0b3IgZm9yIEFDTC5tdWx0aWNhbGwoYnl0ZXNbXSlcbiAqID0ga2VjY2FrMjU2KCdtdWx0aWNhbGwoYnl0ZXNbXSknKVswOjRdXG4gKiBBQ0wgaW5oZXJpdHMgT3BlblplcHBlbGluIE11bHRpY2FsbFVwZ3JhZGVhYmxlIOKAlCBwcmVzZXJ2ZXMgbXNnLnNlbmRlciB2aWEgZGVsZWdhdGVjYWxsLlxuICovXG5leHBvcnQgY29uc3QgYWNsTXVsdGljYWxsTWV0aG9kSWQgPSBhZGRIZXhQcmVmaXgoXG4gIEV0aGVyZXVtQWJpLm1ldGhvZElEKCdtdWx0aWNhbGwnLCBbLi4uYWNsTXVsdGljYWxsVHlwZXNdKS50b1N0cmluZygnaGV4Jylcbik7XG5cbi8qKlxuICogRnVuY3Rpb24gc2VsZWN0b3IgZm9yIEZvcndhcmRlclY0LmNhbGxGcm9tUGFyZW50KGFkZHJlc3MsdWludDI1NixieXRlcylcbiAqID0ga2VjY2FrMjU2KCdjYWxsRnJvbVBhcmVudChhZGRyZXNzLHVpbnQyNTYsYnl0ZXMpJylbMDo0XVxuICovXG5leHBvcnQgY29uc3QgY2FsbEZyb21QYXJlbnRNZXRob2RJZCA9IGFkZEhleFByZWZpeChcbiAgRXRoZXJldW1BYmkubWV0aG9kSUQoJ2NhbGxGcm9tUGFyZW50JywgWy4uLmNhbGxGcm9tUGFyZW50VHlwZXNdKS50b1N0cmluZygnaGV4Jylcbik7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRW5jb2RpbmcgZnVuY3Rpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBFbmNvZGVzIGEgc2luZ2xlIEFDTC5kZWxlZ2F0ZUZvclVzZXJEZWNyeXB0aW9uKCkgY2FsbC5cbiAqXG4gKiBHcmFudHMgYGRlbGVnYXRlQWRkcmVzc2AgdGhlIHJpZ2h0IHRvIGRlY3J5cHQgRVJDLTc5ODQgdG9rZW4gYmFsYW5jZXMgb25cbiAqIGJlaGFsZiBvZiB0aGUgY2FsbGluZyBhZGRyZXNzIChtc2cuc2VuZGVyKSBmb3IgdGhlIHNwZWNpZmllZCB0b2tlbiBjb250cmFjdC5cbiAqXG4gKiBAcGFyYW0gZGVsZWdhdGVBZGRyZXNzICAgICAgIEJpdEdvIGVudGVycHJpc2Ugdmlld2luZyBrZXkgYWRkcmVzc1xuICogQHBhcmFtIHRva2VuQ29udHJhY3RBZGRyZXNzICBFUkMtNzk4NCB0b2tlbiBjb250cmFjdCBhZGRyZXNzXG4gKiBAcGFyYW0gZXhwaXJ5VGltZXN0YW1wICAgICAgIFVuaXggc2Vjb25kczsgcmVjb21tZW5kZWQ6IE1hdGguZmxvb3IoRGF0ZS5ub3coKS8xMDAwKSArIDM2NSo4NjQwMFxuICogQHJldHVybnMgQUJJLWVuY29kZWQgY2FsbGRhdGEgaGV4IHN0cmluZyAoMHgtcHJlZml4ZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZERlbGVnYXRpb25DYWxsZGF0YShcbiAgZGVsZWdhdGVBZGRyZXNzOiBzdHJpbmcsXG4gIHRva2VuQ29udHJhY3RBZGRyZXNzOiBzdHJpbmcsXG4gIGV4cGlyeVRpbWVzdGFtcDogbnVtYmVyXG4pOiBzdHJpbmcge1xuICBjb25zdCBtZXRob2QgPSBFdGhlcmV1bUFiaS5tZXRob2RJRCgnZGVsZWdhdGVGb3JVc2VyRGVjcnlwdGlvbicsIFsuLi5kZWxlZ2F0ZUZvclVzZXJEZWNyeXB0aW9uVHlwZXNdKTtcbiAgY29uc3QgYXJncyA9IEV0aGVyZXVtQWJpLnJhd0VuY29kZShcbiAgICBbLi4uZGVsZWdhdGVGb3JVc2VyRGVjcnlwdGlvblR5cGVzXSxcbiAgICBbZGVsZWdhdGVBZGRyZXNzLCB0b2tlbkNvbnRyYWN0QWRkcmVzcywgZXhwaXJ5VGltZXN0YW1wXVxuICApO1xuICByZXR1cm4gYWRkSGV4UHJlZml4KEJ1ZmZlci5jb25jYXQoW21ldGhvZCwgYXJnc10pLnRvU3RyaW5nKCdoZXgnKSk7XG59XG5cbi8qKlxuICogRW5jb2RlcyBOIGRlbGVnYXRlRm9yVXNlckRlY3J5cHRpb24gY2FsbHMgYmF0Y2hlZCBpbnNpZGUgQUNMLm11bHRpY2FsbCgpLlxuICpcbiAqIFByb2R1Y2VzIGEgc2luZ2xlIFRYIHRoYXQgZ3JhbnRzIGRlbGVnYXRpb24gZm9yIGFsbCBzcGVjaWZpZWQgdG9rZW4gY29udHJhY3RzLlxuICogUmVxdWlyZXMgdG9rZW5Db250cmFjdEFkZHJlc3Nlcy5sZW5ndGggPj0gMS5cbiAqIE5vdGU6IERlY3J5cHRpb25EZWxlZ2F0aW9uQnVpbGRlciBhbHdheXMgdXNlcyB0aGlzIGZ1bmN0aW9uIChldmVuIGZvciBhIHNpbmdsZSB0b2tlbilcbiAqIHRvIGtlZXAgdGhlIHRyYW5zYWN0aW9uIHNoYXBlIGNvbnNpc3RlbnQgcmVnYXJkbGVzcyBvZiB0b2tlbiBjb3VudC5cbiAqXG4gKiBAcGFyYW0gZGVsZWdhdGVBZGRyZXNzICAgICAgICAgIEJpdEdvIGVudGVycHJpc2Ugdmlld2luZyBrZXkgYWRkcmVzc1xuICogQHBhcmFtIHRva2VuQ29udHJhY3RBZGRyZXNzZXMgICBBcnJheSBvZiBFUkMtNzk4NCB0b2tlbiBjb250cmFjdCBhZGRyZXNzZXNcbiAqIEBwYXJhbSBleHBpcnlUaW1lc3RhbXAgICAgICAgICAgVW5peCBzZWNvbmRzXG4gKiBAcmV0dXJucyBBQkktZW5jb2RlZCBjYWxsZGF0YSBoZXggc3RyaW5nICgweC1wcmVmaXhlZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKFxuICBkZWxlZ2F0ZUFkZHJlc3M6IHN0cmluZyxcbiAgdG9rZW5Db250cmFjdEFkZHJlc3Nlczogc3RyaW5nW10sXG4gIGV4cGlyeVRpbWVzdGFtcDogbnVtYmVyXG4pOiBzdHJpbmcge1xuICBpZiAodG9rZW5Db250cmFjdEFkZHJlc3Nlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhOiB0b2tlbkNvbnRyYWN0QWRkcmVzc2VzIG11c3Qgbm90IGJlIGVtcHR5Jyk7XG4gIH1cblxuICAvLyBCdWlsZCBlYWNoIGlubmVyIGRlbGVnYXRlRm9yVXNlckRlY3J5cHRpb24gY2FsbCBhcyByYXcgYnl0ZXNcbiAgY29uc3QgaW5uZXJDYWxsczogQnVmZmVyW10gPSB0b2tlbkNvbnRyYWN0QWRkcmVzc2VzLm1hcCgodG9rZW5BZGRyZXNzKSA9PiB7XG4gICAgY29uc3QgaW5uZXJNZXRob2QgPSBFdGhlcmV1bUFiaS5tZXRob2RJRCgnZGVsZWdhdGVGb3JVc2VyRGVjcnlwdGlvbicsIFsuLi5kZWxlZ2F0ZUZvclVzZXJEZWNyeXB0aW9uVHlwZXNdKTtcbiAgICBjb25zdCBpbm5lckFyZ3MgPSBFdGhlcmV1bUFiaS5yYXdFbmNvZGUoXG4gICAgICBbLi4uZGVsZWdhdGVGb3JVc2VyRGVjcnlwdGlvblR5cGVzXSxcbiAgICAgIFtkZWxlZ2F0ZUFkZHJlc3MsIHRva2VuQWRkcmVzcywgZXhwaXJ5VGltZXN0YW1wXVxuICAgICk7XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW2lubmVyTWV0aG9kLCBpbm5lckFyZ3NdKTtcbiAgfSk7XG5cbiAgLy8gRW5jb2RlIG91dGVyIG11bHRpY2FsbChieXRlc1tdKVxuICAvLyBldGhlcmV1bWpzLWFiaSB2MC42LnggaGFzIGEgYnVnIHdoZXJlIGl0IG9taXRzIHRoZSBwZXItZWxlbWVudCBvZmZzZXQgdGFibGVcbiAgLy8gZm9yIGJ5dGVzW10sIHByb2R1Y2luZyBtYWxmb3JtZWQgY2FsbGRhdGEgdGhhdCBvbi1jaGFpbiBBQkkgZGVjb2RlcnMgcmVqZWN0LlxuICAvLyBVc2UgZXRoZXJzIEFiaUNvZGVyIHdoaWNoIGNvcnJlY3RseSBlbWl0cyB0aGUgaGVhZCBvZmZzZXQgd29yZHMuXG4gIGNvbnN0IG91dGVyTWV0aG9kID0gRXRoZXJldW1BYmkubWV0aG9kSUQoJ211bHRpY2FsbCcsIFsuLi5hY2xNdWx0aWNhbGxUeXBlc10pO1xuICBjb25zdCBvdXRlckFyZ3MgPSBCdWZmZXIuZnJvbShcbiAgICBuZXcgZXRoZXJzLnV0aWxzLkFiaUNvZGVyKCkuZW5jb2RlKFsuLi5hY2xNdWx0aWNhbGxUeXBlc10sIFtpbm5lckNhbGxzXSkuc2xpY2UoMiksXG4gICAgJ2hleCdcbiAgKTtcbiAgcmV0dXJuIGFkZEhleFByZWZpeChCdWZmZXIuY29uY2F0KFtvdXRlck1ldGhvZCwgb3V0ZXJBcmdzXSkudG9TdHJpbmcoJ2hleCcpKTtcbn1cblxuLyoqXG4gKiBXcmFwcyBjYWxsZGF0YSBpbiBhIEZvcndhcmRlclY0LmNhbGxGcm9tUGFyZW50KHRhcmdldCwgMCwgZGF0YSkgY2FsbC5cbiAqXG4gKiBVc2VkIHdoZW4gYSBmb3J3YXJkZXIgY29udHJhY3QgbXVzdCBiZSBtc2cuc2VuZGVyIGZvciBhbiBleHRlcm5hbCBjb250cmFjdFxuICogY2FsbCDigJQgZm9yIGV4YW1wbGUsIHdoZW4gdGhlIGZvcndhcmRlciBpdHNlbGYgbmVlZHMgdG8gY2FsbFxuICogQUNMLmRlbGVnYXRlRm9yVXNlckRlY3J5cHRpb24oKSBzbyB0aGF0IGl0cyBvd24gYmFsYW5jZSBjYW4gYmUgZGVjcnlwdGVkLlxuICpcbiAqIE9ubHkgdGhlIHBhcmVudEFkZHJlc3MgKHJvb3Qgd2FsbGV0KSBpcyBhbGxvd2VkIHRvIGNhbGwgY2FsbEZyb21QYXJlbnRcbiAqIChlbmZvcmNlZCBieSB0aGUgZm9yd2FyZGVyJ3Mgb25seVBhcmVudCBtb2RpZmllcikuXG4gKlxuICogQHBhcmFtIHRhcmdldEFkZHJlc3MgIEFkZHJlc3Mgb2YgdGhlIGNvbnRyYWN0IHRoZSBmb3J3YXJkZXIgd2lsbCBjYWxsIChlLmcuIEFDTClcbiAqIEBwYXJhbSBjYWxsZGF0YSAgICAgICBBQkktZW5jb2RlZCBpbm5lciBjYWxsZGF0YSAoZS5nLiBmcm9tIGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKVxuICogQHJldHVybnMgQUJJLWVuY29kZWQgY2FsbEZyb21QYXJlbnQgY2FsbGRhdGEgaGV4IHN0cmluZyAoMHgtcHJlZml4ZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cmFwSW5DYWxsRnJvbVBhcmVudCh0YXJnZXRBZGRyZXNzOiBzdHJpbmcsIGNhbGxkYXRhOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtZXRob2QgPSBFdGhlcmV1bUFiaS5tZXRob2RJRCgnY2FsbEZyb21QYXJlbnQnLCBbLi4uY2FsbEZyb21QYXJlbnRUeXBlc10pO1xuICBjb25zdCBhcmdzID0gRXRoZXJldW1BYmkucmF3RW5jb2RlKFxuICAgIFsuLi5jYWxsRnJvbVBhcmVudFR5cGVzXSxcbiAgICBbXG4gICAgICB0YXJnZXRBZGRyZXNzLFxuICAgICAgMCwgLy8gdmFsdWU6IG5vIEVUSCB0cmFuc2ZlclxuICAgICAgdG9CdWZmZXIoY2FsbGRhdGEpLCAvLyBpbm5lciBjYWxsZGF0YSBhcyBieXRlc1xuICAgIF1cbiAgKTtcbiAgcmV0dXJuIGFkZEhleFByZWZpeChCdWZmZXIuY29uY2F0KFttZXRob2QsIGFyZ3NdKS50b1N0cmluZygnaGV4JykpO1xufVxuXG4vKipcbiAqIERlY29kZXMgdG9rZW4gY29udHJhY3QgYWRkcmVzc2VzIGZyb20gZGVsZWdhdGlvbiBjYWxsZGF0YS5cbiAqXG4gKiBIYW5kbGVzIHR3byBzaGFwZXMgb2YgY2FsbGRhdGE6XG4gKiAgIC0gRGlyZWN0IEFDTC5tdWx0aWNhbGwoYnl0ZXNbXSkgKHJvb3Qgd2FsbGV0IHBhdGgpXG4gKiAgIC0gRm9yd2FyZGVyVjQuY2FsbEZyb21QYXJlbnQoYWRkcmVzcywgdWludDI1NiwgYnl0ZXMpIHdyYXBwaW5nIGEgbXVsdGljYWxsIChmb3J3YXJkZXIgcGF0aClcbiAqXG4gKiBAcGFyYW0gY2FsbGRhdGEgIEFCSS1lbmNvZGVkIGRlbGVnYXRpb24gY2FsbGRhdGEgKDB4LXByZWZpeGVkIG9yIHJhdyBoZXgpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB0b2tlbiBjb250cmFjdCBhZGRyZXNzZXMgKGxvd2VyY2FzZSkgZm91bmQgaW4gdGhlIGRlbGVnYXRpb24gY2FsbHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgY2FsbGRhdGEgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIHJlY29nbmlzZWQgbWV0aG9kIHNlbGVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVUb2tlbkFkZHJlc3Nlc0Zyb21EZWxlZ2F0aW9uQ2FsbGRhdGEoY2FsbGRhdGE6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZGF0YSA9IGNhbGxkYXRhLnN0YXJ0c1dpdGgoJzB4JykgPyBjYWxsZGF0YSA6ICcweCcgKyBjYWxsZGF0YTtcbiAgY29uc3QgbWV0aG9kSWQgPSBkYXRhLnNsaWNlKDAsIDEwKTtcbiAgY29uc3QgYWJpQ29kZXIgPSBuZXcgZXRoZXJzLnV0aWxzLkFiaUNvZGVyKCk7XG5cbiAgbGV0IG11bHRpY2FsbEhleDogc3RyaW5nO1xuXG4gIGlmIChtZXRob2RJZCA9PT0gY2FsbEZyb21QYXJlbnRNZXRob2RJZCkge1xuICAgIC8vIERlY29kZSBjYWxsRnJvbVBhcmVudChhZGRyZXNzLCB1aW50MjU2LCBieXRlcykg4oCUIGlubmVyIGJ5dGVzIGlzIHRoZSBmdWxsIG11bHRpY2FsbCBjYWxsZGF0YS5cbiAgICAvLyBldGhlcnMgdjUgcmV0dXJucyBgYnl0ZXNgIGFzIGEgaGV4IHN0cmluZzsgdXNlIGhleGxpZnkgdG8gbm9ybWFsaXNlIHRvIGEgMHgtcHJlZml4ZWQgaGV4IHN0cmluZ1xuICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcnVudGltZSByZXR1cm5zIGEgc3RyaW5nIG9yIGEgVWludDhBcnJheS5cbiAgICBjb25zdCBkZWNvZGVkID0gYWJpQ29kZXIuZGVjb2RlKFsuLi5jYWxsRnJvbVBhcmVudFR5cGVzXSwgJzB4JyArIGRhdGEuc2xpY2UoMTApKTtcbiAgICBtdWx0aWNhbGxIZXggPSBldGhlcnMudXRpbHMuaGV4bGlmeShkZWNvZGVkWzJdKTtcbiAgfSBlbHNlIGlmIChtZXRob2RJZCA9PT0gYWNsTXVsdGljYWxsTWV0aG9kSWQpIHtcbiAgICBtdWx0aWNhbGxIZXggPSBkYXRhO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGEgdmFsaWQgZGVsZWdhdGlvbiBjYWxsZGF0YScpO1xuICB9XG5cbiAgaWYgKG11bHRpY2FsbEhleC5zbGljZSgwLCAxMCkgIT09IGFjbE11bHRpY2FsbE1ldGhvZElkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYSB2YWxpZCBkZWxlZ2F0aW9uIGNhbGxkYXRhJyk7XG4gIH1cblxuICAvLyBEZWNvZGUgbXVsdGljYWxsKGJ5dGVzW10pIOKAlCBlYWNoIGVsZW1lbnQgaXMgYW4gaW5uZXIgZGVsZWdhdGVGb3JVc2VyRGVjcnlwdGlvbiBjYWxsLlxuICAvLyBldGhlcnMgdjUgcmV0dXJucyBieXRlc1tdIGVsZW1lbnRzIGFzIGhleCBzdHJpbmdzOyB1c2UgaGV4bGlmeSB0byBub3JtYWxpc2UgZWFjaCBlbGVtZW50LlxuICBjb25zdCBkZWNvZGVkID0gYWJpQ29kZXIuZGVjb2RlKFsnYnl0ZXNbXSddLCAnMHgnICsgbXVsdGljYWxsSGV4LnNsaWNlKDEwKSk7XG4gIGNvbnN0IGlubmVyQ2FsbHM6IHVua25vd25bXSA9IGRlY29kZWRbMF07XG5cbiAgY29uc3QgdG9rZW5BZGRyZXNzZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgaW5uZXJDYWxsIG9mIGlubmVyQ2FsbHMpIHtcbiAgICBjb25zdCBpbm5lckhleCA9IGV0aGVycy51dGlscy5oZXhsaWZ5KGlubmVyQ2FsbCBhcyBldGhlcnMudXRpbHMuQnl0ZXNMaWtlKS5zbGljZSgyKTsgLy8gc3RyaXAgMHhcbiAgICBjb25zdCBpbm5lck1ldGhvZElkID0gJzB4JyArIGlubmVySGV4LnNsaWNlKDAsIDgpO1xuICAgIGlmIChpbm5lck1ldGhvZElkICE9PSBkZWxlZ2F0ZUZvclVzZXJEZWNyeXB0aW9uTWV0aG9kSWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBEZWNvZGUgZGVsZWdhdGVGb3JVc2VyRGVjcnlwdGlvbihhZGRyZXNzIGRlbGVnYXRlLCBhZGRyZXNzIHRva2VuQWRkcmVzcywgdWludDY0IGV4cGlyeSlcbiAgICBjb25zdCBpbm5lckRlY29kZWQgPSBhYmlDb2Rlci5kZWNvZGUoWy4uLmRlbGVnYXRlRm9yVXNlckRlY3J5cHRpb25UeXBlc10sICcweCcgKyBpbm5lckhleC5zbGljZSg4KSk7XG4gICAgdG9rZW5BZGRyZXNzZXMucHVzaCgoaW5uZXJEZWNvZGVkWzFdIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICByZXR1cm4gdG9rZW5BZGRyZXNzZXM7XG59XG5cbi8qKlxuICogRW5jb2RlcyBjb25maWRlbnRpYWxUcmFuc2ZlcihhZGRyZXNzIHRvLCBieXRlczMyIGVuY3J5cHRlZEhhbmRsZSkgY2FsbGRhdGEuXG4gKiBVc2VzIHRoZSBuby1wcm9vZiB2YXJpYW50IChzZWxlY3RvciAweDViZWJlZDdlKSDigJQgdmFsaWQgd2hlbiB0aGUgY2FsbGVyIChmb3J3YXJkZXIpXG4gKiBpcyBhbHJlYWR5IEFDTC1hbGxvd2VkIG9uIHRoZSBoYW5kbGUgZnJvbSB3aGVuIGl0IHJlY2VpdmVkIHRoZSB0b2tlbnMuXG4gKlxuICogQHBhcmFtIHRvQWRkcmVzcyAgICAgICBBZGRyZXNzIHRoYXQgd2lsbCByZWNlaXZlIHRoZSB0b2tlbnNcbiAqIEBwYXJhbSBlbmNyeXB0ZWRIYW5kbGUgYnl0ZXMzMiBlbmNyeXB0ZWQgYmFsYW5jZSBoYW5kbGUgZnJvbSBjb25maWRlbnRpYWxCYWxhbmNlT2ZcbiAqIEByZXR1cm5zIEFCSS1lbmNvZGVkIGNhbGxkYXRhIGhleCBzdHJpbmcgKDB4LXByZWZpeGVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRDb25maWRlbnRpYWxUcmFuc2ZlckJ5SGFuZGxlQ2FsbGRhdGEodG9BZGRyZXNzOiBzdHJpbmcsIGVuY3J5cHRlZEhhbmRsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWV0aG9kID0gQnVmZmVyLmZyb20oY29uZmlkZW50aWFsVHJhbnNmZXJOb1Byb29mTWV0aG9kSWQuc2xpY2UoMiksICdoZXgnKTtcbiAgY29uc3QgaGFuZGxlQnVmZmVyID0gdG9CdWZmZXIoZW5jcnlwdGVkSGFuZGxlKTtcbiAgY29uc3QgYXJncyA9IEV0aGVyZXVtQWJpLnJhd0VuY29kZShbLi4uY29uZmlkZW50aWFsVHJhbnNmZXJOb1Byb29mVHlwZXNdLCBbdG9BZGRyZXNzLCBoYW5kbGVCdWZmZXJdKTtcbiAgcmV0dXJuIGFkZEhleFByZWZpeChCdWZmZXIuY29uY2F0KFttZXRob2QsIGFyZ3NdKS50b1N0cmluZygnaGV4JykpO1xufVxuXG4vKipcbiAqIEVuY29kZXMgdGhlIGZ1bGwgZmx1c2ggY2FsbGRhdGEgZm9yIEVSQy03OTg0IGZvcndhcmRlciBjb25zb2xpZGF0aW9uOlxuICogICBjYWxsRnJvbVBhcmVudCh0b2tlbkNvbnRyYWN0QWRkcmVzcywgMCwgY29uZmlkZW50aWFsVHJhbnNmZXIocGFyZW50QWRkcmVzcywgZW5jcnlwdGVkSGFuZGxlKSlcbiAqIFRoZSBmb3J3YXJkZXIgZXhlY3V0ZXMgdGhlIGlubmVyIGNvbmZpZGVudGlhbFRyYW5zZmVyIHdpdGggbXNnLnNlbmRlciA9IGZvcndhcmRlci5cbiAqXG4gKiBAcGFyYW0gdG9rZW5Db250cmFjdEFkZHJlc3MgIEVSQy03OTg0IHRva2VuIGNvbnRyYWN0IGFkZHJlc3NcbiAqIEBwYXJhbSBwYXJlbnRBZGRyZXNzICAgICAgICAgUm9vdCB3YWxsZXQgYWRkcmVzcyAoZGVzdGluYXRpb24gb2YgZmx1c2hlZCB0b2tlbnMpXG4gKiBAcGFyYW0gZW5jcnlwdGVkSGFuZGxlICAgICAgIGJ5dGVzMzIgZW5jcnlwdGVkIGJhbGFuY2UgaGFuZGxlIGZyb20gY29uZmlkZW50aWFsQmFsYW5jZU9mXG4gKiBAcmV0dXJucyBBQkktZW5jb2RlZCBjYWxsZGF0YSBoZXggc3RyaW5nICgweC1wcmVmaXhlZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YShcbiAgdG9rZW5Db250cmFjdEFkZHJlc3M6IHN0cmluZyxcbiAgcGFyZW50QWRkcmVzczogc3RyaW5nLFxuICBlbmNyeXB0ZWRIYW5kbGU6IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgY29uc3QgaW5uZXJDYWxsZGF0YSA9IGJ1aWxkQ29uZmlkZW50aWFsVHJhbnNmZXJCeUhhbmRsZUNhbGxkYXRhKHBhcmVudEFkZHJlc3MsIGVuY3J5cHRlZEhhbmRsZSk7XG4gIHJldHVybiB3cmFwSW5DYWxsRnJvbVBhcmVudCh0b2tlbkNvbnRyYWN0QWRkcmVzcywgaW5uZXJDYWxsZGF0YSk7XG59XG5cbi8qKlxuICogRGVjb2RlcyBhIEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuIGNhbGxkYXRhLlxuICogU3RyaXBzIHRoZSBvdXRlciBjYWxsRnJvbVBhcmVudCB3cmFwcGVyIGFuZCB0aGUgaW5uZXIgY29uZmlkZW50aWFsVHJhbnNmZXIuXG4gKiBSZXR1cm5zIHsgdG9rZW5Db250cmFjdEFkZHJlc3MsIHBhcmVudEFkZHJlc3MsIGVuY3J5cHRlZEhhbmRsZSB9LlxuICpcbiAqIEBwYXJhbSBkYXRhICBBQkktZW5jb2RlZCBmbHVzaCBjYWxsZGF0YSAoMHgtcHJlZml4ZWQpXG4gKiBAcmV0dXJucyBEZWNvZGVkIGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YShkYXRhOiBzdHJpbmcpOiB7XG4gIHRva2VuQ29udHJhY3RBZGRyZXNzOiBzdHJpbmc7XG4gIHBhcmVudEFkZHJlc3M6IHN0cmluZztcbiAgZW5jcnlwdGVkSGFuZGxlOiBzdHJpbmc7XG59IHtcbiAgaWYgKCFkYXRhLnN0YXJ0c1dpdGgoY2FsbEZyb21QYXJlbnRNZXRob2RJZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBGbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbiBjYWxsZGF0YTogZXhwZWN0ZWQgY2FsbEZyb21QYXJlbnQgc2VsZWN0b3IsIGdvdCAke2RhdGEuc2xpY2UoMCwgMTApfWBcbiAgICApO1xuICB9XG5cbiAgY29uc3QgYWJpQ29kZXIgPSBuZXcgZXRoZXJzLnV0aWxzLkFiaUNvZGVyKCk7XG4gIGNvbnN0IG91dGVyRGVjb2RlZCA9IGFiaUNvZGVyLmRlY29kZShbLi4uY2FsbEZyb21QYXJlbnRUeXBlc10sICcweCcgKyBkYXRhLnNsaWNlKDEwKSk7XG4gIGNvbnN0IHRva2VuQ29udHJhY3RBZGRyZXNzOiBzdHJpbmcgPSBvdXRlckRlY29kZWRbMF07XG4gIGNvbnN0IGlubmVyQ2FsbGRhdGE6IHN0cmluZyA9IGV0aGVycy51dGlscy5oZXhsaWZ5KG91dGVyRGVjb2RlZFsyXSk7XG5cbiAgaWYgKCFpbm5lckNhbGxkYXRhLnN0YXJ0c1dpdGgoY29uZmlkZW50aWFsVHJhbnNmZXJOb1Byb29mTWV0aG9kSWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4gaW5uZXIgY2FsbGRhdGE6IGV4cGVjdGVkIGNvbmZpZGVudGlhbFRyYW5zZmVyIHNlbGVjdG9yLCBnb3QgJHtpbm5lckNhbGxkYXRhLnNsaWNlKFxuICAgICAgICAwLFxuICAgICAgICAxMFxuICAgICAgKX1gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGlubmVyRGVjb2RlZCA9IGFiaUNvZGVyLmRlY29kZShbLi4uY29uZmlkZW50aWFsVHJhbnNmZXJOb1Byb29mVHlwZXNdLCAnMHgnICsgaW5uZXJDYWxsZGF0YS5zbGljZSgxMCkpO1xuICBjb25zdCBwYXJlbnRBZGRyZXNzOiBzdHJpbmcgPSBpbm5lckRlY29kZWRbMF07XG4gIGNvbnN0IGVuY3J5cHRlZEhhbmRsZTogc3RyaW5nID0gYnVmZmVyVG9IZXgodG9CdWZmZXIoaW5uZXJEZWNvZGVkWzFdKSk7XG5cbiAgcmV0dXJuIHtcbiAgICB0b2tlbkNvbnRyYWN0QWRkcmVzcyxcbiAgICBwYXJlbnRBZGRyZXNzLFxuICAgIGVuY3J5cHRlZEhhbmRsZSxcbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,9 @@
1
+ import EthereumCommon from '@ethereumjs/common';
2
+ export type SendCrossChainRecoveryOptions = {
3
+ recoveryId: string;
4
+ walletPassphrase?: string;
5
+ encryptedPrv?: string;
6
+ walletType: 'hot' | 'cold';
7
+ common?: EthereumCommon;
8
+ };
9
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAEhD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,KAAK,GAAG,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFdGhlcmV1bUNvbW1vbiBmcm9tICdAZXRoZXJldW1qcy9jb21tb24nO1xuXG5leHBvcnQgdHlwZSBTZW5kQ3Jvc3NDaGFpblJlY292ZXJ5T3B0aW9ucyA9IHtcbiAgcmVjb3ZlcnlJZDogc3RyaW5nO1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICBlbmNyeXB0ZWRQcnY/OiBzdHJpbmc7XG4gIHdhbGxldFR5cGU6ICdob3QnIHwgJ2NvbGQnO1xuICBjb21tb24/OiBFdGhlcmV1bUNvbW1vbjtcbn07XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './unit';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../test/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./unit"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90ZXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5Q0FBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3VuaXQnO1xuIl19
@@ -0,0 +1,8 @@
1
+ import { TestBitGoAPI } from '@bitgo-beta/sdk-test';
2
+ import { TransactionBuilder } from '../../src';
3
+ export declare function runBasicCoinInfoTests(coinName: string, bitgo: TestBitGoAPI, MainCoin: any, TestCoin: any, testData: any): void;
4
+ export declare function runExplainTransactionTests(coinName: string, txBuilder: TransactionBuilder, basecoin: any, testData: any): void;
5
+ export declare function runSignTransactionTests(coinName: string, builder: TransactionBuilder, basecoin: any, testData: any): void;
6
+ export declare function runTransactionVerificationTests(coinName: string, bitgo: TestBitGoAPI, basecoin: any, testData: any): void;
7
+ export declare function runRecoveryTransactionTests(coinName: string, txBuilder: TransactionBuilder, bitgo: TestBitGoAPI, testData: any, mockData: any): void;
8
+ //# sourceMappingURL=coin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coin.d.ts","sourceRoot":"","sources":["../../../test/unit/coin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAM/D,OAAO,EAKL,kBAAkB,EACnB,MAAM,WAAW,CAAC;AAInB,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,KAAA,EAAE,QAAQ,KAAA,EAAE,QAAQ,EAAE,GAAG,QAwB7G;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,QAAQ,KAAA,EAAE,QAAQ,EAAE,GAAG,QAqElH;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,KAAA,EAAE,QAAQ,EAAE,GAAG,QA0F7G;AAED,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,KAAA,EAAE,QAAQ,EAAE,GAAG,QAoR7G;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,kBAAkB,EAC7B,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,GAAG,EACb,QAAQ,EAAE,GAAG,QA8Jd"}