@hinkal/common 0.3.13 → 0.3.14

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 (226) hide show
  1. package/README.md +67 -4
  2. package/common/src/API/API.cjs +1 -1
  3. package/common/src/API/API.d.ts +0 -2
  4. package/common/src/API/API.mjs +92 -94
  5. package/common/src/API/admin-calls.cjs +1 -1
  6. package/common/src/API/admin-calls.d.ts +2 -1
  7. package/common/src/API/admin-calls.mjs +1 -0
  8. package/common/src/API/evm-token-assets.cjs +1 -1
  9. package/common/src/API/evm-token-assets.mjs +2 -13
  10. package/common/src/API/get-token-price-chart-data.cjs +1 -1
  11. package/common/src/API/get-token-price-chart-data.mjs +2 -2
  12. package/common/src/API/getTokenPrice.cjs +1 -1
  13. package/common/src/API/getTokenPrice.mjs +2 -2
  14. package/common/src/API/index.cjs +1 -1
  15. package/common/src/API/index.d.ts +1 -0
  16. package/common/src/API/index.mjs +1 -0
  17. package/common/src/API/privacy-score-calls.cjs +1 -1
  18. package/common/src/API/privacy-score-calls.mjs +2 -2
  19. package/common/src/API/receiveVaultCalls.cjs +1 -1
  20. package/common/src/API/receiveVaultCalls.d.ts +4 -2
  21. package/common/src/API/receiveVaultCalls.mjs +8 -4
  22. package/common/src/constants/chains.constants.cjs +1 -1
  23. package/common/src/constants/chains.constants.d.ts +2 -0
  24. package/common/src/constants/chains.constants.mjs +106 -93
  25. package/common/src/constants/coingecko.constants.cjs +1 -1
  26. package/common/src/constants/coingecko.constants.d.ts +2 -0
  27. package/common/src/constants/coingecko.constants.mjs +1 -1
  28. package/common/src/constants/deploy-data/deploy-data-arbMainnet.json.cjs +1 -1
  29. package/common/src/constants/deploy-data/deploy-data-arbMainnet.json.mjs +2 -1
  30. package/common/src/constants/deploy-data/deploy-data-arcTestnet.json.cjs +1 -1
  31. package/common/src/constants/deploy-data/deploy-data-arcTestnet.json.mjs +3 -2
  32. package/common/src/constants/deploy-data/deploy-data-base.json.cjs +1 -1
  33. package/common/src/constants/deploy-data/deploy-data-base.json.mjs +2 -1
  34. package/common/src/constants/deploy-data/deploy-data-bnbMainnet.json.cjs +1 -1
  35. package/common/src/constants/deploy-data/deploy-data-bnbMainnet.json.mjs +2 -1
  36. package/common/src/constants/deploy-data/deploy-data-ethMainnet.json.cjs +1 -1
  37. package/common/src/constants/deploy-data/deploy-data-ethMainnet.json.mjs +2 -1
  38. package/common/src/constants/deploy-data/deploy-data-polygon.json.cjs +1 -1
  39. package/common/src/constants/deploy-data/deploy-data-polygon.json.mjs +2 -1
  40. package/common/src/constants/deploy-data/deploy-data-solanaDevnet.json.cjs +1 -0
  41. package/common/src/constants/deploy-data/deploy-data-solanaDevnet.json.mjs +6 -0
  42. package/common/src/constants/deploy-data/deploy-data-tempo.json.cjs +1 -1
  43. package/common/src/constants/deploy-data/deploy-data-tempo.json.mjs +2 -1
  44. package/common/src/constants/deploy-data/deploy-data-tronMainnet.json.cjs +1 -1
  45. package/common/src/constants/deploy-data/deploy-data-tronMainnet.json.mjs +1 -1
  46. package/common/src/constants/deploy-data/deploy-data-tronNile.json.cjs +1 -1
  47. package/common/src/constants/deploy-data/deploy-data-tronNile.json.mjs +1 -1
  48. package/common/src/constants/deploy-data/index.cjs +1 -1
  49. package/common/src/constants/deploy-data/index.d.ts +2 -1
  50. package/common/src/constants/deploy-data/index.mjs +7 -6
  51. package/common/src/constants/deploy-data/shared-deploy-data-evm.json.cjs +1 -1
  52. package/common/src/constants/deploy-data/shared-deploy-data-evm.json.mjs +1 -1
  53. package/common/src/constants/deploy-data/shared-deploy-data-solana.json.cjs +1 -1
  54. package/common/src/constants/deploy-data/shared-deploy-data-solana.json.mjs +1 -1
  55. package/common/src/constants/deploy-data/shared-deploy-data-tron.json.cjs +1 -1
  56. package/common/src/constants/deploy-data/shared-deploy-data-tron.json.mjs +1 -1
  57. package/common/src/constants/index.cjs +1 -1
  58. package/common/src/constants/index.mjs +1 -1
  59. package/common/src/constants/protocol.constants.cjs +2 -2
  60. package/common/src/constants/protocol.constants.d.ts +0 -2
  61. package/common/src/constants/protocol.constants.mjs +2 -2
  62. package/common/src/constants/save-depths.cjs +1 -1
  63. package/common/src/constants/save-depths.d.ts +1 -0
  64. package/common/src/constants/save-depths.mjs +1 -0
  65. package/common/src/constants/server.constants.cjs +1 -1
  66. package/common/src/constants/server.constants.d.ts +8 -6
  67. package/common/src/constants/server.constants.mjs +8 -6
  68. package/common/src/constants/tokens.constants.cjs +1 -1
  69. package/common/src/constants/tokens.constants.mjs +1 -1
  70. package/common/src/data-structures/Hinkal/Hinkal.cjs +1 -1
  71. package/common/src/data-structures/Hinkal/Hinkal.d.ts +4 -4
  72. package/common/src/data-structures/Hinkal/Hinkal.mjs +37 -37
  73. package/common/src/data-structures/Hinkal/IHinkal.d.ts +4 -4
  74. package/common/src/data-structures/Hinkal/handleAutoDepositBack.cjs +1 -1
  75. package/common/src/data-structures/Hinkal/handleAutoDepositBack.mjs +5 -5
  76. package/common/src/data-structures/Hinkal/hinkalBridgePrivateToPrivate.cjs +1 -1
  77. package/common/src/data-structures/Hinkal/hinkalBridgePrivateToPrivate.mjs +1 -1
  78. package/common/src/data-structures/Hinkal/hinkalDepositAndBridge.cjs +1 -1
  79. package/common/src/data-structures/Hinkal/hinkalDepositAndBridge.mjs +55 -54
  80. package/common/src/data-structures/Hinkal/hinkalDepositAndWithdraw.cjs +1 -1
  81. package/common/src/data-structures/Hinkal/hinkalDepositAndWithdraw.mjs +60 -57
  82. package/common/src/data-structures/Hinkal/hinkalPrivateWallet.cjs +1 -1
  83. package/common/src/data-structures/Hinkal/hinkalPrivateWallet.d.ts +1 -1
  84. package/common/src/data-structures/Hinkal/hinkalPrivateWallet.mjs +29 -29
  85. package/common/src/data-structures/Hinkal/hinkalProoflessDeposit.utils.cjs +1 -1
  86. package/common/src/data-structures/Hinkal/hinkalProoflessDeposit.utils.mjs +1 -1
  87. package/common/src/data-structures/Hinkal/hinkalProxySwap.cjs +1 -1
  88. package/common/src/data-structures/Hinkal/hinkalProxySwap.mjs +1 -1
  89. package/common/src/data-structures/Hinkal/hinkalReceiveVaultAccount.cjs +1 -1
  90. package/common/src/data-structures/Hinkal/hinkalReceiveVaultAccount.mjs +7 -15
  91. package/common/src/data-structures/Hinkal/hinkalReceiveVaultCreate.cjs +1 -1
  92. package/common/src/data-structures/Hinkal/hinkalReceiveVaultCreate.d.ts +2 -2
  93. package/common/src/data-structures/Hinkal/hinkalReceiveVaultCreate.mjs +24 -28
  94. package/common/src/data-structures/Hinkal/hinkalReceiveVaultRecover.cjs +1 -1
  95. package/common/src/data-structures/Hinkal/hinkalReceiveVaultRecover.mjs +47 -40
  96. package/common/src/data-structures/Hinkal/hinkalReceiveVaultSettle.d.ts +1 -1
  97. package/common/src/data-structures/Hinkal/hinkalSolanaDeposit.cjs +1 -1
  98. package/common/src/data-structures/Hinkal/hinkalSolanaDeposit.mjs +22 -42
  99. package/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.cjs +1 -1
  100. package/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.mjs +72 -70
  101. package/common/src/data-structures/Hinkal/hinkalSolanaProxySend.cjs +1 -1
  102. package/common/src/data-structures/Hinkal/hinkalSolanaProxySend.mjs +9 -9
  103. package/common/src/data-structures/Hinkal/hinkalSolanaProxyShield.cjs +1 -1
  104. package/common/src/data-structures/Hinkal/hinkalSolanaProxyShield.mjs +15 -15
  105. package/common/src/data-structures/Hinkal/hinkalSolanaProxySwap.cjs +1 -1
  106. package/common/src/data-structures/Hinkal/hinkalSolanaProxySwap.d.ts +1 -1
  107. package/common/src/data-structures/Hinkal/hinkalSolanaProxySwap.mjs +47 -45
  108. package/common/src/data-structures/Hinkal/hinkalSolanaReceiveVault.cjs +1 -0
  109. package/common/src/data-structures/Hinkal/hinkalSolanaReceiveVault.d.ts +5 -0
  110. package/common/src/data-structures/Hinkal/hinkalSolanaReceiveVault.mjs +60 -0
  111. package/common/src/data-structures/Hinkal/hinkalWithdraw.cjs +1 -1
  112. package/common/src/data-structures/Hinkal/hinkalWithdraw.mjs +35 -26
  113. package/common/src/data-structures/Hinkal/index.d.ts +1 -0
  114. package/common/src/data-structures/Hinkal/resetMerkleTrees.cjs +1 -1
  115. package/common/src/data-structures/Hinkal/resetMerkleTrees.mjs +13 -13
  116. package/common/src/error-handling/error-codes.constants.cjs +1 -1
  117. package/common/src/error-handling/error-codes.constants.d.ts +2 -0
  118. package/common/src/error-handling/error-codes.constants.mjs +2 -0
  119. package/common/src/error-handling/get-error.message.cjs +1 -1
  120. package/common/src/error-handling/get-error.message.mjs +10 -1
  121. package/common/src/functions/index.cjs +1 -1
  122. package/common/src/functions/index.mjs +6 -2
  123. package/common/src/functions/pre-transaction/addressTableLookup.d.ts +1 -0
  124. package/common/src/functions/pre-transaction/calculateSolanaNullifierCount.cjs +1 -1
  125. package/common/src/functions/pre-transaction/calculateSolanaNullifierCount.mjs +7 -7
  126. package/common/src/functions/pre-transaction/constructAdminData.cjs +1 -1
  127. package/common/src/functions/pre-transaction/constructAdminData.mjs +4 -3
  128. package/common/src/functions/pre-transaction/sendV0Transaction.cjs +1 -1
  129. package/common/src/functions/pre-transaction/sendV0Transaction.d.ts +1 -0
  130. package/common/src/functions/pre-transaction/sendV0Transaction.mjs +22 -2
  131. package/common/src/functions/private-wallet/emporium.helpers.cjs +1 -1
  132. package/common/src/functions/private-wallet/emporium.helpers.mjs +15 -15
  133. package/common/src/functions/snarkjs/fetchOnChainRootHashes.cjs +1 -1
  134. package/common/src/functions/snarkjs/fetchOnChainRootHashes.mjs +6 -6
  135. package/common/src/functions/utils/addresses.cjs +1 -1
  136. package/common/src/functions/utils/addresses.d.ts +4 -0
  137. package/common/src/functions/utils/addresses.mjs +17 -17
  138. package/common/src/functions/utils/admin-dimensions.cjs +1 -0
  139. package/common/src/functions/utils/admin-dimensions.d.ts +4 -0
  140. package/common/src/functions/utils/admin-dimensions.mjs +206 -0
  141. package/common/src/functions/utils/create-provider.cjs +1 -1
  142. package/common/src/functions/utils/create-provider.mjs +5 -1
  143. package/common/src/functions/utils/fees.utils.cjs +1 -1
  144. package/common/src/functions/utils/fees.utils.d.ts +2 -0
  145. package/common/src/functions/utils/fees.utils.mjs +31 -33
  146. package/common/src/functions/utils/gas-token.utils.cjs +1 -0
  147. package/common/src/functions/utils/gas-token.utils.d.ts +3 -0
  148. package/common/src/functions/utils/gas-token.utils.mjs +7 -0
  149. package/common/src/functions/utils/getUtxosFromReceiptSolana.d.ts +9 -4
  150. package/common/src/functions/utils/index.cjs +1 -1
  151. package/common/src/functions/utils/index.d.ts +4 -0
  152. package/common/src/functions/utils/index.mjs +5 -1
  153. package/common/src/functions/utils/publicBalance.utils.cjs +1 -1
  154. package/common/src/functions/utils/publicBalance.utils.mjs +7 -7
  155. package/common/src/functions/utils/receive-vault-account.utils.cjs +1 -1
  156. package/common/src/functions/utils/receive-vault-account.utils.d.ts +2 -1
  157. package/common/src/functions/utils/receive-vault-account.utils.mjs +16 -15
  158. package/common/src/functions/utils/receive-vault-scan.utils.cjs +1 -1
  159. package/common/src/functions/utils/receive-vault-scan.utils.mjs +37 -42
  160. package/common/src/functions/utils/receive-vault-solana.utils.cjs +1 -0
  161. package/common/src/functions/utils/receive-vault-solana.utils.d.ts +8 -0
  162. package/common/src/functions/utils/receive-vault-solana.utils.mjs +45 -0
  163. package/common/src/functions/utils/receive-vault.utils.cjs +2 -2
  164. package/common/src/functions/utils/receive-vault.utils.d.ts +13 -11
  165. package/common/src/functions/utils/receive-vault.utils.mjs +97 -82
  166. package/common/src/functions/utils/token-check.utils.d.ts +1 -0
  167. package/common/src/functions/utils/wallet-token-discovery.utils.cjs +1 -1
  168. package/common/src/functions/utils/wallet-token-discovery.utils.d.ts +5 -0
  169. package/common/src/functions/utils/wallet-token-discovery.utils.mjs +25 -31
  170. package/common/src/functions/web3/getContractMetadata.cjs +1 -1
  171. package/common/src/functions/web3/getContractMetadata.mjs +6 -6
  172. package/common/src/functions/web3/index.cjs +1 -1
  173. package/common/src/functions/web3/index.mjs +1 -1
  174. package/common/src/types/admin.types.cjs +1 -1
  175. package/common/src/types/admin.types.d.ts +64 -9
  176. package/common/src/types/admin.types.mjs +10 -2
  177. package/common/src/types/connector.types.d.ts +1 -0
  178. package/common/src/types/ethereum-network.types.d.ts +1 -0
  179. package/common/src/types/external-action.types.cjs +1 -1
  180. package/common/src/types/external-action.types.d.ts +2 -1
  181. package/common/src/types/external-action.types.mjs +1 -1
  182. package/common/src/types/receive-vault.types.cjs +1 -1
  183. package/common/src/types/receive-vault.types.d.ts +15 -20
  184. package/common/src/types/receive-vault.types.mjs +4 -2
  185. package/common/src/webworker/{logError-BeXPKuv9.js → logError-C-ej_TX9.js} +1 -1
  186. package/common/src/webworker/package.json +1 -1
  187. package/common/src/webworker/snarkjsWorker/snarkjsWorkerLauncher.ts?worker&url.cjs +1 -1
  188. package/common/src/webworker/snarkjsWorker/snarkjsWorkerLauncher.ts?worker&url.mjs +1 -1
  189. package/common/src/webworker/snarkjsWorkerNode.cjs +1 -1
  190. package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.cjs +1 -1
  191. package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.mjs +1 -1
  192. package/common/src/webworker/utxoWorkerNode.cjs +1 -1
  193. package/common/src/webworker/viteWorkerURL.constant.cjs +3 -3
  194. package/common/src/webworker/viteWorkerURL.constant.mjs +3 -3
  195. package/common/src/webworker/workerProxy-CE-rYA3W.js +1 -0
  196. package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.cjs +1 -1
  197. package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.mjs +1 -1
  198. package/common/src/webworker/zkProofWorkerNode.cjs +1 -1
  199. package/index.cjs +1 -1
  200. package/index.mjs +3 -2
  201. package/internal/monitorConnectedAddress.cjs +1 -1
  202. package/internal/monitorConnectedAddress.d.ts +1 -1
  203. package/internal/monitorConnectedAddress.mjs +1 -3
  204. package/package.json +1 -1
  205. package/providers/prepareEthersHinkal.cjs +1 -1
  206. package/providers/prepareEthersHinkal.mjs +1 -1
  207. package/providers/prepareSolanaHinkal.cjs +1 -1
  208. package/providers/prepareSolanaHinkal.mjs +1 -1
  209. package/providers/prepareTronHinkal.cjs +1 -1
  210. package/providers/prepareTronHinkal.mjs +1 -1
  211. package/providers/prepareWagmiHinkal.cjs +1 -1
  212. package/providers/prepareWagmiHinkal.mjs +1 -1
  213. package/services/Hinkal.cjs +1 -1
  214. package/services/Hinkal.d.ts +6 -2
  215. package/services/Hinkal.mjs +74 -51
  216. package/types/IHinkal.d.ts +6 -1
  217. package/types/index.cjs +1 -1
  218. package/types/index.d.ts +1 -0
  219. package/types/index.mjs +2 -0
  220. package/types/receive-vault.types.cjs +1 -0
  221. package/types/receive-vault.types.d.ts +14 -0
  222. package/types/receive-vault.types.mjs +2 -0
  223. package/common/src/API/getOdosPriceForToken.cjs +0 -1
  224. package/common/src/API/getOdosPriceForToken.d.ts +0 -1
  225. package/common/src/API/getOdosPriceForToken.mjs +0 -14
  226. package/common/src/webworker/workerProxy-DF35H7vU.js +0 -1
@@ -1 +1 @@
1
- const e=require(`../../constants/protocol.constants.cjs`),t=require(`../../functions/utils/caseInsensitive.utils.cjs`),n=require(`../../types/external-action.types.cjs`),r=require(`../../functions/utils/receive-vault.utils.cjs`),i=require(`../../API/receiveVaultCalls.cjs`),a=require(`../../functions/pre-transaction/getFeeStructure.cjs`),o=require(`../../functions/utils/receive-vault-account.utils.cjs`),s=require(`./hinkalReceiveVaultSettle.cjs`);var c=async(e,t,n,a)=>{let o=r.getReceiveVaultParams(e,a),c=s.buildReceiveVaultEncryptedOutput(o,t);return i.registerReceiveVault(a,o,t,n,c,await r.signReceiveVaultOutput(e,a,c))},l=(e,n,r)=>e.filter(e=>e.chainId===n&&t.caseInsensitiveEqual(e.token,r)).reduce((e,t)=>Math.max(e,t.index+1),0),u=async(t,i,o,s,d,f)=>{let{flatFee:p}=await a.getFeeStructure(i,o,[o],n.ExternalActionId.ReceiveVaultSettle,[],e.RECEIVE_VAULT_VARIABLE_RATE),m=r.getReceiveVaultFeeCeiling(p).toString(),h=r.getReceiveVaultExpiry().toString(),g=r.buildReceiveVaultRecord(t,{index:l(f,i,o),chainId:i,token:o,maxFlatFee:m,maxVariableRate:Number(e.RECEIVE_VAULT_VARIABLE_RATE),expiry:h});return await c(t,s,d,g)?u(t,i,o,s,d,[...f,g]):g},d=(e,n,i)=>e.filter(e=>e.chainId===n&&t.caseInsensitiveEqual(e.token,i)&&!r.isReceiveVaultExpired(e)).sort((e,t)=>t.index-e.index)[0],f=async(e,t,n,i=!1)=>{if(!r.isReceiveVaultSupported(t))throw Error(`receive vault: no factory on chain ${t}`);let{userKeys:a}=e,s=r.getReceiveVaultEncryptionKey(a),l=r.getReceiveVaultAccountKey(a),{records:f}=await o.getReceiveVaultAccountSnapshot(a);if(!i){let e=d(f,t,n);if(e&&!await c(a,s,l,e))return e}return u(a,t,n,s,l,f)};exports.hinkalReceiveVaultCreate=f;
1
+ const e=require(`../../functions/utils/receive-vault.utils.cjs`),t=require(`../../API/receiveVaultCalls.cjs`),n=require(`../../functions/utils/receive-vault-account.utils.cjs`),r=require(`./hinkalReceiveVaultSettle.cjs`);var i=async(n,i,a,o)=>{let s=e.getReceiveVaultParams(n,o),c=r.buildReceiveVaultEncryptedOutput(s,i);return t.registerReceiveVault(o,s,i,a,c,await Promise.all(e.receiveVaultChainsForNetwork(o.network).map(async t=>({chainId:t,signature:await e.signReceiveVaultOutput(n,o,c,t)}))))},a=async(t,r,a,o)=>{let s=await e.buildReceiveVaultRecord(t,{index:await n.getReceiveVaultNextIndex(t,r),network:r,version:(await e.getReceiveVaultCurrentVersion(r)).toString()});return await i(t,a,o,s),s},o=(e,t)=>e.filter(e=>e.network===t).sort((e,t)=>t.index-e.index)[0],s=async(t,r,i=!1)=>{if(e.receiveVaultChainsForNetwork(r).length===0)throw Error(`receive vault: no factory for network ${r}`);let{userKeys:s}=t,c=e.getReceiveVaultEncryptionKey(s),l=e.getReceiveVaultAccountKey(s);if(!i){let{records:e}=await n.getReceiveVaultAccountSnapshot(s),t=o(e,r);if(t)return t}return a(s,r,c,l)};exports.hinkalReceiveVaultCreate=s;
@@ -1,3 +1,3 @@
1
- import { ReceiveVaultRecord } from '../../types/receive-vault.types';
1
+ import { ReceiveVaultNetwork, ReceiveVaultRecord } from '../../types/receive-vault.types';
2
2
  import { IHinkal } from './IHinkal';
3
- export declare const hinkalReceiveVaultCreate: (hinkal: IHinkal, chainId: number, token: string, forceFresh?: boolean) => Promise<ReceiveVaultRecord>;
3
+ export declare const hinkalReceiveVaultCreate: (hinkal: IHinkal, network: ReceiveVaultNetwork, forceFresh?: boolean) => Promise<ReceiveVaultRecord>;
@@ -1,33 +1,29 @@
1
- import { RECEIVE_VAULT_VARIABLE_RATE as e } from "../../constants/protocol.constants.mjs";
2
- import { caseInsensitiveEqual as t } from "../../functions/utils/caseInsensitive.utils.mjs";
3
- import { ExternalActionId as n } from "../../types/external-action.types.mjs";
4
- import { buildReceiveVaultRecord as r, getReceiveVaultAccountKey as i, getReceiveVaultEncryptionKey as a, getReceiveVaultExpiry as o, getReceiveVaultFeeCeiling as s, getReceiveVaultParams as c, isReceiveVaultExpired as l, isReceiveVaultSupported as u, signReceiveVaultOutput as d } from "../../functions/utils/receive-vault.utils.mjs";
5
- import { registerReceiveVault as f } from "../../API/receiveVaultCalls.mjs";
6
- import { getFeeStructure as p } from "../../functions/pre-transaction/getFeeStructure.mjs";
7
- import { getReceiveVaultAccountSnapshot as m } from "../../functions/utils/receive-vault-account.utils.mjs";
8
- import { buildReceiveVaultEncryptedOutput as h } from "./hinkalReceiveVaultSettle.mjs";
1
+ import { buildReceiveVaultRecord as e, getReceiveVaultAccountKey as t, getReceiveVaultCurrentVersion as n, getReceiveVaultEncryptionKey as r, getReceiveVaultParams as i, receiveVaultChainsForNetwork as a, signReceiveVaultOutput as o } from "../../functions/utils/receive-vault.utils.mjs";
2
+ import { registerReceiveVault as s } from "../../API/receiveVaultCalls.mjs";
3
+ import { getReceiveVaultAccountSnapshot as c, getReceiveVaultNextIndex as l } from "../../functions/utils/receive-vault-account.utils.mjs";
4
+ import { buildReceiveVaultEncryptedOutput as u } from "./hinkalReceiveVaultSettle.mjs";
9
5
  //#region libs/shared/common/src/data-structures/Hinkal/hinkalReceiveVaultCreate.ts
10
- var g = async (e, t, n, r) => {
11
- let i = c(e, r), a = h(i, t);
12
- return f(r, i, t, n, a, await d(e, r, a));
13
- }, _ = (e, n, r) => e.filter((e) => e.chainId === n && t(e.token, r)).reduce((e, t) => Math.max(e, t.index + 1), 0), v = async (t, i, a, c, l, u) => {
14
- let { flatFee: d } = await p(i, a, [a], n.ReceiveVaultSettle, [], e), f = s(d).toString(), m = o().toString(), h = r(t, {
15
- index: _(u, i, a),
16
- chainId: i,
17
- token: a,
18
- maxFlatFee: f,
19
- maxVariableRate: Number(e),
20
- expiry: m
6
+ var d = async (e, t, n, r) => {
7
+ let c = i(e, r), l = u(c, t);
8
+ return s(r, c, t, n, l, await Promise.all(a(r.network).map(async (t) => ({
9
+ chainId: t,
10
+ signature: await o(e, r, l, t)
11
+ }))));
12
+ }, f = async (t, r, i, a) => {
13
+ let o = await e(t, {
14
+ index: await l(t, r),
15
+ network: r,
16
+ version: (await n(r)).toString()
21
17
  });
22
- return await g(t, c, l, h) ? v(t, i, a, c, l, [...u, h]) : h;
23
- }, y = (e, n, r) => e.filter((e) => e.chainId === n && t(e.token, r) && !l(e)).sort((e, t) => t.index - e.index)[0], b = async (e, t, n, r = !1) => {
24
- if (!u(t)) throw Error(`receive vault: no factory on chain ${t}`);
25
- let { userKeys: o } = e, s = a(o), c = i(o), { records: l } = await m(o);
26
- if (!r) {
27
- let e = y(l, t, n);
28
- if (e && !await g(o, s, c, e)) return e;
18
+ return await d(t, i, a, o), o;
19
+ }, p = (e, t) => e.filter((e) => e.network === t).sort((e, t) => t.index - e.index)[0], m = async (e, n, i = !1) => {
20
+ if (a(n).length === 0) throw Error(`receive vault: no factory for network ${n}`);
21
+ let { userKeys: o } = e, s = r(o), l = t(o);
22
+ if (!i) {
23
+ let { records: e } = await c(o), t = p(e, n);
24
+ if (t) return t;
29
25
  }
30
- return v(o, t, n, s, c, l);
26
+ return f(o, n, s, l);
31
27
  };
32
28
  //#endregion
33
- export { b as hinkalReceiveVaultCreate };
29
+ export { m as hinkalReceiveVaultCreate };
@@ -1 +1 @@
1
- require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../functions/utils/tron.utils.cjs`),r=require(`../../types/ethereum-network.types.cjs`),i=require(`../../functions/utils/receive-vault.utils.cjs`),a=require(`../../functions/utils/string.utils.cjs`),o=require(`../../error-handling/get-error.message.cjs`);let s=require(`ethers`);var c={NothingToSettle:`These funds have already been moved out of the receive address.`,RecoveryExpired:`The recovery request expired before it was confirmed. Please try again.`,BadRecoverySignature:`This wallet cannot recover these funds. Reconnect the account that generated the address.`,RecoveryAlreadyUsed:`This recovery was already submitted. Please try again.`},l=e=>{let t=e?.revert?.name;if(t&&c[t])return c[t];let n=JSON.stringify(e??``),r=Object.keys(c).find(e=>n.includes(s.ethers.id(`${e}()`).slice(2,10)));if(r)return c[r];let i=e?.message;return i&&s.ethers.isHexString(`0x${i}`)?a.hexToUtf8(i):e?.shortMessage??o.getErrorMessage(e)},u=async(a,o,s,c,u,d=!1)=>{let f=i.getReceiveVaultFactoryAddress(c);if(!f)throw Error(`receive vault: no factory on chain ${c}`);let p=BigInt(Math.floor(Date.now()/1e3)+900),m=await i.signReceiveVaultRecovery(a.userKeys,o,s,c,u,p),h=[i.receiveVaultParamsToTuple(i.getReceiveVaultParams(a.userKeys,o)),n.addressToHexFormat(s),n.addressToHexFormat(u),p,m];if(e.isTronLike(c)){let{receiveVaultFactoryABI:r}=e.networkRegistry[c].contractData;if(!r)throw Error(`receive vault: no factory ABI on chain ${c}`);let i=a.getTronWeb(),o=n.evmHexToTronBase58Address(f);if(d){let{transaction:e}=await i.transactionBuilder.triggerSmartContract(o,``,{feeLimit:t.TRON_DEFAULT_FEE_LIMIT_SUN,callValue:0,input:n.createTronCallData(r,`recover`,h)},[],await a.getEthereumAddressByChain(c));return e}let s=i.contract(r,o);try{return await s.recover(...h).send({feeLimit:t.TRON_DEFAULT_FEE_LIMIT_SUN})}catch(e){throw Error(l(e))}}let g=a.getContractWithSigner(c,r.ContractType.ReceiveVaultFactoryContract);try{return d?g.recover.populateTransaction(...h):(await g.recover(...h)).hash}catch(e){throw Error(l(e))}};exports.hinkalReceiveVaultRecover=u;
1
+ require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../functions/utils/tron.utils.cjs`),r=require(`../../types/ethereum-network.types.cjs`),i=require(`../../functions/utils/receive-vault.utils.cjs`),a=require(`../../functions/utils/string.utils.cjs`),o=require(`../../error-handling/get-error.message.cjs`),s=require(`./hinkalSolanaReceiveVault.cjs`);let c=require(`ethers`);var l={NothingToSettle:`These funds have already been moved out of the receive address.`,RecoveryExpired:`The recovery request expired before it was confirmed. Please try again.`,BadRecoverySignature:`This wallet cannot recover these funds. Reconnect the account that generated the address.`,RecoveryAlreadyUsed:`This recovery was already submitted. Please try again.`},u=e=>{let t=e?.revert?.name;if(t&&l[t])return l[t];let n=JSON.stringify(e??``),r=Object.keys(l).find(e=>n.includes(c.ethers.id(`${e}()`).slice(2,10)));if(r)return l[r];let i=e?.message;return i&&c.ethers.isHexString(`0x${i}`)?a.hexToUtf8(i):e?.shortMessage??o.getErrorMessage(e)},d=async(a,o,c,l,d,f=!1)=>{let p=i.getReceiveVaultFactoryAddress(l);if(!p)throw Error(`receive vault: no factory on chain ${l}`);if(o.network!==i.receiveVaultNetworkOf(l))throw Error(`receive vault: network mismatch`);let m=BigInt(Math.floor(Date.now()/1e3)+900),h=await i.signReceiveVaultRecovery(a.userKeys,o,c,l,d,m);if(e.isSolanaLike(l)){let e=await a.getEthereumAddressByChain(l);return s.hinkalSolanaReceiveVaultRecover(a,l,i.getReceiveVaultParams(a.userKeys,o),c,d,m,h,e,f)}let g=[i.receiveVaultParamsToTuple(i.getReceiveVaultParams(a.userKeys,o)),n.addressToHexFormat(c),n.addressToHexFormat(d),m,h];if(e.isTronLike(l)){let{receiveVaultFactoryABI:r}=e.networkRegistry[l].contractData;if(!r)throw Error(`receive vault: no factory ABI on chain ${l}`);let i=a.getTronWeb(),o=n.evmHexToTronBase58Address(p);if(f){let{transaction:e}=await i.transactionBuilder.triggerSmartContract(o,``,{feeLimit:t.TRON_DEFAULT_FEE_LIMIT_SUN,callValue:0,input:n.createTronCallData(r,`recover`,g)},[],await a.getEthereumAddressByChain(l));return e}let s=i.contract(r,o);try{return await s.recover(...g).send({feeLimit:t.TRON_DEFAULT_FEE_LIMIT_SUN})}catch(e){throw Error(u(e))}}let _=a.getContractWithSigner(l,r.ContractType.ReceiveVaultFactoryContract);try{return f?_.recover.populateTransaction(...g):(await _.recover(...g)).hash}catch(e){throw Error(u(e))}};exports.hinkalReceiveVaultRecover=d;
@@ -1,59 +1,66 @@
1
- import { isTronLike as e, networkRegistry as t } from "../../constants/chains.constants.mjs";
2
- import { TRON_DEFAULT_FEE_LIMIT_SUN as n } from "../../constants/protocol.constants.mjs";
3
- import { addressToHexFormat as r, createTronCallData as i, evmHexToTronBase58Address as a } from "../../functions/utils/tron.utils.mjs";
4
- import { ContractType as o } from "../../types/ethereum-network.types.mjs";
5
- import { getReceiveVaultFactoryAddress as s, getReceiveVaultParams as c, receiveVaultParamsToTuple as l, signReceiveVaultRecovery as u } from "../../functions/utils/receive-vault.utils.mjs";
6
- import { hexToUtf8 as d } from "../../functions/utils/string.utils.mjs";
7
- import { getErrorMessage as f } from "../../error-handling/get-error.message.mjs";
8
- import { ethers as p } from "ethers";
1
+ import { isSolanaLike as e, isTronLike as t, networkRegistry as n } from "../../constants/chains.constants.mjs";
2
+ import { TRON_DEFAULT_FEE_LIMIT_SUN as r } from "../../constants/protocol.constants.mjs";
3
+ import { addressToHexFormat as i, createTronCallData as a, evmHexToTronBase58Address as o } from "../../functions/utils/tron.utils.mjs";
4
+ import { ContractType as s } from "../../types/ethereum-network.types.mjs";
5
+ import { getReceiveVaultFactoryAddress as c, getReceiveVaultParams as l, receiveVaultNetworkOf as u, receiveVaultParamsToTuple as d, signReceiveVaultRecovery as f } from "../../functions/utils/receive-vault.utils.mjs";
6
+ import { hexToUtf8 as p } from "../../functions/utils/string.utils.mjs";
7
+ import { getErrorMessage as m } from "../../error-handling/get-error.message.mjs";
8
+ import { hinkalSolanaReceiveVaultRecover as h } from "./hinkalSolanaReceiveVault.mjs";
9
+ import { ethers as g } from "ethers";
9
10
  //#region libs/shared/common/src/data-structures/Hinkal/hinkalReceiveVaultRecover.ts
10
- var m = {
11
+ var _ = {
11
12
  NothingToSettle: "These funds have already been moved out of the receive address.",
12
13
  RecoveryExpired: "The recovery request expired before it was confirmed. Please try again.",
13
14
  BadRecoverySignature: "This wallet cannot recover these funds. Reconnect the account that generated the address.",
14
15
  RecoveryAlreadyUsed: "This recovery was already submitted. Please try again."
15
- }, h = (e) => {
16
+ }, v = (e) => {
16
17
  let t = e?.revert?.name;
17
- if (t && m[t]) return m[t];
18
- let n = JSON.stringify(e ?? ""), r = Object.keys(m).find((e) => n.includes(p.id(`${e}()`).slice(2, 10)));
19
- if (r) return m[r];
18
+ if (t && _[t]) return _[t];
19
+ let n = JSON.stringify(e ?? ""), r = Object.keys(_).find((e) => n.includes(g.id(`${e}()`).slice(2, 10)));
20
+ if (r) return _[r];
20
21
  let i = e?.message;
21
- return i && p.isHexString(`0x${i}`) ? d(i) : e?.shortMessage ?? f(e);
22
- }, g = async (d, f, p, m, g, _ = !1) => {
23
- let v = s(m);
24
- if (!v) throw Error(`receive vault: no factory on chain ${m}`);
25
- let y = BigInt(Math.floor(Date.now() / 1e3) + 900), b = await u(d.userKeys, f, p, m, g, y), x = [
26
- l(c(d.userKeys, f)),
27
- r(p),
28
- r(g),
29
- y,
30
- b
22
+ return i && g.isHexString(`0x${i}`) ? p(i) : e?.shortMessage ?? m(e);
23
+ }, y = async (p, m, g, _, y, b = !1) => {
24
+ let x = c(_);
25
+ if (!x) throw Error(`receive vault: no factory on chain ${_}`);
26
+ if (m.network !== u(_)) throw Error("receive vault: network mismatch");
27
+ let S = BigInt(Math.floor(Date.now() / 1e3) + 900), C = await f(p.userKeys, m, g, _, y, S);
28
+ if (e(_)) {
29
+ let e = await p.getEthereumAddressByChain(_);
30
+ return h(p, _, l(p.userKeys, m), g, y, S, C, e, b);
31
+ }
32
+ let w = [
33
+ d(l(p.userKeys, m)),
34
+ i(g),
35
+ i(y),
36
+ S,
37
+ C
31
38
  ];
32
- if (e(m)) {
33
- let { receiveVaultFactoryABI: e } = t[m].contractData;
34
- if (!e) throw Error(`receive vault: no factory ABI on chain ${m}`);
35
- let r = d.getTronWeb(), o = a(v);
36
- if (_) {
37
- let { transaction: t } = await r.transactionBuilder.triggerSmartContract(o, "", {
38
- feeLimit: n,
39
+ if (t(_)) {
40
+ let { receiveVaultFactoryABI: e } = n[_].contractData;
41
+ if (!e) throw Error(`receive vault: no factory ABI on chain ${_}`);
42
+ let t = p.getTronWeb(), i = o(x);
43
+ if (b) {
44
+ let { transaction: n } = await t.transactionBuilder.triggerSmartContract(i, "", {
45
+ feeLimit: r,
39
46
  callValue: 0,
40
- input: i(e, "recover", x)
41
- }, [], await d.getEthereumAddressByChain(m));
42
- return t;
47
+ input: a(e, "recover", w)
48
+ }, [], await p.getEthereumAddressByChain(_));
49
+ return n;
43
50
  }
44
- let s = r.contract(e, o);
51
+ let s = t.contract(e, i);
45
52
  try {
46
- return await s.recover(...x).send({ feeLimit: n });
53
+ return await s.recover(...w).send({ feeLimit: r });
47
54
  } catch (e) {
48
- throw Error(h(e));
55
+ throw Error(v(e));
49
56
  }
50
57
  }
51
- let S = d.getContractWithSigner(m, o.ReceiveVaultFactoryContract);
58
+ let T = p.getContractWithSigner(_, s.ReceiveVaultFactoryContract);
52
59
  try {
53
- return _ ? S.recover.populateTransaction(...x) : (await S.recover(...x)).hash;
60
+ return b ? T.recover.populateTransaction(...w) : (await T.recover(...w)).hash;
54
61
  } catch (e) {
55
- throw Error(h(e));
62
+ throw Error(v(e));
56
63
  }
57
64
  };
58
65
  //#endregion
59
- export { g as hinkalReceiveVaultRecover };
66
+ export { y as hinkalReceiveVaultRecover };
@@ -1,6 +1,6 @@
1
1
  import { ReceiveVaultParams } from '../../types/receive-vault.types';
2
2
  import { TransactProof } from '../../types/transact.types';
3
3
  import { IHinkal } from './IHinkal';
4
- export declare const buildReceiveVaultSettleProof: (hinkal: IHinkal, chainId: number, vaultAddress: string, params: ReceiveVaultParams, encryptionKey: string, depositAmount: bigint) => Promise<TransactProof>;
4
+ export declare const buildReceiveVaultSettleProof: (hinkal: IHinkal, chainId: number, vaultAddress: string, params: ReceiveVaultParams, token: string, encryptionKey: string, depositAmount: bigint) => Promise<TransactProof>;
5
5
  /** The encrypted note the settlement deposits on behalf of whoever paid the address. */
6
6
  export declare const buildReceiveVaultEncryptedOutput: (params: ReceiveVaultParams, encryptionKey: string) => string;
@@ -1 +1 @@
1
- require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../constants/fees.constants.cjs`),r=require(`../../error-handling/error-codes.constants.cjs`),i=require(`../../functions/web3/etherFunctions.cjs`),a=require(`../crypto-keys/keys.cjs`),o=require(`../../functions/utils/solanaMint.utils.cjs`),s=require(`../../functions/utils/addresses.cjs`),c=require(`../../functions/utils/token-check.utils.cjs`),l=require(`../../functions/snarkjs/common.snarkjs.cjs`),u=require(`../../functions/pre-transaction/solana.cjs`),d=require(`../../functions/pre-transaction/constructAdminData.cjs`),f=require(`../../error-handling/retrySolanaError.cjs`),p=require(`../../API/admin-calls.cjs`),m=require(`../../functions/pre-transaction/solanaTransfer.utils.cjs`),h=require(`./hinkalProoflessDeposit.utils.cjs`);let g=require(`@solana/web3.js`),_=require(`@coral-xyz/anchor`);var v=(n,r)=>{let i=c.validateAndGetChainId([r]),a=r.erc20TokenAddress,{hinkalIdl:s,hinkalAddress:l,originalDeployer:d}=e.networkRegistry[i].contractData;if(!s)throw Error(`No IDL configured for Solana program on this network`);if(!d)throw Error(`missing original deployer`);let f=n.getSolanaProgram(s),p=n.getSolanaPublicKey(),{connection:m,wallet:h}=f.provider;if(!h)throw Error(`missing solana wallet`);let _=new g.PublicKey(d),v=new g.PublicKey(l),{mintPublicKey:y}=o.formatMintAddress(a),b=y.toString()===t.solanaNativeAddress;return{chainId:i,mintAddress:a,program:f,publicKey:p,connection:m,wallet:h,originalDeployer:_,mintPublicKey:y,mint:b?null:y,atasValue:b?null:void 0,storageAccount:u.getStorageAccountPublicKey(v,_),storageVault:u.getStorageVaultPublicKey(v,_),merkleAccount:u.getMerkleAccountPublicKey(v,_)}},y=async(e,t,n,r,i)=>{let a=n.map(e=>u.buildAnchorStealthAddressStructure(e)),o=h.buildProoflessEncryptedOutputs(n,r).map(e=>Buffer.from(e.slice(2),`hex`)),{current:s,next:c}=await u.resolveSolanaRootBuckets(e.program,e.merkleAccount,t.length);return e.program.methods.multiPaymentDeposit(t.map(e=>new _.BN(e.toString())),a,o,i).accounts({mint:e.mint,signer:e.publicKey,signerAta:e.atasValue,originalDeployer:e.originalDeployer,storageAccount:e.storageAccount,storageVault:e.storageVault,merkleAccount:e.merkleAccount,rootBucketCurrent:s,rootBucketNext:c??e.program.programId,storageVaultAta:e.atasValue}).instruction()},b=async(e,t,n,r)=>{for(let i=0;i<10;i+=1){let a=i===9;try{let{blockhash:i,lastValidBlockHeight:a}=await e.getLatestBlockhash(),o=new g.VersionedTransaction(new g.TransactionMessage({payerKey:n,recentBlockhash:i,instructions:r}).compileToV0Message()),s=await t.signTransaction(o),c=await e.sendTransaction(s);return await e.confirmTransaction({signature:c,blockhash:i,lastValidBlockHeight:a},`confirmed`),c}catch(e){if(f.shouldRetryForSolanaError(e)&&!a)continue;throw e}}return``},x=(e,t)=>{if(e.length===0)throw Error(`amounts must not be empty`);if(e.length!==t.length)throw Error(`amounts and stealthAddressStructures length mismatch`);if(e.some(e=>e<=0n))throw Error(`all amounts must be positive`);h.assertNoDuplicateStealthAddressStructures(t)},S=async(e,t,n,r,i,a=!1,o,s=!1)=>{x(n,r);let c=v(e,t),l=d.constructAdminData(o,c.chainId,Array(n.length).fill(c.mintAddress),n,await e.getEthereumAddress()),u=await y(c,n,r,i,a);if(s){let{blockhash:e}=await c.connection.getLatestBlockhash(),t=new g.Transaction().add(u);return t.recentBlockhash=e,t.feePayer=c.publicKey,Buffer.from(t.serialize({requireAllSignatures:!1})).toString(`base64`)}let f=await b(c.connection,c.wallet,c.publicKey,[u]);return await p.emitTxPublicData(l),f},C=async(e,t,n,r,i,a,o=!1,s,c=!1)=>{x(n,r);let l=v(e,t),u=await e.getRandomRelay(l.chainId,!1);if(!u)throw Error(`No relay available for chainId ${l.chainId}`);let{instructions:f}=await m.buildSolanaTransferInstructions(l.connection,l.publicKey,new g.PublicKey(u),t,a),h=await y(l,n,r,i,o),_=[...f,h];if(c){let{blockhash:e}=await l.connection.getLatestBlockhash(),t=new g.Transaction().add(..._);return t.recentBlockhash=e,t.feePayer=l.publicKey,Buffer.from(t.serialize({requireAllSignatures:!1})).toString(`base64`)}let S=d.constructAdminData(s,l.chainId,Array(n.length).fill(l.mintAddress),n,await e.getEthereumAddress()),C=await b(l.connection,l.wallet,l.publicKey,_);return await p.emitTxPublicData(S),C},w=async(e,t,n,r=!1)=>{let o=e.userKeys.getShieldedPrivateKey(),s=l.calcStealthAddressStructure(a.UserKeys.findCorrectRandomization(i.randomBigInt(31),o),o,e.userKeys.getSpendingKeyPair().pubSpendingBJJPoint),c=a.UserKeys.getEncryptionKeyPair(o).publicKey;return S(e,n,[t],[s],[c],!1,void 0,r)},T=async(e,t,i,a,o=!1,c=0n,l)=>{if(!s.isValidPrivateAddress(a))throw Error(r.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);let u=s.constructStealthAddressStructure(a),d=s.getEncryptionKeyFromRecipientInfo(a),f=c>0n?t*c/n.BPS_DENOMINATOR:0n;return C(e,i,[t],[u],[d],f,!1,l,o)};exports.hinkalSolanaDeposit=w,exports.hinkalSolanaDepositForOther=T,exports.submitSolanaProoflessDeposit=S;
1
+ require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../constants/fees.constants.cjs`),r=require(`../../error-handling/error-codes.constants.cjs`),i=require(`../../functions/web3/etherFunctions.cjs`),a=require(`../crypto-keys/keys.cjs`),o=require(`../../functions/utils/solanaMint.utils.cjs`),s=require(`../../functions/utils/addresses.cjs`),c=require(`../../functions/utils/token-check.utils.cjs`),l=require(`../../functions/snarkjs/common.snarkjs.cjs`),u=require(`../../functions/pre-transaction/solana.cjs`),d=require(`../../functions/pre-transaction/constructAdminData.cjs`),f=require(`../../functions/pre-transaction/sendV0Transaction.cjs`),p=require(`../../API/admin-calls.cjs`),m=require(`../../functions/pre-transaction/solanaTransfer.utils.cjs`),h=require(`./hinkalProoflessDeposit.utils.cjs`);let g=require(`@solana/web3.js`),_=require(`@coral-xyz/anchor`);var v=(n,r)=>{let i=c.validateAndGetChainId([r]),a=r.erc20TokenAddress,{hinkalIdl:s,hinkalAddress:l,originalDeployer:d}=e.networkRegistry[i].contractData;if(!s)throw Error(`No IDL configured for Solana program on this network`);if(!d)throw Error(`missing original deployer`);let f=n.getSolanaProgram(s),p=n.getSolanaPublicKey(),{connection:m,wallet:h}=f.provider;if(!h)throw Error(`missing solana wallet`);let _=new g.PublicKey(d),v=new g.PublicKey(l),{mintPublicKey:y}=o.formatMintAddress(a),b=y.toString()===t.solanaNativeAddress;return{chainId:i,mintAddress:a,program:f,publicKey:p,connection:m,wallet:h,originalDeployer:_,mintPublicKey:y,mint:b?null:y,atasValue:b?null:void 0,storageAccount:u.getStorageAccountPublicKey(v,_),storageVault:u.getStorageVaultPublicKey(v,_),merkleAccount:u.getMerkleAccountPublicKey(v,_)}},y=async(e,t,n,r,i)=>{let a=n.map(e=>u.buildAnchorStealthAddressStructure(e)),o=h.buildProoflessEncryptedOutputs(n,r).map(e=>Buffer.from(e.slice(2),`hex`)),{current:s,next:c}=await u.resolveSolanaRootBuckets(e.program,e.merkleAccount,t.length);return e.program.methods.multiPaymentDeposit(t.map(e=>new _.BN(e.toString())),a,o,i).accounts({mint:e.mint,signer:e.publicKey,signerAta:e.atasValue,originalDeployer:e.originalDeployer,storageAccount:e.storageAccount,storageVault:e.storageVault,merkleAccount:e.merkleAccount,rootBucketCurrent:s,rootBucketNext:c??e.program.programId,storageVaultAta:e.atasValue}).instruction()},b=(e,t)=>{if(e.length===0)throw Error(`amounts must not be empty`);if(e.length!==t.length)throw Error(`amounts and stealthAddressStructures length mismatch`);if(e.some(e=>e<=0n))throw Error(`all amounts must be positive`);h.assertNoDuplicateStealthAddressStructures(t)},x=async(e,t,n,r,i,a=!1,o,s=!1)=>{b(n,r);let c=v(e,t),l=d.constructAdminData(o,c.chainId,Array(n.length).fill(c.mintAddress),n,await e.getEthereumAddress()),u=await y(c,n,r,i,a);if(s){let{blockhash:e}=await c.connection.getLatestBlockhash(),t=new g.Transaction().add(u);return t.recentBlockhash=e,t.feePayer=c.publicKey,Buffer.from(t.serialize({requireAllSignatures:!1})).toString(`base64`)}let m=await f.sendInstructions(c.connection,c.wallet,c.publicKey,[u]);return p.emitTxPublicData(l),m},S=async(e,t,n,r,i,a,o=!1,s,c=!1)=>{b(n,r);let l=v(e,t),u=await e.getRandomRelay(l.chainId,!1);if(!u)throw Error(`No relay available for chainId ${l.chainId}`);let{instructions:h}=await m.buildSolanaTransferInstructions(l.connection,l.publicKey,new g.PublicKey(u),t,a),_=await y(l,n,r,i,o),x=[...h,_];if(c){let{blockhash:e}=await l.connection.getLatestBlockhash(),t=new g.Transaction().add(...x);return t.recentBlockhash=e,t.feePayer=l.publicKey,Buffer.from(t.serialize({requireAllSignatures:!1})).toString(`base64`)}let S=d.constructAdminData(s,l.chainId,Array(n.length).fill(l.mintAddress),n,await e.getEthereumAddress()),C=await f.sendInstructions(l.connection,l.wallet,l.publicKey,x);return await p.emitTxPublicData(S),C},C=async(e,t,n,r=!1)=>{let o=e.userKeys.getShieldedPrivateKey(),s=l.calcStealthAddressStructure(a.UserKeys.findCorrectRandomization(i.randomBigInt(31),o),o,e.userKeys.getSpendingKeyPair().pubSpendingBJJPoint),c=a.UserKeys.getEncryptionKeyPair(o).publicKey;return x(e,n,[t],[s],[c],!1,void 0,r)},w=async(e,t,i,a,o=!1,c=0n,l)=>{if(!s.isValidPrivateAddress(a))throw Error(r.transactionErrorCodes.RECIPIENT_FORMAT_INCORRECT);let u=s.constructStealthAddressStructure(a),d=s.getEncryptionKeyFromRecipientInfo(a),f=c>0n?t*c/n.BPS_DENOMINATOR:0n;return S(e,i,[t],[u],[d],f,!1,l,o)};exports.hinkalSolanaDeposit=C,exports.hinkalSolanaDepositForOther=w,exports.submitSolanaProoflessDeposit=x;
@@ -10,14 +10,14 @@ import { validateAndGetChainId as u } from "../../functions/utils/token-check.ut
10
10
  import { calcStealthAddressStructure as d } from "../../functions/snarkjs/common.snarkjs.mjs";
11
11
  import { buildAnchorStealthAddressStructure as f, getMerkleAccountPublicKey as p, getStorageAccountPublicKey as m, getStorageVaultPublicKey as h, resolveSolanaRootBuckets as g } from "../../functions/pre-transaction/solana.mjs";
12
12
  import { constructAdminData as _ } from "../../functions/pre-transaction/constructAdminData.mjs";
13
- import { shouldRetryForSolanaError as v } from "../../error-handling/retrySolanaError.mjs";
13
+ import { sendInstructions as v } from "../../functions/pre-transaction/sendV0Transaction.mjs";
14
14
  import { emitTxPublicData as y } from "../../API/admin-calls.mjs";
15
15
  import { buildSolanaTransferInstructions as b } from "../../functions/pre-transaction/solanaTransfer.utils.mjs";
16
16
  import { assertNoDuplicateStealthAddressStructures as x, buildProoflessEncryptedOutputs as S } from "./hinkalProoflessDeposit.utils.mjs";
17
- import { PublicKey as C, Transaction as w, TransactionMessage as T, VersionedTransaction as E } from "@solana/web3.js";
18
- import { BN as D } from "@coral-xyz/anchor";
17
+ import { PublicKey as C, Transaction as w } from "@solana/web3.js";
18
+ import { BN as T } from "@coral-xyz/anchor";
19
19
  //#region libs/shared/common/src/data-structures/Hinkal/hinkalSolanaDeposit.ts
20
- var O = (n, r) => {
20
+ var E = (n, r) => {
21
21
  let i = u([r]), a = r.erc20TokenAddress, { hinkalIdl: s, hinkalAddress: c, originalDeployer: l } = e[i].contractData;
22
22
  if (!s) throw Error("No IDL configured for Solana program on this network");
23
23
  if (!l) throw Error("missing original deployer");
@@ -39,9 +39,9 @@ var O = (n, r) => {
39
39
  storageVault: h(y, v),
40
40
  merkleAccount: p(y, v)
41
41
  };
42
- }, k = async (e, t, n, r, i) => {
42
+ }, D = async (e, t, n, r, i) => {
43
43
  let a = n.map((e) => f(e)), o = S(n, r).map((e) => Buffer.from(e.slice(2), "hex")), { current: s, next: c } = await g(e.program, e.merkleAccount, t.length);
44
- return e.program.methods.multiPaymentDeposit(t.map((e) => new D(e.toString())), a, o, i).accounts({
44
+ return e.program.methods.multiPaymentDeposit(t.map((e) => new T(e.toString())), a, o, i).accounts({
45
45
  mint: e.mint,
46
46
  signer: e.publicKey,
47
47
  signerAta: e.atasValue,
@@ -53,58 +53,38 @@ var O = (n, r) => {
53
53
  rootBucketNext: c ?? e.program.programId,
54
54
  storageVaultAta: e.atasValue
55
55
  }).instruction();
56
- }, A = async (e, t, n, r) => {
57
- for (let i = 0; i < 10; i += 1) {
58
- let a = i === 9;
59
- try {
60
- let { blockhash: i, lastValidBlockHeight: a } = await e.getLatestBlockhash(), o = new E(new T({
61
- payerKey: n,
62
- recentBlockhash: i,
63
- instructions: r
64
- }).compileToV0Message()), s = await t.signTransaction(o), c = await e.sendTransaction(s);
65
- return await e.confirmTransaction({
66
- signature: c,
67
- blockhash: i,
68
- lastValidBlockHeight: a
69
- }, "confirmed"), c;
70
- } catch (e) {
71
- if (v(e) && !a) continue;
72
- throw e;
73
- }
74
- }
75
- return "";
76
- }, j = (e, t) => {
56
+ }, O = (e, t) => {
77
57
  if (e.length === 0) throw Error("amounts must not be empty");
78
58
  if (e.length !== t.length) throw Error("amounts and stealthAddressStructures length mismatch");
79
59
  if (e.some((e) => e <= 0n)) throw Error("all amounts must be positive");
80
60
  x(t);
81
- }, M = async (e, t, n, r, i, a = !1, o, s = !1) => {
82
- j(n, r);
83
- let c = O(e, t), l = _(o, c.chainId, Array(n.length).fill(c.mintAddress), n, await e.getEthereumAddress()), u = await k(c, n, r, i, a);
61
+ }, k = async (e, t, n, r, i, a = !1, o, s = !1) => {
62
+ O(n, r);
63
+ let c = E(e, t), l = _(o, c.chainId, Array(n.length).fill(c.mintAddress), n, await e.getEthereumAddress()), u = await D(c, n, r, i, a);
84
64
  if (s) {
85
65
  let { blockhash: e } = await c.connection.getLatestBlockhash(), t = new w().add(u);
86
66
  return t.recentBlockhash = e, t.feePayer = c.publicKey, Buffer.from(t.serialize({ requireAllSignatures: !1 })).toString("base64");
87
67
  }
88
- let d = await A(c.connection, c.wallet, c.publicKey, [u]);
89
- return await y(l), d;
90
- }, N = async (e, t, n, r, i, a, o = !1, s, c = !1) => {
91
- j(n, r);
92
- let l = O(e, t), u = await e.getRandomRelay(l.chainId, !1);
68
+ let d = await v(c.connection, c.wallet, c.publicKey, [u]);
69
+ return y(l), d;
70
+ }, A = async (e, t, n, r, i, a, o = !1, s, c = !1) => {
71
+ O(n, r);
72
+ let l = E(e, t), u = await e.getRandomRelay(l.chainId, !1);
93
73
  if (!u) throw Error(`No relay available for chainId ${l.chainId}`);
94
- let { instructions: d } = await b(l.connection, l.publicKey, new C(u), t, a), f = await k(l, n, r, i, o), p = [...d, f];
74
+ let { instructions: d } = await b(l.connection, l.publicKey, new C(u), t, a), f = await D(l, n, r, i, o), p = [...d, f];
95
75
  if (c) {
96
76
  let { blockhash: e } = await l.connection.getLatestBlockhash(), t = new w().add(...p);
97
77
  return t.recentBlockhash = e, t.feePayer = l.publicKey, Buffer.from(t.serialize({ requireAllSignatures: !1 })).toString("base64");
98
78
  }
99
- let m = _(s, l.chainId, Array(n.length).fill(l.mintAddress), n, await e.getEthereumAddress()), h = await A(l.connection, l.wallet, l.publicKey, p);
79
+ let m = _(s, l.chainId, Array(n.length).fill(l.mintAddress), n, await e.getEthereumAddress()), h = await v(l.connection, l.wallet, l.publicKey, p);
100
80
  return await y(m), h;
101
- }, P = async (e, t, n, r = !1) => {
81
+ }, j = async (e, t, n, r = !1) => {
102
82
  let o = e.userKeys.getShieldedPrivateKey(), s = d(a.findCorrectRandomization(i(31), o), o, e.userKeys.getSpendingKeyPair().pubSpendingBJJPoint), c = a.getEncryptionKeyPair(o).publicKey;
103
- return M(e, n, [t], [s], [c], !1, void 0, r);
104
- }, F = async (e, t, i, a, o = !1, u = 0n, d) => {
83
+ return k(e, n, [t], [s], [c], !1, void 0, r);
84
+ }, M = async (e, t, i, a, o = !1, u = 0n, d) => {
105
85
  if (!l(a)) throw Error(r.RECIPIENT_FORMAT_INCORRECT);
106
86
  let f = s(a), p = c(a), m = u > 0n ? t * u / n : 0n;
107
- return N(e, i, [t], [f], [p], m, !1, d, o);
87
+ return A(e, i, [t], [f], [p], m, !1, d, o);
108
88
  };
109
89
  //#endregion
110
- export { P as hinkalSolanaDeposit, F as hinkalSolanaDepositForOther, M as submitSolanaProoflessDeposit };
90
+ export { j as hinkalSolanaDeposit, M as hinkalSolanaDepositForOther, k as submitSolanaProoflessDeposit };
@@ -1 +1 @@
1
- require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../functions/web3/etherFunctions.cjs`),i=require(`../crypto-keys/keys.cjs`),a=require(`../../functions/utils/time.utils.cjs`),o=require(`../utxo/Utxo.cjs`),s=require(`../../functions/utils/solanaMint.utils.cjs`),c=require(`../../functions/utils/addresses.cjs`),l=require(`../../types/external-action.types.cjs`),u=require(`../../types/solana-transact.types.cjs`),d=require(`../../functions/utils/token-check.utils.cjs`),f=require(`../../functions/snarkjs/common.snarkjs.cjs`),p=require(`../../functions/pre-transaction/solana.cjs`),m=require(`../../functions/pre-transaction/constructAdminData.cjs`),h=require(`../../functions/pre-transaction/getFeeStructure.cjs`),g=require(`../../functions/utils/fees.utils.cjs`),_=require(`../../functions/pre-transaction/speculativeUtxo.cjs`);require(`../../functions/pre-transaction/index.cjs`);const v=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`);require(`../../functions/web3/index.cjs`);const y=require(`./hinkalProoflessDeposit.utils.cjs`),b=require(`./hinkalSolanaTransact.cjs`);let x=require(`ethers`),S=require(`@solana/web3.js`),C=require(`@coral-xyz/anchor`);var w=(n,a,o,c)=>{let{hinkalIdl:l,hinkalAddress:u,originalDeployer:d}=e.networkRegistry[a].contractData;if(!l)throw Error(`No IDL configured for Solana program on this network`);if(!d)throw Error(`missing original deployer`);let m=n.userKeys.getShieldedPrivateKey(),h=n.getSolanaProgram(l),g=n.getSolanaPublicKey(),_=new S.PublicKey(d),v=new S.PublicKey(u),{mintPublicKey:y}=s.formatMintAddress(o.erc20TokenAddress),b=y.toString(),x=p.getStorageAccountPublicKey(v,_),C=p.getStorageVaultPublicKey(v,_),w=p.getMerkleAccountPublicKey(v,_),T=c.map(()=>f.calcStealthAddressStructure(i.UserKeys.findCorrectRandomization(r.randomBigInt(31),m),m,n.userKeys.getSpendingKeyPair().pubSpendingBJJPoint)),E=T.map(e=>p.buildAnchorStealthAddressStructure(e)),D=i.UserKeys.getEncryptionKeyPair(m).publicKey,O=b===t.solanaNativeAddress;return{program:h,publicKey:g,originalDeployer:_,mint:O?null:y,atasValue:O?null:void 0,storageAccount:x,storageVault:C,merkleAccount:w,amounts:c,mintAddressString:b,stealthAddressStructures:T,anchorStealthStructures:E,ownEncryptionKey:D}},T=async(e,t)=>{let n=y.buildProoflessEncryptedOutputs(e.stealthAddressStructures,e.amounts.map(()=>e.ownEncryptionKey)).map(e=>Buffer.from(e.slice(2),`hex`)),{current:r,next:i}=await p.resolveSolanaRootBuckets(e.program,e.merkleAccount,e.amounts.length);return e.program.methods.multiPaymentDepositAt(e.amounts.map(e=>new C.BN(e.toString())),e.anchorStealthStructures,n,!0,t?new C.BN(t):null).accounts({mint:e.mint,signer:e.publicKey,signerAta:e.atasValue,originalDeployer:e.originalDeployer,storageAccount:e.storageAccount,storageVault:e.storageVault,merkleAccount:e.merkleAccount,rootBucketCurrent:r,rootBucketNext:i??e.program.programId,storageVaultAta:e.atasValue})},E=async(r,i,c,l,d,f,p,h,v,y)=>{let x=c.erc20TokenAddress;if(l.length===0)throw Error(`userDepositedUtxos must not be empty`);let{originalDeployer:S}=e.networkRegistry[i].contractData;if(!S)throw Error(`missing data`);let C=await r.getRandomRelay(i,!0);if(!C)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let w=a.getCurrentTimeInSeconds().toString(),T=r.generateProofRemotely?5:1,E=[];for(let e=0;e<l.length;e+=T){let n=l.slice(e,e+T),a=await Promise.all(n.map(async({recipientAddress:n,utxo:a},l)=>{let S=e+l,T={recipient:n,mint:x===`11111111111111111111111111111111`?void 0:x},E=await g.calculateModifiedFeeStructure(i,c,f[S],d),D=m.constructAdminData(p,i,[x],[f[S]],await r.getEthereumAddress()),{compressedAddress:O}=s.formatMintAddress(t.solanaNativeAddress),k=new o.Utxo({amount:0n,mintAddress:x,erc20TokenAddress:O,nullifyingKey:r.userKeys.getShieldedPrivateKey(),timeStamp:w,spendingPublicKey:r.userKeys.getSpendingKeyPair().pubSpendingBJJPoint}),{args:A,commitmentValidationData:j}=await b.hinkalSolanaTransact(r,{chainId:i,mintAddresses:[x],amountChanges:[-a.amount],relayAddress:C,recipient:n,signer:C,functionName:`transact`,accounts:T,relayerFee:E.flatFee,variableRate:E.variableRate,inputUtxos:[[a,k]],useBlockedUtxos:!0,speculative:y&&{pendingLeaves:y,inputUtxos:[[_.toSpeculativeUtxo(a)]]},submit:{mode:u.SolanaSubmitMode.ProofOnly}});return{relayAddress:C,functionName:`transact`,chainId:i,recipientAmount:f[S].toString(),args:A,accounts:T,adminData:D,commitmentValidationData:j,displayRecipient:h?.[S],destinationChainId:v?.chainId,destinationTokenAddress:v?.tokenAddress,destinationTokenAmount:v?.tokenAmounts?.[S]}}));E.push(...a)}return E},D=async(e,t,n,r,i,u,f,p,m,_,y)=>{let b=d.validateAndGetChainId([t]),S=t.erc20TokenAddress,C=c.hashEthereumAddress(await e.getEthereumAddressByChain(b)),D=m?c.hashString(m):void 0,O=u??await h.getFeeStructure(b,S,[S],l.ExternalActionId.Transact,[],25n,{mintTo:S,recipient:r[0],nullifierCount:1}),k=n.map(e=>e+g.calculateTotalFee(e,O)),A=w(e,b,t,k),j=a.getCurrentTimeInSeconds().toString(),{compressedAddress:M}=s.formatMintAddress(S),N=A.stealthAddressStructures.map((t,n)=>({recipientAddress:r[n],utxo:new o.Utxo({amount:k[n],timeStamp:j,nullifyingKey:e.userKeys.getShieldedPrivateKey(),mintAddress:S,erc20TokenAddress:M,stealthAddress:x.ethers.toBeHex(t.stealthAddress),H0:[t.H0x,t.H0y]})})),{connection:P,wallet:F}=A.program.provider,I=async()=>{let e=await(await T(A,j)).transaction();return e.recentBlockhash=(await P.getLatestBlockhash()).blockhash,e.feePayer=A.publicKey,P.sendRawTransaction((await F.signTransaction(e)).serialize())},L=N.map(({utxo:e})=>BigInt(e.getCommitment()).toString()),[R,z]=await Promise.all([I(),E(e,b,t,N,O,n,p,_,y,L)]);return{depositTxHash:R,scheduleId:await v.solanaTransactCallRelayerBatch(b,z,C,i,f,D,R)}};exports.hinkalSolanaDepositAndWithdraw=D;
1
+ require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../error-handling/error-codes.constants.cjs`),r=require(`../../functions/web3/etherFunctions.cjs`),i=require(`../crypto-keys/keys.cjs`),a=require(`../../functions/utils/time.utils.cjs`),o=require(`../utxo/Utxo.cjs`),s=require(`../../functions/utils/solanaMint.utils.cjs`),c=require(`../../functions/utils/addresses.cjs`),l=require(`../../types/external-action.types.cjs`),u=require(`../../types/solana-transact.types.cjs`),d=require(`../../functions/utils/token-check.utils.cjs`),f=require(`../../functions/utils/erc20tokenFunctions.cjs`),p=require(`../../functions/snarkjs/common.snarkjs.cjs`),m=require(`../../functions/pre-transaction/solana.cjs`),h=require(`../../functions/pre-transaction/constructAdminData.cjs`),g=require(`../../functions/pre-transaction/getFeeStructure.cjs`),_=require(`../../functions/utils/fees.utils.cjs`),v=require(`../../functions/pre-transaction/speculativeUtxo.cjs`);require(`../../functions/pre-transaction/index.cjs`);const y=require(`../../functions/web3/functionCalls/transactCallRelayer.cjs`),b=require(`../../functions/utils/admin-dimensions.cjs`);require(`../../functions/web3/index.cjs`);const x=require(`./hinkalProoflessDeposit.utils.cjs`),S=require(`./hinkalSolanaTransact.cjs`);let C=require(`ethers`),w=require(`@solana/web3.js`),T=require(`@coral-xyz/anchor`);var E=(n,a,o,c)=>{let{hinkalIdl:l,hinkalAddress:u,originalDeployer:d}=e.networkRegistry[a].contractData;if(!l)throw Error(`No IDL configured for Solana program on this network`);if(!d)throw Error(`missing original deployer`);let f=n.userKeys.getShieldedPrivateKey(),h=n.getSolanaProgram(l),g=n.getSolanaPublicKey(),_=new w.PublicKey(d),v=new w.PublicKey(u),{mintPublicKey:y}=s.formatMintAddress(o.erc20TokenAddress),b=y.toString(),x=m.getStorageAccountPublicKey(v,_),S=m.getStorageVaultPublicKey(v,_),C=m.getMerkleAccountPublicKey(v,_),T=c.map(()=>p.calcStealthAddressStructure(i.UserKeys.findCorrectRandomization(r.randomBigInt(31),f),f,n.userKeys.getSpendingKeyPair().pubSpendingBJJPoint)),E=T.map(e=>m.buildAnchorStealthAddressStructure(e)),D=i.UserKeys.getEncryptionKeyPair(f).publicKey,O=b===t.solanaNativeAddress;return{program:h,publicKey:g,originalDeployer:_,mint:O?null:y,atasValue:O?null:void 0,storageAccount:x,storageVault:S,merkleAccount:C,amounts:c,mintAddressString:b,stealthAddressStructures:T,anchorStealthStructures:E,ownEncryptionKey:D}},D=async(e,t)=>{let n=x.buildProoflessEncryptedOutputs(e.stealthAddressStructures,e.amounts.map(()=>e.ownEncryptionKey)).map(e=>Buffer.from(e.slice(2),`hex`)),{current:r,next:i}=await m.resolveSolanaRootBuckets(e.program,e.merkleAccount,e.amounts.length);return e.program.methods.multiPaymentDepositAt(e.amounts.map(e=>new T.BN(e.toString())),e.anchorStealthStructures,n,!0,t?new T.BN(t):null).accounts({mint:e.mint,signer:e.publicKey,signerAta:e.atasValue,originalDeployer:e.originalDeployer,storageAccount:e.storageAccount,storageVault:e.storageVault,merkleAccount:e.merkleAccount,rootBucketCurrent:r,rootBucketNext:i??e.program.programId,storageVaultAta:e.atasValue})},O=async(r,i,c,l,d,p,m,g,y,x)=>{let C=c.erc20TokenAddress;if(l.length===0)throw Error(`userDepositedUtxos must not be empty`);let{originalDeployer:w}=e.networkRegistry[i].contractData;if(!w)throw Error(`missing data`);let T=await r.getRandomRelay(i,!0);if(!T)throw Error(n.transactionErrorCodes.RELAYER_NOT_AVAILABLE);let E=a.getCurrentTimeInSeconds().toString(),D=r.generateProofRemotely?5:1,O=[];for(let e=0;e<l.length;e+=D){let n=l.slice(e,e+D),a=await Promise.all(n.map(async({recipientAddress:n,utxo:a},l)=>{let w=e+l,D={recipient:n,mint:C===`11111111111111111111111111111111`?void 0:C},O=await _.calculateModifiedFeeStructure(i,c,p[w],d),k=y?.tokenAddress?await f.getErc20TokenFromAPI(y.chainId??i,y.tokenAddress):void 0,A=b.resolveSwapPairTokens(m,[c],k),j=h.constructAdminData(m,i,[C],[p[w]],await r.getEthereumAddress(),A),{compressedAddress:M}=s.formatMintAddress(t.solanaNativeAddress),N=new o.Utxo({amount:0n,mintAddress:C,erc20TokenAddress:M,nullifyingKey:r.userKeys.getShieldedPrivateKey(),timeStamp:E,spendingPublicKey:r.userKeys.getSpendingKeyPair().pubSpendingBJJPoint}),{args:P,commitmentValidationData:F}=await S.hinkalSolanaTransact(r,{chainId:i,mintAddresses:[C],amountChanges:[-a.amount],relayAddress:T,recipient:n,signer:T,functionName:`transact`,accounts:D,relayerFee:O.flatFee,variableRate:O.variableRate,inputUtxos:[[a,N]],useBlockedUtxos:!0,speculative:x&&{pendingLeaves:x,inputUtxos:[[v.toSpeculativeUtxo(a)]]},submit:{mode:u.SolanaSubmitMode.ProofOnly}});return{relayAddress:T,functionName:`transact`,chainId:i,recipientAmount:p[w].toString(),args:P,accounts:D,adminData:j,commitmentValidationData:F,displayRecipient:g?.[w],destinationChainId:y?.chainId,destinationTokenAddress:y?.tokenAddress,destinationTokenAmount:y?.tokenAmounts?.[w]}}));O.push(...a)}return O},k=async(e,t,n,r,i,u,f,p,m,h,v)=>{let b=d.validateAndGetChainId([t]),x=t.erc20TokenAddress,S=c.hashEthereumAddress(await e.getEthereumAddressByChain(b)),w=m?c.hashString(m):void 0,T=u??await g.getFeeStructure(b,x,[x],l.ExternalActionId.Transact,[],25n,{mintTo:x,recipient:r[0],nullifierCount:1}),k=n.map(e=>e+_.calculateTotalFee(e,T)),A=E(e,b,t,k),j=a.getCurrentTimeInSeconds().toString(),{compressedAddress:M}=s.formatMintAddress(x),N=A.stealthAddressStructures.map((t,n)=>({recipientAddress:r[n],utxo:new o.Utxo({amount:k[n],timeStamp:j,nullifyingKey:e.userKeys.getShieldedPrivateKey(),mintAddress:x,erc20TokenAddress:M,stealthAddress:C.ethers.toBeHex(t.stealthAddress),H0:[t.H0x,t.H0y]})})),{connection:P,wallet:F}=A.program.provider,I=async()=>{let e=await(await D(A,j)).transaction();return e.recentBlockhash=(await P.getLatestBlockhash()).blockhash,e.feePayer=A.publicKey,P.sendRawTransaction((await F.signTransaction(e)).serialize())},L=N.map(({utxo:e})=>BigInt(e.getCommitment()).toString()),[R,z]=await Promise.all([I(),O(e,b,t,N,T,n,p,h,v,L)]);return{depositTxHash:R,scheduleId:await y.solanaTransactCallRelayerBatch(b,z,S,i,f,w,R)}};exports.hinkalSolanaDepositAndWithdraw=k;
@@ -10,28 +10,30 @@ import { hashEthereumAddress as c, hashString as l } from "../../functions/utils
10
10
  import { ExternalActionId as u } from "../../types/external-action.types.mjs";
11
11
  import { SolanaSubmitMode as d } from "../../types/solana-transact.types.mjs";
12
12
  import { validateAndGetChainId as f } from "../../functions/utils/token-check.utils.mjs";
13
- import { calcStealthAddressStructure as p } from "../../functions/snarkjs/common.snarkjs.mjs";
14
- import { buildAnchorStealthAddressStructure as m, getMerkleAccountPublicKey as h, getStorageAccountPublicKey as g, getStorageVaultPublicKey as _, resolveSolanaRootBuckets as v } from "../../functions/pre-transaction/solana.mjs";
15
- import { constructAdminData as y } from "../../functions/pre-transaction/constructAdminData.mjs";
16
- import { getFeeStructure as b } from "../../functions/pre-transaction/getFeeStructure.mjs";
17
- import { calculateModifiedFeeStructure as x, calculateTotalFee as S } from "../../functions/utils/fees.utils.mjs";
18
- import { toSpeculativeUtxo as C } from "../../functions/pre-transaction/speculativeUtxo.mjs";
13
+ import { getErc20TokenFromAPI as p } from "../../functions/utils/erc20tokenFunctions.mjs";
14
+ import { calcStealthAddressStructure as m } from "../../functions/snarkjs/common.snarkjs.mjs";
15
+ import { buildAnchorStealthAddressStructure as h, getMerkleAccountPublicKey as g, getStorageAccountPublicKey as _, getStorageVaultPublicKey as v, resolveSolanaRootBuckets as y } from "../../functions/pre-transaction/solana.mjs";
16
+ import { constructAdminData as b } from "../../functions/pre-transaction/constructAdminData.mjs";
17
+ import { getFeeStructure as x } from "../../functions/pre-transaction/getFeeStructure.mjs";
18
+ import { calculateModifiedFeeStructure as S, calculateTotalFee as C } from "../../functions/utils/fees.utils.mjs";
19
+ import { toSpeculativeUtxo as w } from "../../functions/pre-transaction/speculativeUtxo.mjs";
19
20
  import "../../functions/pre-transaction/index.mjs";
20
- import { solanaTransactCallRelayerBatch as w } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
21
+ import { solanaTransactCallRelayerBatch as T } from "../../functions/web3/functionCalls/transactCallRelayer.mjs";
22
+ import { resolveSwapPairTokens as E } from "../../functions/utils/admin-dimensions.mjs";
21
23
  import "../../functions/web3/index.mjs";
22
- import { buildProoflessEncryptedOutputs as T } from "./hinkalProoflessDeposit.utils.mjs";
23
- import { hinkalSolanaTransact as E } from "./hinkalSolanaTransact.mjs";
24
- import { ethers as D } from "ethers";
25
- import { PublicKey as O } from "@solana/web3.js";
26
- import { BN as k } from "@coral-xyz/anchor";
24
+ import { buildProoflessEncryptedOutputs as D } from "./hinkalProoflessDeposit.utils.mjs";
25
+ import { hinkalSolanaTransact as O } from "./hinkalSolanaTransact.mjs";
26
+ import { ethers as k } from "ethers";
27
+ import { PublicKey as A } from "@solana/web3.js";
28
+ import { BN as j } from "@coral-xyz/anchor";
27
29
  //#region libs/shared/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.ts
28
- var A = (n, a, o, c) => {
30
+ var M = (n, a, o, c) => {
29
31
  let { hinkalIdl: l, hinkalAddress: u, originalDeployer: d } = e[a].contractData;
30
32
  if (!l) throw Error("No IDL configured for Solana program on this network");
31
33
  if (!d) throw Error("missing original deployer");
32
- let f = n.userKeys.getShieldedPrivateKey(), v = n.getSolanaProgram(l), y = n.getSolanaPublicKey(), b = new O(d), x = new O(u), { mintPublicKey: S } = s(o.erc20TokenAddress), C = S.toString(), w = g(x, b), T = _(x, b), E = h(x, b), D = c.map(() => p(i.findCorrectRandomization(r(31), f), f, n.userKeys.getSpendingKeyPair().pubSpendingBJJPoint)), k = D.map((e) => m(e)), A = i.getEncryptionKeyPair(f).publicKey, j = C === t;
34
+ let f = n.userKeys.getShieldedPrivateKey(), p = n.getSolanaProgram(l), y = n.getSolanaPublicKey(), b = new A(d), x = new A(u), { mintPublicKey: S } = s(o.erc20TokenAddress), C = S.toString(), w = _(x, b), T = v(x, b), E = g(x, b), D = c.map(() => m(i.findCorrectRandomization(r(31), f), f, n.userKeys.getSpendingKeyPair().pubSpendingBJJPoint)), O = D.map((e) => h(e)), k = i.getEncryptionKeyPair(f).publicKey, j = C === t;
33
35
  return {
34
- program: v,
36
+ program: p,
35
37
  publicKey: y,
36
38
  originalDeployer: b,
37
39
  mint: j ? null : S,
@@ -42,12 +44,12 @@ var A = (n, a, o, c) => {
42
44
  amounts: c,
43
45
  mintAddressString: C,
44
46
  stealthAddressStructures: D,
45
- anchorStealthStructures: k,
46
- ownEncryptionKey: A
47
+ anchorStealthStructures: O,
48
+ ownEncryptionKey: k
47
49
  };
48
- }, j = async (e, t) => {
49
- let n = T(e.stealthAddressStructures, e.amounts.map(() => e.ownEncryptionKey)).map((e) => Buffer.from(e.slice(2), "hex")), { current: r, next: i } = await v(e.program, e.merkleAccount, e.amounts.length);
50
- return e.program.methods.multiPaymentDepositAt(e.amounts.map((e) => new k(e.toString())), e.anchorStealthStructures, n, !0, t ? new k(t) : null).accounts({
50
+ }, N = async (e, t) => {
51
+ let n = D(e.stealthAddressStructures, e.amounts.map(() => e.ownEncryptionKey)).map((e) => Buffer.from(e.slice(2), "hex")), { current: r, next: i } = await y(e.program, e.merkleAccount, e.amounts.length);
52
+ return e.program.methods.multiPaymentDepositAt(e.amounts.map((e) => new j(e.toString())), e.anchorStealthStructures, n, !0, t ? new j(t) : null).accounts({
51
53
  mint: e.mint,
52
54
  signer: e.publicKey,
53
55
  signerAta: e.atasValue,
@@ -59,87 +61,87 @@ var A = (n, a, o, c) => {
59
61
  rootBucketNext: i ?? e.program.programId,
60
62
  storageVaultAta: e.atasValue
61
63
  });
62
- }, M = async (r, i, c, l, u, f, p, m, h, g) => {
63
- let _ = c.erc20TokenAddress;
64
+ }, P = async (r, i, c, l, u, f, m, h, g, _) => {
65
+ let v = c.erc20TokenAddress;
64
66
  if (l.length === 0) throw Error("userDepositedUtxos must not be empty");
65
- let { originalDeployer: v } = e[i].contractData;
66
- if (!v) throw Error("missing data");
67
- let b = await r.getRandomRelay(i, !0);
68
- if (!b) throw Error(n.RELAYER_NOT_AVAILABLE);
69
- let S = a().toString(), w = r.generateProofRemotely ? 5 : 1, T = [];
70
- for (let e = 0; e < l.length; e += w) {
71
- let n = l.slice(e, e + w), a = await Promise.all(n.map(async ({ recipientAddress: n, utxo: a }, l) => {
72
- let v = e + l, w = {
67
+ let { originalDeployer: y } = e[i].contractData;
68
+ if (!y) throw Error("missing data");
69
+ let x = await r.getRandomRelay(i, !0);
70
+ if (!x) throw Error(n.RELAYER_NOT_AVAILABLE);
71
+ let C = a().toString(), T = r.generateProofRemotely ? 5 : 1, D = [];
72
+ for (let e = 0; e < l.length; e += T) {
73
+ let n = l.slice(e, e + T), a = await Promise.all(n.map(async ({ recipientAddress: n, utxo: a }, l) => {
74
+ let y = e + l, T = {
73
75
  recipient: n,
74
- mint: _ === "11111111111111111111111111111111" ? void 0 : _
75
- }, T = await x(i, c, f[v], u), D = y(p, i, [_], [f[v]], await r.getEthereumAddress()), { compressedAddress: O } = s(t), k = new o({
76
+ mint: v === "11111111111111111111111111111111" ? void 0 : v
77
+ }, D = await S(i, c, f[y], u), k = g?.tokenAddress ? await p(g.chainId ?? i, g.tokenAddress) : void 0, A = E(m, [c], k), j = b(m, i, [v], [f[y]], await r.getEthereumAddress(), A), { compressedAddress: M } = s(t), N = new o({
76
78
  amount: 0n,
77
- mintAddress: _,
78
- erc20TokenAddress: O,
79
+ mintAddress: v,
80
+ erc20TokenAddress: M,
79
81
  nullifyingKey: r.userKeys.getShieldedPrivateKey(),
80
- timeStamp: S,
82
+ timeStamp: C,
81
83
  spendingPublicKey: r.userKeys.getSpendingKeyPair().pubSpendingBJJPoint
82
- }), { args: A, commitmentValidationData: j } = await E(r, {
84
+ }), { args: P, commitmentValidationData: F } = await O(r, {
83
85
  chainId: i,
84
- mintAddresses: [_],
86
+ mintAddresses: [v],
85
87
  amountChanges: [-a.amount],
86
- relayAddress: b,
88
+ relayAddress: x,
87
89
  recipient: n,
88
- signer: b,
90
+ signer: x,
89
91
  functionName: "transact",
90
- accounts: w,
91
- relayerFee: T.flatFee,
92
- variableRate: T.variableRate,
93
- inputUtxos: [[a, k]],
92
+ accounts: T,
93
+ relayerFee: D.flatFee,
94
+ variableRate: D.variableRate,
95
+ inputUtxos: [[a, N]],
94
96
  useBlockedUtxos: !0,
95
- speculative: g && {
96
- pendingLeaves: g,
97
- inputUtxos: [[C(a)]]
97
+ speculative: _ && {
98
+ pendingLeaves: _,
99
+ inputUtxos: [[w(a)]]
98
100
  },
99
101
  submit: { mode: d.ProofOnly }
100
102
  });
101
103
  return {
102
- relayAddress: b,
104
+ relayAddress: x,
103
105
  functionName: "transact",
104
106
  chainId: i,
105
- recipientAmount: f[v].toString(),
106
- args: A,
107
- accounts: w,
108
- adminData: D,
109
- commitmentValidationData: j,
110
- displayRecipient: m?.[v],
111
- destinationChainId: h?.chainId,
112
- destinationTokenAddress: h?.tokenAddress,
113
- destinationTokenAmount: h?.tokenAmounts?.[v]
107
+ recipientAmount: f[y].toString(),
108
+ args: P,
109
+ accounts: T,
110
+ adminData: j,
111
+ commitmentValidationData: F,
112
+ displayRecipient: h?.[y],
113
+ destinationChainId: g?.chainId,
114
+ destinationTokenAddress: g?.tokenAddress,
115
+ destinationTokenAmount: g?.tokenAmounts?.[y]
114
116
  };
115
117
  }));
116
- T.push(...a);
118
+ D.push(...a);
117
119
  }
118
- return T;
119
- }, N = async (e, t, n, r, i, d, p, m, h, g, _) => {
120
- let v = f([t]), y = t.erc20TokenAddress, x = c(await e.getEthereumAddressByChain(v)), C = h ? l(h) : void 0, T = d ?? await b(v, y, [y], u.Transact, [], 25n, {
120
+ return D;
121
+ }, F = async (e, t, n, r, i, d, p, m, h, g, _) => {
122
+ let v = f([t]), y = t.erc20TokenAddress, b = c(await e.getEthereumAddressByChain(v)), S = h ? l(h) : void 0, w = d ?? await x(v, y, [y], u.Transact, [], 25n, {
121
123
  mintTo: y,
122
124
  recipient: r[0],
123
125
  nullifierCount: 1
124
- }), E = n.map((e) => e + S(e, T)), O = A(e, v, t, E), k = a().toString(), { compressedAddress: N } = s(y), P = O.stealthAddressStructures.map((t, n) => ({
126
+ }), E = n.map((e) => e + C(e, w)), D = M(e, v, t, E), O = a().toString(), { compressedAddress: A } = s(y), j = D.stealthAddressStructures.map((t, n) => ({
125
127
  recipientAddress: r[n],
126
128
  utxo: new o({
127
129
  amount: E[n],
128
- timeStamp: k,
130
+ timeStamp: O,
129
131
  nullifyingKey: e.userKeys.getShieldedPrivateKey(),
130
132
  mintAddress: y,
131
- erc20TokenAddress: N,
132
- stealthAddress: D.toBeHex(t.stealthAddress),
133
+ erc20TokenAddress: A,
134
+ stealthAddress: k.toBeHex(t.stealthAddress),
133
135
  H0: [t.H0x, t.H0y]
134
136
  })
135
- })), { connection: F, wallet: I } = O.program.provider, L = async () => {
136
- let e = await (await j(O, k)).transaction();
137
- return e.recentBlockhash = (await F.getLatestBlockhash()).blockhash, e.feePayer = O.publicKey, F.sendRawTransaction((await I.signTransaction(e)).serialize());
138
- }, R = P.map(({ utxo: e }) => BigInt(e.getCommitment()).toString()), [z, B] = await Promise.all([L(), M(e, v, t, P, T, n, m, g, _, R)]);
137
+ })), { connection: F, wallet: I } = D.program.provider, L = async () => {
138
+ let e = await (await N(D, O)).transaction();
139
+ return e.recentBlockhash = (await F.getLatestBlockhash()).blockhash, e.feePayer = D.publicKey, F.sendRawTransaction((await I.signTransaction(e)).serialize());
140
+ }, R = j.map(({ utxo: e }) => BigInt(e.getCommitment()).toString()), [z, B] = await Promise.all([L(), P(e, v, t, j, w, n, m, g, _, R)]);
139
141
  return {
140
142
  depositTxHash: z,
141
- scheduleId: await w(v, B, x, i, p, C, z)
143
+ scheduleId: await T(v, B, b, i, p, S, z)
142
144
  };
143
145
  };
144
146
  //#endregion
145
- export { N as hinkalSolanaDepositAndWithdraw };
147
+ export { F as hinkalSolanaDepositAndWithdraw };
@@ -1 +1 @@
1
- require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../functions/utils/token-check.utils.cjs`),n=require(`../../functions/pre-transaction/constructAdminData.cjs`),r=require(`../../functions/utils/create-provider.cjs`),i=require(`../AccountActions/AccountActions.cjs`),a=require(`../../functions/pre-transaction/sendV0Transaction.cjs`),o=require(`../../API/admin-calls.cjs`),s=require(`../../functions/pre-transaction/solanaTransfer.utils.cjs`);let c=require(`@solana/web3.js`);var l=async(n,a,o,l)=>{let u=t.validateAndGetChainId([n]),d=i.AccountActions.getAddressFromSubAccount(u,o);if(!d)throw Error(`Public account address is not available`);let{rpcUrl:f}=e.networkRegistry[u],p=r.createCustomSolanaConnection(f),m=new c.PublicKey(d),{instructions:h,programId:g}=await s.buildSolanaTransferInstructions(p,m,new c.PublicKey(l),n,a);return{connection:p,chainId:u,senderAddress:d,senderPublickey:m,programId:g,instructions:h}},u=async(e,t,r,i,s,c)=>{let[{connection:u,chainId:d,senderPublickey:f,instructions:p},m]=await Promise.all([l(t,r,i,s),e.getEthereumAddress()]),h=await a.sendProxyV0Transaction({connection:u,chainId:d,subAccount:i,payerPublicKey:f,instructions:p});return o.emitTxPublicData(n.constructAdminData(c,d,[t.erc20TokenAddress],[r],m)),h};exports.hinkalSolanaProxySend=u;
1
+ require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../functions/utils/create-provider.cjs`),n=require(`../../functions/utils/token-check.utils.cjs`),r=require(`../../functions/pre-transaction/constructAdminData.cjs`),i=require(`../AccountActions/AccountActions.cjs`),a=require(`../../functions/pre-transaction/sendV0Transaction.cjs`),o=require(`../../API/admin-calls.cjs`),s=require(`../../functions/pre-transaction/solanaTransfer.utils.cjs`);let c=require(`@solana/web3.js`);var l=async(r,a,o,l)=>{let u=n.validateAndGetChainId([r]),d=i.AccountActions.getAddressFromSubAccount(u,o);if(!d)throw Error(`Public account address is not available`);let{rpcUrl:f}=e.networkRegistry[u],p=t.createCustomSolanaConnection(f),m=new c.PublicKey(d),{instructions:h,programId:g}=await s.buildSolanaTransferInstructions(p,m,new c.PublicKey(l),r,a);return{connection:p,chainId:u,senderAddress:d,senderPublickey:m,programId:g,instructions:h}},u=async(e,t,n,i,s,c)=>{let[{connection:u,chainId:d,senderPublickey:f,instructions:p},m]=await Promise.all([l(t,n,i,s),e.getEthereumAddress()]),h=await a.sendProxyV0Transaction({connection:u,chainId:d,subAccount:i,payerPublicKey:f,instructions:p});return o.emitTxPublicData(r.constructAdminData(c,d,[t.erc20TokenAddress],[n],m)),h};exports.hinkalSolanaProxySend=u;