@hinkal/common 0.3.12 → 0.3.13

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 (198) hide show
  1. package/common/src/API/API.cjs +1 -1
  2. package/common/src/API/API.d.ts +3 -0
  3. package/common/src/API/API.mjs +5 -2
  4. package/common/src/API/evm-token-assets.cjs +1 -0
  5. package/common/src/API/evm-token-assets.mjs +14 -0
  6. package/common/src/API/index.cjs +1 -1
  7. package/common/src/API/index.d.ts +1 -0
  8. package/common/src/API/index.mjs +1 -0
  9. package/common/src/API/receiveVaultCalls.cjs +1 -0
  10. package/common/src/API/receiveVaultCalls.d.ts +10 -0
  11. package/common/src/API/receiveVaultCalls.mjs +32 -0
  12. package/common/src/constants/contracts.constants.cjs +1 -1
  13. package/common/src/constants/contracts.constants.mjs +5 -1
  14. package/common/src/constants/deploy-data/deploy-data-arbMainnet.json.cjs +1 -1
  15. package/common/src/constants/deploy-data/deploy-data-arbMainnet.json.mjs +2 -1
  16. package/common/src/constants/deploy-data/deploy-data-arcTestnet.json.cjs +1 -1
  17. package/common/src/constants/deploy-data/deploy-data-arcTestnet.json.mjs +2 -1
  18. package/common/src/constants/deploy-data/deploy-data-base.json.cjs +1 -1
  19. package/common/src/constants/deploy-data/deploy-data-base.json.mjs +2 -1
  20. package/common/src/constants/deploy-data/deploy-data-bnbMainnet.json.cjs +1 -1
  21. package/common/src/constants/deploy-data/deploy-data-bnbMainnet.json.mjs +2 -1
  22. package/common/src/constants/deploy-data/deploy-data-ethMainnet.json.cjs +1 -1
  23. package/common/src/constants/deploy-data/deploy-data-ethMainnet.json.mjs +2 -1
  24. package/common/src/constants/deploy-data/deploy-data-localhost.json.cjs +1 -1
  25. package/common/src/constants/deploy-data/deploy-data-localhost.json.mjs +2 -1
  26. package/common/src/constants/deploy-data/deploy-data-optimism.json.cjs +1 -1
  27. package/common/src/constants/deploy-data/deploy-data-optimism.json.mjs +2 -1
  28. package/common/src/constants/deploy-data/deploy-data-optimismTest.json.cjs +1 -1
  29. package/common/src/constants/deploy-data/deploy-data-optimismTest.json.mjs +2 -1
  30. package/common/src/constants/deploy-data/deploy-data-polygon.json.cjs +1 -1
  31. package/common/src/constants/deploy-data/deploy-data-polygon.json.mjs +2 -1
  32. package/common/src/constants/deploy-data/deploy-data-sepoliaTestnet.json.cjs +1 -1
  33. package/common/src/constants/deploy-data/deploy-data-sepoliaTestnet.json.mjs +2 -1
  34. package/common/src/constants/deploy-data/deploy-data-tempo.json.cjs +1 -1
  35. package/common/src/constants/deploy-data/deploy-data-tempo.json.mjs +2 -1
  36. package/common/src/constants/deploy-data/deploy-data-tronMainnet.json.cjs +1 -1
  37. package/common/src/constants/deploy-data/deploy-data-tronMainnet.json.mjs +2 -1
  38. package/common/src/constants/deploy-data/deploy-data-tronNile.json.cjs +1 -1
  39. package/common/src/constants/deploy-data/deploy-data-tronNile.json.mjs +2 -1
  40. package/common/src/constants/deploy-data/shared-deploy-data-evm.json.cjs +1 -1
  41. package/common/src/constants/deploy-data/shared-deploy-data-evm.json.mjs +2 -1
  42. package/common/src/constants/deploy-data/shared-deploy-data-tron.json.cjs +1 -1
  43. package/common/src/constants/deploy-data/shared-deploy-data-tron.json.mjs +3 -2
  44. package/common/src/constants/events.constants.d.ts +1 -0
  45. package/common/src/constants/protocol.constants.cjs +1 -1
  46. package/common/src/constants/protocol.constants.d.ts +6 -0
  47. package/common/src/constants/protocol.constants.mjs +2 -2
  48. package/common/src/constants/server.constants.cjs +1 -1
  49. package/common/src/constants/server.constants.d.ts +5 -0
  50. package/common/src/constants/server.constants.mjs +5 -0
  51. package/common/src/data-structures/Hinkal/Hinkal.cjs +1 -1
  52. package/common/src/data-structures/Hinkal/Hinkal.d.ts +6 -2
  53. package/common/src/data-structures/Hinkal/Hinkal.mjs +62 -50
  54. package/common/src/data-structures/Hinkal/IHinkal.d.ts +6 -2
  55. package/common/src/data-structures/Hinkal/handleAutoDepositBack.cjs +1 -1
  56. package/common/src/data-structures/Hinkal/handleAutoDepositBack.mjs +10 -10
  57. package/common/src/data-structures/Hinkal/hinkalActionReceive.cjs +1 -1
  58. package/common/src/data-structures/Hinkal/hinkalActionReceive.mjs +4 -4
  59. package/common/src/data-structures/Hinkal/hinkalBridgePrivateToPrivate.cjs +1 -1
  60. package/common/src/data-structures/Hinkal/hinkalBridgePrivateToPrivate.mjs +24 -24
  61. package/common/src/data-structures/Hinkal/hinkalDepositAndBridge.cjs +1 -1
  62. package/common/src/data-structures/Hinkal/hinkalDepositAndBridge.mjs +33 -33
  63. package/common/src/data-structures/Hinkal/hinkalDepositAndWithdraw.cjs +1 -1
  64. package/common/src/data-structures/Hinkal/hinkalDepositAndWithdraw.mjs +8 -8
  65. package/common/src/data-structures/Hinkal/hinkalProoflessDeposit.cjs +1 -1
  66. package/common/src/data-structures/Hinkal/hinkalProoflessDeposit.d.ts +1 -1
  67. package/common/src/data-structures/Hinkal/hinkalProoflessDeposit.mjs +22 -22
  68. package/common/src/data-structures/Hinkal/hinkalProoflessDeposit.utils.cjs +1 -1
  69. package/common/src/data-structures/Hinkal/hinkalProoflessDeposit.utils.mjs +8 -8
  70. package/common/src/data-structures/Hinkal/hinkalProxySwap.cjs +1 -1
  71. package/common/src/data-structures/Hinkal/hinkalProxySwap.mjs +5 -5
  72. package/common/src/data-structures/Hinkal/hinkalProxyToPrivate.cjs +1 -1
  73. package/common/src/data-structures/Hinkal/hinkalProxyToPrivate.mjs +4 -4
  74. package/common/src/data-structures/Hinkal/hinkalReceiveVaultAccount.cjs +1 -0
  75. package/common/src/data-structures/Hinkal/hinkalReceiveVaultAccount.d.ts +3 -0
  76. package/common/src/data-structures/Hinkal/hinkalReceiveVaultAccount.mjs +20 -0
  77. package/common/src/data-structures/Hinkal/hinkalReceiveVaultCreate.cjs +1 -0
  78. package/common/src/data-structures/Hinkal/hinkalReceiveVaultCreate.d.ts +3 -0
  79. package/common/src/data-structures/Hinkal/hinkalReceiveVaultCreate.mjs +33 -0
  80. package/common/src/data-structures/Hinkal/hinkalReceiveVaultRecover.cjs +1 -0
  81. package/common/src/data-structures/Hinkal/hinkalReceiveVaultRecover.d.ts +5 -0
  82. package/common/src/data-structures/Hinkal/hinkalReceiveVaultRecover.mjs +59 -0
  83. package/common/src/data-structures/Hinkal/hinkalReceiveVaultSettle.cjs +1 -0
  84. package/common/src/data-structures/Hinkal/hinkalReceiveVaultSettle.d.ts +6 -0
  85. package/common/src/data-structures/Hinkal/hinkalReceiveVaultSettle.mjs +8 -0
  86. package/common/src/data-structures/Hinkal/hinkalSolanaDeposit.cjs +1 -1
  87. package/common/src/data-structures/Hinkal/hinkalSolanaDeposit.d.ts +2 -2
  88. package/common/src/data-structures/Hinkal/hinkalSolanaDeposit.mjs +61 -49
  89. package/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.cjs +1 -1
  90. package/common/src/data-structures/Hinkal/hinkalSolanaDepositAndWithdraw.mjs +7 -7
  91. package/common/src/data-structures/Hinkal/hinkalSolanaProxyShield.cjs +1 -1
  92. package/common/src/data-structures/Hinkal/hinkalSolanaProxyShield.mjs +8 -8
  93. package/common/src/data-structures/Hinkal/hinkalSolanaProxySwap.cjs +1 -1
  94. package/common/src/data-structures/Hinkal/hinkalSolanaProxySwap.mjs +4 -4
  95. package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.cjs +1 -1
  96. package/common/src/data-structures/Hinkal/hinkalSolanaTransfer.mjs +1 -1
  97. package/common/src/data-structures/Hinkal/hinkalSolanaWithdraw.cjs +1 -1
  98. package/common/src/data-structures/Hinkal/hinkalSolanaWithdraw.mjs +1 -1
  99. package/common/src/data-structures/Hinkal/hinkalTransact.cjs +1 -1
  100. package/common/src/data-structures/Hinkal/hinkalTransact.mjs +7 -6
  101. package/common/src/data-structures/Hinkal/hinkalTransfer.cjs +1 -1
  102. package/common/src/data-structures/Hinkal/hinkalTransfer.mjs +4 -4
  103. package/common/src/data-structures/Hinkal/index.d.ts +4 -0
  104. package/common/src/data-structures/TokenDBs/AlchemyPublicTokensDB.d.ts +0 -3
  105. package/common/src/data-structures/TokenDBs/EventsPublicTokensDB.d.ts +0 -1
  106. package/common/src/data-structures/TokenDBs/TronPublicTokensDB.d.ts +0 -2
  107. package/common/src/data-structures/crypto-keys/index.cjs +1 -1
  108. package/common/src/data-structures/crypto-keys/index.mjs +1 -1
  109. package/common/src/error-handling/error-codes.constants.cjs +1 -1
  110. package/common/src/error-handling/error-codes.constants.d.ts +4 -0
  111. package/common/src/error-handling/error-codes.constants.mjs +5 -2
  112. package/common/src/error-handling/get-error.message.cjs +1 -1
  113. package/common/src/error-handling/get-error.message.mjs +50 -49
  114. package/common/src/functions/index.cjs +1 -1
  115. package/common/src/functions/index.mjs +2 -1
  116. package/common/src/functions/pre-transaction/build-proofless-deposit-fee.cjs +1 -0
  117. package/common/src/functions/pre-transaction/build-proofless-deposit-fee.d.ts +4 -0
  118. package/common/src/functions/pre-transaction/build-proofless-deposit-fee.mjs +3 -0
  119. package/common/src/functions/pre-transaction/index.cjs +1 -1
  120. package/common/src/functions/pre-transaction/index.d.ts +1 -0
  121. package/common/src/functions/pre-transaction/index.mjs +1 -0
  122. package/common/src/functions/snarkjs/constructTxEnclaveVerify.cjs +1 -1
  123. package/common/src/functions/snarkjs/constructTxEnclaveVerify.mjs +2 -1
  124. package/common/src/functions/utils/abi.utils.cjs +1 -1
  125. package/common/src/functions/utils/abi.utils.mjs +4 -1
  126. package/common/src/functions/utils/encryptInputForEnclave.cjs +1 -1
  127. package/common/src/functions/utils/encryptInputForEnclave.d.ts +2 -1
  128. package/common/src/functions/utils/encryptInputForEnclave.mjs +1 -1
  129. package/common/src/functions/utils/erc20tokenFunctions.cjs +1 -1
  130. package/common/src/functions/utils/erc20tokenFunctions.mjs +11 -11
  131. package/common/src/functions/utils/fees.utils.cjs +1 -1
  132. package/common/src/functions/utils/fees.utils.mjs +1 -1
  133. package/common/src/functions/utils/getSignerFromContract.cjs +1 -1
  134. package/common/src/functions/utils/getSignerFromContract.d.ts +1 -1
  135. package/common/src/functions/utils/getSignerFromContract.mjs +2 -2
  136. package/common/src/functions/utils/getUtxosFromReceipt.utils.cjs +1 -1
  137. package/common/src/functions/utils/getUtxosFromReceipt.utils.mjs +1 -1
  138. package/common/src/functions/utils/getUtxosFromReceiptSolana.cjs +1 -1
  139. package/common/src/functions/utils/getUtxosFromReceiptSolana.mjs +1 -1
  140. package/common/src/functions/utils/index.cjs +1 -1
  141. package/common/src/functions/utils/index.d.ts +1 -0
  142. package/common/src/functions/utils/index.mjs +2 -1
  143. package/common/src/functions/utils/isSigner.cjs +1 -0
  144. package/common/src/functions/utils/isSigner.d.ts +2 -0
  145. package/common/src/functions/utils/isSigner.mjs +7 -0
  146. package/common/src/functions/utils/receive-vault-account.utils.cjs +1 -0
  147. package/common/src/functions/utils/receive-vault-account.utils.d.ts +8 -0
  148. package/common/src/functions/utils/receive-vault-account.utils.mjs +23 -0
  149. package/common/src/functions/utils/receive-vault-scan.utils.cjs +1 -0
  150. package/common/src/functions/utils/receive-vault-scan.utils.d.ts +2 -0
  151. package/common/src/functions/utils/receive-vault-scan.utils.mjs +60 -0
  152. package/common/src/functions/utils/receive-vault.utils.cjs +2 -0
  153. package/common/src/functions/utils/receive-vault.utils.d.ts +29 -0
  154. package/common/src/functions/utils/receive-vault.utils.mjs +151 -0
  155. package/common/src/functions/utils/string.utils.cjs +1 -1
  156. package/common/src/functions/utils/string.utils.mjs +12 -4
  157. package/common/src/functions/utils/temporary-wallet-recovery.utils.cjs +1 -1
  158. package/common/src/functions/utils/temporary-wallet-recovery.utils.mjs +1 -1
  159. package/common/src/functions/utils/transfer-claimable.utils.cjs +1 -1
  160. package/common/src/functions/utils/transfer-claimable.utils.mjs +1 -1
  161. package/common/src/functions/utils/wallet-token-discovery.utils.cjs +1 -0
  162. package/common/src/functions/utils/wallet-token-discovery.utils.d.ts +4 -0
  163. package/common/src/functions/utils/wallet-token-discovery.utils.mjs +36 -0
  164. package/common/src/functions/web3/functionCalls/transactCallDirect.cjs +1 -1
  165. package/common/src/functions/web3/functionCalls/transactCallDirect.mjs +11 -11
  166. package/common/src/types/ethereum-network.types.cjs +1 -1
  167. package/common/src/types/ethereum-network.types.d.ts +4 -1
  168. package/common/src/types/ethereum-network.types.mjs +1 -1
  169. package/common/src/types/external-action.types.cjs +1 -1
  170. package/common/src/types/external-action.types.d.ts +2 -1
  171. package/common/src/types/external-action.types.mjs +1 -1
  172. package/common/src/types/index.cjs +1 -1
  173. package/common/src/types/index.d.ts +1 -0
  174. package/common/src/types/index.mjs +1 -0
  175. package/common/src/types/receive-vault.types.cjs +1 -0
  176. package/common/src/types/receive-vault.types.d.ts +68 -0
  177. package/common/src/types/receive-vault.types.mjs +6 -0
  178. package/common/src/types/remote-tx-build.types.d.ts +5 -0
  179. package/common/src/webworker/{logError-cvFNxc-0.js → logError-BeXPKuv9.js} +1 -1
  180. package/common/src/webworker/package.json +10 -1
  181. package/common/src/webworker/snarkjsWorker/snarkjsWorkerLauncher.ts?worker&url.cjs +1 -1
  182. package/common/src/webworker/snarkjsWorker/snarkjsWorkerLauncher.ts?worker&url.mjs +1 -1
  183. package/common/src/webworker/snarkjsWorkerNode.cjs +1 -1
  184. package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.cjs +1 -1
  185. package/common/src/webworker/utxoWorker/utxoWorkerLauncher.ts?worker&url.mjs +1 -1
  186. package/common/src/webworker/utxoWorkerNode.cjs +1 -1
  187. package/common/src/webworker/viteWorkerURL.constant.cjs +3 -3
  188. package/common/src/webworker/viteWorkerURL.constant.mjs +3 -3
  189. package/common/src/webworker/workerProxy-DF35H7vU.js +1 -0
  190. package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.cjs +1 -1
  191. package/common/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts?worker&url.mjs +1 -1
  192. package/common/src/webworker/zkProofWorkerNode.cjs +1 -1
  193. package/package.json +10 -1
  194. package/services/Hinkal.cjs +1 -1
  195. package/services/Hinkal.d.ts +1 -1
  196. package/services/Hinkal.mjs +2 -2
  197. package/types/IHinkal.d.ts +1 -1
  198. package/common/src/webworker/workerProxy-BHzCZ9HT.js +0 -1
@@ -1 +1 @@
1
- require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../types/hinkal.types.cjs`),r=require(`../../crypto/poseidon.cjs`),i=require(`../../data-structures/crypto-keys/keys.cjs`),a=require(`../../data-structures/utxo/Utxo.cjs`),o=require(`../utils/solanaMint.utils.cjs`),s=require(`./common.snarkjs.cjs`),c=require(`./signedMessageHash.cjs`),l=require(`../pre-transaction/getSolanaCalldataHash.cjs`);let u=require(`ethers`),d=require(`@solana/web3.js`);var f=e=>e?.inputUtxos.flat().filter(e=>BigInt(e.amount)>0n).map(e=>new a.Utxo({amount:BigInt(e.amount),erc20TokenAddress:e.erc20TokenAddress,stealthAddress:e.stealthAddress,H0:[BigInt(e.H0[0]),BigInt(e.H0[1])],timeStamp:e.timeStamp}).getCommitment()),p=e=>{if(Array.isArray(e))return`[${e.map(p).join(`,`)}]`;if(e&&typeof e==`object`){let t=e;return`{${Object.keys(t).filter(e=>t[e]!==void 0).sort().map(e=>`${JSON.stringify(e)}:${p(t[e])}`).join(`,`)}}`}return JSON.stringify(e)},m=(e,t)=>{if(p({chainId:String(e.chainId),hinkalAddress:e.hinkalAddress??``,erc20Addresses:e.erc20Addresses,amountChanges:e.amountChanges,externalAddress:e.externalAddress,...e.originalSender?{originalSender:e.originalSender}:{},relay:e.relay??``,feeStructure:e.feeStructure?{feeToken:e.feeStructure.feeToken,flatFee:e.feeStructure.flatFee.toString(),variableRate:e.feeStructure.variableRate.toString()}:null,externalActionId:e.externalActionId??``,externalActionMetadata:e.externalActionMetadata??``,onChainCreation:e.onChainCreation??null,recipientAddress:e.recipientAddress??null,recipientAmounts:e.recipientAmounts??null,selfOutputAmounts:e.selfOutputAmounts??null,inputCommitments:e.inputCommitments??null,useBlockedUtxos:e.useBlockedUtxos??!1,createBlockedUtxos:e.createBlockedUtxos??!1,...e.forceEmptyUtxos?{forceEmptyUtxos:!0}:{},messageSeed:e.messageSeed??``,skipLock:e.skipLock??!1,...e.speculative?{speculative:e.speculative}:{},slippageValues:e.slippageValues??null})!==p(t))throw Error(`Enclave prepare-tx response does not match the request sent - refusing to sign`)},h=(e,t,n,r,i,o,s,c)=>{let l=s.map(BigInt),u=new Set,d=e.map((e,s)=>t[s].map((t,c)=>{let d=BigInt(t);if(d===0n)return`0`;let f=new a.Utxo({amount:d,erc20TokenAddress:e,nullifyingKey:o,spendingPublicKey:l,H0:[BigInt(n[s][c]),BigInt(r[s][c])],timeStamp:i[s][c]});return u.add(f.getCommitment()),f.getNullifier()}));if(c&&(u.size!==c.length||!c.every(e=>u.has(e))))throw Error(`Enclave prepare-tx spent a different set of notes than the caller authorized - refusing to sign`);return d},g=(e,t)=>e===0n?`0`:new a.Utxo({amount:e,...t}).getCommitment(),_=(e,t,n,r,i,a,o,s,c,l)=>{if((c?.length??0)!==(l?.length??0))throw Error(`Enclave prepare-tx request has mismatched recipientAddress/recipientAmounts - refusing to sign`);let u=t?.length??1,d=s.map(BigInt);return e.map((e,t)=>{let s=Array.from({length:u},(s,c)=>g(BigInt(n[t][c]),{erc20TokenAddress:e,nullifyingKey:o,spendingPublicKey:d,H0:[BigInt(r[t][c]),BigInt(i[t][c])],timeStamp:a})),f=(c??[]).map((n,r)=>{let[i,o,s]=n.split(`,`);return g(BigInt(l[r][t]),{erc20TokenAddress:e,stealthAddress:i,H0:[BigInt(o),BigInt(s)],timeStamp:a})});return[...s,...f]})},v=(e,t,n,r,i)=>{r&&r.forEach((e,t)=>{if(n[0][t]!==e)throw Error(`Enclave prepare-tx self-output amounts do not match the requested selfOutputAmounts - refusing to sign`)});let a=r?.length??1;e.forEach((e,r)=>{let o=t[r].reduce((e,t)=>e+BigInt(t),0n),s=n[r].slice(0,a).reduce((e,t)=>e+BigInt(t),0n);if(o+BigInt(i[r])!==s)throw Error(`Enclave prepare-tx self-output amount does not match input total + requested amountChanges - refusing to sign`)})},y=e=>e.erc20Addresses.map((t,n)=>BigInt(e.amountChanges[n])+(e.recipientAmounts??[]).reduce((e,t)=>e+BigInt(t[n]),0n)),b=e=>e<0n?t.CIRCOM_P+e:e,x=(t,n,r)=>r.length===0?`mainEVMCircuitMin0`:`${e.isTronLike(t)?`mainTronCircuit`:`mainEVMCircuit`}${n.length}x${n[0].length}x${r[0].length}`,S=(t,n,r)=>e.isTronLike(t)?c.computeSignedMessageHashTron(n):c.computeSignedMessageHashEvm({...n,...r}),C=(e,i,a,o)=>{let c=r.poseidonFunction(BigInt(i.messageSeed)),l=e.relay||t.zeroAddress,u=l!==t.zeroAddress&&e.feeStructure?e.feeStructure:n.zeroFeeStructure,d=e.externalActionMetadata||`0x00`,f=e.erc20Addresses.map((t,n)=>e.onChainCreation?.[n]??!1),p=y(e),m=e.slippageValues?e.slippageValues.map(BigInt):s.getSlippageValues(p);return{calldataHash:s.createCallDataHash(s.calcPublicSignalCount(x(e.chainId,a,o),e.erc20Addresses,p,a,o),l,e.externalAddress,e.externalActionId??0n,c,d,i.encryptedOutputs,i.onChainEncryptedOutput,void 0,m,f,u,e.originalSender,void 0,e.chainId,e.createBlockedUtxos??!1),message:c,amountChangesModWrapped:p.map(b)}},w=(e,t,n,r,a,o)=>{if(!e?.some(Boolean))return;let[s,c]=i.UserKeys.getH1FromH0([BigInt(t),BigInt(n)],o);if(s!==BigInt(r)||c!==BigInt(a))throw Error(`Enclave prepare-tx tx-level stealth pair is not derived from the caller's own key - refusing to sign`)},T=(e,t,n,r,i,a,o,s)=>{if(S(e,{rootHashHinkal:BigInt(n.rootHashHinkal),erc20TokenAddresses:n.request.erc20Addresses,amountChanges:s,outTimeStamp:BigInt(n.outTimeStamp),inNullifiers:r,outCommitments:i,calldataHash:a,message:o,chainId:BigInt(e),verifyingContract:t},{outH1Ax:BigInt(n.outH1Ax),outH1Ay:BigInt(n.outH1Ay),H0Ax:BigInt(n.h0Ax),H0Ay:BigInt(n.h0Ay)})!==BigInt(n.signedMessageHash))throw Error(`Enclave prepare-tx signedMessageHash does not match one built from the caller's own data - refusing to sign`)},E=e=>e.map(e=>o.formatMintAddress(e).compressedAddress),D=e=>e.mintAddresses.map((t,n)=>BigInt(e.amountChanges[n])+(e.recipientAmounts?BigInt(e.recipientAmounts[n]):0n)),O=(e,t,n)=>{if(e.tokenNumber!==t.tokenNumber||e.nullifierAmount!==t.nullifierAmount||e.outputAmount!==t.outputAmount)throw Error(`Enclave ${n} dimensions do not match the caller's own data - refusing to sign`)},k=(e,t,n,i)=>{let a=r.poseidonFunction(BigInt(t.messageSeed));O(t.dimensions,{tokenNumber:e.mintAddresses.length,nullifierAmount:n[0]?.length??0,outputAmount:i[0]?.length??0},`prepare-solana-tx`);let o=e.mintAddresses.map((t,n)=>e.onChainCreation?.[n]??!1),s=o.some(Boolean),c=t.encryptedOutputs.flatMap((e,t)=>o[t]?e.map(()=>[]):e.map(e=>Array.from(u.ethers.getBytes(e)))),f=s?t.onChainEncryptedOutput:`0x`,p=(e.hinkalInstructions??[]).map(e=>({accountIndexes:Buffer.from(e.accountIndexes),data:Buffer.from(e.data),programIndex:e.programIndex})),m=(e.remainingAccounts??[]).map(e=>({pubkey:new d.PublicKey(e.pubkey),isSigner:e.isSigner,isWritable:e.isWritable}));return{calldataHash:l.getSolanaCalldataHash(t.dimensions,new d.PublicKey(e.recipient),new d.PublicKey(e.signer??e.relayAddress),c,f,BigInt(e.relayerFee??`0`),BigInt(e.variableRate??`0`),p,m),message:a}},A=(e,t,n,r,i,a,o,s,l)=>{if(c.computeSignedMessageHashSolana({rootHashHinkal:BigInt(e.rootHashHinkal),mintAccountPart1:t,mintAccountPart2:n,amountChanges:s,outTimeStamp:BigInt(e.outTimeStamp),inNullifiers:r,outCommitments:i,calldataHash:a,message:o,swapperAccountAdditionalSeed:l,outH1Ay:BigInt(e.outH1Ay),H0Ax:BigInt(e.h0Ax),H0Ay:BigInt(e.h0Ay)})!==BigInt(e.signedMessageHash))throw Error(`Enclave prepare-solana-tx signedMessageHash does not match one built from the caller's own data - refusing to sign`)},j=(e,t)=>{let n={chainId:String(e.chainId),mintAddresses:e.mintAddresses,amountChanges:e.amountChanges,relayAddress:e.relayAddress,recipient:e.recipient,signer:e.signer??e.relayAddress,functionName:e.functionName??`transact`,accounts:e.accounts,onChainCreation:e.onChainCreation??null,relayerFee:e.relayerFee??`0`,variableRate:e.variableRate??`0`,hinkalInstructions:e.hinkalInstructions??null,remainingAccounts:e.remainingAccounts??null,swapperAccountSalt:e.swapperAccountSalt??`0`,recipientAddress:e.recipientAddress??``,recipientAmounts:e.recipientAmounts??null,inputCommitments:e.inputCommitments??null,useBlockedUtxos:e.useBlockedUtxos??!1,messageSeed:e.messageSeed??``};if(e.recipientAmount&&(n.recipientAmount=e.recipientAmount),e.displayRecipient&&(n.displayRecipient=e.displayRecipient),e.speculative&&(n.speculative=e.speculative),p(n)!==p(t))throw Error(`Enclave prepare-solana-tx response does not match the request sent - refusing to sign`)},M=(e,t,n,i,a,o,c,l,u)=>{let d=h([n],u.inAmounts,u.inH0Ax,u.inH0Ay,u.inTimeStamps,c,l,void 0),f=_([n],void 0,u.outAmounts,u.outNoteH0Ax,u.outNoteH0Ay,u.outTimeStamp,c,l,void 0,void 0),p=[-u.inAmounts[0].reduce((e,t)=>e+BigInt(t),0n)];v([n],u.inAmounts,u.outAmounts,void 0,p.map(String));let m=p.map(b),g=r.poseidonFunction(BigInt(u.messageSeed)),y=s.getSlippageValues(p),C=s.createCallDataHash(s.calcPublicSignalCount(x(e,d,f),[n],m,d,f),i,a,0n,g,`0x00`,u.encryptedOutputs,u.onChainEncryptedOutput,void 0,y,[!1],o,void 0,void 0,e,!1);if(S(e,{rootHashHinkal:BigInt(u.rootHashHinkal),erc20TokenAddresses:[n],amountChanges:m,outTimeStamp:BigInt(u.outTimeStamp),inNullifiers:d,outCommitments:f,calldataHash:C,message:g,chainId:BigInt(e),verifyingContract:t},{outH1Ax:BigInt(u.outH1Ax),outH1Ay:BigInt(u.outH1Ay),H0Ax:BigInt(u.h0Ax),H0Ay:BigInt(u.h0Ay)})!==BigInt(u.signedMessageHash))throw Error(`Enclave prepare-stuck-withdraw job signedMessageHash does not match one built from the caller's own data - refusing to sign`)},N=(e,t,n,i,a,s,f)=>{let{compressedAddress:p,mintAccountPart1:m,mintAccountPart2:g}=o.formatMintAddress(e),y=h([p],f.inAmounts,f.inH0Ax,f.inH0Ay,f.inTimeStamps,a,s,void 0),x=_([p],void 0,f.outAmounts,f.outNoteH0Ax,f.outNoteH0Ay,f.outTimeStamp,a,s,void 0,void 0),S=[-f.inAmounts[0].reduce((e,t)=>e+BigInt(t),0n)];v([p],f.inAmounts,f.outAmounts,void 0,S.map(String));let C=S.map(b),w=r.poseidonFunction(BigInt(f.messageSeed)),T=f.encryptedOutputs.flatMap(e=>e.map(e=>Array.from(u.ethers.getBytes(e))));O(f.dimensions,{tokenNumber:1,nullifierAmount:y[0].length,outputAmount:x[0].length},`prepare-solana-stuck-withdraw`);let E=l.getSolanaCalldataHash(f.dimensions,new d.PublicKey(n),new d.PublicKey(t),T,`0x`,i.flatFee,i.variableRate,[],[]);if(c.computeSignedMessageHashSolana({rootHashHinkal:BigInt(f.rootHashHinkal),mintAccountPart1:[m],mintAccountPart2:[g],amountChanges:C,outTimeStamp:BigInt(f.outTimeStamp),inNullifiers:y,outCommitments:x,calldataHash:E,message:w,swapperAccountAdditionalSeed:r.poseidonFunction(0n),outH1Ay:BigInt(f.outH1Ay),H0Ax:BigInt(f.h0Ax),H0Ay:BigInt(f.h0Ay)})!==BigInt(f.signedMessageHash))throw Error(`Enclave prepare-solana-stuck-withdraw job signedMessageHash does not match one built from the caller's own data - refusing to sign`)},P=(e,t)=>{if(p({chainId:String(e.chainId),hinkalAddress:e.hinkalAddress??``,erc20Address:e.erc20Address,externalAddress:e.externalAddress,relay:e.relay,feeStructure:{feeToken:e.feeStructure.feeToken,flatFee:e.feeStructure.flatFee.toString(),variableRate:e.feeStructure.variableRate.toString()},hashedEthereumAddress:e.hashedEthereumAddress})!==p(t))throw Error(`Enclave prepare-stuck-withdraw response does not match the request sent - refusing to sign`)},F=(e,t)=>{if(p({chainId:String(e.chainId),mintAddress:e.mintAddress,recipient:e.recipient,relayAddress:e.relayAddress,signer:e.relayAddress,accounts:e.accounts,feeStructures:e.feeStructures,hashedEthereumAddress:e.hashedEthereumAddress})!==p(t))throw Error(`Enclave prepare-solana-stuck-withdraw response does not match the request sent - refusing to sign`)},I=(e,t)=>{m(e,t.request);let n=e.inputCommitments??f(e.speculative)??(e.forceEmptyUtxos?[]:void 0),r=h(e.erc20Addresses,t.inAmounts,t.inH0Ax,t.inH0Ay,t.inTimeStamps,e.nullifyingKey,e.spendingPublicKey,n),i=_(e.erc20Addresses,e.selfOutputAmounts,t.outAmounts,t.outNoteH0Ax,t.outNoteH0Ay,t.outTimeStamp,e.nullifyingKey,e.spendingPublicKey,e.recipientAddress,e.recipientAmounts);v(e.erc20Addresses,t.inAmounts,t.outAmounts,e.selfOutputAmounts,e.amountChanges),w(e.onChainCreation,t.h0Ax,t.h0Ay,t.outH1Ax,t.outH1Ay,e.nullifyingKey);let{calldataHash:a,message:o,amountChangesModWrapped:s}=C(e,t,r,i);T(e.chainId,e.hinkalAddress??``,t,r,i,a,o,s)},L=(e,t)=>{j(e,t.request);let n=E(e.mintAddresses),i=e.recipientAddress?[e.recipientAddress]:void 0,a=e.recipientAmounts?[e.recipientAmounts]:void 0,s=h(n,t.inAmounts,t.inH0Ax,t.inH0Ay,t.inTimeStamps,e.nullifyingKey,e.spendingPublicKey,e.inputCommitments??f(e.speculative)),c=_(n,void 0,t.outAmounts,t.outNoteH0Ax,t.outNoteH0Ay,t.outTimeStamp,e.nullifyingKey,e.spendingPublicKey,i,a);v(n,t.inAmounts,t.outAmounts,void 0,e.amountChanges);let{calldataHash:l,message:u}=k(e,t,s,c),d=D(e).map(b),p=e.mintAddresses.map(e=>o.formatMintAddress(e)),m=r.poseidonFunction(BigInt(e.swapperAccountSalt??`0`));A(t,p.map(e=>e.mintAccountPart1),p.map(e=>e.mintAccountPart2),s,c,l,u,d,m)},R=(e,t)=>{P(e,t.request),t.jobs.forEach(t=>M(e.chainId,e.hinkalAddress??``,e.erc20Address,e.relay,e.externalAddress,e.feeStructure,e.nullifyingKey,e.spendingPublicKey,t))},z=(e,t)=>{F(e,t.request),t.jobs.forEach(t=>{let n=t.inAmounts[0].filter(e=>BigInt(e)>0n).length,r=e.feeStructures[String(n)];if(!r)throw Error(`Enclave prepare-solana-stuck-withdraw response uses nullifierCount ${n} with no matching feeStructure - refusing to sign`);N(e.mintAddress,e.relayAddress,e.recipient,{feeToken:r.feeToken,flatFee:BigInt(r.flatFee),variableRate:BigInt(r.variableRate)},e.nullifyingKey,e.spendingPublicKey,t)})};exports.verifyPrepareSolanaStuckWithdrawResponse=z,exports.verifyPrepareSolanaTxResponse=L,exports.verifyPrepareStuckWithdrawResponse=R,exports.verifyPrepareTxResponse=I;
1
+ require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../types/hinkal.types.cjs`),r=require(`../../crypto/poseidon.cjs`),i=require(`../../data-structures/crypto-keys/keys.cjs`),a=require(`../../data-structures/utxo/Utxo.cjs`),o=require(`../utils/solanaMint.utils.cjs`),s=require(`./common.snarkjs.cjs`),c=require(`./signedMessageHash.cjs`),l=require(`../pre-transaction/getSolanaCalldataHash.cjs`);let u=require(`ethers`),d=require(`@solana/web3.js`);var f=e=>e?.inputUtxos.flat().filter(e=>BigInt(e.amount)>0n).map(e=>new a.Utxo({amount:BigInt(e.amount),erc20TokenAddress:e.erc20TokenAddress,stealthAddress:e.stealthAddress,H0:[BigInt(e.H0[0]),BigInt(e.H0[1])],timeStamp:e.timeStamp}).getCommitment()),p=e=>{if(Array.isArray(e))return`[${e.map(p).join(`,`)}]`;if(e&&typeof e==`object`){let t=e;return`{${Object.keys(t).filter(e=>t[e]!==void 0).sort().map(e=>`${JSON.stringify(e)}:${p(t[e])}`).join(`,`)}}`}return JSON.stringify(e)},m=(e,t)=>{if(p({chainId:String(e.chainId),hinkalAddress:e.hinkalAddress??``,erc20Addresses:e.erc20Addresses,amountChanges:e.amountChanges,externalAddress:e.externalAddress,...e.originalSender?{originalSender:e.originalSender}:{},relay:e.relay??``,feeStructure:e.feeStructure?{feeToken:e.feeStructure.feeToken,flatFee:e.feeStructure.flatFee.toString(),variableRate:e.feeStructure.variableRate.toString()}:null,externalActionId:e.externalActionId??``,externalActionMetadata:e.externalActionMetadata??``,onChainCreation:e.onChainCreation??null,recipientAddress:e.recipientAddress??null,recipientAmounts:e.recipientAmounts??null,selfOutputAmounts:e.selfOutputAmounts??null,inputCommitments:e.inputCommitments??null,useBlockedUtxos:e.useBlockedUtxos??!1,createBlockedUtxos:e.createBlockedUtxos??!1,...e.forceEmptyUtxos?{forceEmptyUtxos:!0}:{},messageSeed:e.messageSeed??``,skipLock:e.skipLock??!1,...e.speculative?{speculative:e.speculative}:{},slippageValues:e.slippageValues??null,...e.receiveVaultAddress?{receiveVaultAddress:e.receiveVaultAddress}:{}})!==p(t))throw Error(`Enclave prepare-tx response does not match the request sent - refusing to sign`)},h=(e,t,n,r,i,o,s,c)=>{let l=s.map(BigInt),u=new Set,d=e.map((e,s)=>t[s].map((t,c)=>{let d=BigInt(t);if(d===0n)return`0`;let f=new a.Utxo({amount:d,erc20TokenAddress:e,nullifyingKey:o,spendingPublicKey:l,H0:[BigInt(n[s][c]),BigInt(r[s][c])],timeStamp:i[s][c]});return u.add(f.getCommitment()),f.getNullifier()}));if(c&&(u.size!==c.length||!c.every(e=>u.has(e))))throw Error(`Enclave prepare-tx spent a different set of notes than the caller authorized - refusing to sign`);return d},g=(e,t)=>e===0n?`0`:new a.Utxo({amount:e,...t}).getCommitment(),_=(e,t,n,r,i,a,o,s,c,l)=>{if((c?.length??0)!==(l?.length??0))throw Error(`Enclave prepare-tx request has mismatched recipientAddress/recipientAmounts - refusing to sign`);let u=t?.length??1,d=s.map(BigInt);return e.map((e,t)=>{let s=Array.from({length:u},(s,c)=>g(BigInt(n[t][c]),{erc20TokenAddress:e,nullifyingKey:o,spendingPublicKey:d,H0:[BigInt(r[t][c]),BigInt(i[t][c])],timeStamp:a})),f=(c??[]).map((n,r)=>{let[i,o,s]=n.split(`,`);return g(BigInt(l[r][t]),{erc20TokenAddress:e,stealthAddress:i,H0:[BigInt(o),BigInt(s)],timeStamp:a})});return[...s,...f]})},v=(e,t,n,r,i)=>{r&&r.forEach((e,t)=>{if(n[0][t]!==e)throw Error(`Enclave prepare-tx self-output amounts do not match the requested selfOutputAmounts - refusing to sign`)});let a=r?.length??1;e.forEach((e,r)=>{let o=t[r].reduce((e,t)=>e+BigInt(t),0n),s=n[r].slice(0,a).reduce((e,t)=>e+BigInt(t),0n);if(o+BigInt(i[r])!==s)throw Error(`Enclave prepare-tx self-output amount does not match input total + requested amountChanges - refusing to sign`)})},y=e=>e.erc20Addresses.map((t,n)=>BigInt(e.amountChanges[n])+(e.recipientAmounts??[]).reduce((e,t)=>e+BigInt(t[n]),0n)),b=e=>e<0n?t.CIRCOM_P+e:e,x=(t,n,r)=>r.length===0?`mainEVMCircuitMin0`:`${e.isTronLike(t)?`mainTronCircuit`:`mainEVMCircuit`}${n.length}x${n[0].length}x${r[0].length}`,S=(t,n,r)=>e.isTronLike(t)?c.computeSignedMessageHashTron(n):c.computeSignedMessageHashEvm({...n,...r}),C=(e,i,a,o)=>{let c=r.poseidonFunction(BigInt(i.messageSeed)),l=e.relay||t.zeroAddress,u=l!==t.zeroAddress&&e.feeStructure?e.feeStructure:n.zeroFeeStructure,d=e.externalActionMetadata||`0x00`,f=e.erc20Addresses.map((t,n)=>e.onChainCreation?.[n]??!1),p=y(e),m=e.slippageValues?e.slippageValues.map(BigInt):s.getSlippageValues(p);return{calldataHash:s.createCallDataHash(s.calcPublicSignalCount(x(e.chainId,a,o),e.erc20Addresses,p,a,o),l,e.externalAddress,e.externalActionId??0n,c,d,i.encryptedOutputs,i.onChainEncryptedOutput,void 0,m,f,u,e.originalSender,void 0,e.chainId,e.createBlockedUtxos??!1),message:c,amountChangesModWrapped:p.map(b)}},w=(e,t,n,r,a,o)=>{if(!e?.some(Boolean))return;let[s,c]=i.UserKeys.getH1FromH0([BigInt(t),BigInt(n)],o);if(s!==BigInt(r)||c!==BigInt(a))throw Error(`Enclave prepare-tx tx-level stealth pair is not derived from the caller's own key - refusing to sign`)},T=(e,t,n,r,i,a,o,s)=>{if(S(e,{rootHashHinkal:BigInt(n.rootHashHinkal),erc20TokenAddresses:n.request.erc20Addresses,amountChanges:s,outTimeStamp:BigInt(n.outTimeStamp),inNullifiers:r,outCommitments:i,calldataHash:a,message:o,chainId:BigInt(e),verifyingContract:t},{outH1Ax:BigInt(n.outH1Ax),outH1Ay:BigInt(n.outH1Ay),H0Ax:BigInt(n.h0Ax),H0Ay:BigInt(n.h0Ay)})!==BigInt(n.signedMessageHash))throw Error(`Enclave prepare-tx signedMessageHash does not match one built from the caller's own data - refusing to sign`)},E=e=>e.map(e=>o.formatMintAddress(e).compressedAddress),D=e=>e.mintAddresses.map((t,n)=>BigInt(e.amountChanges[n])+(e.recipientAmounts?BigInt(e.recipientAmounts[n]):0n)),O=(e,t,n)=>{if(e.tokenNumber!==t.tokenNumber||e.nullifierAmount!==t.nullifierAmount||e.outputAmount!==t.outputAmount)throw Error(`Enclave ${n} dimensions do not match the caller's own data - refusing to sign`)},k=(e,t,n,i)=>{let a=r.poseidonFunction(BigInt(t.messageSeed));O(t.dimensions,{tokenNumber:e.mintAddresses.length,nullifierAmount:n[0]?.length??0,outputAmount:i[0]?.length??0},`prepare-solana-tx`);let o=e.mintAddresses.map((t,n)=>e.onChainCreation?.[n]??!1),s=o.some(Boolean),c=t.encryptedOutputs.flatMap((e,t)=>o[t]?e.map(()=>[]):e.map(e=>Array.from(u.ethers.getBytes(e)))),f=s?t.onChainEncryptedOutput:`0x`,p=(e.hinkalInstructions??[]).map(e=>({accountIndexes:Buffer.from(e.accountIndexes),data:Buffer.from(e.data),programIndex:e.programIndex})),m=(e.remainingAccounts??[]).map(e=>({pubkey:new d.PublicKey(e.pubkey),isSigner:e.isSigner,isWritable:e.isWritable}));return{calldataHash:l.getSolanaCalldataHash(t.dimensions,new d.PublicKey(e.recipient),new d.PublicKey(e.signer??e.relayAddress),c,f,BigInt(e.relayerFee??`0`),BigInt(e.variableRate??`0`),p,m),message:a}},A=(e,t,n,r,i,a,o,s,l)=>{if(c.computeSignedMessageHashSolana({rootHashHinkal:BigInt(e.rootHashHinkal),mintAccountPart1:t,mintAccountPart2:n,amountChanges:s,outTimeStamp:BigInt(e.outTimeStamp),inNullifiers:r,outCommitments:i,calldataHash:a,message:o,swapperAccountAdditionalSeed:l,outH1Ay:BigInt(e.outH1Ay),H0Ax:BigInt(e.h0Ax),H0Ay:BigInt(e.h0Ay)})!==BigInt(e.signedMessageHash))throw Error(`Enclave prepare-solana-tx signedMessageHash does not match one built from the caller's own data - refusing to sign`)},j=(e,t)=>{let n={chainId:String(e.chainId),mintAddresses:e.mintAddresses,amountChanges:e.amountChanges,relayAddress:e.relayAddress,recipient:e.recipient,signer:e.signer??e.relayAddress,functionName:e.functionName??`transact`,accounts:e.accounts,onChainCreation:e.onChainCreation??null,relayerFee:e.relayerFee??`0`,variableRate:e.variableRate??`0`,hinkalInstructions:e.hinkalInstructions??null,remainingAccounts:e.remainingAccounts??null,swapperAccountSalt:e.swapperAccountSalt??`0`,recipientAddress:e.recipientAddress??``,recipientAmounts:e.recipientAmounts??null,inputCommitments:e.inputCommitments??null,useBlockedUtxos:e.useBlockedUtxos??!1,messageSeed:e.messageSeed??``};if(e.recipientAmount&&(n.recipientAmount=e.recipientAmount),e.displayRecipient&&(n.displayRecipient=e.displayRecipient),e.speculative&&(n.speculative=e.speculative),p(n)!==p(t))throw Error(`Enclave prepare-solana-tx response does not match the request sent - refusing to sign`)},M=(e,t,n,i,a,o,c,l,u)=>{let d=h([n],u.inAmounts,u.inH0Ax,u.inH0Ay,u.inTimeStamps,c,l,void 0),f=_([n],void 0,u.outAmounts,u.outNoteH0Ax,u.outNoteH0Ay,u.outTimeStamp,c,l,void 0,void 0),p=[-u.inAmounts[0].reduce((e,t)=>e+BigInt(t),0n)];v([n],u.inAmounts,u.outAmounts,void 0,p.map(String));let m=p.map(b),g=r.poseidonFunction(BigInt(u.messageSeed)),y=s.getSlippageValues(p),C=s.createCallDataHash(s.calcPublicSignalCount(x(e,d,f),[n],m,d,f),i,a,0n,g,`0x00`,u.encryptedOutputs,u.onChainEncryptedOutput,void 0,y,[!1],o,void 0,void 0,e,!1);if(S(e,{rootHashHinkal:BigInt(u.rootHashHinkal),erc20TokenAddresses:[n],amountChanges:m,outTimeStamp:BigInt(u.outTimeStamp),inNullifiers:d,outCommitments:f,calldataHash:C,message:g,chainId:BigInt(e),verifyingContract:t},{outH1Ax:BigInt(u.outH1Ax),outH1Ay:BigInt(u.outH1Ay),H0Ax:BigInt(u.h0Ax),H0Ay:BigInt(u.h0Ay)})!==BigInt(u.signedMessageHash))throw Error(`Enclave prepare-stuck-withdraw job signedMessageHash does not match one built from the caller's own data - refusing to sign`)},N=(e,t,n,i,a,s,f)=>{let{compressedAddress:p,mintAccountPart1:m,mintAccountPart2:g}=o.formatMintAddress(e),y=h([p],f.inAmounts,f.inH0Ax,f.inH0Ay,f.inTimeStamps,a,s,void 0),x=_([p],void 0,f.outAmounts,f.outNoteH0Ax,f.outNoteH0Ay,f.outTimeStamp,a,s,void 0,void 0),S=[-f.inAmounts[0].reduce((e,t)=>e+BigInt(t),0n)];v([p],f.inAmounts,f.outAmounts,void 0,S.map(String));let C=S.map(b),w=r.poseidonFunction(BigInt(f.messageSeed)),T=f.encryptedOutputs.flatMap(e=>e.map(e=>Array.from(u.ethers.getBytes(e))));O(f.dimensions,{tokenNumber:1,nullifierAmount:y[0].length,outputAmount:x[0].length},`prepare-solana-stuck-withdraw`);let E=l.getSolanaCalldataHash(f.dimensions,new d.PublicKey(n),new d.PublicKey(t),T,`0x`,i.flatFee,i.variableRate,[],[]);if(c.computeSignedMessageHashSolana({rootHashHinkal:BigInt(f.rootHashHinkal),mintAccountPart1:[m],mintAccountPart2:[g],amountChanges:C,outTimeStamp:BigInt(f.outTimeStamp),inNullifiers:y,outCommitments:x,calldataHash:E,message:w,swapperAccountAdditionalSeed:r.poseidonFunction(0n),outH1Ay:BigInt(f.outH1Ay),H0Ax:BigInt(f.h0Ax),H0Ay:BigInt(f.h0Ay)})!==BigInt(f.signedMessageHash))throw Error(`Enclave prepare-solana-stuck-withdraw job signedMessageHash does not match one built from the caller's own data - refusing to sign`)},P=(e,t)=>{if(p({chainId:String(e.chainId),hinkalAddress:e.hinkalAddress??``,erc20Address:e.erc20Address,externalAddress:e.externalAddress,relay:e.relay,feeStructure:{feeToken:e.feeStructure.feeToken,flatFee:e.feeStructure.flatFee.toString(),variableRate:e.feeStructure.variableRate.toString()},hashedEthereumAddress:e.hashedEthereumAddress})!==p(t))throw Error(`Enclave prepare-stuck-withdraw response does not match the request sent - refusing to sign`)},F=(e,t)=>{if(p({chainId:String(e.chainId),mintAddress:e.mintAddress,recipient:e.recipient,relayAddress:e.relayAddress,signer:e.relayAddress,accounts:e.accounts,feeStructures:e.feeStructures,hashedEthereumAddress:e.hashedEthereumAddress})!==p(t))throw Error(`Enclave prepare-solana-stuck-withdraw response does not match the request sent - refusing to sign`)},I=(e,t)=>{m(e,t.request);let n=e.inputCommitments??f(e.speculative)??(e.forceEmptyUtxos?[]:void 0),r=h(e.erc20Addresses,t.inAmounts,t.inH0Ax,t.inH0Ay,t.inTimeStamps,e.nullifyingKey,e.spendingPublicKey,n),i=_(e.erc20Addresses,e.selfOutputAmounts,t.outAmounts,t.outNoteH0Ax,t.outNoteH0Ay,t.outTimeStamp,e.nullifyingKey,e.spendingPublicKey,e.recipientAddress,e.recipientAmounts);v(e.erc20Addresses,t.inAmounts,t.outAmounts,e.selfOutputAmounts,e.amountChanges),w(e.onChainCreation,t.h0Ax,t.h0Ay,t.outH1Ax,t.outH1Ay,e.nullifyingKey);let{calldataHash:a,message:o,amountChangesModWrapped:s}=C(e,t,r,i);T(e.chainId,e.hinkalAddress??``,t,r,i,a,o,s)},L=(e,t)=>{j(e,t.request);let n=E(e.mintAddresses),i=e.recipientAddress?[e.recipientAddress]:void 0,a=e.recipientAmounts?[e.recipientAmounts]:void 0,s=h(n,t.inAmounts,t.inH0Ax,t.inH0Ay,t.inTimeStamps,e.nullifyingKey,e.spendingPublicKey,e.inputCommitments??f(e.speculative)),c=_(n,void 0,t.outAmounts,t.outNoteH0Ax,t.outNoteH0Ay,t.outTimeStamp,e.nullifyingKey,e.spendingPublicKey,i,a);v(n,t.inAmounts,t.outAmounts,void 0,e.amountChanges);let{calldataHash:l,message:u}=k(e,t,s,c),d=D(e).map(b),p=e.mintAddresses.map(e=>o.formatMintAddress(e)),m=r.poseidonFunction(BigInt(e.swapperAccountSalt??`0`));A(t,p.map(e=>e.mintAccountPart1),p.map(e=>e.mintAccountPart2),s,c,l,u,d,m)},R=(e,t)=>{P(e,t.request),t.jobs.forEach(t=>M(e.chainId,e.hinkalAddress??``,e.erc20Address,e.relay,e.externalAddress,e.feeStructure,e.nullifyingKey,e.spendingPublicKey,t))},z=(e,t)=>{F(e,t.request),t.jobs.forEach(t=>{let n=t.inAmounts[0].filter(e=>BigInt(e)>0n).length,r=e.feeStructures[String(n)];if(!r)throw Error(`Enclave prepare-solana-stuck-withdraw response uses nullifierCount ${n} with no matching feeStructure - refusing to sign`);N(e.mintAddress,e.relayAddress,e.recipient,{feeToken:r.feeToken,flatFee:BigInt(r.flatFee),variableRate:BigInt(r.variableRate)},e.nullifyingKey,e.spendingPublicKey,t)})};exports.verifyPrepareSolanaStuckWithdrawResponse=z,exports.verifyPrepareSolanaTxResponse=L,exports.verifyPrepareStuckWithdrawResponse=R,exports.verifyPrepareTxResponse=I;
@@ -51,7 +51,8 @@ var _ = (e) => e?.inputUtxos.flat().filter((e) => BigInt(e.amount) > 0n).map((e)
51
51
  messageSeed: e.messageSeed ?? "",
52
52
  skipLock: e.skipLock ?? !1,
53
53
  ...e.speculative ? { speculative: e.speculative } : {},
54
- slippageValues: e.slippageValues ?? null
54
+ slippageValues: e.slippageValues ?? null,
55
+ ...e.receiveVaultAddress ? { receiveVaultAddress: e.receiveVaultAddress } : {}
55
56
  }) !== v(t)) throw Error("Enclave prepare-tx response does not match the request sent - refusing to sign");
56
57
  }, b = (e, t, n, r, i, a, s, c) => {
57
58
  let l = s.map(BigInt), u = /* @__PURE__ */ new Set(), d = e.map((e, s) => t[s].map((t, c) => {
@@ -1 +1 @@
1
- require(`../../../../_virtual/_rolldown/runtime.cjs`);let e=require(`ethers`);var t=t=>JSON.parse(new e.ethers.Interface(t).formatJson()),n=e=>Object.fromEntries(Object.entries(e).map(([e,n])=>[e,t(n)]));exports.toJsonAbi=t,exports.withJsonAbis=n;
1
+ require(`../../../../_virtual/_rolldown/runtime.cjs`);let e=require(`ethers`);var t=t=>JSON.parse(new e.ethers.Interface(t).formatJson()).map(e=>e.type===`function`&&!e.stateMutability?{...e,stateMutability:`nonpayable`}:e),n=e=>Object.fromEntries(Object.entries(e).map(([e,n])=>[e,t(n)]));exports.toJsonAbi=t,exports.withJsonAbis=n;
@@ -1,5 +1,8 @@
1
1
  import { ethers as e } from "ethers";
2
2
  //#region libs/shared/common/src/functions/utils/abi.utils.ts
3
- var t = (t) => JSON.parse(new e.Interface(t).formatJson()), n = (e) => Object.fromEntries(Object.entries(e).map(([e, n]) => [e, t(n)]));
3
+ var t = (t) => JSON.parse(new e.Interface(t).formatJson()).map((e) => e.type === "function" && !e.stateMutability ? {
4
+ ...e,
5
+ stateMutability: "nonpayable"
6
+ } : e), n = (e) => Object.fromEntries(Object.entries(e).map(([e, n]) => [e, t(n)]));
4
7
  //#endregion
5
8
  export { t as toJsonAbi, n as withJsonAbis };
@@ -1 +1 @@
1
- const e=require(`../../../../_virtual/_rolldown/runtime.cjs`),t=require(`./serialize.utils.cjs`),n=require(`../../data-structures/http/HttpClient.cjs`);require(`../../data-structures/http/index.cjs`);const r=require(`./enclaveHandshakeService.cjs`),i=require(`../snarkjs/verifySignedEnclaveResponse.cjs`);let a=require(`ethers`),o=require(`libsodium-wrappers`);o=e.__toESM(o);let s=require(`node-forge`);s=e.__toESM(s);var c=e=>typeof e==`bigint`||typeof e==`number`?e.toString():e,l=e=>s.util.hexToBytes(e.replace(`0x`,``)),u=e=>{let t=structuredClone(e);return Object.entries(t).forEach(([e,n])=>{t[e]=c(n),Array.isArray(n)&&(Array.isArray(n[0])?t[e]=n.map(e=>e.map(c)):t[e]=n.map(c))}),t},d=(e,t)=>{let n=s.util.decode64(e),r=s.asn1.fromDer(s.util.createBuffer(n)),i=s.pki.publicKeyFromAsn1(r),a=s.util.binary.raw.encode(t),o=i.encrypt(a,`RSA-OAEP`,{md:s.md.sha1.create(),mgf1:{md:s.md.sha1.create()}});return s.util.encode64(o)},f=(e,t)=>{let n=o.default.randombytes_buf(o.default.crypto_secretbox_NONCEBYTES),r=o.default.crypto_secretbox_easy(t,n,e),i=l(a.ethers.hexlify(n)+a.ethers.hexlify(r).slice(2));return s.util.encode64(i)},p=(e,t)=>{let n=o.default.randombytes_buf(o.default.crypto_secretbox_KEYBYTES);return{keyCiphertext:d(t,n),inputCiphertext:f(n,e),key:n}},m=(e,n)=>{let r=typeof e==`string`?e:t.safeJsonStringify(u(e));return p(new TextEncoder().encode(r),n)},h=async e=>m(e,await r.enclaveHandshakeService.getPublicKey()),g=async e=>p(e,await r.enclaveHandshakeService.getPublicKey()),_=async()=>{let e=await r.enclaveHandshakeService.getPublicKey(),t=o.default.randombytes_buf(o.default.crypto_secretbox_KEYBYTES);return{keyCiphertext:d(e,t),key:t}},v=(e,t)=>{if(!e||typeof e!=`object`||!(`encrypted`in e))throw Error(`Enclave answered in plaintext - refusing an unencrypted response`);let n=o.default.from_base64(e.encrypted,o.default.base64_variants.ORIGINAL),r=n.slice(0,o.default.crypto_secretbox_NONCEBYTES),i=n.slice(o.default.crypto_secretbox_NONCEBYTES),a=o.default.crypto_secretbox_open_easy(i,r,t);return JSON.parse(new TextDecoder().decode(a))},y=async(e,t,r)=>v(await n.httpClient.post(e,t),r),b=async(e,t)=>{let{keyCiphertext:r,inputCiphertext:a,key:o}=await h(t),{data:s,signature:c}=v(await n.httpClient.post(e,{key:r,inputs:a}),o);return i.verifySignedEnclaveResponse(s,c)};exports.enclavePostSealed=y,exports.enclavePostSealedSigned=b,exports.makeEnclaveHandshakeAndEncryptInput=h,exports.makeEnclaveHandshakeAndEncryptUint8Array=g,exports.makeEnclaveKeyHandshake=_;
1
+ const e=require(`../../../../_virtual/_rolldown/runtime.cjs`),t=require(`./serialize.utils.cjs`),n=require(`../../data-structures/http/HttpClient.cjs`);require(`../../data-structures/http/index.cjs`);const r=require(`./enclaveHandshakeService.cjs`),i=require(`../snarkjs/verifySignedEnclaveResponse.cjs`);let a=require(`ethers`),o=require(`libsodium-wrappers`);o=e.__toESM(o);let s=require(`node-forge`);s=e.__toESM(s);var c=e=>typeof e==`bigint`||typeof e==`number`?e.toString():e,l=e=>s.util.hexToBytes(e.replace(`0x`,``)),u=e=>{let t=structuredClone(e);return Object.entries(t).forEach(([e,n])=>{t[e]=c(n),Array.isArray(n)&&(Array.isArray(n[0])?t[e]=n.map(e=>e.map(c)):t[e]=n.map(c))}),t},d=(e,t)=>{let n=s.util.decode64(e),r=s.asn1.fromDer(s.util.createBuffer(n)),i=s.pki.publicKeyFromAsn1(r),a=s.util.binary.raw.encode(t),o=i.encrypt(a,`RSA-OAEP`,{md:s.md.sha1.create(),mgf1:{md:s.md.sha1.create()}});return s.util.encode64(o)},f=(e,t)=>{let n=o.default.randombytes_buf(o.default.crypto_secretbox_NONCEBYTES),r=o.default.crypto_secretbox_easy(t,n,e),i=l(a.ethers.hexlify(n)+a.ethers.hexlify(r).slice(2));return s.util.encode64(i)},p=(e,t)=>{let n=o.default.randombytes_buf(o.default.crypto_secretbox_KEYBYTES);return{keyCiphertext:d(t,n),inputCiphertext:f(n,e),key:n}},m=(e,n)=>{let r=typeof e==`string`?e:t.safeJsonStringify(u(e));return p(new TextEncoder().encode(r),n)},h=async e=>m(e,await r.enclaveHandshakeService.getPublicKey()),g=async e=>p(e,await r.enclaveHandshakeService.getPublicKey()),_=async()=>{let e=await r.enclaveHandshakeService.getPublicKey(),t=o.default.randombytes_buf(o.default.crypto_secretbox_KEYBYTES);return{keyCiphertext:d(e,t),key:t}},v=(e,t)=>{if(!e||typeof e!=`object`||!(`encrypted`in e))throw Error(`Enclave answered in plaintext - refusing an unencrypted response`);let n=o.default.from_base64(e.encrypted,o.default.base64_variants.ORIGINAL),r=n.slice(0,o.default.crypto_secretbox_NONCEBYTES),i=n.slice(o.default.crypto_secretbox_NONCEBYTES),a=o.default.crypto_secretbox_open_easy(i,r,t);return JSON.parse(new TextDecoder().decode(a))},y=async(e,t,r,i)=>v(await n.httpClient.post(e,t,i),r),b=async(e,t)=>{let{keyCiphertext:r,inputCiphertext:a,key:o}=await h(t),{data:s,signature:c}=v(await n.httpClient.post(e,{key:r,inputs:a}),o);return i.verifySignedEnclaveResponse(s,c)};exports.enclavePostSealed=y,exports.enclavePostSealedSigned=b,exports.makeEnclaveHandshakeAndEncryptInput=h,exports.makeEnclaveHandshakeAndEncryptUint8Array=g,exports.makeEnclaveKeyHandshake=_;
@@ -1,3 +1,4 @@
1
+ import { AxiosRequestConfig } from 'axios';
1
2
  export declare const makeEnclaveHandshakeAndEncryptInput: (input: any) => Promise<{
2
3
  keyCiphertext: string;
3
4
  inputCiphertext: string;
@@ -12,5 +13,5 @@ export declare const makeEnclaveKeyHandshake: () => Promise<{
12
13
  keyCiphertext: string;
13
14
  key: Uint8Array;
14
15
  }>;
15
- export declare const enclavePostSealed: <T>(url: string, body: Record<string, unknown>, key: Uint8Array) => Promise<T>;
16
+ export declare const enclavePostSealed: <T>(url: string, body: Record<string, unknown>, key: Uint8Array, config?: AxiosRequestConfig) => Promise<T>;
16
17
  export declare const enclavePostSealedSigned: <T>(url: string, payload: unknown) => Promise<T>;
@@ -41,7 +41,7 @@ var s = (e) => typeof e == "bigint" || typeof e == "number" ? e.toString() : e,
41
41
  if (!e || typeof e != "object" || !("encrypted" in e)) throw Error("Enclave answered in plaintext - refusing an unencrypted response");
42
42
  let n = a.from_base64(e.encrypted, a.base64_variants.ORIGINAL), r = n.slice(0, a.crypto_secretbox_NONCEBYTES), i = n.slice(a.crypto_secretbox_NONCEBYTES), o = a.crypto_secretbox_open_easy(i, r, t);
43
43
  return JSON.parse(new TextDecoder().decode(o));
44
- }, v = async (e, n, r) => _(await t.post(e, n), r), y = async (e, n) => {
44
+ }, v = async (e, n, r, i) => _(await t.post(e, n, i), r), y = async (e, n) => {
45
45
  let { keyCiphertext: i, inputCiphertext: a, key: o } = await m(n), { data: s, signature: c } = _(await t.post(e, {
46
46
  key: i,
47
47
  inputs: a
@@ -1 +1 @@
1
- require(`../../constants/chains.constants.cjs`);const e=require(`../../constants/protocol.constants.cjs`);require(`../web3/etherFunctions.cjs`);const t=require(`../../API/token-calls.cjs`);require(`../../constants/tokens.constants.cjs`);var n=async(e,n)=>{let[r]=await t.tokensInfoCall(e,[n]);return r},r=async(e,n)=>n.length===0?[]:t.tokensInfoCall(e,n),i=async(e,t)=>{let r=await n(e,t);if(!r)throw Error(`Token not found: ${t} on chain ${e}`);return r},a=async(e,t)=>{if(t.length===0)return[];let n=await r(e,t);return t.map((t,r)=>{let i=n[r];if(!i)throw Error(`Token not found: ${t} on chain ${e}`);return i})},o=async e=>await t.getTokensForChainCall(e),s=async(e,n)=>await t.getTokensBySymbolsCall(n,e),c=t=>t.nftTokenType===e.TokenType.ERC721||t.nftTokenType===e.TokenType.ERC1155||t.nftTokenType===e.TokenType.MetaplexNFT||t.nftTokenType===e.TokenType.Token2022NFT||t.nftTokenType===e.TokenType.CompressedNFT;exports.getErc20TokenFromAPI=n,exports.getErc20TokensBySymbolsFromAPI=s,exports.getErc20TokensForChainAPI=o,exports.getErc20TokensFromAPI=r,exports.isNFTToken=c,exports.resolveErc20Token=i,exports.resolveErc20Tokens=a;
1
+ const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`);require(`../web3/etherFunctions.cjs`);const n=require(`../../API/token-calls.cjs`);require(`../../constants/tokens.constants.cjs`);var r=async(e,t)=>{let[r]=await n.tokensInfoCall(e,[t]);return r},i=async(e,t)=>t.length===0?[]:n.tokensInfoCall(e,t),a=async(e,t)=>{let n=await r(e,t);if(!n)throw Error(`Token not found: ${t} on chain ${e}`);return n},o=async(e,t)=>{if(t.length===0)return[];let n=await i(e,t);return t.map((t,r)=>{let i=n[r];if(!i)throw Error(`Token not found: ${t} on chain ${e}`);return i})},s=async e=>await n.getTokensForChainCall(e),c=async(e,t)=>await n.getTokensBySymbolsCall(t,e),l=e=>e.nftTokenType===t.TokenType.ERC721||e.nftTokenType===t.TokenType.ERC1155||e.nftTokenType===t.TokenType.MetaplexNFT||e.nftTokenType===t.TokenType.Token2022NFT||e.nftTokenType===t.TokenType.CompressedNFT,u=n=>n.chainId===e.chainIds.arcTestnet&&n.erc20TokenAddress===t.zeroAddress;exports.getErc20TokenFromAPI=r,exports.getErc20TokensBySymbolsFromAPI=c,exports.getErc20TokensForChainAPI=s,exports.getErc20TokensFromAPI=i,exports.isArcNativeToken=u,exports.isNFTToken=l,exports.resolveErc20Token=a,exports.resolveErc20Tokens=o;
@@ -1,24 +1,24 @@
1
- import "../../constants/chains.constants.mjs";
2
- import { TokenType as e } from "../../constants/protocol.constants.mjs";
1
+ import { chainIds as e } from "../../constants/chains.constants.mjs";
2
+ import { TokenType as t, zeroAddress as n } from "../../constants/protocol.constants.mjs";
3
3
  import "../web3/etherFunctions.mjs";
4
- import { getTokensBySymbolsCall as t, getTokensForChainCall as n, tokensInfoCall as r } from "../../API/token-calls.mjs";
4
+ import { getTokensBySymbolsCall as r, getTokensForChainCall as i, tokensInfoCall as a } from "../../API/token-calls.mjs";
5
5
  import "../../constants/tokens.constants.mjs";
6
6
  //#region libs/shared/common/src/functions/utils/erc20tokenFunctions.ts
7
- var i = async (e, t) => {
8
- let [n] = await r(e, [t]);
7
+ var o = async (e, t) => {
8
+ let [n] = await a(e, [t]);
9
9
  return n;
10
- }, a = async (e, t) => t.length === 0 ? [] : r(e, t), o = async (e, t) => {
11
- let n = await i(e, t);
10
+ }, s = async (e, t) => t.length === 0 ? [] : a(e, t), c = async (e, t) => {
11
+ let n = await o(e, t);
12
12
  if (!n) throw Error(`Token not found: ${t} on chain ${e}`);
13
13
  return n;
14
- }, s = async (e, t) => {
14
+ }, l = async (e, t) => {
15
15
  if (t.length === 0) return [];
16
- let n = await a(e, t);
16
+ let n = await s(e, t);
17
17
  return t.map((t, r) => {
18
18
  let i = n[r];
19
19
  if (!i) throw Error(`Token not found: ${t} on chain ${e}`);
20
20
  return i;
21
21
  });
22
- }, c = async (e) => await n(e), l = async (e, n) => await t(n, e), u = (t) => t.nftTokenType === e.ERC721 || t.nftTokenType === e.ERC1155 || t.nftTokenType === e.MetaplexNFT || t.nftTokenType === e.Token2022NFT || t.nftTokenType === e.CompressedNFT;
22
+ }, u = async (e) => await i(e), d = async (e, t) => await r(t, e), f = (e) => e.nftTokenType === t.ERC721 || e.nftTokenType === t.ERC1155 || e.nftTokenType === t.MetaplexNFT || e.nftTokenType === t.Token2022NFT || e.nftTokenType === t.CompressedNFT, p = (t) => t.chainId === e.arcTestnet && t.erc20TokenAddress === n;
23
23
  //#endregion
24
- export { i as getErc20TokenFromAPI, l as getErc20TokensBySymbolsFromAPI, c as getErc20TokensForChainAPI, a as getErc20TokensFromAPI, u as isNFTToken, o as resolveErc20Token, s as resolveErc20Tokens };
24
+ export { o as getErc20TokenFromAPI, d as getErc20TokensBySymbolsFromAPI, u as getErc20TokensForChainAPI, s as getErc20TokensFromAPI, p as isArcNativeToken, f as isNFTToken, c as resolveErc20Token, l as resolveErc20Tokens };
@@ -1 +1 @@
1
- const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../constants/fees.constants.cjs`),r=require(`./caseInsensitive.utils.cjs`),i=require(`../web3/etherFunctions.cjs`),a=require(`../../error-handling/logger.cjs`),o=require(`../../API/getTokenPrice.cjs`),s=require(`./erc20tokenFunctions.cjs`);var c=async r=>{if(!r)return n.EXTENDED_NON_NATIVE_GAS_COST_TOKEN_SYMBOL_OPTIONS;let i=t.zeroAddress;e.isSolanaLike(r)&&(i=t.solanaNativeAddress),e.isTempo(r)&&(i=n.TEMPO_DEFAULT_GAS_TOKEN_ADDRESS);let a=(await s.getErc20TokenFromAPI(r,i))?.symbol;return e.isSolanaLike(r)&&a?[a]:a&&!n.NON_NATIVE_GAS_COST_TOKEN_SYMBOL_OPTIONS(r).includes(a)?[a,...n.NON_NATIVE_GAS_COST_TOKEN_SYMBOL_OPTIONS(r)]:n.NON_NATIVE_GAS_COST_TOKEN_SYMBOL_OPTIONS(r)},l=(e,t)=>{let r=e*t.variableRate/n.BPS_DENOMINATOR;return t.flatFee+r},u=async(e,t,c,u)=>{let d=await s.getErc20TokenFromAPI(e,u.feeToken),f;if(!d||r.caseInsensitiveEqual(u.feeToken,t.erc20TokenAddress)||u.variableRate===0n)f=l(c,u);else{let r=0n;try{let[a,s]=t.chainId===e?(await o.getTokenPrices(e,[t.erc20TokenAddress,d.erc20TokenAddress])).prices:await Promise.all([(await o.getTokenPrices(t.chainId,[t.erc20TokenAddress])).prices[0],(await o.getTokenPrices(e,[d.erc20TokenAddress])).prices[0]]);if(!a||!s)throw Error(`failed to get token prices`);r=i.getAmountInWei(d,(Number(i.getAmountInToken(t,c))*a*Number(u.variableRate)/Number(n.BPS_DENOMINATOR)/s).toFixed(d.decimals))}catch(e){a.Logger.error(`error calculating modified fee structure`,e)}f=u.flatFee+r}return{feeToken:u.feeToken,flatFee:f,variableRate:0n}},d=async(e,t,n,r)=>{let i={...r,flatFee:0n},a=await Promise.all(t.map((t,r)=>u(e,t,n[r]??0n,i)));return{feeToken:r.feeToken,flatFee:a.reduce((e,{flatFee:t})=>e+t,r.flatFee),variableRate:0n}},f=(e,t)=>{let n=e/t;return e%t===0n?n:n+1n},p=(e,t)=>e<=0n||t<=0n?0n:f(e*t,n.BPS_DENOMINATOR);exports.calculateModifiedFeeStructure=u,exports.calculateModifiedFeeStructureForTokens=d,exports.calculateTotalFee=l,exports.calculateVariableFee=p,exports.getGasTokenSymbols=c;
1
+ const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../constants/fees.constants.cjs`),r=require(`./caseInsensitive.utils.cjs`),i=require(`../web3/etherFunctions.cjs`),a=require(`../../error-handling/logger.cjs`),o=require(`../../API/getTokenPrice.cjs`),s=require(`./erc20tokenFunctions.cjs`);var c=async r=>{if(!r)return n.EXTENDED_NON_NATIVE_GAS_COST_TOKEN_SYMBOL_OPTIONS;let i=t.zeroAddress;e.isSolanaLike(r)&&(i=t.solanaNativeAddress),e.isTempo(r)&&(i=n.TEMPO_DEFAULT_GAS_TOKEN_ADDRESS);let a=(await s.getErc20TokenFromAPI(r,i))?.symbol;return e.isSolanaLike(r)&&a?[a]:a&&!n.NON_NATIVE_GAS_COST_TOKEN_SYMBOL_OPTIONS(r).includes(a)?[a,...n.NON_NATIVE_GAS_COST_TOKEN_SYMBOL_OPTIONS(r)]:n.NON_NATIVE_GAS_COST_TOKEN_SYMBOL_OPTIONS(r)},l=(e,t)=>{let r=e*t.variableRate/n.BPS_DENOMINATOR;return t.flatFee+r},u=async(e,t,c,u)=>{let d=await s.getErc20TokenFromAPI(e,u.feeToken),f;if(!d||r.caseInsensitiveEqual(u.feeToken,t.erc20TokenAddress)&&t.chainId===e||u.variableRate===0n)f=l(c,u);else{let r=0n;try{let[a,s]=t.chainId===e?(await o.getTokenPrices(e,[t.erc20TokenAddress,d.erc20TokenAddress])).prices:await Promise.all([(await o.getTokenPrices(t.chainId,[t.erc20TokenAddress])).prices[0],(await o.getTokenPrices(e,[d.erc20TokenAddress])).prices[0]]);if(!a||!s)throw Error(`failed to get token prices`);r=i.getAmountInWei(d,(Number(i.getAmountInToken(t,c))*a*Number(u.variableRate)/Number(n.BPS_DENOMINATOR)/s).toFixed(d.decimals))}catch(e){a.Logger.error(`error calculating modified fee structure`,e)}f=u.flatFee+r}return{feeToken:u.feeToken,flatFee:f,variableRate:0n}},d=async(e,t,n,r)=>{let i={...r,flatFee:0n},a=await Promise.all(t.map((t,r)=>u(e,t,n[r]??0n,i)));return{feeToken:r.feeToken,flatFee:a.reduce((e,{flatFee:t})=>e+t,r.flatFee),variableRate:0n}},f=(e,t)=>{let n=e/t;return e%t===0n?n:n+1n},p=(e,t)=>e<=0n||t<=0n?0n:f(e*t,n.BPS_DENOMINATOR);exports.calculateModifiedFeeStructure=u,exports.calculateModifiedFeeStructureForTokens=d,exports.calculateTotalFee=l,exports.calculateVariableFee=p,exports.getGasTokenSymbols=c;
@@ -18,7 +18,7 @@ var m = async (i) => {
18
18
  return t.flatFee + n;
19
19
  }, g = async (e, t, n, r) => {
20
20
  let a = await p(e, r.feeToken), o;
21
- if (!a || c(r.feeToken, t.erc20TokenAddress) || r.variableRate === 0n) o = h(n, r);
21
+ if (!a || c(r.feeToken, t.erc20TokenAddress) && t.chainId === e || r.variableRate === 0n) o = h(n, r);
22
22
  else {
23
23
  let s = 0n;
24
24
  try {
@@ -1 +1 @@
1
- require(`../../../../_virtual/_rolldown/runtime.cjs`);let e=require(`ethers`);var t=t=>{let{runner:n}=t;if(!(n instanceof e.ethers.AbstractSigner))throw Error(`expected signer`);return n},n=e=>{let{runner:t}=e;if(!t)throw Error(`expected provider`);return t.provider??t};exports.getProviderFromContract=n,exports.getSignerFromContract=t;
1
+ const e=require(`./isSigner.cjs`);var t=t=>{let{runner:n}=t;if(!e.isSigner(n))throw Error(`expected signer`);return n},n=e=>{let{runner:t}=e;if(!t)throw Error(`expected provider`);return t.provider??t};exports.getProviderFromContract=n,exports.getSignerFromContract=t;
@@ -1,3 +1,3 @@
1
1
  import { ethers } from 'ethers';
2
- export declare const getSignerFromContract: (contract: ethers.Contract) => ethers.AbstractSigner<any>;
2
+ export declare const getSignerFromContract: (contract: ethers.Contract) => ethers.Signer;
3
3
  export declare const getProviderFromContract: (contract: ethers.Contract) => ethers.Provider;
@@ -1,8 +1,8 @@
1
- import { ethers as e } from "ethers";
1
+ import { isSigner as e } from "./isSigner.mjs";
2
2
  //#region libs/shared/common/src/functions/utils/getSignerFromContract.ts
3
3
  var t = (t) => {
4
4
  let { runner: n } = t;
5
- if (!(n instanceof e.AbstractSigner)) throw Error("expected signer");
5
+ if (!e(n)) throw Error("expected signer");
6
6
  return n;
7
7
  }, n = (e) => {
8
8
  let { runner: t } = e;
@@ -1 +1 @@
1
- require(`../../constants/chains.constants.cjs`),require(`../../data-structures/crypto-keys/keys.cjs`),require(`../../types/index.cjs`),require(`../../data-structures/crypto-keys/encryptDecryptUtxo.cjs`),require(`../web3/getContractMetadata.cjs`),require(`../../data-structures/crypto-keys/decodeUTXO.cjs`),require(`ethers`);
1
+ require(`../../constants/chains.constants.cjs`),require(`../../data-structures/crypto-keys/keys.cjs`),require(`../../types/index.cjs`),require(`../../data-structures/crypto-keys/decodeUTXO.cjs`),require(`../../data-structures/crypto-keys/encryptDecryptUtxo.cjs`),require(`../web3/getContractMetadata.cjs`),require(`ethers`);
@@ -1,7 +1,7 @@
1
1
  import "../../constants/chains.constants.mjs";
2
2
  import "../../data-structures/crypto-keys/keys.mjs";
3
3
  import "../../types/index.mjs";
4
+ import "../../data-structures/crypto-keys/decodeUTXO.mjs";
4
5
  import "../../data-structures/crypto-keys/encryptDecryptUtxo.mjs";
5
6
  import "../web3/getContractMetadata.mjs";
6
- import "../../data-structures/crypto-keys/decodeUTXO.mjs";
7
7
  import "ethers";
@@ -1 +1 @@
1
- require(`../../constants/chains.constants.cjs`),require(`../../crypto/poseidon.cjs`),require(`../../data-structures/utxo/Utxo.cjs`),require(`../../data-structures/crypto-keys/encryptDecryptUtxo.cjs`),require(`./bytes32.utils.cjs`),require(`../../data-structures/crypto-keys/decodeUTXO.cjs`),require(`ethers`),require(`@solana/web3.js`),require(`@coral-xyz/anchor`);
1
+ require(`../../constants/chains.constants.cjs`),require(`../../crypto/poseidon.cjs`),require(`../../data-structures/utxo/Utxo.cjs`),require(`../../data-structures/crypto-keys/decodeUTXO.cjs`),require(`../../data-structures/crypto-keys/encryptDecryptUtxo.cjs`),require(`./bytes32.utils.cjs`),require(`ethers`),require(`@solana/web3.js`),require(`@coral-xyz/anchor`);
@@ -1,9 +1,9 @@
1
1
  import "../../constants/chains.constants.mjs";
2
2
  import "../../crypto/poseidon.mjs";
3
3
  import "../../data-structures/utxo/Utxo.mjs";
4
+ import "../../data-structures/crypto-keys/decodeUTXO.mjs";
4
5
  import "../../data-structures/crypto-keys/encryptDecryptUtxo.mjs";
5
6
  import "./bytes32.utils.mjs";
6
- import "../../data-structures/crypto-keys/decodeUTXO.mjs";
7
7
  import "ethers";
8
8
  import "@solana/web3.js";
9
9
  import "@coral-xyz/anchor";
@@ -1 +1 @@
1
- require(`./abi.utils.cjs`),require(`./serialize.utils.cjs`),require(`./caseInsensitive.utils.cjs`),require(`./amounts.utils.cjs`),require(`./time.utils.cjs`),require(`./upToDateState.cjs`),require(`./cacheFunctions.cjs`),require(`./encodeTokenWithId.cjs`),require(`./enclaveHandshakeService.cjs`),require(`./encryptInputForEnclave.cjs`),require(`./solanaMint.utils.cjs`),require(`./serialize-utxos.utils.cjs`),require(`./customEnclaveFunctionsRegister.cjs`),require(`./tron.utils.cjs`),require(`./addresses.cjs`),require(`./legacyKeys.cjs`),require(`./auth.utils.cjs`),require(`./string.utils.cjs`),require(`./token-check.utils.cjs`),require(`./map.utils.cjs`),require(`./mutexes.utils.cjs`),require(`./erc20tokenFunctions.cjs`),require(`../pre-transaction/outputUtxoProcessing.cjs`),require(`./external-action.utils.cjs`),require(`../pre-transaction/solana.cjs`),require(`../pre-transaction/process-gas-estimates.cjs`),require(`../pre-transaction/getVolatileTransferAmount.cjs`),require(`../pre-transaction/constructAdminData.cjs`),require(`./create-provider.cjs`),require(`../pre-transaction/calculateSolanaNullifierCount.cjs`),require(`../pre-transaction/convert-okx-instructions.cjs`),require(`./process.utils.cjs`),require(`../pre-transaction/sendV0Transaction.cjs`),require(`./bytes32.utils.cjs`),require(`../pre-transaction/getFeeStructure.cjs`),require(`../pre-transaction/getExternalSwapAddress.cjs`),require(`../pre-transaction/speculativeUtxo.cjs`),require(`../pre-transaction/buildCommitmentValidationData.cjs`),require(`../pre-transaction/index.cjs`),require(`./solana-program.utils.cjs`),require(`./getContractAddress.cjs`),require(`./getSignerFromContract.cjs`),require(`./tronSimulation.utils.cjs`),require(`./resolve-domain-address.cjs`),require(`./resolve-sync.utils.cjs`),require(`./convertIntegrationProviderToExternalActionId.cjs`),require(`./evmNetworkFunctions.cjs`),require(`./userAgent.cjs`),require(`./cacheDevice.utils.cjs`),require(`./getBlockExplorerUrl.cjs`),require(`./involves-permit2-op.cjs`),require(`./convertEmporiumOpToCallInfo.cjs`),require(`./getRecipientInfoFromUserKeys.cjs`),require(`./publicBalance.utils.cjs`),require(`./rpc-int-encode.cjs`),require(`./walletBalances.utils.cjs`),require(`./nftTokenFunctions.cjs`),require(`./inLogicMetadata.cjs`),require(`./networks.utils.cjs`),require(`./postToOffscreen.cjs`),require(`./solanaSendPreflight.utils.cjs`),require(`./voidWallets.utils.cjs`),require(`./prepareHinkal.cjs`),require(`./getUtxosFromReceipt.utils.cjs`),require(`./getUtxosFromReceiptSolana.cjs`),require(`./fees.utils.cjs`),require(`./recovery-balance.utils.cjs`),require(`./proxyAvatar.utils.cjs`),require(`./enclave-utxo-storage.cjs`),require(`./enclave-signature-storage.cjs`),require(`./tx-confirmation.utils.cjs`),require(`./buildClaimableDepositPlan.cjs`),require(`./deposit-claimable.utils.cjs`),require(`./formatter.cjs`),require(`./transfer-claimable.utils.cjs`),require(`./bridge-arrival.utils.cjs`),require(`./bridge-flow.utils.cjs`),require(`./bridge-claimable.utils.cjs`),require(`./solana-sponsored.utils.cjs`),require(`./temp-wallet.utils.cjs`),require(`./enclave-recipient-info-storage.cjs`),require(`./temporary-wallet-recovery.utils.cjs`),require(`./dispatchBalanceRefreshes.cjs`),require(`./lifi.utils.cjs`),require(`./solana-memo.cjs`),require(`./mnemonics.cjs`),require(`./nearIntents.utils.cjs`),require(`./enclaveSessionSigning.cjs`),require(`./validateWalletAddress.cjs`),require(`./waasStamp.cjs`),require(`./sponsored-shield.utils.cjs`);
1
+ require(`./abi.utils.cjs`),require(`./serialize.utils.cjs`),require(`./caseInsensitive.utils.cjs`),require(`./amounts.utils.cjs`),require(`./time.utils.cjs`),require(`./upToDateState.cjs`),require(`./cacheFunctions.cjs`),require(`./encodeTokenWithId.cjs`),require(`./enclaveHandshakeService.cjs`),require(`./encryptInputForEnclave.cjs`),require(`./solanaMint.utils.cjs`),require(`./serialize-utxos.utils.cjs`),require(`./customEnclaveFunctionsRegister.cjs`),require(`./tron.utils.cjs`),require(`./addresses.cjs`),require(`./legacyKeys.cjs`),require(`./auth.utils.cjs`),require(`./receive-vault.utils.cjs`),require(`./string.utils.cjs`),require(`./token-check.utils.cjs`),require(`./map.utils.cjs`),require(`./mutexes.utils.cjs`),require(`./erc20tokenFunctions.cjs`),require(`../pre-transaction/outputUtxoProcessing.cjs`),require(`./external-action.utils.cjs`),require(`../pre-transaction/solana.cjs`),require(`../pre-transaction/process-gas-estimates.cjs`),require(`../pre-transaction/getVolatileTransferAmount.cjs`),require(`../pre-transaction/constructAdminData.cjs`),require(`./create-provider.cjs`),require(`../pre-transaction/calculateSolanaNullifierCount.cjs`),require(`../pre-transaction/convert-okx-instructions.cjs`),require(`./process.utils.cjs`),require(`../pre-transaction/sendV0Transaction.cjs`),require(`./bytes32.utils.cjs`),require(`../pre-transaction/getFeeStructure.cjs`),require(`./fees.utils.cjs`),require(`../pre-transaction/getExternalSwapAddress.cjs`),require(`../pre-transaction/speculativeUtxo.cjs`),require(`../pre-transaction/buildCommitmentValidationData.cjs`),require(`../pre-transaction/index.cjs`),require(`./solana-program.utils.cjs`),require(`./getContractAddress.cjs`),require(`./getSignerFromContract.cjs`),require(`./tronSimulation.utils.cjs`),require(`./resolve-domain-address.cjs`),require(`./resolve-sync.utils.cjs`),require(`./convertIntegrationProviderToExternalActionId.cjs`),require(`./evmNetworkFunctions.cjs`),require(`./userAgent.cjs`),require(`./cacheDevice.utils.cjs`),require(`./getBlockExplorerUrl.cjs`),require(`./involves-permit2-op.cjs`),require(`./convertEmporiumOpToCallInfo.cjs`),require(`./getRecipientInfoFromUserKeys.cjs`),require(`./publicBalance.utils.cjs`),require(`./rpc-int-encode.cjs`),require(`./walletBalances.utils.cjs`),require(`./nftTokenFunctions.cjs`),require(`./inLogicMetadata.cjs`),require(`./networks.utils.cjs`),require(`./postToOffscreen.cjs`),require(`./solanaSendPreflight.utils.cjs`),require(`./voidWallets.utils.cjs`),require(`./prepareHinkal.cjs`),require(`./getUtxosFromReceipt.utils.cjs`),require(`./getUtxosFromReceiptSolana.cjs`),require(`./recovery-balance.utils.cjs`),require(`./proxyAvatar.utils.cjs`),require(`./enclave-utxo-storage.cjs`),require(`./enclave-signature-storage.cjs`),require(`./tx-confirmation.utils.cjs`),require(`./buildClaimableDepositPlan.cjs`),require(`./deposit-claimable.utils.cjs`),require(`./formatter.cjs`),require(`./transfer-claimable.utils.cjs`),require(`./bridge-arrival.utils.cjs`),require(`./bridge-flow.utils.cjs`),require(`./bridge-claimable.utils.cjs`),require(`./solana-sponsored.utils.cjs`),require(`./temp-wallet.utils.cjs`),require(`./enclave-recipient-info-storage.cjs`),require(`./temporary-wallet-recovery.utils.cjs`),require(`./dispatchBalanceRefreshes.cjs`),require(`./lifi.utils.cjs`),require(`./solana-memo.cjs`),require(`./mnemonics.cjs`),require(`./nearIntents.utils.cjs`),require(`./enclaveSessionSigning.cjs`),require(`./validateWalletAddress.cjs`),require(`./waasStamp.cjs`),require(`./sponsored-shield.utils.cjs`);
@@ -26,6 +26,7 @@ export * from './upToDateState';
26
26
  export * from './serialize.utils';
27
27
  export * from './convertEmporiumOpToCallInfo';
28
28
  export * from './getRecipientInfoFromUserKeys';
29
+ export * from './receive-vault.utils';
29
30
  export * from './publicBalance.utils';
30
31
  export * from './rpc-int-encode';
31
32
  export * from './token-check.utils';
@@ -15,6 +15,7 @@ import "./tron.utils.mjs";
15
15
  import "./addresses.mjs";
16
16
  import "./legacyKeys.mjs";
17
17
  import "./auth.utils.mjs";
18
+ import "./receive-vault.utils.mjs";
18
19
  import "./string.utils.mjs";
19
20
  import "./token-check.utils.mjs";
20
21
  import "./map.utils.mjs";
@@ -33,6 +34,7 @@ import "./process.utils.mjs";
33
34
  import "../pre-transaction/sendV0Transaction.mjs";
34
35
  import "./bytes32.utils.mjs";
35
36
  import "../pre-transaction/getFeeStructure.mjs";
37
+ import "./fees.utils.mjs";
36
38
  import "../pre-transaction/getExternalSwapAddress.mjs";
37
39
  import "../pre-transaction/speculativeUtxo.mjs";
38
40
  import "../pre-transaction/buildCommitmentValidationData.mjs";
@@ -63,7 +65,6 @@ import "./voidWallets.utils.mjs";
63
65
  import "./prepareHinkal.mjs";
64
66
  import "./getUtxosFromReceipt.utils.mjs";
65
67
  import "./getUtxosFromReceiptSolana.mjs";
66
- import "./fees.utils.mjs";
67
68
  import "./recovery-balance.utils.mjs";
68
69
  import "./proxyAvatar.utils.mjs";
69
70
  import "./enclave-utxo-storage.mjs";
@@ -0,0 +1 @@
1
+ var e=e=>{let t=e;return typeof t?.getAddress==`function`&&typeof t?.sendTransaction==`function`};exports.isSigner=e;
@@ -0,0 +1,2 @@
1
+ import { ethers } from 'ethers';
2
+ export declare const isSigner: (runner: unknown) => runner is ethers.Signer;
@@ -0,0 +1,7 @@
1
+ //#region libs/shared/common/src/functions/utils/isSigner.ts
2
+ var e = (e) => {
3
+ let t = e;
4
+ return typeof t?.getAddress == "function" && typeof t?.sendTransaction == "function";
5
+ };
6
+ //#endregion
7
+ export { e as isSigner };
@@ -0,0 +1 @@
1
+ require(`../../constants/protocol.constants.cjs`);const e=require(`./caseInsensitive.utils.cjs`),t=require(`./receive-vault.utils.cjs`),n=require(`../../API/receiveVaultCalls.cjs`);var r=new Map,i=async r=>{let{records:i,blocks:a}=await n.fetchReceiveVaultAccount(await t.signReceiveVaultAccount(r,BigInt(Math.floor(Date.now()/1e3)+300)));return{records:i.filter(n=>{try{return e.caseInsensitiveEqual(t.buildReceiveVaultRecord(r,n).vaultAddress,n.vaultAddress)}catch{return!1}}),blocks:a}},a=e=>{let n=t.getReceiveVaultAccountKey(e),a=i(e).finally(()=>r.delete(n));return r.set(n,a),a},o=e=>r.get(t.getReceiveVaultAccountKey(e))??a(e);exports.getReceiveVaultAccountSnapshot=o;
@@ -0,0 +1,8 @@
1
+ import { UserKeys } from '../../data-structures/crypto-keys';
2
+ import { ReceiveVaultBlock, ReceiveVaultRecord } from '../../types/receive-vault.types';
3
+ type ReceiveVaultAccountSnapshot = {
4
+ records: ReceiveVaultRecord[];
5
+ blocks: ReceiveVaultBlock[];
6
+ };
7
+ export declare const getReceiveVaultAccountSnapshot: (userKeys: UserKeys) => Promise<ReceiveVaultAccountSnapshot>;
8
+ export {};
@@ -0,0 +1,23 @@
1
+ import "../../constants/protocol.constants.mjs";
2
+ import { caseInsensitiveEqual as e } from "./caseInsensitive.utils.mjs";
3
+ import { buildReceiveVaultRecord as t, getReceiveVaultAccountKey as n, signReceiveVaultAccount as r } from "./receive-vault.utils.mjs";
4
+ import { fetchReceiveVaultAccount as i } from "../../API/receiveVaultCalls.mjs";
5
+ //#region libs/shared/common/src/functions/utils/receive-vault-account.utils.ts
6
+ var a = /* @__PURE__ */ new Map(), o = async (n) => {
7
+ let { records: a, blocks: o } = await i(await r(n, BigInt(Math.floor(Date.now() / 1e3) + 300)));
8
+ return {
9
+ records: a.filter((r) => {
10
+ try {
11
+ return e(t(n, r).vaultAddress, r.vaultAddress);
12
+ } catch {
13
+ return !1;
14
+ }
15
+ }),
16
+ blocks: o
17
+ };
18
+ }, s = (e) => {
19
+ let t = n(e), r = o(e).finally(() => a.delete(t));
20
+ return a.set(t, r), r;
21
+ }, c = (e) => a.get(n(e)) ?? s(e);
22
+ //#endregion
23
+ export { c as getReceiveVaultAccountSnapshot };
@@ -0,0 +1 @@
1
+ const e=require(`../../constants/chains.constants.cjs`),t=require(`./caseInsensitive.utils.cjs`),n=require(`../../error-handling/logger.cjs`),r=require(`./tron.utils.cjs`),i=require(`../../types/receive-vault.types.cjs`),a=require(`./receive-vault.utils.cjs`),o=require(`./erc20tokenFunctions.cjs`),s=require(`./publicBalance.utils.cjs`),c=require(`./wallet-token-discovery.utils.cjs`);var l=async(e,t,n)=>await s.getPublicBalanceByTokenAddress(t,r.addressToHexFormat(e),r.addressToHexFormat(n))??0n,u=t=>e.FRONT_END_SUPPORTED_CHAINS.filter(n=>a.isReceiveVaultSupported(n)&&e.isTronLike(n)===e.isTronLike(t.chainId)),d=async(t,r)=>{try{return await(e.isTronLike(t)?c.getTronWalletTokenAddresses(r,t):c.getEvmWalletTokenAddresses(t,r))}catch(e){return n.Logger.error(`receive-vault scan: token discovery failed for chain ${t}`,e),[]}},f=async(e,n)=>{let r=new Map,o=(e,t,n,i)=>r.set(`${t}:${e.vaultAddress}:${n}`.toLowerCase(),{record:e,chainId:t,token:n,reason:i});return await Promise.all(e.map(async e=>{let n=a.isReceiveVaultExpired(e),r=n?i.ReceiveVaultBlockReason.Expired:i.ReceiveVaultBlockReason.NotShieldable;await Promise.all(u(e).map(async a=>{(await d(a,e.vaultAddress)).forEach(s=>{if(a===e.chainId&&t.caseInsensitiveEqual(s,e.token)){n&&o(e,a,s,i.ReceiveVaultBlockReason.Expired);return}o(e,a,s,r)})}))})),n.forEach(n=>{let r=e.find(e=>t.caseInsensitiveEqual(e.vaultAddress,n.vaultAddress));r&&o(r,n.chainId,n.token,i.ReceiveVaultBlockReason.RiskySender)}),[...r.values()]},p=async(e,t)=>{try{return(await Promise.all((await f(e,t)).map(async e=>{try{let[t,n]=await Promise.all([o.getErc20TokenFromAPI(e.chainId,e.token),l(e.record.vaultAddress,e.chainId,e.token)]);return t&&!o.isArcNativeToken(t)&&n>0n?{record:e.record,token:t,amount:n,reason:e.reason}:void 0}catch(t){n.Logger.error(`receive-vault scan: balance lookup failed for chain ${e.chainId} token ${e.token}`,t);return}}))).filter(e=>!!e)}catch(e){return n.Logger.log(`Error fetching vault's blcoked balances`,e),[]}};exports.getReceiveVaultBlockedFunds=p;
@@ -0,0 +1,2 @@
1
+ import { ReceiveVaultBlock, ReceiveVaultBlockedFund, ReceiveVaultRecord } from '../../types/receive-vault.types';
2
+ export declare const getReceiveVaultBlockedFunds: (records: ReceiveVaultRecord[], blocks: ReceiveVaultBlock[]) => Promise<ReceiveVaultBlockedFund[]>;
@@ -0,0 +1,60 @@
1
+ import { FRONT_END_SUPPORTED_CHAINS as e, isTronLike as t } from "../../constants/chains.constants.mjs";
2
+ import { caseInsensitiveEqual as n } from "./caseInsensitive.utils.mjs";
3
+ import { Logger as r } from "../../error-handling/logger.mjs";
4
+ import { addressToHexFormat as i } from "./tron.utils.mjs";
5
+ import { ReceiveVaultBlockReason as a } from "../../types/receive-vault.types.mjs";
6
+ import { isReceiveVaultExpired as o, isReceiveVaultSupported as s } from "./receive-vault.utils.mjs";
7
+ import { getErc20TokenFromAPI as c, isArcNativeToken as l } from "./erc20tokenFunctions.mjs";
8
+ import { getPublicBalanceByTokenAddress as u } from "./publicBalance.utils.mjs";
9
+ import { getEvmWalletTokenAddresses as d, getTronWalletTokenAddresses as f } from "./wallet-token-discovery.utils.mjs";
10
+ //#region libs/shared/common/src/functions/utils/receive-vault-scan.utils.ts
11
+ var p = async (e, t, n) => await u(t, i(e), i(n)) ?? 0n, m = (n) => e.filter((e) => s(e) && t(e) === t(n.chainId)), h = async (e, n) => {
12
+ try {
13
+ return await (t(e) ? f(n, e) : d(e, n));
14
+ } catch (t) {
15
+ return r.error(`receive-vault scan: token discovery failed for chain ${e}`, t), [];
16
+ }
17
+ }, g = async (e, t) => {
18
+ let r = /* @__PURE__ */ new Map(), i = (e, t, n, i) => r.set(`${t}:${e.vaultAddress}:${n}`.toLowerCase(), {
19
+ record: e,
20
+ chainId: t,
21
+ token: n,
22
+ reason: i
23
+ });
24
+ return await Promise.all(e.map(async (e) => {
25
+ let t = o(e), r = t ? a.Expired : a.NotShieldable;
26
+ await Promise.all(m(e).map(async (o) => {
27
+ (await h(o, e.vaultAddress)).forEach((s) => {
28
+ if (o === e.chainId && n(s, e.token)) {
29
+ t && i(e, o, s, a.Expired);
30
+ return;
31
+ }
32
+ i(e, o, s, r);
33
+ });
34
+ }));
35
+ })), t.forEach((t) => {
36
+ let r = e.find((e) => n(e.vaultAddress, t.vaultAddress));
37
+ r && i(r, t.chainId, t.token, a.RiskySender);
38
+ }), [...r.values()];
39
+ }, _ = async (e, t) => {
40
+ try {
41
+ return (await Promise.all((await g(e, t)).map(async (e) => {
42
+ try {
43
+ let [t, n] = await Promise.all([c(e.chainId, e.token), p(e.record.vaultAddress, e.chainId, e.token)]);
44
+ return t && !l(t) && n > 0n ? {
45
+ record: e.record,
46
+ token: t,
47
+ amount: n,
48
+ reason: e.reason
49
+ } : void 0;
50
+ } catch (t) {
51
+ r.error(`receive-vault scan: balance lookup failed for chain ${e.chainId} token ${e.token}`, t);
52
+ return;
53
+ }
54
+ }))).filter((e) => !!e);
55
+ } catch (e) {
56
+ return r.log("Error fetching vault's blcoked balances", e), [];
57
+ }
58
+ };
59
+ //#endregion
60
+ export { _ as getReceiveVaultBlockedFunds };
@@ -0,0 +1,2 @@
1
+ require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../data-structures/crypto-keys/keys.cjs`),r=require(`../../data-structures/utxo/Utxo.cjs`),i=require(`./tron.utils.cjs`);require(`../../data-structures/crypto-keys/index.cjs`);let a=require(`ethers`);var o=`HINKAL_RECEIVE_V1`,s=`HINKAL_RECEIVE_RECOVERY_V1`,c=`HINKAL_RECEIVE_RECOVER`,l=`HINKAL_RECEIVE_OUTPUT`,u=`HINKAL_RECEIVE_ACCOUNT_V1`,d=`HINKAL_RECEIVE_VAULT_ACCOUNT`,f=({chainId:e,token:t,index:n})=>`${e}:${i.addressToHexFormat(t).toLowerCase()}:${n}`,p=e=>e*t.RECEIVE_VAULT_FEE_CEILING_MULTIPLIER,m=()=>BigInt(Math.floor(Date.now()/1e3)+t.RECEIVE_VAULT_EXPIRY_SECONDS),h=(e,t)=>{let n=a.ethers.keccak256(a.ethers.toUtf8Bytes(`${s}:${e.getShieldedPrivateKey()}:${f(t)}`));return new a.ethers.Wallet(n)},g=e=>n.UserKeys.getEncryptionKeyPair(e.getShieldedPrivateKey()).publicKey,_=(e,s)=>{let c=e.getShieldedPrivateKey(),l=BigInt(a.ethers.keccak256(a.ethers.toUtf8Bytes(`${o}:${c}:${f(s)}`))),u=new r.Utxo({amount:0n,erc20TokenAddress:t.zeroAddress,nullifyingKey:c,randomization:n.UserKeys.findCorrectRandomization(l,c),spendingPublicKey:e.getSpendingKeyPair().pubSpendingBJJPoint}),{H0:d}=u;if(!d)throw Error(`receive vault: H0 is not set`);let p=n.UserKeys.getH1FromH0(d,c);return{recipient:{H0x:d[0],H0y:d[1],H1x:p[0],H1y:p[1],stealthAddress:BigInt(u.getStealthAddress())},owner:h(e,s).address,token:i.addressToHexFormat(s.token),maxFlatFee:BigInt(s.maxFlatFee),maxVariableRate:Number(t.RECEIVE_VAULT_VARIABLE_RATE),expiry:BigInt(s.expiry)}},v=e=>a.ethers.AbiCoder.defaultAbiCoder().encode([`tuple(tuple(uint256,uint256,uint256,uint256,uint256),address,address,uint256,uint16,uint64)`],[[[e.recipient.H0x,e.recipient.H0y,e.recipient.H1x,e.recipient.H1y,e.recipient.stealthAddress],e.owner,e.token,e.maxFlatFee,e.maxVariableRate,e.expiry]]),y=t=>e.isTronLike(t)?`0x41`:`0xff`,b=e=>[[e.recipient.H0x,e.recipient.H0y,e.recipient.H1x,e.recipient.H1y,e.recipient.stealthAddress],e.owner,e.token,e.maxFlatFee,e.maxVariableRate,e.expiry],x=(e,t,n,r)=>a.ethers.getAddress(a.ethers.dataSlice(a.ethers.solidityPackedKeccak256([`bytes1`,`address`,`bytes32`,`bytes32`],[y(r),i.addressToHexFormat(t),a.ethers.keccak256(v(e)),n]),12)),S=t=>e.networkRegistry[t]?.contractData?.receiveVaultFactoryAddress||void 0,C=`0xe5f823a7777291668021ab2734f77bc16b4854c16034051c86967a5eb2415e54`,w=`0xedef7fda070f3ae59616c754f3f10ec4dfe4cb5c531ae39141ab2d323b36e3ec`,T=t=>e.isTronLike(t)?w:C,E=e=>!!S(e),D=(t,n)=>{let r=S(n);if(!r)throw Error(`receive vault: no factory on chain ${n}`);let a=x(t,r,T(n),n);return e.isTronLike(n)?i.evmHexToTronBase58Address(a):a},O=(e,t)=>({...t,vaultAddress:D(_(e,t),t.chainId)}),k=({expiry:e})=>BigInt(e)<BigInt(Math.floor(Date.now()/1e3)),A=e=>({recipient:{H0x:e.recipient.H0x.toString(),H0y:e.recipient.H0y.toString(),H1x:e.recipient.H1x.toString(),H1y:e.recipient.H1y.toString(),stealthAddress:e.recipient.stealthAddress.toString()},owner:e.owner,token:e.token,maxFlatFee:e.maxFlatFee.toString(),maxVariableRate:e.maxVariableRate,expiry:e.expiry.toString()}),j=e=>new a.ethers.Wallet(a.ethers.keccak256(a.ethers.toUtf8Bytes(`${u}:${e.getShieldedPrivateKey()}`))),M=e=>j(e).address,N=(e,t)=>a.ethers.keccak256(a.ethers.solidityPacked([`string`,`address`,`uint256`],[d,e,t])),P=async(e,t)=>{let n=j(e),r=N(n.address,t);return{accountKey:n.address,deadline:t.toString(),signature:await n.signMessage(a.ethers.getBytes(r))}},F=(e,t,n,r)=>a.ethers.keccak256(a.ethers.solidityPacked([`string`,`uint256`,`address`,`address`,`bytes32`],[l,BigInt(e),i.addressToHexFormat(t),i.addressToHexFormat(n),a.ethers.keccak256(r)])),I=async(e,t,n)=>{let r=S(t.chainId);if(!r)throw Error(`receive vault: no factory on chain ${t.chainId}`);let i=F(t.chainId,r,t.vaultAddress,n);return h(e,t).signMessage(a.ethers.getBytes(i))},L=(t,n,r,o,s,l)=>{let u=a.ethers.keccak256(a.ethers.solidityPacked([`string`,`uint256`,`address`,`address`,`address`,`address`,`uint256`],[c,BigInt(t),i.addressToHexFormat(n),i.addressToHexFormat(r),i.addressToHexFormat(o),i.addressToHexFormat(s),l]));return e.isTronLike(t)?a.ethers.keccak256(a.ethers.concat([a.ethers.toUtf8Bytes(`TRON Signed Message:
2
+ 32`),u])):u},R=async(t,n,r,i,o,s)=>{let c=S(i);if(!c)throw Error(`receive vault: no factory on chain ${i}`);let l=L(i,c,n.vaultAddress,r,o,s),u=h(t,n);return e.isTronLike(i)?new a.ethers.SigningKey(u.privateKey).sign(l).serialized:u.signMessage(a.ethers.getBytes(l))};exports.buildReceiveVaultRecord=O,exports.computeReceiveVaultAddress=x,exports.encodeReceiveVaultParams=v,exports.getReceiveVaultAccountKey=M,exports.getReceiveVaultAddress=D,exports.getReceiveVaultEncryptionKey=g,exports.getReceiveVaultExpiry=m,exports.getReceiveVaultFactoryAddress=S,exports.getReceiveVaultFeeCeiling=p,exports.getReceiveVaultInitCodeHash=T,exports.getReceiveVaultOutputDigest=F,exports.getReceiveVaultParams=_,exports.getReceiveVaultRecoveryDigest=L,exports.getReceiveVaultRecoveryWallet=h,exports.isReceiveVaultExpired=k,exports.isReceiveVaultSupported=E,exports.receiveVaultParamsToTuple=b,exports.serializeReceiveVaultParams=A,exports.signReceiveVaultAccount=P,exports.signReceiveVaultOutput=I,exports.signReceiveVaultRecovery=R;
@@ -0,0 +1,29 @@
1
+ import { ethers } from 'ethers';
2
+ import { UserKeys } from '../../data-structures/crypto-keys';
3
+ import { ReceiveVaultAccountProof, ReceiveVaultParams, ReceiveVaultRecord } from '../../types/receive-vault.types';
4
+ export type ReceiveVaultTerms = Omit<ReceiveVaultRecord, 'vaultAddress'>;
5
+ /** A ceiling, not a price: the relayer still charges what the settlement costs. It only has to stay
6
+ * above that while gas moves under an unspent address. */
7
+ export declare const getReceiveVaultFeeCeiling: (quotedFlatFee: bigint) => bigint;
8
+ export declare const getReceiveVaultExpiry: () => bigint;
9
+ export declare const getReceiveVaultRecoveryWallet: (userKeys: UserKeys, terms: ReceiveVaultTerms) => ethers.Wallet;
10
+ export declare const getReceiveVaultEncryptionKey: (userKeys: UserKeys) => string;
11
+ export declare const getReceiveVaultParams: (userKeys: UserKeys, terms: ReceiveVaultTerms) => ReceiveVaultParams;
12
+ export declare const encodeReceiveVaultParams: (params: ReceiveVaultParams) => string;
13
+ export declare const receiveVaultParamsToTuple: (params: ReceiveVaultParams) => (string | number | bigint | bigint[])[];
14
+ export declare const computeReceiveVaultAddress: (params: ReceiveVaultParams, factoryAddress: string, initCodeHash: string, chainId: number) => string;
15
+ export declare const getReceiveVaultFactoryAddress: (chainId: number) => string | undefined;
16
+ export declare const getReceiveVaultInitCodeHash: (chainId: number) => string;
17
+ export declare const isReceiveVaultSupported: (chainId: number) => boolean;
18
+ export declare const getReceiveVaultAddress: (params: ReceiveVaultParams, chainId: number) => string;
19
+ export declare const buildReceiveVaultRecord: (userKeys: UserKeys, terms: ReceiveVaultTerms) => ReceiveVaultRecord;
20
+ export declare const isReceiveVaultExpired: ({ expiry }: ReceiveVaultTerms) => boolean;
21
+ export declare const serializeReceiveVaultParams: (params: ReceiveVaultParams) => ReceiveVaultParams<string>;
22
+ export declare const deserializeReceiveVaultParams: (params: ReceiveVaultParams<string>) => ReceiveVaultParams;
23
+ export declare const getReceiveVaultRecipientInfo: (params: ReceiveVaultParams, encryptionKey: string) => string;
24
+ export declare const getReceiveVaultAccountKey: (userKeys: UserKeys) => string;
25
+ export declare const signReceiveVaultAccount: (userKeys: UserKeys, deadline: bigint) => Promise<ReceiveVaultAccountProof>;
26
+ export declare const getReceiveVaultOutputDigest: (chainId: number, factoryAddress: string, vault: string, encryptedOutput: string) => string;
27
+ export declare const signReceiveVaultOutput: (userKeys: UserKeys, record: ReceiveVaultRecord, encryptedOutput: string) => Promise<string>;
28
+ export declare const getReceiveVaultRecoveryDigest: (chainId: number, factoryAddress: string, vault: string, token: string, to: string, deadline: bigint) => string;
29
+ export declare const signReceiveVaultRecovery: (userKeys: UserKeys, record: ReceiveVaultRecord, token: string, chainId: number, to: string, deadline: bigint) => Promise<string>;