@allbridge/bridge-core-sdk 3.18.0-beta.1 → 3.18.0-beta.2

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 (122) hide show
  1. package/dist/browser/index.js +5 -5
  2. package/dist/browser/index.js.map +4 -4
  3. package/dist/cjs/index.js +4 -4
  4. package/dist/cjs/index.js.map +4 -4
  5. package/dist/esm/index.js +3 -3
  6. package/dist/esm/index.js.map +4 -4
  7. package/dist/src/chains/chain.enums.d.ts +56 -0
  8. package/dist/src/chains/chain.enums.js +62 -0
  9. package/dist/src/chains/chain.enums.js.map +1 -0
  10. package/dist/src/chains/index.d.ts +7 -82
  11. package/dist/src/chains/index.js +62 -162
  12. package/dist/src/chains/index.js.map +1 -1
  13. package/dist/src/chains/models.d.ts +4 -4
  14. package/dist/src/client/core-api/api-client-caching.d.ts +2 -3
  15. package/dist/src/client/core-api/api-client-caching.js.map +1 -1
  16. package/dist/src/client/core-api/api-client.d.ts +7 -8
  17. package/dist/src/client/core-api/api-client.js +1 -1
  18. package/dist/src/client/core-api/api-client.js.map +1 -1
  19. package/dist/src/client/core-api/core-api-mapper.d.ts +2 -2
  20. package/dist/src/client/core-api/core-api-mapper.js +1 -1
  21. package/dist/src/client/core-api/core-api-mapper.js.map +1 -1
  22. package/dist/src/client/core-api/core-api.model.d.ts +9 -12
  23. package/dist/src/client/core-api/core-api.model.js.map +1 -1
  24. package/dist/src/client/core-api/core-client-base.d.ts +40 -0
  25. package/dist/src/client/core-api/{index.js → core-client-base.js} +1 -1
  26. package/dist/src/client/core-api/core-client-base.js.map +1 -0
  27. package/dist/src/client/core-api/core-client-filtered.d.ts +23 -0
  28. package/dist/src/client/core-api/core-client-filtered.js +57 -0
  29. package/dist/src/client/core-api/core-client-filtered.js.map +1 -0
  30. package/dist/src/client/core-api/core-client-pool-info-caching.d.ts +13 -9
  31. package/dist/src/client/core-api/core-client-pool-info-caching.js +6 -1
  32. package/dist/src/client/core-api/core-client-pool-info-caching.js.map +1 -1
  33. package/dist/src/configs/index.d.ts +0 -1
  34. package/dist/src/configs/index.js +0 -1
  35. package/dist/src/configs/index.js.map +1 -1
  36. package/dist/src/exceptions/exceptions.d.ts +1 -2
  37. package/dist/src/exceptions/exceptions.js.map +1 -1
  38. package/dist/src/index.d.ts +34 -13
  39. package/dist/src/index.js +22 -9
  40. package/dist/src/index.js.map +1 -1
  41. package/dist/src/models/index.d.ts +2 -1
  42. package/dist/src/models/index.js +3 -3
  43. package/dist/src/models/index.js.map +1 -1
  44. package/dist/src/services/bridge/evm/index.d.ts +2 -3
  45. package/dist/src/services/bridge/evm/index.js +10 -7
  46. package/dist/src/services/bridge/evm/index.js.map +1 -1
  47. package/dist/src/services/bridge/index.d.ts +2 -3
  48. package/dist/src/services/bridge/index.js +7 -6
  49. package/dist/src/services/bridge/index.js.map +1 -1
  50. package/dist/src/services/bridge/models/bridge.d.ts +2 -2
  51. package/dist/src/services/bridge/models/bridge.model.d.ts +5 -3
  52. package/dist/src/services/bridge/raw-bridge-transaction-builder.d.ts +1 -1
  53. package/dist/src/services/bridge/sol/index.d.ts +11 -7
  54. package/dist/src/services/bridge/sol/index.js +3 -3
  55. package/dist/src/services/bridge/sol/index.js.map +1 -1
  56. package/dist/src/services/bridge/sol/jupiter.js +6 -1
  57. package/dist/src/services/bridge/sol/jupiter.js.map +1 -1
  58. package/dist/src/services/bridge/srb/index.d.ts +2 -3
  59. package/dist/src/services/bridge/srb/index.js +4 -3
  60. package/dist/src/services/bridge/srb/index.js.map +1 -1
  61. package/dist/src/services/bridge/trx/index.d.ts +2 -2
  62. package/dist/src/services/bridge/trx/index.js +2 -2
  63. package/dist/src/services/bridge/trx/index.js.map +1 -1
  64. package/dist/src/services/bridge/utils.d.ts +3 -4
  65. package/dist/src/services/bridge/utils.js +23 -19
  66. package/dist/src/services/bridge/utils.js.map +1 -1
  67. package/dist/src/services/index.d.ts +6 -7
  68. package/dist/src/services/index.js +23 -12
  69. package/dist/src/services/index.js.map +1 -1
  70. package/dist/src/services/liquidity-pool/evm/index.d.ts +2 -2
  71. package/dist/src/services/liquidity-pool/evm/index.js +2 -2
  72. package/dist/src/services/liquidity-pool/evm/index.js.map +1 -1
  73. package/dist/src/services/liquidity-pool/index.d.ts +4 -5
  74. package/dist/src/services/liquidity-pool/index.js +6 -5
  75. package/dist/src/services/liquidity-pool/index.js.map +1 -1
  76. package/dist/src/services/liquidity-pool/models/pool.d.ts +2 -2
  77. package/dist/src/services/liquidity-pool/raw-pool-transaction-builder.d.ts +1 -1
  78. package/dist/src/services/liquidity-pool/sol/index.d.ts +2 -2
  79. package/dist/src/services/liquidity-pool/sol/index.js +2 -2
  80. package/dist/src/services/liquidity-pool/sol/index.js.map +1 -1
  81. package/dist/src/services/liquidity-pool/srb/index.d.ts +2 -3
  82. package/dist/src/services/liquidity-pool/srb/index.js +3 -3
  83. package/dist/src/services/liquidity-pool/srb/index.js.map +1 -1
  84. package/dist/src/services/liquidity-pool/trx/index.d.ts +2 -2
  85. package/dist/src/services/liquidity-pool/trx/index.js +2 -2
  86. package/dist/src/services/liquidity-pool/trx/index.js.map +1 -1
  87. package/dist/src/services/token/evm/index.d.ts +2 -2
  88. package/dist/src/services/token/evm/index.js +3 -3
  89. package/dist/src/services/token/evm/index.js.map +1 -1
  90. package/dist/src/services/token/index.d.ts +1 -1
  91. package/dist/src/services/token/index.js +7 -6
  92. package/dist/src/services/token/index.js.map +1 -1
  93. package/dist/src/services/token/models/token.d.ts +2 -2
  94. package/dist/src/services/token/models/token.model.d.ts +1 -2
  95. package/dist/src/services/token/sol/index.d.ts +2 -2
  96. package/dist/src/services/token/sol/index.js +2 -2
  97. package/dist/src/services/token/sol/index.js.map +1 -1
  98. package/dist/src/services/token/srb/index.d.ts +2 -3
  99. package/dist/src/services/token/srb/index.js +6 -5
  100. package/dist/src/services/token/srb/index.js.map +1 -1
  101. package/dist/src/services/token/trx/index.d.ts +2 -3
  102. package/dist/src/services/token/trx/index.js +2 -2
  103. package/dist/src/services/token/trx/index.js.map +1 -1
  104. package/dist/src/tokens-info/index.d.ts +1 -2
  105. package/dist/src/tokens-info/index.js +6 -1
  106. package/dist/src/tokens-info/index.js.map +1 -1
  107. package/dist/src/tokens-info/tokens-info.model.d.ts +29 -7
  108. package/dist/src/utils/sol/index.js +7 -2
  109. package/dist/src/utils/sol/index.js.map +1 -1
  110. package/dist/src/utils/srb/index.js +20 -9
  111. package/dist/src/utils/srb/index.js.map +1 -1
  112. package/dist/src/utils/utils.d.ts +2 -2
  113. package/dist/src/utils/utils.js +14 -7
  114. package/dist/src/utils/utils.js.map +1 -1
  115. package/dist/src/version.d.ts +1 -1
  116. package/dist/src/version.js +1 -1
  117. package/package.json +2 -9
  118. package/dist/src/client/core-api/index.d.ts +0 -32
  119. package/dist/src/client/core-api/index.js.map +0 -1
  120. package/dist/src/configs/testnet.d.ts +0 -7
  121. package/dist/src/configs/testnet.js +0 -33
  122. package/dist/src/configs/testnet.js.map +0 -1
package/dist/esm/index.js CHANGED
@@ -1,7 +1,7 @@
1
- var Ki={coreApiUrl:"https://core-dev.a11bd.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"",wormholeMessengerProgramId:"3u8hJUVTA4jH1wYAyUur7FFZVQ8H635K3tSHHF4ssjQ5",solanaLookUpTable:"C3jAxHRTZjM2Bs7EqPir4nvrT8zKtpcW7RvGR9R2qKtN",sorobanNetworkPassphrase:"Test SDF Network ; September 2015",tronJsonRpc:"https://nile.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{SPL:0,ARB:3,AMO:7}},cachePoolInfoChainSec:20},Qi={solanaRpcUrl:"https://api.devnet.solana.com",tronRpcUrl:"https://nile.trongrid.io"},Hi={SOL:"https://api.devnet.solana.com",TRX:"https://nile.trongrid.io",SRB:"https://soroban-testnet.stellar.org",STLR:"https://horizon-testnet.stellar.org"};var lt={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://quote-api.jup.ag/v6",wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7}},cachePoolInfoChainSec:20},ji={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},qi={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org"};import{Big as ge}from"big.js";var dt=class{constructor(i){this.apiClient=i}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let i=await this.getChainDetailsMap();return Object.values(i).flatMap(a=>a.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(i,a){return this.apiClient.getGasBalance(i,a)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(i,a){return await this.apiClient.getTransferStatus(i,a)}async getReceiveTransactionCost(i){return await this.apiClient.getReceiveTransactionCost(i)}async getPoolInfoMap(i){return await this.apiClient.getPoolInfoMap(i)}};import wa from"axios";var gn="3.18.0-beta.1";var ue=(f=>(f.GRL="GRL",f.SPL="SPL",f.HOL="HOL",f.BSC="BSC",f.ETH="ETH",f.BAS="BAS",f.SOL="SOL",f.TRX="TRX",f.POL="POL",f.MUM="MUM",f.AMO="AMO",f.ARB="ARB",f.CEL="CEL",f.AVA="AVA",f.SRB="SRB",f.STLR="STLR",f.OPT="OPT",f))(ue||{}),D=(r=>(r.EVM="EVM",r.SOLANA="SOLANA",r.TRX="TRX",r.SRB="SRB",r))(D||{}),N={EVM:18,SOLANA:9,TRX:6,SRB:7},L={GRL:{chainSymbol:"GRL",chainId:"0x5",name:"Goerli",chainType:"EVM"},SPL:{chainSymbol:"SPL",chainId:"0xaa36a7",name:"Sepolia",chainType:"EVM"},HOL:{chainSymbol:"HOL",chainId:"0x4268",name:"Hole\u0161ky",chainType:"EVM"},BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},MUM:{chainSymbol:"MUM",chainId:"0x13881",name:"Mumbai",chainType:"EVM"},AMO:{chainSymbol:"AMO",chainId:"0x13882",name:"Amoy",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"}};import{Big as g}from"big.js";import Ht from"bn.js";var G=class extends Error{constructor(i,a){super(a),this.errorCode=i}},M=class extends G{constructor(i){super("SdkError",i)}},pt=class extends G{constructor(i){super("InvalidAmountError",i)}},Ge=class extends G{constructor(i){super("AmountNotEnoughError",i)}},ye=class extends G{constructor(i){super("InsufficientPoolLiquidityError",i)}},V=class extends G{constructor(i){super("JupiterError",i)}},Je=class extends G{constructor(i){super("InvalidGasFeePaymentOptionError",i)}},fn=class extends G{constructor(i){super("InvalidMessengerOptionError",i)}},J=class extends G{constructor(i){super("MethodNotSupportedError",i)}},Ke=class extends G{constructor(i){super("VerifyTxError",i)}},Ze=class extends G{constructor(i){super("InvalidTxError",i)}},gt=class extends G{constructor(i){super("ExtraGasMaxLimitExceededError",i)}},ft=class extends G{constructor(i,a,s){super("ArgumentInvalidDecimalsError",`Argument '${i}' decimals '${a}' cannot be greater than '${s}'`)}},Qe=class extends G{constructor(i){super("TimeoutError",i)}},yt=class extends G{constructor(i){super("NodeRpcUrlNotInitializedError",`For chain '${i}' Node RPC URL not initialized`)}},ne=class extends G{constructor(i){super("CCTPDoesNotSupportedError",i)}},ht=class extends G{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},ya=(y=>(y.SDK_ERROR="SdkError",y.INVALID_AMOUNT_ERROR="InvalidAmountError",y.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",y.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",y.JUPITER_ERROR="JupiterError",y.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",y.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",y.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",y.VERIFY_TX_ERROR="VerifyTxError",y.INVALID_TX_ERROR="InvalidTxError",y.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",y.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",y.TIMEOUT_ERROR="TimeoutError",y.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",y.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",y.TX_TOO_LARGE="TxTooLargeError",y))(ya||{});function zt(A,i){return g(100).minus(g(100).times(i).div(A)).toNumber()}function xe(A,i){return we(A,i,3).round(0,g.roundDown)}function H(A,i){return we(A,3,i)}function we(A,i,a){let s=g(a).minus(i).toNumber();return g(A).times(He(s))}function He(A){return g(10).pow(A)}function R(A,i){return g(A).times(He(i))}function w(A,i){let a=g(A);return a.eq(0)?g(0):g(a).div(He(i))}function z(A){return w(g(A.tokenBalance).minus(A.vUsdBalance).toFixed(),3).div(2).toFixed()}function le(A,{feeShare:i,decimals:a},s){let r=g(A);if(r.lte(0))return"0";let o=r.times(i),c=r.minus(o),m=xe(c,a),u=g(s.tokenBalance).plus(m),l=de(u,s.aValue,s.dValue);return g(s.vUsdBalance).minus(l).round(0,g.roundDown).toFixed()}function ze(A,{feeShare:i,decimals:a},s){let r=g(A);if(r.lte(0))return g(0).toFixed();let o=r.plus(s.vUsdBalance),c=de(o,s.aValue,s.dValue),m=H(g(s.tokenBalance).minus(c),a),u=g(m).times(i);return g(m).minus(u).round(0,g.roundDown).toFixed()}function yn(A,i){let a=g(A);if(a.lte(0))return i;let s=a.plus(i.vUsdBalance),r=de(s,i.aValue,i.dValue);return{aValue:i.aValue,dValue:i.dValue,tokenBalance:r.toFixed(0),vUsdBalance:s.toFixed(0)}}function hn(A,{feeShare:i,decimals:a},s){if(g(A).lte(0))return g(0);let r=g(s.vUsdBalance).minus(A);if(r.lte(0))throw new ye;let o=de(r,s.aValue,s.dValue),c=g(o).minus(s.tokenBalance),m=H(c,a),u=g(i).div(g(1).minus(i)),l=g(m).times(u).round(0,g.roundUp);return g(m).plus(l).round(0,g.roundDown)}function bn(A,{feeShare:i,decimals:a},s){if(g(A).lte(0))return g(0);let r=g(i).div(g(1).minus(i)),o=g(A).times(r).round(0,g.roundUp),c=g(A).plus(o),m=xe(c,a),u=g(s.tokenBalance).minus(m);if(u.lte(0))throw new ye;let l=de(u,s.aValue,s.dValue);return g(l).minus(s.vUsdBalance).round(0,g.roundDown)}function de(A,i,a){let s=g(4).times(i).times(g(a).minus(A)).minus(a),r=g(a).pow(3),o=s.pow(2),c=g(A).times(g(A).times(o).plus(g(4).times(i).times(r))).sqrt().round(0,g.roundDown),m=g(8).times(i).times(A),u=s.times(A).plus(c).div(m).round(0,g.roundDown);return u.eq(0)?g(0):u.plus(1)}function Tn(A,i,a,s){let r=new Ht(A),o=new Ht(a),c=new Ht(i);return r.mul(o).shrn(s).sub(c).toString()}function Pn(A){return g(A).gt(0)?`${Number(g(A).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function Sn(A,i,a){let s=g(i).times(a),r=g(i).plus(a),o=g(8).times(A).times(s).times(r),c=s.times(g(16).times(A).minus(4)).div(3),m=o.times(o),u=c.times(c).times(c),l=m.plus(u),p=g(l).sqrt(),d=g(Math.cbrt(+o.plus(p).toFixed())),h=g(Math.cbrt(+o.minus(p).toFixed()));return d.plus(h).toFixed()}var jt=(c=>(c.OK="OK",c.INVALID="INVALID",c.FORBIDDEN="FORBIDDEN",c.UNINITIALIZED="UNINITIALIZED",c.CONTRACT_ADDRESS="CONTRACT_ADDRESS",c.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",c))(jt||{});var he=(s=>(s[s.ALLBRIDGE=1]="ALLBRIDGE",s[s.WORMHOLE=2]="WORMHOLE",s[s.CCTP=3]="CCTP",s))(he||{});function wn(A){return Object.entries(A).reduce((i,a)=>{let s=a[0],r=a[1],o=Sa(s,r);return o&&(i[s]=o),i},{})}function Cn(A){let i={};for(let[a,s]of Object.entries(A)){let r=a;for(let o of s.tokens){let c=De({chainSymbol:r,poolAddress:o.poolAddress}),m=z(o.poolInfo);i[c]={...o.poolInfo,imbalance:m}}}return i}function ha(A,i){let{name:a,...s}=A,{poolInfo:r,...o}=i;return{...o,...s,chainName:a}}function ba(A){switch(A){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;default:return null}}function Ta(A){return Object.entries(A).reduce((i,[a,s])=>(i[a]=Pa(s),i),{})}function Pa(A){return Object.entries(A).reduce((i,[a,s])=>{let r=ba(a);return r&&(i[r]=s),i},{})}function Sa(A,i){let a=L[A];if(!a)return null;let s={...a,allbridgeChainId:i.chainId,bridgeAddress:i.bridgeAddress,transferTime:Ta(i.transferTime),txCostAmount:i.txCostAmount,confirmations:i.confirmations};return{...s,tokens:i.tokens.map(r=>ha(s,r))}}function De(A){return A.chainSymbol+"_"+A.poolAddress}function Bn(A){let i=[];for(let[a,s]of Object.entries(A)){let r=a;for(let o of s.tokens)i.push({chainSymbol:r,poolAddress:o.poolAddress})}return i}function In(A){let i={};for(let[a,s]of Object.entries(A)){let r=a;for(let[o,c]of Object.entries(s))c.imbalance=z(c),i[De({chainSymbol:r,poolAddress:o})]=c}return i}var bt=class{constructor(i){this.api=wa.create({baseURL:i.coreApiUrl,headers:{Accept:"application/json",...i.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+gn},params:i.coreApiQueryParams})}async getTokenInfo(){let{data:i}=await this.api.get("/token-info");return{chainDetailsMap:wn(i),poolInfoMap:Cn(i)}}async getPendingInfo(){let{data:i}=await this.api.get("/pending-info");return i}async getGasBalance(i,a){let{data:s}=await this.api.get(`/check/${i}/${a}`);return s}async getTransferStatus(i,a){let{data:s}=await this.api.get(`/chain/${i}/${a}`);return s}async getReceiveTransactionCost(i){let{data:a}=await this.api.post("/receive-fee",i,{headers:{"Content-Type":"application/json"}});return{exchangeRate:a.exchangeRate,fee:a.fee,sourceNativeTokenPrice:a.sourceNativeTokenPrice}}async getPoolInfoMap(i){let a=i instanceof Array?i:[i],{data:s}=await this.api.post("/pool-info",{pools:a},{headers:{"Content-Type":"application/json"}});return In(s)}};import Tt from"timed-cache";var qt=20*1e3,Ca=55*1e3,Pt=class{constructor(i){this.apiClient=i;this.tokenInfoCache=new Tt({defaultTtl:Ca}),this.receivedTransactionCache=new Tt({defaultTtl:qt}),this.pendingInfoCache=new Tt({defaultTtl:qt}),this.gasBalanceCache=new Tt({defaultTtl:qt})}getTokenInfo(){let i="TOKEN_INFO_CACHE_KEY",a=this.tokenInfoCache.get(i);if(a)return a;let s=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(i,s),s}async getGasBalance(i,a){let s=`GAS_BALANCE_${i}_${a}`,r=this.gasBalanceCache.get(s);if(r)return r;let o=this.apiClient.getGasBalance(i,a);return this.gasBalanceCache.put(s,o),o}async getPendingInfo(){let i="PENDING_INFO_CACHE_KEY",a=this.pendingInfoCache.get(i);if(a)return a;let s=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(i,s),s}async getReceiveTransactionCost(i){let a=`RECEIVE_TX_COST_${i.sourceChainId}_${i.destinationChainId}_${i.messenger}`,s=this.receivedTransactionCache.get(a);if(s)return s;let r=await this.apiClient.getReceiveTransactionCost(i);return this.receivedTransactionCache.put(a,r),r}async getTransferStatus(i,a){return this.apiClient.getTransferStatus(i,a)}async getPoolInfoMap(i){return this.apiClient.getPoolInfoMap(i)}};import Ba from"timed-cache";var Ia=55*1e3,St=class{constructor(i){this.client=i;this.poolInfoCache=new $t}async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(i,a){return this.client.getTransferStatus(i,a)}getReceiveTransactionCost(i){return this.client.getReceiveTransactionCost(i)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(i,a){return this.client.getGasBalance(i,a)}async getPoolInfoByKey(i){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let a=this.poolInfoCache.get(i);if(a)return a;{let s=await this.client.getPoolInfoMap(i);return this.poolInfoCache.putAll(s),s[De(i)]}}async refreshPoolInfo(i){let a;if(i)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),a=await this.client.getPoolInfoMap(i);else{let s=await this.client.getChainDetailsMapAndPoolInfoMap();a=await this.client.getPoolInfoMap(Bn(s.chainDetailsMap))}this.poolInfoCache.putAll(a)}cachePut(i,a){this.poolInfoCache.put(De(i),a)}},$t=class{constructor(){this.cache=new Ba({defaultTtl:Ia})}putAll(i){for(let[a,s]of Object.entries(i))this.cache.put(a,s)}putAllIfNotExists(i){for(let[a,s]of Object.entries(i))this.cache.get(a)||this.cache.put(a,s)}put(i,a){this.cache.put(i,a)}get(i){let a=De(i);return this.cache.get(a)}};import ii from"tronweb";import si from"web3";import{Big as Rn}from"big.js";async function U(A,i){return await A.getPoolInfoByKey({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress})}function k(A){if(Rn(A).lte(0))throw new pt("Amount must be greater than zero")}function x(A,i,a){let s=Rn(i).toFixed();if(s.split(".").length==2&&s.split(".")[1].length>a)throw new ft(A,s.split(".")[1].length,a)}async function wt(A,i,a){return await Promise.race([A,new Promise((s,r)=>{setTimeout(()=>r(new Qe(i)),a)})])}async function en(A,i,a,s){if(a<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${a} was received.`);let r=0;for(;;)try{return await wt(A(),i,s)}catch{if(++r>=a)throw new Qe(i)}}async function vn(A,i,a,s=1.5,r=!1){let o=[],c=0;if(o.push(await A()),!i(o[o.length-1]))return o;let m=new Date(Date.now()+a*1e3).valueOf(),u=1e3,l=u;for(;Date.now()<m&&i(o[o.length-1]);)c++,r&&console.info(`Waiting ${u}ms before trying again (bringing the total wait time to ${l}ms so far, of total ${a*1e3}ms)`),await new Promise(p=>setTimeout(p,u)),u=u*s,new Date(Date.now()+u).valueOf()>m&&(u=m-Date.now(),r&&console.info(`was gonna wait too long; new waitTime: ${u}ms`)),l=u+l,o.push(await A(o[o.length-1])),r&&i(o[o.length-1])&&console.info(`${c}. Called ${A.name}; ${o.length} prev attempts. Most recent: ${JSON.stringify(o[o.length-1],null,2)}`);return o}import*as Bt from"@project-serum/anchor";import{PublicKey as Xn}from"@solana/web3.js";import{Big as _a}from"big.js";var Mn=[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];var kn=[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];import*as E from"@project-serum/anchor";import{PublicKey as X}from"@solana/web3.js";async function ae(A,i){return E.utils.token.associatedAddress({mint:i,owner:A})}async function Ce(A){let[i]=await X.findProgramAddress([E.utils.bytes.utf8.encode("config")],A);return i}async function xn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("lock"),Uint8Array.from(A)],i);return a}async function je(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([A])],i);return a}async function Ne(A){let i=await Ce(A),[a]=await X.findProgramAddress([i.toBuffer()],A);return a}async function Fn(A,i){let[a]=await X.findProgramAddress([A.toBuffer()],i);return a}async function Ue(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("token"),A.toBytes()],i);return a}async function Wn(A,i,a){let[s]=await X.findProgramAddress([E.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([A]),i],a);return s}async function tn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([A])],i);return a}async function nn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([A])],i);return a}async function Gn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("sent_message"),A],i);return a}async function an(A,i,a){let[s]=await X.findProgramAddress([E.utils.bytes.utf8.encode("user_deposit"),i.toBytes(),A.toBytes()],a);return s}async function Zn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("cctp_bridge"),A.toBytes()],i);return a}async function Dn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("token"),A.toBytes()],i);return a}function Nn(A,i){let[a]=X.findProgramAddressSync([E.utils.bytes.utf8.encode("lock"),i.toBuffer()],A);return a}function Un(A,i,a,s){let r=Fe("message_transmitter",a),o=Fe("token_messenger",s),c=Fe("__event_authority",s),m=Fe("token_minter",s),u=Fe("local_token",s,[i]),l=Fe("remote_token_messenger",s,[A.toString()]),p=Fe("sender_authority",s);return{messageTransmitterAccount:r,tokenMessenger:o,tokenMessengerEventAuthority:c,tokenMinter:m,localToken:u,remoteTokenMessengerKey:l,authorityPda:p}}function Fe(A,i,a=[]){let s=[Buffer.from(E.utils.bytes.utf8.encode(A))];for(let o of a)typeof o=="string"?s.push(Buffer.from(E.utils.bytes.utf8.encode(o))):Array.isArray(o)?s.push(Buffer.from(o)):Buffer.isBuffer(o)?s.push(o):s.push(o.toBuffer());return X.findProgramAddressSync(s,i)[0]}import{AnchorProvider as Ma}from"@project-serum/anchor";import{Connection as ka,PublicKey as xa}from"@solana/web3.js";function Be(A,i){let a=new ka(A,"confirmed"),s=new xa(i);return new Ma(a,{publicKey:s},{preflightCommitment:"confirmed",commitment:"confirmed"})}var ie=class{};import{PublicKey as Fa}from"@solana/web3.js";import{Address as Wa}from"@stellar/stellar-sdk";import{Big as be}from"big.js";import _n from"randombytes";import*as Vn from"tronweb";function Te(A,i,a){let s;switch(i){case"EVM":{s=Ga(A);break}case"SOLANA":{s=new Fa(A).toBuffer();break}case"TRX":{s=Za(A);break}case"SRB":{s=new Wa(A).toBuffer();break}}switch(a){case"EVM":return"0x"+s.toString("hex");case"SOLANA":return Array.from(s);case"TRX":return s.toJSON().data;case"SRB":return s.toJSON().data}}function On(A){return Buffer.from(A.replace(/^0x/i,""),"hex")}function Ga(A){let a=On(A);return Buffer.concat([Buffer.alloc(32-a.length,0),a],32)}function Za(A){let i=qe(A),a=On(i);return Da(a,32)}function qe(A){return Buffer.from(Vn.utils.crypto.decodeBase58Address(A)).toString("hex").replace(/^41/,"0x")}function Da(A,i){if(A.length>=i)return A;let a=Buffer.alloc(i,0);return A.copy(a,i-A.length),a}function _e(){return _n(32)}function sn(){let A=_n(32).readBigInt64BE();return A<0?A*-1n:A}function Ie(A,i){let a={},s=i.sourceToken;return a.amount=R(i.amount,s.decimals).toFixed(),a.contractAddress=s.bridgeAddress,a.fromAccountAddress=i.fromAccountAddress,a.fromTokenAddress=Te(s.tokenAddress,A,A),a.toAccountAddress=i.toAccountAddress,a.toTokenAddress=Te(i.destinationToken.tokenAddress,A,A),a.minimumReceiveAmount=i.minimumReceiveAmount?R(i.minimumReceiveAmount,i.destinationToken.decimals).toFixed():"0",a}async function Pe(A,i,a){let s={};s.fromChainId=i.sourceToken.allbridgeChainId,s.fromChainSymbol=i.sourceToken.chainSymbol;let r=L[i.destinationToken.chainSymbol].chainType;s.fromTokenAddress=i.sourceToken.tokenAddress,s.toChainId=i.destinationToken.allbridgeChainId,s.toTokenAddress=i.destinationToken.tokenAddress,i.gasFeePaymentMethod==="stablecoin"?s.gasFeePaymentMethod="stablecoin":s.gasFeePaymentMethod="native";let o=i.sourceToken;if(i.messenger===3){if(!o.cctpAddress||!i.destinationToken.cctpAddress)throw new ne("Such route does not support CCTP protocol");s.contractAddress=o.cctpAddress}else s.contractAddress=o.bridgeAddress;s.messenger=i.messenger,s.fromAccountAddress=i.fromAccountAddress,s.amount=R(i.amount,o.decimals).toFixed();let{fee:c,feeFormat:m}=i;if(!c){let d=(await rn(s.fromChainId,i.sourceToken.chainType,s.toChainId,o.decimals,s.messenger,a))[s.gasFeePaymentMethod];if(!d)throw new Je;c=d.int,m="int"}if(m=="float")switch(s.gasFeePaymentMethod){case"native":s.fee=R(c,N[o.chainType]).toFixed(0);break;case"stablecoin":s.fee=R(c,o.decimals).toFixed(0);break}else s.fee=c;let{extraGas:u,extraGasFormat:l}=i;if(u&&+u>0){if(l=="float")switch(s.gasFeePaymentMethod){case"native":s.extraGas=R(u,N[o.chainType]).toFixed(0);break;case"stablecoin":s.extraGas=R(u,o.decimals).toFixed(0);break}else s.extraGas=u;await Ua(s.extraGas,s.gasFeePaymentMethod,o,i.destinationToken,a)}return s.fromTokenAddress=Te(s.fromTokenAddress,A,A),s.toAccountAddress=Te(i.toAccountAddress,r,A),s.toTokenAddress=Te(s.toTokenAddress,r,A),s.gasFeePaymentMethod=="stablecoin"&&Na(s.amount,o.decimals,s.fee,s.extraGas),s}function Na(A,i,a,s){let r=be(A).minus(a).minus(s??0);if(r.lte(0))throw new Ge(`Amount not enough to pay fee, ${w(be(r).minus(1).neg(),i).toFixed()} stables is missing`)}async function rn(A,i,a,s,r,o){let c=await o.getReceiveTransactionCost({sourceChainId:A,destinationChainId:a,messenger:r}),m={native:{int:c.fee,float:w(c.fee,N[i]).toFixed()}};if(c.sourceNativeTokenPrice){let u=we(new be(c.fee).mul(c.sourceNativeTokenPrice),N[i],s).toFixed(0,be.roundUp);m.stablecoin={int:u,float:w(u,s).toFixed()}}return m}async function Ua(A,i,a,s,r){let c=(await on(a,s,r)).extraGasMax[i];if(!c)throw new Je(`Impossible to pay extra gas by '${i}' payment method`);let m=c.int;if(be(A).gt(m))throw new gt(`Extra gas ${A} in int format, exceeded limit ${m} for '${i}' payment method`)}async function on(A,i,a){let s={},r=await a.getReceiveTransactionCost({sourceChainId:A.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:1}),o=i.txCostAmount.maxAmount,c=w(o,N[i.chainType]).toFixed(),m=be(c).div(r.exchangeRate).toFixed(N[A.chainType],be.roundDown),u=R(m,N[A.chainType]).toFixed(0);if(s.native={int:u,float:m},r.sourceNativeTokenPrice){let l=be(m).mul(r.sourceNativeTokenPrice).toFixed(A.decimals,be.roundDown);s.stablecoin={int:R(l,A.decimals).toFixed(0),float:l}}return{extraGasMax:s,destinationChain:{gasAmountMax:{int:o,float:c},swap:{int:i.txCostAmount.swap,float:w(i.txCostAmount.swap,N[i.chainType]).toFixed()},transfer:{int:i.txCostAmount.transfer,float:w(i.txCostAmount.transfer,N[i.chainType]).toFixed()}},exchangeRate:r.exchangeRate,sourceNativeTokenPrice:r.sourceNativeTokenPrice}}function En(A){return A.sourceToken.chainSymbol!==A.destinationToken.chainSymbol}var $e=class extends ie{constructor(a,s,r){super();this.web3=a;this.api=s;this.nodeRpcUrlsConfig=r;this.chainType="EVM"}async send(a){let s=await this.buildRawTransactionSend(a);return this.sendRawTransaction(s)}async buildRawTransactionSwap(a){let s=Ie(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s)}async buildRawTransactionSwapFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=a,d=this.getBridgeContract(r).methods.swap(s,c,u,m,l);return Promise.resolve({from:o,to:r,data:d.encodeABI()})}async buildRawTransactionSend(a){let s=await Pe(this.chainType,a,this.api),{amount:r,contractAddress:o,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,toTokenAddress:p,messenger:d,fee:h,gasFeePaymentMethod:b,extraGas:T}=s,P="0x"+_e().toString("hex"),y,f,C=h;if(T&&(C=_a(C).plus(T).toFixed()),d===3){let S=await this.buildRawTransactionCctpSend(a,s,C);y=S.sendMethod,f=S.value}else{let S=this.getBridgeContract(o);b==="stablecoin"?(y=S.methods.swapAndBridge(m,r,l,u,p,P,d,C),f="0"):(y=S.methods.swapAndBridge(m,r,l,u,p,P,d,0),f=C)}return Promise.resolve({from:c,to:o,value:f,data:y.encodeABI()})}async buildRawTransactionCctpSend(a,s,r){let{amount:o,contractAddress:c,toChainId:m,toAccountAddress:u,gasFeePaymentMethod:l}=s,p=this.getContract(kn,c),d,h;if(a.destinationToken.chainType==="SOLANA"){let b,T=new Xn(a.toAccountAddress),P=new Xn(a.destinationToken.tokenAddress),y=await ae(T,P),f=Be(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),a.toAccountAddress);Bt.setProvider(f);let C=await Bt.Spl.token(f).account.token.fetchNullable(y);if(C?.authority.equals(T))b=Te(y.toBase58(),"SOLANA",this.chainType);else{let S=await f.connection.getTokenAccountsByOwner(T,{mint:P});if(S.value.length===0&&!C)b=Te(y.toBase58(),"SOLANA",this.chainType);else if(S.value.length>0)b=Te(S.value[0].pubkey.toBase58(),"SOLANA",this.chainType);else throw new M("Associated account has wrong owner")}l==="stablecoin"?(d=p.methods.bridgeWithWalletAddress(o,b,u,m,r),h="0"):(d=p.methods.bridgeWithWalletAddress(o,b,u,m,0),h=r)}else l==="stablecoin"?(d=p.methods.bridge(o,u,m,r),h="0"):(d=p.methods.bridge(o,u,m,0),h=r);return{sendMethod:d,value:h}}async sendRawTransaction(a){let s=await this.web3.eth.estimateGas(a),r={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:o}=await this.web3.eth.sendTransaction({...a,gas:s,...r});return{txId:o}}getContract(a,s){return new this.web3.eth.Contract(a,s)}getBridgeContract(a){return this.getContract(Mn,a)}};var It=class{constructor(i,a,s,r){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=r}async approve(i,a){let s,r;a?(s=i,r=a):r=i;let o=et(r.token,r.messenger);return this.tokenService.buildRawTransactionApprove({...r,spender:o},s)}async send(i,a){return k(i.amount),x("amount",i.amount,i.sourceToken.decimals),En(i)?Rt(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSend(i):Rt(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSwap(i)}};import{BN as Xe,Program as mn,Spl as Ha,web3 as Re}from"@project-serum/anchor";import{Keypair as ta,PublicKey as F,SystemProgram as za}from"@solana/web3.js";import{Big as pe}from"big.js";var tt={version:"0.1.0",name:"bridge",instructions:[{name:"initialize",accounts:[{name:"admin",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"initializePool",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"token",isMut:!0,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializePoolArgs"}}]},{name:"initDepositAccount",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"deposit",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdraw",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amountLp",type:"u64"}]},{name:"swapAndBridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"messenger",isMut:!1,isSigner:!1},{name:"messengerConfig",isMut:!0,isSigner:!1},{name:"sentMessageAccount",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swapAndBridgeWormhole",accounts:[{name:"user",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"wormholeMessenger",isMut:!1,isSigner:!1},{name:"wormholeMessengerConfig",isMut:!0,isSigner:!1},{name:"wormholeProgram",isMut:!1,isSigner:!1},{name:"bridge",isMut:!0,isSigner:!1},{name:"message",isMut:!0,isSigner:!0},{name:"sequence",isMut:!0,isSigner:!1},{name:"feeCollector",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"clock",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swap",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"sendMint",isMut:!1,isSigner:!1},{name:"receiveMint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"sendPool",isMut:!0,isSigner:!1},{name:"receivePool",isMut:!0,isSigner:!1},{name:"sendBridgeToken",isMut:!0,isSigner:!1},{name:"receiveBridgeToken",isMut:!0,isSigner:!1},{name:"sendUserToken",isMut:!0,isSigner:!1},{name:"receiveUserToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"},{name:"receiveAmountMin",type:"u64"}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"receiveAndSwap",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"receiveAndSwapWormhole",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"claimRewards",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setAdmin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAdmin",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"startBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"stopBridge",accounts:[{name:"stopAuthority",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"setRebalancer",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"rebalancer",isMut:!1,isSigner:!1}],args:[]},{name:"setStopAuthority",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAuthority",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"setAllbridgeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setWormholeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setPoolFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setBalanceRatioMin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"balanceRatioMinBp",type:"u16"}]},{name:"setPoolAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"addOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"removeOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"adjustTotalLpAmount",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[]}],accounts:[{name:"chainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"config",type:{kind:"struct",fields:[{name:"admin",type:"publicKey"},{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"rebalancer",type:"publicKey"},{name:"stopAuthority",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"canSwap",type:"bool"},{name:"canDeposit",type:"bool"},{name:"canWithdraw",type:"bool"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"sentTokenAddress",type:"publicKey"},{name:"amount",type:"u64"},{name:"vusdAmount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:"Messenger"}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"otherBridgeToken",type:{kind:"struct",fields:[]}},{name:"pool",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"tokenBalance",type:"u64"},{name:"vUsdBalance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"totalLpAmount",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"accRewardPerShareP",type:"u128"},{name:"adminFeeAmount",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"vUsdAmount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"userDeposit",type:{kind:"struct",fields:[{name:"userAddress",type:"publicKey"},{name:"mint",type:"publicKey"},{name:"lpAmount",type:"u64"},{name:"rewardDebt",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"vusdAmount",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"publicKey"},{name:"sourceChainId",type:"u8"},{name:"receiveToken",type:"publicKey"},{name:"messenger",type:{defined:"Messenger"}},{name:"hash",type:{array:["u8",32]}},{name:"receiveAmountMin",type:"u64"}]}},{name:"RewardError",type:{kind:"enum",variants:[{name:"FeeTooHigh"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}}],errors:[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"PoolInfo overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"}]};var Yn={version:"0.1.0",name:"cctp_bridge",instructions:[{name:"initialize",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"bridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"messageSentEventData",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!0,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"cctpMessenger",isMut:!1,isSigner:!1},{name:"messageTransmitterProgram",isMut:!1,isSigner:!1},{name:"messageTransmitterAccount",isMut:!0,isSigner:!1},{name:"tokenMessenger",isMut:!1,isSigner:!1},{name:"tokenMinter",isMut:!1,isSigner:!1},{name:"localToken",isMut:!0,isSigner:!1},{name:"remoteTokenMessengerKey",isMut:!1,isSigner:!1},{name:"authorityPda",isMut:!1,isSigner:!1},{name:"eventAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"setAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setCctpTokenMessengerMinter",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]}],accounts:[{name:"cctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"admin",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"adminFeeShareBp",type:"u64"},{name:"adminFeeAmount",type:"u64"}]}},{name:"chainBridge",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"amount",type:"u64"},{name:"adminFee",type:"u64"},{name:"relayerFee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"slot",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gasOracleProgramId",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"}]}}],errors:[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}]};import{Spl as Va}from"@project-serum/anchor";import Oa from"big.js";import vt from"web3";async function Oe(A,i){return await Va.token(i).account.token.fetch(A)}async function Ln(A,i,a){let s=await i.account.pool.fetch(a),r=s.decimals,o=Oa(s.feeShareBp.toString()).div(1e4).toFixed(),c={aValue:s.a.toString(),dValue:s.d.toString(),totalLpAmount:s.totalLpAmount.toString(),tokenBalance:s.tokenBalance.toString(),vUsdBalance:s.vUsdBalance.toString(),accRewardPerShareP:s.accRewardPerShareP.toString()};return le(A,{decimals:r,feeShare:o},c)}function Jn(A){let i=A.amount,a="0x"+A.recipient.toString("hex"),s=A.sourceChainId,r=A.destinationChainId,o="0x"+A.receiveToken.toString("hex"),c="0x"+A.nonce.toString("hex"),m=1,u="0x"+A.chainBridge.toString("hex"),l=vt.utils.encodePacked({t:"uint256",v:i},{t:"bytes32",v:a},{t:"uint256",v:s},{t:"bytes32",v:o},{t:"uint256",v:c},{t:"uint8",v:m});if(!l)throw new M("message cannot be undefined");let p=vt.utils.keccak256(Buffer.from(l.replace("0x",""),"hex")),d=Buffer.from(p.replace("0x",""),"hex");d[0]=s,d[1]=r;let h=vt.utils.encodePacked({t:"bytes32",v:"0x"+d.toString("hex")},{t:"bytes32",v:u});if(!h)throw new Ze("messageWithSigner cannot be undefined");let b=vt.utils.keccak256(Buffer.from(h.replace("0x",""),"hex")),T=Buffer.from(b.replace("0x",""),"hex");return T[0]=d[0],T[1]=d[1],T}import{ComputeBudgetInstruction as Qn,ComputeBudgetProgram as Mt,Connection as Hn,TransactionMessage as Ea}from"@solana/web3.js";import{Big as Xa}from"big.js";import{AddressLookupTableAccount as Kn}from"@solana/web3.js";async function We(A,i){return await Promise.all(A.message.addressTableLookups.map(async a=>new Kn({key:a.accountKey,state:Kn.deserialize(await i.getAccountInfo(a.accountKey).then(s=>{if(!s)throw new M("Cannot get AccountInfo");return s.data}))})))}var An="AUTO";async function Ee(A,i,a){let s=new Hn(a,"confirmed"),r=(await s.simulateTransaction(A)).value.unitsConsumed;await jn(A.instructions,r,i,s)}async function zn(A,i,a){let s=new Hn(a,"confirmed"),r=await We(A,s),o=Ea.decompile(A.message,{addressLookupTableAccounts:r});if(A.serialize().length>1232)throw new ht;await jn(o.instructions,769230,i,s),A.message=o.compileToV0Message(r)}async function jn(A,i,a,s){if(i>0){let r=Ya(i,A);if(a?.solana){let o=a.solana;if(o===An)await cn(A,s);else if("pricePerUnitInMicroLamports"in o)await cn(A,s,o.pricePerUnitInMicroLamports);else{let c=Xa(o.extraFeeInLamports).div(r).mul(He(6)).toFixed(0);await cn(A,s,c)}}}}function Ya(A,i){let a=i.findIndex(o=>o.programId.equals(Mt.programId)&&Qn.decodeInstructionType(o)==="SetComputeUnitLimit"),s=Number((A*1.3).toFixed(0)),r=Mt.setComputeUnitLimit({units:s});return a>=0?i[a]=r:i.push(r),s.toString()}async function cn(A,i,a){let s=A.findIndex(c=>c.programId.equals(Mt.programId)&&Qn.decodeInstructionType(c)==="SetComputeUnitPrice"),r=BigInt(a||await La(i)),o=Mt.setComputeUnitPrice({microLamports:r});return s>=0?A[s]=o:A.push(o),r.toString()}async function La(A){let i=await A.getRecentPrioritizationFees(),a=0;for(let s of i)a+=s.prioritizationFee;return(a/i.length).toFixed(0)}import{NATIVE_MINT as Ja}from"@solana/spl-token";import{Connection as Ka,TransactionMessage as qn,VersionedTransaction as Qa}from"@solana/web3.js";import $n,{AxiosError as ea}from"axios";var kt=class{constructor(i,a){this.connection=new Ka(i),this.jupiterUrl=a.replace(/\/$/,"")}async getJupiterSwapTx(i,a,s,r){let o;try{let d=r?"ExactOut":"ExactIn";o=await $n.get(`${this.jupiterUrl}/quote?inputMint=${a}
2
- &outputMint=${Ja.toString()}
1
+ var lt={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://quote-api.jup.ag/v6",wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7}},cachePoolInfoChainSec:20},ji={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},qi={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org"};import{Big as pe}from"big.js";var Z=class extends Error{constructor(i,a){super(a),this.errorCode=i}},P=class extends Z{constructor(i){super("SdkError",i)}},ut=class extends Z{constructor(i){super("InvalidAmountError",i)}},Fe=class extends Z{constructor(i){super("AmountNotEnoughError",i)}},fe=class extends Z{constructor(i){super("InsufficientPoolLiquidityError",i)}},V=class extends Z{constructor(i){super("JupiterError",i)}},Le=class extends Z{constructor(i){super("InvalidGasFeePaymentOptionError",i)}},gn=class extends Z{constructor(i){super("InvalidMessengerOptionError",i)}},L=class extends Z{constructor(i){super("MethodNotSupportedError",i)}},Je=class extends Z{constructor(i){super("VerifyTxError",i)}},Ge=class extends Z{constructor(i){super("InvalidTxError",i)}},dt=class extends Z{constructor(i){super("ExtraGasMaxLimitExceededError",i)}},pt=class extends Z{constructor(i,a,s){super("ArgumentInvalidDecimalsError",`Argument '${i}' decimals '${a}' cannot be greater than '${s}'`)}},Ke=class extends Z{constructor(i){super("TimeoutError",i)}},gt=class extends Z{constructor(i){super("NodeRpcUrlNotInitializedError",`For chain '${i}' Node RPC URL not initialized`)}},te=class extends Z{constructor(i){super("CCTPDoesNotSupportedError",i)}},ft=class extends Z{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},ha=(y=>(y.SDK_ERROR="SdkError",y.INVALID_AMOUNT_ERROR="InvalidAmountError",y.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",y.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",y.JUPITER_ERROR="JupiterError",y.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",y.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",y.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",y.VERIFY_TX_ERROR="VerifyTxError",y.INVALID_TX_ERROR="InvalidTxError",y.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",y.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",y.TIMEOUT_ERROR="TimeoutError",y.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",y.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",y.TX_TOO_LARGE="TxTooLargeError",y))(ha||{});var ne=(g=>(g.BSC="BSC",g.ETH="ETH",g.BAS="BAS",g.SOL="SOL",g.TRX="TRX",g.POL="POL",g.ARB="ARB",g.CEL="CEL",g.AVA="AVA",g.SRB="SRB",g.STLR="STLR",g.OPT="OPT",g))(ne||{}),_=(r=>(r.EVM="EVM",r.SOLANA="SOLANA",r.TRX="TRX",r.SRB="SRB",r))(_||{});var ba={EVM:18,SOLANA:9,TRX:6,SRB:7},Ta={BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"}},R=(()=>{let A={...Ta};return{addChainsProperties(i){A={...A,...i}},getChainProperty(i){let a=A[i];if(!a)throw new P(`Cannot find chain properties for ${i}`);return a},getChainsProperties(){return A},getChainDecimalsByType(i){return ba[i]}}})();import Ia from"axios";var fn="3.18.0-beta.2";import{Big as f}from"big.js";import Ht from"bn.js";function zt(A,i){return f(100).minus(f(100).times(i).div(A)).toNumber()}function Me(A,i){return Se(A,i,3).round(0,f.roundDown)}function Q(A,i){return Se(A,3,i)}function Se(A,i,a){let s=f(a).minus(i).toNumber();return f(A).times(Qe(s))}function Qe(A){return f(10).pow(A)}function k(A,i){return f(A).times(Qe(i))}function C(A,i){let a=f(A);return a.eq(0)?f(0):f(a).div(Qe(i))}function H(A){return C(f(A.tokenBalance).minus(A.vUsdBalance).toFixed(),3).div(2).toFixed()}function le(A,{feeShare:i,decimals:a},s){let r=f(A);if(r.lte(0))return"0";let o=r.times(i),c=r.minus(o),m=Me(c,a),l=f(s.tokenBalance).plus(m),u=ue(l,s.aValue,s.dValue);return f(s.vUsdBalance).minus(u).round(0,f.roundDown).toFixed()}function He(A,{feeShare:i,decimals:a},s){let r=f(A);if(r.lte(0))return f(0).toFixed();let o=r.plus(s.vUsdBalance),c=ue(o,s.aValue,s.dValue),m=Q(f(s.tokenBalance).minus(c),a),l=f(m).times(i);return f(m).minus(l).round(0,f.roundDown).toFixed()}function yn(A,i){let a=f(A);if(a.lte(0))return i;let s=a.plus(i.vUsdBalance),r=ue(s,i.aValue,i.dValue);return{aValue:i.aValue,dValue:i.dValue,tokenBalance:r.toFixed(0),vUsdBalance:s.toFixed(0)}}function hn(A,{feeShare:i,decimals:a},s){if(f(A).lte(0))return f(0);let r=f(s.vUsdBalance).minus(A);if(r.lte(0))throw new fe;let o=ue(r,s.aValue,s.dValue),c=f(o).minus(s.tokenBalance),m=Q(c,a),l=f(i).div(f(1).minus(i)),u=f(m).times(l).round(0,f.roundUp);return f(m).plus(u).round(0,f.roundDown)}function bn(A,{feeShare:i,decimals:a},s){if(f(A).lte(0))return f(0);let r=f(i).div(f(1).minus(i)),o=f(A).times(r).round(0,f.roundUp),c=f(A).plus(o),m=Me(c,a),l=f(s.tokenBalance).minus(m);if(l.lte(0))throw new fe;let u=ue(l,s.aValue,s.dValue);return f(u).minus(s.vUsdBalance).round(0,f.roundDown)}function ue(A,i,a){let s=f(4).times(i).times(f(a).minus(A)).minus(a),r=f(a).pow(3),o=s.pow(2),c=f(A).times(f(A).times(o).plus(f(4).times(i).times(r))).sqrt().round(0,f.roundDown),m=f(8).times(i).times(A),l=s.times(A).plus(c).div(m).round(0,f.roundDown);return l.eq(0)?f(0):l.plus(1)}function Tn(A,i,a,s){let r=new Ht(A),o=new Ht(a),c=new Ht(i);return r.mul(o).shrn(s).sub(c).toString()}function Pn(A){return f(A).gt(0)?`${Number(f(A).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function Sn(A,i,a){let s=f(i).times(a),r=f(i).plus(a),o=f(8).times(A).times(s).times(r),c=s.times(f(16).times(A).minus(4)).div(3),m=o.times(o),l=c.times(c).times(c),u=m.plus(l),p=f(u).sqrt(),d=f(Math.cbrt(+o.plus(p).toFixed())),g=f(Math.cbrt(+o.minus(p).toFixed()));return d.plus(g).toFixed()}var jt=(c=>(c.OK="OK",c.INVALID="INVALID",c.FORBIDDEN="FORBIDDEN",c.UNINITIALIZED="UNINITIALIZED",c.CONTRACT_ADDRESS="CONTRACT_ADDRESS",c.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",c))(jt||{});var ye=(s=>(s[s.ALLBRIDGE=1]="ALLBRIDGE",s[s.WORMHOLE=2]="WORMHOLE",s[s.CCTP=3]="CCTP",s))(ye||{});function wn(A){return Object.entries(A).reduce((i,a)=>{let s=a[0],r=a[1],o=Ba(s,r);return o&&(i[s]=o),i},{})}function Cn(A){let i={};for(let[a,s]of Object.entries(A)){let r=a;for(let o of s.tokens){let c=Ze({chainSymbol:r,poolAddress:o.poolAddress}),m=H(o.poolInfo);i[c]={...o.poolInfo,imbalance:m}}}return i}function Pa(A,i){let{name:a,...s}=A,{poolInfo:r,...o}=i;return{...o,...s,chainName:a}}function Sa(A){switch(A){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;default:return null}}function wa(A){return Object.entries(A).reduce((i,[a,s])=>(i[a]=Ca(s),i),{})}function Ca(A){return Object.entries(A).reduce((i,[a,s])=>{let r=Sa(a);return r&&(i[r]=s),i},{})}function Ba(A,i){let a=R.getChainsProperties()[A];if(!a)return null;let s={...a,allbridgeChainId:i.chainId,bridgeAddress:i.bridgeAddress,transferTime:wa(i.transferTime),txCostAmount:i.txCostAmount,confirmations:i.confirmations};return{...s,tokens:i.tokens.map(r=>Pa(s,r))}}function Ze(A){return A.chainSymbol+"_"+A.poolAddress}function Bn(A){let i=[];for(let[a,s]of Object.entries(A)){let r=a;for(let o of s.tokens)i.push({chainSymbol:r,poolAddress:o.poolAddress})}return i}function In(A){let i={};for(let[a,s]of Object.entries(A)){let r=a;for(let[o,c]of Object.entries(s))c.imbalance=H(c),i[Ze({chainSymbol:r,poolAddress:o})]=c}return i}var yt=class{constructor(i){this.api=Ia.create({baseURL:i.coreApiUrl,headers:{Accept:"application/json",...i.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+fn},params:i.coreApiQueryParams})}async getTokenInfo(){let{data:i}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:wn(i),poolInfoMap:Cn(i)}}async getPendingInfo(){let{data:i}=await this.api.get("/pending-info");return i}async getGasBalance(i,a){let{data:s}=await this.api.get(`/check/${i}/${a}`);return s}async getTransferStatus(i,a){let{data:s}=await this.api.get(`/chain/${i}/${a}`);return s}async getReceiveTransactionCost(i){let{data:a}=await this.api.post("/receive-fee",i,{headers:{"Content-Type":"application/json"}});return{exchangeRate:a.exchangeRate,fee:a.fee,sourceNativeTokenPrice:a.sourceNativeTokenPrice}}async getPoolInfoMap(i){let a=i instanceof Array?i:[i],{data:s}=await this.api.post("/pool-info",{pools:a},{headers:{"Content-Type":"application/json"}});return In(s)}};import ht from"timed-cache";var qt=20*1e3,Ra=55*1e3,bt=class{constructor(i){this.apiClient=i;this.tokenInfoCache=new ht({defaultTtl:Ra}),this.receivedTransactionCache=new ht({defaultTtl:qt}),this.pendingInfoCache=new ht({defaultTtl:qt}),this.gasBalanceCache=new ht({defaultTtl:qt})}getTokenInfo(){let i="TOKEN_INFO_CACHE_KEY",a=this.tokenInfoCache.get(i);if(a)return a;let s=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(i,s),s}async getGasBalance(i,a){let s=`GAS_BALANCE_${i}_${a}`,r=this.gasBalanceCache.get(s);if(r)return r;let o=this.apiClient.getGasBalance(i,a);return this.gasBalanceCache.put(s,o),o}async getPendingInfo(){let i="PENDING_INFO_CACHE_KEY",a=this.pendingInfoCache.get(i);if(a)return a;let s=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(i,s),s}async getReceiveTransactionCost(i){let a=`RECEIVE_TX_COST_${i.sourceChainId}_${i.destinationChainId}_${i.messenger}`,s=this.receivedTransactionCache.get(a);if(s)return s;let r=await this.apiClient.getReceiveTransactionCost(i);return this.receivedTransactionCache.put(a,r),r}async getTransferStatus(i,a){return this.apiClient.getTransferStatus(i,a)}async getPoolInfoMap(i){return this.apiClient.getPoolInfoMap(i)}};var Tt=class{constructor(i){this.apiClient=i}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let i=await this.getChainDetailsMap();return Object.values(i).flatMap(a=>a.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(i,a){return this.apiClient.getGasBalance(i,a)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(i,a){return await this.apiClient.getTransferStatus(i,a)}async getReceiveTransactionCost(i){return await this.apiClient.getReceiveTransactionCost(i)}async getPoolInfoMap(i){return await this.apiClient.getPoolInfoMap(i)}};var Pt=class{constructor(i,a){this.client=i;this.isStaging=a.coreApiQueryParams?.staging==="true"}async getChainDetailsMap(i){let a=await this.client.getChainDetailsMap(),s={};for(let r in a){let o=a[r];o&&(s[r]={...o,tokens:Rn(o.tokens,i,this.isStaging)})}return s}async tokens(i){return Rn(await this.client.tokens(),i,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(i,a){return this.client.getGasBalance(i,a)}async getTransferStatus(i,a){return await this.client.getTransferStatus(i,a)}async getReceiveTransactionCost(i){return await this.client.getReceiveTransactionCost(i)}cachePut(i,a){return this.client.cachePut(i,a)}getPoolInfoByKey(i){return this.client.getPoolInfoByKey(i)}refreshPoolInfo(i){return this.client.refreshPoolInfo(i)}};function Rn(A,i,a){return A.filter(s=>a?!0:s.flags[i]).map(va)}function va(A){let{flags:i,...a}=A;return a}import ka from"timed-cache";var Ma=55*1e3,St=class{constructor(i){this.client=i;this.poolInfoCache=new $t}async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(i,a){return this.client.getTransferStatus(i,a)}getReceiveTransactionCost(i){return this.client.getReceiveTransactionCost(i)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(i,a){return this.client.getGasBalance(i,a)}async getPoolInfoByKey(i){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let a=this.poolInfoCache.get(i);if(a)return a;{let s=await this.client.getPoolInfoMap(i);this.poolInfoCache.putAll(s);let r=s[Ze(i)];if(r)return r;throw new P("Cannot find pool info for "+i.poolAddress+" on chain "+i.chainSymbol)}}async refreshPoolInfo(i){let a;if(i)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),a=await this.client.getPoolInfoMap(i);else{let s=await this.client.getChainDetailsMapAndPoolInfoMap();a=await this.client.getPoolInfoMap(Bn(s.chainDetailsMap))}this.poolInfoCache.putAll(a)}cachePut(i,a){this.poolInfoCache.put(Ze(i),a)}},$t=class{constructor(){this.cache=new ka({defaultTtl:Ma})}putAll(i){for(let[a,s]of Object.entries(i))this.cache.put(a,s)}putAllIfNotExists(i){for(let[a,s]of Object.entries(i))this.cache.get(a)||this.cache.put(a,s)}put(i,a){this.cache.put(i,a)}get(i){let a=Ze(i);return this.cache.get(a)}};import Ai from"tronweb";import ci from"web3";import{Big as vn}from"big.js";async function U(A,i){return await A.getPoolInfoByKey({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress})}function x(A){if(vn(A).lte(0))throw new ut("Amount must be greater than zero")}function W(A,i,a){let s=vn(i).toFixed(),[r,o]=s.split(".");if(o&&o.length>a)throw new pt(A,o.length,a)}async function wt(A,i,a){return await Promise.race([A,new Promise((s,r)=>{setTimeout(()=>r(new Ke(i)),a)})])}async function en(A,i,a,s){if(a<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${a} was received.`);let r=0;for(;;)try{return await wt(A(),i,s)}catch{if(++r>=a)throw new Ke(i)}}async function kn(A,i,a,s=1.5,r=!1){let o=[],c=0,m=await A();if(o.push(m),!i(m))return o;let l=new Date(Date.now()+a*1e3).valueOf(),u=1e3,p=u;for(;Date.now()<l;){let d=o[o.length-1];if(d===void 0||!i(d))break;c++,r&&console.info(`Waiting ${u}ms before trying again (bringing the total wait time to ${p}ms so far, of total ${a*1e3}ms)`),await new Promise(h=>setTimeout(h,u)),u=u*s,new Date(Date.now()+u).valueOf()>l&&(u=l-Date.now(),r&&console.info(`was gonna wait too long; new waitTime: ${u}ms`)),p=u+p;let g=await A(d);o.push(g),r&&i(g)&&console.info(`${c}. Called ${A.name}; ${o.length} prev attempts. Most recent: ${JSON.stringify(o[o.length-1],null,2)}`)}return o}import*as Bt from"@project-serum/anchor";import{PublicKey as Yn}from"@solana/web3.js";import{Big as Xa}from"big.js";var Mn=[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];var xn=[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];import*as E from"@project-serum/anchor";import{PublicKey as X}from"@solana/web3.js";async function ae(A,i){return E.utils.token.associatedAddress({mint:i,owner:A})}async function we(A){let[i]=await X.findProgramAddress([E.utils.bytes.utf8.encode("config")],A);return i}async function Wn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("lock"),Uint8Array.from(A)],i);return a}async function ze(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([A])],i);return a}async function De(A){let i=await we(A),[a]=await X.findProgramAddress([i.toBuffer()],A);return a}async function Fn(A,i){let[a]=await X.findProgramAddress([A.toBuffer()],i);return a}async function Ne(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("token"),A.toBytes()],i);return a}async function Gn(A,i,a){let[s]=await X.findProgramAddress([E.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([A]),i],a);return s}async function tn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([A])],i);return a}async function nn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([A])],i);return a}async function Zn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("sent_message"),A],i);return a}async function an(A,i,a){let[s]=await X.findProgramAddress([E.utils.bytes.utf8.encode("user_deposit"),i.toBytes(),A.toBytes()],a);return s}async function Dn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("cctp_bridge"),A.toBytes()],i);return a}async function Nn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("token"),A.toBytes()],i);return a}function _n(A,i){let[a]=X.findProgramAddressSync([E.utils.bytes.utf8.encode("lock"),i.toBuffer()],A);return a}function Un(A,i,a,s){let r=xe("message_transmitter",a),o=xe("token_messenger",s),c=xe("__event_authority",s),m=xe("token_minter",s),l=xe("local_token",s,[i]),u=xe("remote_token_messenger",s,[A.toString()]),p=xe("sender_authority",s);return{messageTransmitterAccount:r,tokenMessenger:o,tokenMessengerEventAuthority:c,tokenMinter:m,localToken:l,remoteTokenMessengerKey:u,authorityPda:p}}function xe(A,i,a=[]){let s=[Buffer.from(E.utils.bytes.utf8.encode(A))];for(let o of a)typeof o=="string"?s.push(Buffer.from(E.utils.bytes.utf8.encode(o))):Array.isArray(o)?s.push(Buffer.from(o)):Buffer.isBuffer(o)?s.push(o):s.push(o.toBuffer());return X.findProgramAddressSync(s,i)[0]}import{AnchorProvider as Fa}from"@project-serum/anchor";import{Connection as Ga,PublicKey as Za}from"@solana/web3.js";function Ce(A,i){let a=new Ga(A,"confirmed"),s=new Za(i);return new Fa(a,{publicKey:s},{preflightCommitment:"confirmed",commitment:"confirmed"})}var ie=class{};import{PublicKey as Da}from"@solana/web3.js";import{Address as Na}from"@stellar/stellar-sdk";import{Big as he}from"big.js";import Vn from"randombytes";import*as On from"tronweb";function be(A,i,a){let s;switch(i){case"EVM":{s=_a(A);break}case"SOLANA":{s=new Da(A).toBuffer();break}case"TRX":{s=Ua(A);break}case"SRB":{s=new Na(A).toBuffer();break}}switch(a){case"EVM":return"0x"+s.toString("hex");case"SOLANA":return Array.from(s);case"TRX":return s.toJSON().data;case"SRB":return s.toJSON().data}}function En(A){return Buffer.from(A.replace(/^0x/i,""),"hex")}function _a(A){let a=En(A);return Buffer.concat([Buffer.alloc(32-a.length,0),a],32)}function Ua(A){let i=je(A),a=En(i);return Va(a,32)}function je(A){return Buffer.from(On.utils.crypto.decodeBase58Address(A)).toString("hex").replace(/^41/,"0x")}function Va(A,i){if(A.length>=i)return A;let a=Buffer.alloc(i,0);return A.copy(a,i-A.length),a}function _e(){return Vn(32)}function sn(){let A=Vn(32).readBigInt64BE();return A<0?A*-1n:A}function Be(A,i){let a={},s=i.sourceToken;return a.amount=k(i.amount,s.decimals).toFixed(),a.contractAddress=s.bridgeAddress,a.fromAccountAddress=i.fromAccountAddress,a.fromTokenAddress=be(s.tokenAddress,A,A),a.toAccountAddress=i.toAccountAddress,a.toTokenAddress=be(i.destinationToken.tokenAddress,A,A),a.minimumReceiveAmount=i.minimumReceiveAmount?k(i.minimumReceiveAmount,i.destinationToken.decimals).toFixed():"0",a}async function Te(A,i,a){let s={};s.fromChainId=i.sourceToken.allbridgeChainId,s.fromChainSymbol=i.sourceToken.chainSymbol;let r=R.getChainProperty(i.destinationToken.chainSymbol).chainType;s.fromTokenAddress=i.sourceToken.tokenAddress,s.toChainId=i.destinationToken.allbridgeChainId,s.toTokenAddress=i.destinationToken.tokenAddress,i.gasFeePaymentMethod==="stablecoin"?s.gasFeePaymentMethod="stablecoin":s.gasFeePaymentMethod="native";let o=i.sourceToken;if(i.messenger===3){if(!o.cctpAddress||!i.destinationToken.cctpAddress)throw new te("Such route does not support CCTP protocol");s.contractAddress=o.cctpAddress}else s.contractAddress=o.bridgeAddress;s.messenger=i.messenger,s.fromAccountAddress=i.fromAccountAddress,s.amount=k(i.amount,o.decimals).toFixed();let{fee:c,feeFormat:m}=i;if(!c){let d=(await rn(s.fromChainId,i.sourceToken.chainType,s.toChainId,o.decimals,s.messenger,a))[s.gasFeePaymentMethod];if(!d)throw new Le;c=d.int,m="int"}if(m=="float")switch(s.gasFeePaymentMethod){case"native":s.fee=k(c,R.getChainDecimalsByType(o.chainType)).toFixed(0);break;case"stablecoin":s.fee=k(c,o.decimals).toFixed(0);break}else s.fee=c;let{extraGas:l,extraGasFormat:u}=i;if(l&&+l>0){if(u=="float")switch(s.gasFeePaymentMethod){case"native":s.extraGas=k(l,R.getChainDecimalsByType(o.chainType)).toFixed(0);break;case"stablecoin":s.extraGas=k(l,o.decimals).toFixed(0);break}else s.extraGas=l;await Ea(s.extraGas,s.gasFeePaymentMethod,o,i.destinationToken,a)}return s.fromTokenAddress=be(s.fromTokenAddress,A,A),s.toAccountAddress=be(i.toAccountAddress,r,A),s.toTokenAddress=be(s.toTokenAddress,r,A),s.gasFeePaymentMethod=="stablecoin"&&Oa(s.amount,o.decimals,s.fee,s.extraGas),s}function Oa(A,i,a,s){let r=he(A).minus(a).minus(s??0);if(r.lte(0))throw new Fe(`Amount not enough to pay fee, ${C(he(r).minus(1).neg(),i).toFixed()} stables is missing`)}async function rn(A,i,a,s,r,o){let c=await o.getReceiveTransactionCost({sourceChainId:A,destinationChainId:a,messenger:r}),m={native:{int:c.fee,float:C(c.fee,R.getChainDecimalsByType(i)).toFixed()}};if(c.sourceNativeTokenPrice){let l=Se(new he(c.fee).mul(c.sourceNativeTokenPrice),R.getChainDecimalsByType(i),s).toFixed(0,he.roundUp);m.stablecoin={int:l,float:C(l,s).toFixed()}}return m}async function Ea(A,i,a,s,r){let c=(await on(a,s,r)).extraGasMax[i];if(!c)throw new Le(`Impossible to pay extra gas by '${i}' payment method`);let m=c.int;if(he(A).gt(m))throw new dt(`Extra gas ${A} in int format, exceeded limit ${m} for '${i}' payment method`)}async function on(A,i,a){let s={},r=await a.getReceiveTransactionCost({sourceChainId:A.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:1}),o=i.txCostAmount.maxAmount,c=C(o,R.getChainDecimalsByType(i.chainType)).toFixed(),m=he(c).div(r.exchangeRate).toFixed(R.getChainDecimalsByType(A.chainType),he.roundDown),l=k(m,R.getChainDecimalsByType(A.chainType)).toFixed(0);if(s.native={int:l,float:m},r.sourceNativeTokenPrice){let u=he(m).mul(r.sourceNativeTokenPrice).toFixed(A.decimals,he.roundDown);s.stablecoin={int:k(u,A.decimals).toFixed(0),float:u}}return{extraGasMax:s,destinationChain:{gasAmountMax:{int:o,float:c},swap:{int:i.txCostAmount.swap,float:C(i.txCostAmount.swap,R.getChainDecimalsByType(i.chainType)).toFixed()},transfer:{int:i.txCostAmount.transfer,float:C(i.txCostAmount.transfer,R.getChainDecimalsByType(i.chainType)).toFixed()}},exchangeRate:r.exchangeRate,sourceNativeTokenPrice:r.sourceNativeTokenPrice}}function Xn(A){return A.sourceToken.chainSymbol!==A.destinationToken.chainSymbol}var qe=class extends ie{constructor(a,s,r){super();this.web3=a;this.api=s;this.nodeRpcUrlsConfig=r;this.chainType="EVM"}async send(a){let s=await this.buildRawTransactionSend(a);return this.sendRawTransaction(s)}async buildRawTransactionSwap(a){let s=Be(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s)}async buildRawTransactionSwapFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:l,minimumReceiveAmount:u}=a,d=this.getBridgeContract(r).methods.swap(s,c,l,m,u);return Promise.resolve({from:o,to:r,data:d.encodeABI()})}async buildRawTransactionSend(a){let s=await Te(this.chainType,a,this.api),{amount:r,contractAddress:o,fromAccountAddress:c,fromTokenAddress:m,toChainId:l,toAccountAddress:u,toTokenAddress:p,messenger:d,fee:g,gasFeePaymentMethod:h,extraGas:b}=s,T="0x"+_e().toString("hex"),y,S,B=g;if(b&&(B=Xa(B).plus(b).toFixed()),d===3){let w=await this.buildRawTransactionCctpSend(a,s,B);y=w.sendMethod,S=w.value}else{let w=this.getBridgeContract(o);h==="stablecoin"?(y=w.methods.swapAndBridge(m,r,u,l,p,T,d,B),S="0"):(y=w.methods.swapAndBridge(m,r,u,l,p,T,d,0),S=B)}return Promise.resolve({from:c,to:o,value:S,data:y.encodeABI()})}async buildRawTransactionCctpSend(a,s,r){let{amount:o,contractAddress:c,toChainId:m,toAccountAddress:l,gasFeePaymentMethod:u}=s,p=this.getContract(xn,c),d,g;if(a.destinationToken.chainType==="SOLANA"){let h,b=new Yn(a.toAccountAddress),T=new Yn(a.destinationToken.tokenAddress),y=await ae(b,T),S=Ce(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),a.toAccountAddress);Bt.setProvider(S);let B=await Bt.Spl.token(S).account.token.fetchNullable(y);if(B?.authority.equals(b))h=be(y.toBase58(),"SOLANA",this.chainType);else{let w=await S.connection.getTokenAccountsByOwner(b,{mint:T});if(w.value.length===0&&!B)h=be(y.toBase58(),"SOLANA",this.chainType);else if(w.value.length>0){let D=w.value[0];if(!D?.pubkey)throw new P("First token account or its public key is undefined");h=be(D.pubkey.toBase58(),"SOLANA",this.chainType)}else throw new P("Associated account has wrong owner")}u==="stablecoin"?(d=p.methods.bridgeWithWalletAddress(o,h,l,m,r),g="0"):(d=p.methods.bridgeWithWalletAddress(o,h,l,m,0),g=r)}else u==="stablecoin"?(d=p.methods.bridge(o,l,m,r),g="0"):(d=p.methods.bridge(o,l,m,0),g=r);return{sendMethod:d,value:g}}async sendRawTransaction(a){let s=await this.web3.eth.estimateGas(a),r={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:o}=await this.web3.eth.sendTransaction({...a,gas:s,...r});return{txId:o}}getContract(a,s){return new this.web3.eth.Contract(a,s)}getBridgeContract(a){return this.getContract(Mn,a)}};var It=class{constructor(i,a,s,r){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=r}async approve(i,a){let s,r;a?(s=i,r=a):r=i;let o=$e(r.token,r.messenger);return this.tokenService.buildRawTransactionApprove({...r,spender:o},s)}async send(i,a){return x(i.amount),W("amount",i.amount,i.sourceToken.decimals),Xn(i)?Rt(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSend(i):Rt(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSwap(i)}};import{BN as Ee,Program as mn,Spl as $a,web3 as Ie}from"@project-serum/anchor";import{Keypair as na,PublicKey as F,SystemProgram as ei}from"@solana/web3.js";import{Big as de}from"big.js";var et={version:"0.1.0",name:"bridge",instructions:[{name:"initialize",accounts:[{name:"admin",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"initializePool",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"token",isMut:!0,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializePoolArgs"}}]},{name:"initDepositAccount",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"deposit",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdraw",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amountLp",type:"u64"}]},{name:"swapAndBridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"messenger",isMut:!1,isSigner:!1},{name:"messengerConfig",isMut:!0,isSigner:!1},{name:"sentMessageAccount",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swapAndBridgeWormhole",accounts:[{name:"user",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"wormholeMessenger",isMut:!1,isSigner:!1},{name:"wormholeMessengerConfig",isMut:!0,isSigner:!1},{name:"wormholeProgram",isMut:!1,isSigner:!1},{name:"bridge",isMut:!0,isSigner:!1},{name:"message",isMut:!0,isSigner:!0},{name:"sequence",isMut:!0,isSigner:!1},{name:"feeCollector",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"clock",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swap",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"sendMint",isMut:!1,isSigner:!1},{name:"receiveMint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"sendPool",isMut:!0,isSigner:!1},{name:"receivePool",isMut:!0,isSigner:!1},{name:"sendBridgeToken",isMut:!0,isSigner:!1},{name:"receiveBridgeToken",isMut:!0,isSigner:!1},{name:"sendUserToken",isMut:!0,isSigner:!1},{name:"receiveUserToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"},{name:"receiveAmountMin",type:"u64"}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"receiveAndSwap",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"receiveAndSwapWormhole",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"claimRewards",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setAdmin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAdmin",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"startBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"stopBridge",accounts:[{name:"stopAuthority",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"setRebalancer",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"rebalancer",isMut:!1,isSigner:!1}],args:[]},{name:"setStopAuthority",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAuthority",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"setAllbridgeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setWormholeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setPoolFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setBalanceRatioMin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"balanceRatioMinBp",type:"u16"}]},{name:"setPoolAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"addOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"removeOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"adjustTotalLpAmount",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[]}],accounts:[{name:"chainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"config",type:{kind:"struct",fields:[{name:"admin",type:"publicKey"},{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"rebalancer",type:"publicKey"},{name:"stopAuthority",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"canSwap",type:"bool"},{name:"canDeposit",type:"bool"},{name:"canWithdraw",type:"bool"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"sentTokenAddress",type:"publicKey"},{name:"amount",type:"u64"},{name:"vusdAmount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:"Messenger"}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"otherBridgeToken",type:{kind:"struct",fields:[]}},{name:"pool",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"tokenBalance",type:"u64"},{name:"vUsdBalance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"totalLpAmount",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"accRewardPerShareP",type:"u128"},{name:"adminFeeAmount",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"vUsdAmount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"userDeposit",type:{kind:"struct",fields:[{name:"userAddress",type:"publicKey"},{name:"mint",type:"publicKey"},{name:"lpAmount",type:"u64"},{name:"rewardDebt",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"vusdAmount",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"publicKey"},{name:"sourceChainId",type:"u8"},{name:"receiveToken",type:"publicKey"},{name:"messenger",type:{defined:"Messenger"}},{name:"hash",type:{array:["u8",32]}},{name:"receiveAmountMin",type:"u64"}]}},{name:"RewardError",type:{kind:"enum",variants:[{name:"FeeTooHigh"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}}],errors:[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"PoolInfo overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"}]};var Ln={version:"0.1.0",name:"cctp_bridge",instructions:[{name:"initialize",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"bridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"messageSentEventData",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!0,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"cctpMessenger",isMut:!1,isSigner:!1},{name:"messageTransmitterProgram",isMut:!1,isSigner:!1},{name:"messageTransmitterAccount",isMut:!0,isSigner:!1},{name:"tokenMessenger",isMut:!1,isSigner:!1},{name:"tokenMinter",isMut:!1,isSigner:!1},{name:"localToken",isMut:!0,isSigner:!1},{name:"remoteTokenMessengerKey",isMut:!1,isSigner:!1},{name:"authorityPda",isMut:!1,isSigner:!1},{name:"eventAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"setAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setCctpTokenMessengerMinter",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]}],accounts:[{name:"cctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"admin",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"adminFeeShareBp",type:"u64"},{name:"adminFeeAmount",type:"u64"}]}},{name:"chainBridge",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"amount",type:"u64"},{name:"adminFee",type:"u64"},{name:"relayerFee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"slot",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gasOracleProgramId",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"}]}}],errors:[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}]};import{Spl as Ya}from"@project-serum/anchor";import La from"big.js";import vt from"web3";async function Ve(A,i){return await Ya.token(i).account.token.fetch(A)}async function Jn(A,i,a){let s=await i.account.pool.fetch(a),r=s.decimals,o=La(s.feeShareBp.toString()).div(1e4).toFixed(),c={aValue:s.a.toString(),dValue:s.d.toString(),totalLpAmount:s.totalLpAmount.toString(),tokenBalance:s.tokenBalance.toString(),vUsdBalance:s.vUsdBalance.toString(),accRewardPerShareP:s.accRewardPerShareP.toString()};return le(A,{decimals:r,feeShare:o},c)}function Kn(A){let i=A.amount,a="0x"+A.recipient.toString("hex"),s=A.sourceChainId,r=A.destinationChainId,o="0x"+A.receiveToken.toString("hex"),c="0x"+A.nonce.toString("hex"),m=1,l="0x"+A.chainBridge.toString("hex"),u=vt.utils.encodePacked({t:"uint256",v:i},{t:"bytes32",v:a},{t:"uint256",v:s},{t:"bytes32",v:o},{t:"uint256",v:c},{t:"uint8",v:m});if(!u)throw new P("message cannot be undefined");let p=vt.utils.keccak256(Buffer.from(u.replace("0x",""),"hex")),d=Buffer.from(p.replace("0x",""),"hex");d[0]=s,d[1]=r;let g=vt.utils.encodePacked({t:"bytes32",v:"0x"+d.toString("hex")},{t:"bytes32",v:l});if(!g)throw new Ge("messageWithSigner cannot be undefined");let h=vt.utils.keccak256(Buffer.from(g.replace("0x",""),"hex")),b=Buffer.from(h.replace("0x",""),"hex");return b[0]=d[0],b[1]=d[1],b}import{ComputeBudgetInstruction as Hn,ComputeBudgetProgram as kt,Connection as zn,TransactionMessage as Ja}from"@solana/web3.js";import{Big as Ka}from"big.js";import{AddressLookupTableAccount as Qn}from"@solana/web3.js";async function We(A,i){return await Promise.all(A.message.addressTableLookups.map(async a=>new Qn({key:a.accountKey,state:Qn.deserialize(await i.getAccountInfo(a.accountKey).then(s=>{if(!s)throw new P("Cannot get AccountInfo");return s.data}))})))}var An="AUTO";async function Oe(A,i,a){let s=new zn(a,"confirmed"),r=(await s.simulateTransaction(A)).value.unitsConsumed;await qn(A.instructions,r,i,s)}async function jn(A,i,a){let s=new zn(a,"confirmed"),r=await We(A,s),o=Ja.decompile(A.message,{addressLookupTableAccounts:r});if(A.serialize().length>1232)throw new ft;await qn(o.instructions,769230,i,s),A.message=o.compileToV0Message(r)}async function qn(A,i,a,s){if(i>0){let r=Qa(i,A);if(a?.solana){let o=a.solana;if(o===An)await cn(A,s);else if("pricePerUnitInMicroLamports"in o)await cn(A,s,o.pricePerUnitInMicroLamports);else{let c=Ka(o.extraFeeInLamports).div(r).mul(Qe(6)).toFixed(0);await cn(A,s,c)}}}}function Qa(A,i){let a=i.findIndex(o=>o.programId.equals(kt.programId)&&Hn.decodeInstructionType(o)==="SetComputeUnitLimit"),s=Number((A*1.3).toFixed(0)),r=kt.setComputeUnitLimit({units:s});return a>=0?i[a]=r:i.push(r),s.toString()}async function cn(A,i,a){let s=A.findIndex(c=>c.programId.equals(kt.programId)&&Hn.decodeInstructionType(c)==="SetComputeUnitPrice"),r=BigInt(a||await Ha(i)),o=kt.setComputeUnitPrice({microLamports:r});return s>=0?A[s]=o:A.push(o),r.toString()}async function Ha(A){let i=await A.getRecentPrioritizationFees(),a=0;for(let s of i)a+=s.prioritizationFee;return(a/i.length).toFixed(0)}import{NATIVE_MINT as za}from"@solana/spl-token";import{Connection as ja,TransactionMessage as $n,VersionedTransaction as qa}from"@solana/web3.js";import ea,{AxiosError as ta}from"axios";var Mt=class{constructor(i,a){this.connection=new ja(i),this.jupiterUrl=a.replace(/\/$/,"")}async getJupiterSwapTx(i,a,s,r){let o;console.log("J amount",s);try{let d=r?"ExactOut":"ExactIn";o=await ea.get(`${this.jupiterUrl}/quote?inputMint=${a}
2
+ &outputMint=${za.toString()}
3
3
  &amount=${s}
4
4
  &swapMode=${d}
5
5
  &slippageBps=100
6
- &onlyDirectRoutes=true`)}catch(d){throw d instanceof ea&&d.response&&d.response.data&&d.response.data.error?new V(d.response.data.error):new V("Cannot get route")}let c;if(r&&o?.data?.inAmount)c=o.data.inAmount;else if(r)throw new V("Cannot get inAmount");let m;try{m=await $n.post(`${this.jupiterUrl}/swap`,{quoteResponse:o.data,userPublicKey:i,wrapAndUnwrapSol:!0})}catch(d){throw d instanceof ea&&d.response&&d.response.data&&d.response.data.error?new V(d.response.data.error):new V("Cannot get swap transaction")}let u;if(m?.data?.swapTransaction)u=m.data.swapTransaction;else throw new V("Cannot get swap transaction");let l=Buffer.from(u,"base64"),p=Qa.deserialize(l);return r?{tx:p,amountIn:c}:{tx:p}}async amendJupiterWithSdkTx(i,a){try{let s=await We(i,this.connection),r=await We(a,this.connection),o=qn.decompile(i.message,{addressLookupTableAccounts:s}),c=qn.decompile(a.message,{addressLookupTableAccounts:r});return c.instructions.shift(),o.instructions.push(...c.instructions),s.push(...r),i.message=o.compileToV0Message(s),a.message.header.numRequiredSignatures===2&&i.signatures.length===1&&i.signatures.push(a.signatures[0]),i}catch(s){throw s instanceof Error&&s.message?new V(`Some error occurred during creation final swap and bridge transaction. ${s.message}`):new V("Some error occurred during creation final swap and bridge transaction")}}};var un=1e6,ja=1.1,xt=class extends ie{constructor(a,s,r){super();this.solanaRpcUrl=a;this.params=s;this.api=r;this.chainType="SOLANA";this.jupiterService=new kt(a,s.jupiterUrl)}async buildRawTransactionSwap(a){let s=Ie(this.chainType,a);return await this.buildSwapTransaction(s,a.sourceToken.poolAddress,a.destinationToken.poolAddress,a.txFeeParams)}async buildSwapTransaction(a,s,r,o){let{fromAccountAddress:c,amount:m,contractAddress:u,fromTokenAddress:l,toTokenAddress:p,toAccountAddress:d,minimumReceiveAmount:h}=a,b=c,T=u,P=l,y=p,f=r,C=d,S=new F(b),_=Be(this.solanaRpcUrl,S.toString()),v=new mn(tt,T,_),B=await Ne(v.programId),K=await Ce(v.programId),Z=new F(P),oe=await Ue(Z,v.programId),Ae=new F(s),fe=await ae(S,Z),$=new F(C),Y=new F(y),q=await Ue(Y,v.programId),ee=new F(f),Q=await ae($,Y),ce=[Re.ComputeBudgetProgram.setComputeUnitLimit({units:un})];try{await Oe(Q,_)}catch{let fa=await Ha.associatedToken(_).methods.create().accounts({mint:Y,owner:$,associatedAccount:Q}).instruction();ce.push(fa)}let me=await v.methods.swap(new Xe(m),new Xe(h||0)).accounts({payer:S,config:K,bridgeAuthority:B,user:S,sendBridgeToken:oe,sendMint:Z,sendPool:Ae,sendUserToken:fe,receiveBridgeToken:q,receiveMint:Y,receivePool:ee,receiveUserToken:Q}).preInstructions(ce).transaction(),te=_.connection;return me.recentBlockhash=(await te.getLatestBlockhash()).blockhash,me.feePayer=S,await Ee(me,o,this.solanaRpcUrl),await this.convertToVersionedTransaction(me,te)}async buildRawTransactionSend(a){let s=await Pe(this.chainType,a,this.api),r=this.addPoolAddress(a,s),o=r.gasFeePaymentMethod=="stablecoin",c;if(o)try{let{tx:l,solTxSendUpdatedParams:p}=await this.processJup(r,a,!0);c=l,r={...r,...p}}catch{try{let{tx:p,solTxSendUpdatedParams:d}=await this.processJup(r,a,!1);c=p,r={...r,...d}}catch(p){throw p instanceof G?p:p instanceof Error&&p.message?new V(`Some error occurred during creation Jupiter swap transaction. ${p.message}`):new V("Some error occurred during creation Jupiter swap transaction")}}let m,u;switch(s.messenger){case 1:{let l=await this.prepareSwapAndBridgeData(r);m=await this.buildSwapAndBridgeAllbridgeTransaction(l);break}case 2:{let l=await this.prepareSwapAndBridgeData(r),{transaction:p,messageAccount:d}=await this.buildSwapAndBridgeWormholeTransaction(l);m=p,u=d;break}case 3:{let l=await this.prepareSwapAndBridgeCctpData(r),{transaction:p,messageSentEventDataKeypair:d}=await this.buildSwapAndBridgeCctpTransaction(a.destinationToken.chainSymbol,l);m=p,u=d;break}}if(o){if(!c)throw new V("Swap tx is absent");m=await this.jupiterService.amendJupiterWithSdkTx(c,m)}return await zn(m,a.txFeeParams,this.solanaRpcUrl),u&&m.sign([u]),m}async processJup(a,s,r){let{fee:o,extraGas:c,gasFeePaymentMethod:m}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(s.sourceToken.decimals,a),u=r?pe(o):pe(a.fee);c&&(u=u.plus(c)),r||(u=u.mul(ja));let{tx:l,amountIn:p}=await this.jupiterService.getJupiterSwapTx(s.fromAccountAddress,s.sourceToken.tokenAddress,u.toFixed(0),r),d;if(r){if(!p)throw new V("Cannot get inAmount");d=pe(a.amount).minus(p).toFixed(0)}else d=pe(a.amount).minus(u).toFixed(0);if(pe(d).lte(0))throw new Ge(`Amount not enough to pay fee, ${w(pe(d).minus(1).neg(),s.sourceToken.decimals).toFixed()} stables is missing`);return{tx:l,solTxSendUpdatedParams:{amount:d,fee:o,extraGas:c,gasFeePaymentMethod:m}}}addPoolAddress(a,s){return{...s,poolAddress:a.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(a,s){if(s.gasFeePaymentMethod=="stablecoin"){let r=(await this.api.getReceiveTransactionCost({sourceChainId:s.fromChainId,destinationChainId:s.toChainId,messenger:s.messenger})).sourceNativeTokenPrice,o=pe(s.fee).div(r).mul(pe(10).pow(N.SOLANA-a)).toFixed(0),c;return s.extraGas&&(c=pe(s.extraGas).div(r).mul(pe(10).pow(N.SOLANA-a)).toFixed(0)),{fee:o,extraGas:c,gasFeePaymentMethod:"native"}}return{fee:s.fee,extraGas:s.extraGas,gasFeePaymentMethod:"native"}}getExtraGasInstruction(a,s,r){return Re.SystemProgram.transfer({fromPubkey:s,toPubkey:r,lamports:+a})}async prepareSwapAndBridgeData(a){let{amount:s,contractAddress:r,fromChainId:o,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,toTokenAddress:p,poolAddress:d,extraGas:h}=a,b=m,T=c,P=u,y=p,f=l,C=r,S=o,_=Be(this.solanaRpcUrl,T),v=new mn(tt,C,_),B=Array.from(_e()),K=new F(d),Z=await Ln(s,v,K),oe=await xn(B,v.programId),Ae=await Ne(v.programId),fe=await ae(new F(T),new F(b)),$=await Ue(new F(b),v.programId),Y=await tn(P,v.programId),q=await Wn(P,Buffer.from(y),v.programId),ee=await Ce(v.programId),Q=await v.account.config.fetch(ee),ce=await je(P,Q.gasOracleProgramId),me=await je(S,Q.gasOracleProgramId),te=Jn({amount:Z,recipient:Buffer.from(f),nonce:Buffer.from(B),receiveToken:Buffer.from(y),destinationChainId:P,sourceChainId:S,chainBridge:(await Ne(v.programId)).toBuffer()}),I={};return I.bridge=v,I.amount=new Xe(s),I.vusdAmount=new Xe(Z),I.nonce=B,I.recipient=Array.from(f),I.receiveToken=Array.from(y),I.poolAccount=K,I.lockAccount=oe,I.bridgeAuthority=Ae,I.userToken=fe,I.bridgeTokenAccount=$,I.chainBridgeAccount=Y,I.otherBridgeTokenAccount=q,I.userAccount=new F(T),I.destinationChainId=P,I.mint=new F(b),I.config=ee,I.configAccountInfo=Q,I.gasPrice=ce,I.thisGasPrice=me,I.message=te,h&&(I.extraGasInstruction=this.getExtraGasInstruction(h,I.userAccount,ee)),I}async buildSwapAndBridgeAllbridgeTransaction(a){let{bridge:s,vusdAmount:r,nonce:o,recipient:c,receiveToken:m,poolAccount:u,lockAccount:l,bridgeAuthority:p,userToken:d,bridgeTokenAccount:h,chainBridgeAccount:b,otherBridgeTokenAccount:T,userAccount:P,destinationChainId:y,mint:f,config:C,configAccountInfo:S,gasPrice:_,thisGasPrice:v,message:B,extraGasInstruction:K}=a,Z=S.allbridgeMessengerProgramId,oe=await nn(y,Z),Ae=await Ce(Z),fe=await Gn(B,Z),$=[];K&&$.push(K);let Y=await s.methods.swapAndBridge({vusdAmount:r,nonce:o,destinationChainId:y,recipient:c,receiveToken:m}).accounts({mint:f,user:P,config:C,lock:l,pool:u,gasPrice:_,thisGasPrice:v,bridgeAuthority:p,userToken:d,bridgeToken:h,chainBridge:b,messenger:Z,messengerGasUsage:oe,messengerConfig:Ae,sentMessageAccount:fe,otherBridgeToken:T}).preInstructions([Re.ComputeBudgetProgram.setComputeUnitLimit({units:un})]).postInstructions($).transaction(),q=Be(this.solanaRpcUrl,P.toString()).connection;return Y.recentBlockhash=(await q.getLatestBlockhash()).blockhash,Y.feePayer=P,await this.convertToVersionedTransaction(Y,q)}async convertToVersionedTransaction(a,s){let r=await s.getAddressLookupTable(new F(this.params.solanaLookUpTable)).then(c=>c.value);if(!r)throw new M("Cannot find allbridgeLookupTableAccount");let o=new Re.TransactionMessage({payerKey:a.feePayer,recentBlockhash:a.recentBlockhash,instructions:a.instructions}).compileToV0Message([r]);return new Re.VersionedTransaction(o)}async buildSwapAndBridgeWormholeTransaction(a){let{bridge:s,vusdAmount:r,nonce:o,recipient:c,receiveToken:m,poolAccount:u,lockAccount:l,bridgeAuthority:p,userToken:d,bridgeTokenAccount:h,chainBridgeAccount:b,otherBridgeTokenAccount:T,userAccount:P,destinationChainId:y,mint:f,config:C,configAccountInfo:S,gasPrice:_,thisGasPrice:v,message:B,extraGasInstruction:K}=a,Z=this.params.wormholeMessengerProgramId,[oe]=F.findProgramAddressSync([Buffer.from("Bridge")],new F(Z)),[Ae]=F.findProgramAddressSync([Buffer.from("fee_collector")],new F(Z)),[fe]=F.findProgramAddressSync([Buffer.from("Sequence"),p.toBuffer()],new F(Z)),$=await nn(y,S.wormholeMessengerProgramId),Y=await Ce(S.wormholeMessengerProgramId),q=ta.generate(),ee=Be(this.solanaRpcUrl,P.toString()),Q=await ee.connection.getAccountInfo(oe);if(Q==null)throw new M("Cannot fetch wormhole bridge account info");let ce=new Xe(Q.data.slice(16,24),"le").toString(),me=za.transfer({fromPubkey:P,toPubkey:Ae,lamports:+ce}),te=[];K&&te.push(K);let I={mint:f,user:P,config:C,lock:l,pool:u,gasPrice:_,thisGasPrice:v,bridgeAuthority:p,userToken:d,bridgeToken:h,chainBridge:b,otherBridgeToken:T,messengerGasUsage:$,wormholeProgram:Z,bridge:oe,message:q.publicKey,wormholeMessenger:S.wormholeMessengerProgramId,sequence:fe,feeCollector:Ae,wormholeMessengerConfig:Y,clock:Re.SYSVAR_CLOCK_PUBKEY},ut=await s.methods.swapAndBridgeWormhole({vusdAmount:r,nonce:o,destinationChainId:y,recipient:c,receiveToken:m}).accounts(I).preInstructions([Re.ComputeBudgetProgram.setComputeUnitLimit({units:un}),me]).postInstructions(te).signers([q]).transaction();return ut.recentBlockhash=(await ee.connection.getLatestBlockhash()).blockhash,ut.feePayer=P,{transaction:await this.convertToVersionedTransaction(ut,ee.connection),messageAccount:q}}async prepareSwapAndBridgeCctpData(a){let{contractAddress:s,amount:r,fromAccountAddress:o,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,extraGas:p}=a,d=s;if(!d)throw new ne("Such route does not support CCTP protocol");let h=4,b=o,T=l,P=u,y=Be(this.solanaRpcUrl,b),f=new mn(Yn,d,y),C=new F(c),S=await Zn(C,f.programId),_=new F(b),v=await f.account.cctpBridge.fetch(S),B={};return B.cctpBridge=f,B.cctpBridgeAccount=S,B.cctpAddressAccount=new F(d),B.amount=new Xe(r),B.recipient=Array.from(P),B.receiveToken=Array.from(T),B.userToken=await ae(_,C),B.bridgeAuthority=await Fn(S,f.programId),B.bridgeTokenAccount=await Dn(C,f.programId),B.chainBridgeAccount=await tn(m,f.programId),B.userAccount=_,B.destinationChainId=m,B.mint=C,B.gasPrice=await je(m,v.gasOracleProgramId),B.thisGasPrice=await je(h,v.gasOracleProgramId),B.provider=y,p&&(B.extraGasInstruction=this.getExtraGasInstruction(p,B.userAccount,S)),B}async buildSwapAndBridgeCctpTransaction(a,s){let{cctpBridge:r,cctpBridgeAccount:o,amount:c,recipient:m,receiveToken:u,bridgeAuthority:l,userToken:p,bridgeTokenAccount:d,chainBridgeAccount:h,userAccount:b,destinationChainId:T,mint:P,gasPrice:y,thisGasPrice:f,extraGasInstruction:C,provider:S}=s,_=this.params.cctpParams.cctpDomains[a],v=this.params.cctpParams.cctpTransmitterProgramId,B=this.params.cctpParams.cctpTokenMessengerMinter;if(_==null||!v||!B)throw new M("CCTP is not configured");let K=new F(v),Z=new F(B),{messageTransmitterAccount:oe,tokenMessenger:Ae,tokenMessengerEventAuthority:fe,tokenMinter:$,localToken:Y,remoteTokenMessengerKey:q,authorityPda:ee}=Un(_,P,K,Z),Q=[];C&&Q.push(C);let ce=ta.generate(),me=Nn(r.programId,ce.publicKey),te=await r.methods.bridge({amount:c,destinationChainId:T,recipient:m,receiveToken:u}).accounts({mint:P,user:b,cctpBridge:o,messageSentEventData:ce.publicKey,lock:me,cctpMessenger:Z,messageTransmitterProgram:K,messageTransmitterAccount:oe,tokenMessenger:Ae,tokenMinter:$,localToken:Y,remoteTokenMessengerKey:q,authorityPda:ee,eventAuthority:fe,bridgeToken:d,gasPrice:y,thisGasPrice:f,chainBridge:h,userToken:p,bridgeAuthority:l}).preInstructions([Re.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(Q).transaction(),I=S.connection;return te.recentBlockhash=(await I.getLatestBlockhash()).blockhash,te.feePayer=b,{transaction:await this.convertToVersionedTransaction(te,I),messageSentEventDataKeypair:ce}}send(a){throw new J}};import{Address as ln,contract as Sd}from"@stellar/stellar-sdk";import{Big as ei}from"big.js";import{contract as n}from"@stellar/stellar-sdk";var qa=n.Spec,$a=n.Client;var nt=class extends $a{constructor(a){super(new qa(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),a);this.options=a;this.fromJSON={initialize:this.txFromJSON,swap_and_bridge:this.txFromJSON,receive_tokens:this.txFromJSON,swap:this.txFromJSON,stop_swap:this.txFromJSON,start_swap:this.txFromJSON,set_gas_oracle:this.txFromJSON,set_stop_authority:this.txFromJSON,set_rebalancer:this.txFromJSON,set_messenger:this.txFromJSON,set_gas_usage:this.txFromJSON,register_bridge:this.txFromJSON,add_bridge_token:this.txFromJSON,remove_bridge_token:this.txFromJSON,add_pool:this.txFromJSON,withdraw_gas_tokens:this.txFromJSON,withdraw_bridging_fee_in_tokens:this.txFromJSON,has_processed_message:this.txFromJSON,has_received_message:this.txFromJSON,get_pool_address:this.txFromJSON,get_config:this.txFromJSON,get_stop_authority:this.txFromJSON,get_transaction_cost:this.txFromJSON,get_gas_usage:this.txFromJSON,get_admin:this.txFromJSON,get_gas_oracle:this.txFromJSON,get_another_bridge:this.txFromJSON,set_admin:this.txFromJSON,upgrade:this.txFromJSON}}};var Ft=class extends ie{constructor(a,s,r){super();this.nodeRpcUrlsConfig=a;this.params=s;this.api=r;this.chainType="SRB"}async buildRawTransactionSend(a){let s=await Pe(this.chainType,a,this.api);return await this.buildRawTransactionSendFromParams(s)}async buildRawTransactionSendFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:p,gasFeePaymentMethod:d,extraGas:h}=a,b=p;h&&(b=ei(b).plus(h).toFixed());let T=this.getContract(nt,r,o),P;return d==="stablecoin"?P=await T.swap_and_bridge({sender:o,token:ln.contract(Buffer.from(c)).toString(),amount:BigInt(s),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(l),nonce:sn(),gas_amount:BigInt(0),fee_token_amount:BigInt(b)}):P=await T.swap_and_bridge({sender:o,token:ln.contract(Buffer.from(c)).toString(),amount:BigInt(s),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(l),nonce:sn(),gas_amount:BigInt(b),fee_token_amount:BigInt(0)}),P.toXDR()}async buildRawTransactionSwap(a){let s=Ie(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s)}async buildRawTransactionSwapFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=a;return(await this.getContract(nt,r,o).swap({sender:o,amount:BigInt(s),token:ln.contract(Buffer.from(c)).toBuffer(),receive_token:Buffer.from(u),recipient:m,receive_amount_min:BigInt(l)})).toXDR()}send(a){throw new J}getContract(a,s,r){let o={publicKey:r,contractId:s,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(o)}};import{Big as ai}from"big.js";import ti from"bn.js";function Wt(A){return"0x"+new ti(A).toString("hex")}function na(A){return new Promise(i=>setTimeout(()=>i(),A))}var Ye=A=>(...i)=>new Promise((a,s)=>A(...i,(r,o)=>r?s(r):a(o)));async function Gt(A,i){let a=await A.trx.sign(i);if(!a.signature)throw new Ze("Transaction was not signed properly");let r=(await A.trx.sendRawTransaction(a)).txid;return await ni(A,r),{txId:r}}async function ni(A,i,a=1e4){let s=Date.now();for(;;){if(Date.now()-s>a)throw new Ke("Transaction not found");let r=await A.trx.getUnconfirmedTransactionInfo(i);if(!r?.receipt){await na(2e3);continue}if(r.receipt.result==="SUCCESS")return r;throw new Ke(`Transaction status is ${r.receipt.result}`)}}var at=class extends ie{constructor(a,s){super();this.tronWeb=a;this.api=s;this.chainType="TRX"}async send(a){let s=await Pe(this.chainType,a,this.api),r=await this.buildRawTransactionSendFromParams(s);return await Gt(this.tronWeb,r)}async buildRawTransactionSwap(a){let s=Ie(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s)}async buildRawTransactionSwapFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=a,p=[{type:"uint256",value:s},{type:"bytes32",value:c},{type:"bytes32",value:u},{type:"address",value:m},{type:"uint256",value:l}];return this.buildRawTransaction(r,"swap(uint256,bytes32,bytes32,address,uint256)",p,"0",o)}async buildRawTransactionSend(a){let s=await Pe(this.chainType,a,this.api);return this.buildRawTransactionSendFromParams(s)}async buildRawTransactionSendFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,messenger:p,fee:d,gasFeePaymentMethod:h,extraGas:b}=a,T=d;b&&(T=ai(T).plus(b).toFixed());let P=_e().toJSON().data,y,f,C;return p==3?(h==="stablecoin"?(y=[{type:"uint256",value:s},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"uint256",value:T}],f="0"):(y=[{type:"uint256",value:s},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"uint256",value:0}],f=T),C="bridge(uint256,bytes32,uint256,uint256)"):(h==="stablecoin"?(y=[{type:"bytes32",value:c},{type:"uint256",value:s},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"bytes32",value:l},{type:"uint256",value:P},{type:"uint8",value:p},{type:"uint256",value:T}],f="0"):(y=[{type:"bytes32",value:c},{type:"uint256",value:s},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"bytes32",value:l},{type:"uint256",value:P},{type:"uint8",value:p},{type:"uint256",value:0}],f=T),C="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)"),this.buildRawTransaction(r,C,y,f,o)}async buildRawTransaction(a,s,r,o,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(a,s,{callValue:o},r,c);if(!m?.result?.result)throw new M("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var Zt=class{constructor(i,a,s,r){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=r;this.rawTxBuilder=new It(i,a,s,r)}async getAllowance(i,a){let s,r;a?(s=i,r=a):r=i;let o=et(r.token,r.messenger);return await this.tokenService.getAllowance({...r,spender:o},s)}async checkAllowance(i,a){let s,r;a?(s=i,r=a):r=i;let o=et(r.token,r.messenger);return this.tokenService.checkAllowance({...r,spender:o},s)}async approve(i,a){let s=et(a.token,a.messenger);return this.tokenService.approve(i,{...a,spender:s})}async send(i,a){return k(a.amount),x("amount",a.amount,a.sourceToken.decimals),Rt(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).send(a)}};function et(A,i){if(i&&i==3){if(A.cctpAddress)return A.cctpAddress;throw new ne("Such route does not support CCTP protocol")}else return A.bridgeAddress}function Rt(A,i,a,s,r){switch(L[A].chainType){case"EVM":{if(r)return new $e(r,i,a);{let o=a.getNodeRpcUrl(A);return new $e(new si(o),i,a)}}case"TRX":{if(r)return new at(r,i);{let o=a.getNodeRpcUrl(A);return new at(new ii({fullHost:o}),i)}}case"SOLANA":return new xt(a.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:s.wormholeMessengerProgramId,solanaLookUpTable:s.solanaLookUpTable,cctpParams:s.cctpParams,jupiterUrl:s.jupiterUrl},i);case"SRB":return new Ft(a,s,i)}}import{Big as gi}from"big.js";import fi from"timed-cache";import yi from"tronweb";import hi from"web3";import{Big as Se}from"big.js";function aa(A,i,a,s,r){let o=R(A,3),c=Se(o),m=Se(a),u=Se(s).plus(r),l,p;if(m.eq(0)||u.eq(0)){let h=c.div(2);l=Se(s).plus(h),p=Se(r).plus(h)}else l=Se(s).plus(c.mul(s).div(u)),p=Se(r).plus(c.mul(r).div(u));return Se(Sn(i,l.toFixed(),p.toFixed())).minus(m).toFixed()}function ia(A){let i=R(A,3);return Se(i).round().toFixed()}var ve=[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];var j=class{constructor(i){this.lpAmount=i.lpAmount,this.rewardDebt=i.rewardDebt}get userLiquidity(){return w(this.lpAmount,3).toFixed()}earned(i,a){let s=Tn(this.lpAmount,this.rewardDebt,i.accRewardPerShareP,i.p);return a?w(s,a).toFixed():s}};var se=class{};var it=class extends se{constructor(a,s){super();this.web3=a;this.api=s;this.chainType="EVM";this.P=52}async getUserBalanceInfo(a,s){let r;try{r=await wt(this.getUserBalanceInfoByBatch(a,s),`Cannot get UserBalanceInfo for ${s.name} on ${s.chainSymbol}`,5e3)}catch{r=await en(()=>this.getUserBalanceInfoPerProperty(a,s),`Cannot get UserBalanceInfo for ${s.name} on ${s.chainSymbol}`,5,2e3)}return r}async getUserBalanceInfoByBatch(a,s){let r=new this.web3.BatchRequest,o=new this.web3.eth.Contract(ve,s.poolAddress),c=["userRewardDebt","balanceOf"].map(l=>Ye(p=>r.add(o.methods[l](a).call.request({},p)))());r.execute();let[m,u]=await Promise.all(c);return new j({lpAmount:u,rewardDebt:m})}async getUserBalanceInfoPerProperty(a,s){let r=await this.getPoolContract(s.poolAddress).methods.userRewardDebt(a).call(),o=await this.getPoolContract(s.poolAddress).methods.balanceOf(a).call();return new j({lpAmount:o,rewardDebt:r})}async getPoolInfoFromChain(a){let s;try{s=await wt(this.getPoolInfoByBatch(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5e3)}catch{s=await en(()=>this.getPoolInfoPerProperty(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5,2e3)}return s}async getPoolInfoByBatch(a){let s=new this.web3.BatchRequest,r=new this.web3.eth.Contract(ve,a.poolAddress),o=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(P=>Ye(y=>s.add(r.methods[P]().call.request({},y)))());s.execute();let[c,m,u,l,p,d]=await Promise.all(o),h=u.toString(),b=l.toString(),T=z({tokenBalance:h,vUsdBalance:b});return{aValue:c.toString(),dValue:m.toString(),tokenBalance:h,vUsdBalance:b,totalLpAmount:p.toString(),accRewardPerShareP:d.toString(),p:this.P,imbalance:T}}async getPoolInfoPerProperty(a){let s=this.getPoolContract(a.poolAddress),r=await s.methods.a().call(),o=await s.methods.d().call(),c=await s.methods.tokenBalance().call(),m=await s.methods.vUsdBalance().call(),u=await s.methods.totalSupply().call(),l=await s.methods.accRewardPerShareP().call(),p=z({tokenBalance:c,vUsdBalance:m});return{aValue:r,dValue:o,tokenBalance:c,vUsdBalance:m,totalLpAmount:u,accRewardPerShareP:l,p:this.P,imbalance:p}}async buildRawTransactionDeposit(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.deposit(a.amount).encodeABI()})}async buildRawTransactionWithdraw(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.withdraw(a.amount).encodeABI()})}async buildRawTransactionClaimRewards(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(a){return{from:a.accountAddress,to:a.token.poolAddress,value:"0"}}getContract(a,s){return new this.web3.eth.Contract(a,s)}getPoolContract(a){return this.getContract(ve,a)}};var Dt=class{constructor(i,a,s,r){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=r}async approve(i,a){if(a){let s=i,r=a;return this.tokenService.buildRawTransactionApprove({...r,spender:r.token.poolAddress},s)}else{let s=i;return this.tokenService.buildRawTransactionApprove({...s,spender:s.token.poolAddress})}}async deposit(i,a){return k(i.amount),x("amount",i.amount,i.token.decimals),i.amount=R(i.amount,i.token.decimals).toFixed(),Le(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionDeposit(i)}async withdraw(i,a){return k(i.amount),x("amount",i.amount,i.token.decimals),i.amount=R(i.amount,3).toFixed(),Le(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionWithdraw(i)}async claimRewards(i,a){return Le(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionClaimRewards(i)}};import{AnchorProvider as oi,BN as sa,Program as Ai,Spl as ci,web3 as mi}from"@project-serum/anchor";import{Connection as ui,PublicKey as Me}from"@solana/web3.js";var Nt=class extends se{constructor(a,s){super();this.solanaRpcUrl=a;this.api=s;this.chainType="SOLANA";this.P=48}async getUserBalanceInfo(a,s){let r=this.buildAnchorProvider(a),o=this.getBridge(s.bridgeAddress,r),c=new Me(s.poolAddress),m=await o.account.pool.fetch(c);try{let u=await an(new Me(a),m.mint,o.programId),{lpAmount:l,rewardDebt:p}=await o.account.userDeposit.fetch(u);return new j({lpAmount:l.toString(),rewardDebt:p.toString()})}catch{return new j({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(a){let s=this.buildAnchorProvider(a.bridgeAddress),r=await this.getBridge(a.bridgeAddress,s).account.pool.fetch(a.poolAddress),o=r.vUsdBalance.toString(),c=r.tokenBalance.toString(),m=z({tokenBalance:c,vUsdBalance:o});return{dValue:r.d.toString(),aValue:r.a.toString(),totalLpAmount:r.totalLpAmount.toString(),vUsdBalance:o,tokenBalance:c,accRewardPerShareP:r.accRewardPerShareP.toString(),p:this.P,imbalance:m}}async buildRawTransactionDeposit(a){let{bridge:s,accounts:r,preInstructions:o}=await this.prepareDataForTransaction(a),c=await s.methods.deposit(new sa(a.amount)).accounts(r).preInstructions(o).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new Me(a.accountAddress),await Ee(c,a.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionWithdraw(a){let{bridge:s,accounts:r,preInstructions:o}=await this.prepareDataForTransaction(a),c=await s.methods.withdraw(new sa(a.amount)).accounts(r).preInstructions(o).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new Me(a.accountAddress),await Ee(c,a.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionClaimRewards(a){let{bridge:s,accounts:r,preInstructions:o}=await this.prepareDataForTransaction(a),c=await s.methods.claimRewards().accounts(r).preInstructions(o).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new Me(a.accountAddress),await Ee(c,a.txFeeParams,this.solanaRpcUrl),c}async prepareDataForTransaction(a){let s=this.buildAnchorProvider(a.accountAddress),r=this.getBridge(a.token.bridgeAddress,s),{accounts:o,preInstructions:c}=await this._getLPTransactionData(r,a.token.poolAddress,a.accountAddress,s);return{bridge:r,accounts:o,preInstructions:c}}getBridge(a,s){return new Ai(tt,a,s)}buildAnchorProvider(a){let s=new ui(this.solanaRpcUrl,"confirmed"),r=new Me(a);return new oi(s,{publicKey:r},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(a,s,r,o){let c=new Me(r),m=await Ce(a.programId),u=await Ne(a.programId),l=new Me(s),d=(await a.account.pool.fetch(l)).mint,h=await ae(c,d),b=await Ue(d,a.programId),T=await an(c,d,a.programId),P=[mi.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await Oe(h,o)}catch{let S=await ci.associatedToken(o).methods.create().accounts({mint:d,owner:c,associatedAccount:h}).instruction();P.push(S)}try{await a.account.userDeposit.fetch(T)}catch{let C=await a.methods.initDepositAccount().accounts({mint:d,user:c,userDeposit:T}).instruction();P.push(C)}return{accounts:{mint:d,user:c,config:m,pool:l,bridgeAuthority:u,userDeposit:T,userToken:h,bridgeToken:b},preInstructions:P}}};import{contract as wd}from"@stellar/stellar-sdk";import{contract as t}from"@stellar/stellar-sdk";var li=t.Spec,di=t.Client;var Ut=class extends di{constructor(a){super(new li(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),a);this.options=a;this.fromJSON={initialize:this.txFromJSON,deposit:this.txFromJSON,withdraw:this.txFromJSON,swap_to_v_usd:this.txFromJSON,swap_from_v_usd:this.txFromJSON,claim_rewards:this.txFromJSON,set_fee_share:this.txFromJSON,adjust_total_lp_amount:this.txFromJSON,set_balance_ratio_min_bp:this.txFromJSON,stop_deposit:this.txFromJSON,start_deposit:this.txFromJSON,stop_withdraw:this.txFromJSON,start_withdraw:this.txFromJSON,set_stop_authority:this.txFromJSON,set_bridge:this.txFromJSON,set_admin:this.txFromJSON,set_admin_fee_share:this.txFromJSON,claim_admin_fee:this.txFromJSON,pending_reward:this.txFromJSON,get_pool:this.txFromJSON,get_admin:this.txFromJSON,get_stop_authority:this.txFromJSON,get_bridge:this.txFromJSON,get_user_deposit:this.txFromJSON,upgrade:this.txFromJSON}}};var _t=class extends se{constructor(a,s,r){super();this.nodeRpcUrlsConfig=a;this.params=s;this.api=r;this.chainType="SRB";this.P=48}async getUserBalanceInfo(a,s){let o=(await this.getContract(s.poolAddress).get_user_deposit({user:a})).result;if(o.isErr())throw new M;let c=o.unwrap();return new j({lpAmount:c.lp_amount.toString(),rewardDebt:c.reward_debt.toString()})}async getPoolInfoFromChain(a){let r=(await this.getContract(a.poolAddress).get_pool()).result;if(r.isErr())throw new M;let o=r.unwrap();return{aValue:o.a.toString(),accRewardPerShareP:o.acc_reward_per_share_p.toString(),dValue:o.d.toString(),tokenBalance:o.token_balance.toString(),p:this.P,totalLpAmount:o.total_lp_amount.toString(),vUsdBalance:o.v_usd_balance.toString(),imbalance:z({tokenBalance:o.token_balance.toString(),vUsdBalance:o.v_usd_balance.toString()})}}async buildRawTransactionDeposit(a){let s=this.getContract(a.token.poolAddress,a.accountAddress);return console.log("sender",a.accountAddress),console.log("poolAddress",a.token.poolAddress),(await s.deposit({sender:a.accountAddress,amount:BigInt(a.amount)})).toXDR()}async buildRawTransactionWithdraw(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).withdraw({sender:a.accountAddress,amount_lp:BigInt(a.amount)})).toXDR()}async buildRawTransactionClaimRewards(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).claim_rewards({sender:a.accountAddress})).toXDR()}getContract(a,s){let r={publicKey:s,contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new Ut(r)}};import pi from"web3";var st=class extends se{constructor(a,s,r){super();this.tronWeb=a;this.api=s;this.chainType="TRX";this.P=52;r&&(this.web3=new pi(r))}async getUserBalanceInfo(a,s){let r;if(this.web3)try{r=await this.getUserBalanceInfoByBatch(this.web3,a,s)}catch{r=await this.getUserBalanceInfoPerProperty(a,s)}else r=await this.getUserBalanceInfoPerProperty(a,s);return r}async getUserBalanceInfoByBatch(a,s,r){let o=new a.BatchRequest,c=new a.eth.Contract(ve,qe(r.poolAddress)),m=qe(s),u=["userRewardDebt","balanceOf"].map(d=>Ye(h=>o.add(c.methods[d](m).call.request({},h)))());o.execute();let[l,p]=await Promise.all(u);return new j({lpAmount:p,rewardDebt:l})}async getUserBalanceInfoPerProperty(a,s){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a);let r=await this.getContract(s.poolAddress),o=(await r.methods.userRewardDebt(a).call()).toString(),c=(await r.methods.balanceOf(a).call()).toString();return new j({lpAmount:c,rewardDebt:o})}async getPoolInfoFromChain(a){let s;if(this.web3)try{s=await this.getPoolInfoByBatch(this.web3,a)}catch{s=await this.getPoolInfoPerProperty(a)}else s=await this.getPoolInfoPerProperty(a);return s}async getPoolInfoByBatch(a,s){let r=new a.BatchRequest,o=new a.eth.Contract(ve,qe(s.poolAddress)),c=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(y=>Ye(f=>r.add(o.methods[y]().call.request({},f)))());r.execute();let[m,u,l,p,d,h]=await Promise.all(c),b=l.toString(),T=p.toString(),P=z({tokenBalance:b,vUsdBalance:T});return{aValue:m.toString(),dValue:u.toString(),tokenBalance:b,vUsdBalance:T,totalLpAmount:d.toString(),accRewardPerShareP:h.toString(),p:this.P,imbalance:P}}async getPoolInfoPerProperty(a){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a.poolAddress);let s=await this.getContract(a.poolAddress),[r,o,c,m,u,l]=await Promise.all([s.methods.a().call(),s.methods.d().call(),s.methods.tokenBalance().call(),s.methods.vUsdBalance().call(),s.methods.totalSupply().call(),s.methods.accRewardPerShareP().call()]),p=c.toString(),d=m.toString(),h=z({tokenBalance:p,vUsdBalance:d});return{aValue:r.toString(),dValue:o.toString(),tokenBalance:p,vUsdBalance:d,totalLpAmount:u.toString(),accRewardPerShareP:l.toString(),p:this.P,imbalance:h}}buildRawTransactionDeposit(a){let{amount:s,accountAddress:r}=a,o=[{type:"uint256",value:s}];return this.buildRawTransaction(a.token.poolAddress,"deposit(uint256)",o,"0",r)}buildRawTransactionWithdraw(a){let{amount:s,accountAddress:r}=a,o=[{type:"uint256",value:s}];return this.buildRawTransaction(a.token.poolAddress,"withdraw(uint256)",o,"0",r)}buildRawTransactionClaimRewards(a){let{accountAddress:s}=a,r=[];return this.buildRawTransaction(a.token.poolAddress,"claimRewards()",r,"0",s)}async buildRawTransaction(a,s,r,o,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(a,s,{callValue:o},r,c);if(!m?.result?.result)throw new M("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}async getContract(a){return await this.tronWeb.contract(ve,a)}};var Vt=class{constructor(i,a,s,r){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=r;this.rawTxBuilder=new Dt(i,a,this.params,r);let o=s.cachePoolInfoChainSec>0?s.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new fi({defaultTtl:o})}async getAllowance(i,a){if(a){let s=i,r=a;return await this.tokenService.getAllowance({...r,spender:r.token.poolAddress},s)}else{let s=i;return await this.tokenService.getAllowance({...s,spender:s.token.poolAddress})}}async checkAllowance(i,a){if(a){let s=i,r=a;return this.tokenService.checkAllowance({...r,spender:r.token.poolAddress},s)}else{let s=i;return this.tokenService.checkAllowance({...s,spender:s.token.poolAddress})}}async approve(i,a){return this.tokenService.approve(i,{...a,spender:a.token.poolAddress})}async getAmountToBeDeposited(i,a,s){k(i),x("amount",i,a.decimals);let r=await this.getPoolInfoFromChain(a,s),{vUsdBalance:o,tokenBalance:c,aValue:m,dValue:u}=r,l=aa(i,m,u,c,o);return w(l,3).toFixed()}async getAmountToBeWithdrawn(i,a,s,r){k(i),x("amount",i,s.decimals);let o=await this.getPoolInfoFromChain(s,r),c=ia(i),m=H(c,s.decimals),l=(await this.getUserBalanceInfo(a,s,r)).earned(o)||"0",p=gi(m).plus(l).toFixed();return w(p,s.decimals).toFixed()}async getUserBalanceInfo(i,a,s){return Le(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,s).getUserBalanceInfo(i,a)}async getPoolInfoFromChain(i,a){let s={chainSymbol:i.chainSymbol,poolAddress:i.poolAddress},r=this.cache.get(s);if(r)return r;{let o=await Le(i.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).getPoolInfoFromChain(i);return this.cache.put(s,o),this.api.cachePut({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress},o),o}}};function Le(A,i,a,s,r){switch(L[A].chainType){case"EVM":{if(r)return new it(r,i);{let o=a.getNodeRpcUrl(A);return new it(new hi(o),i)}}case"TRX":{let o=a.getNodeRpcUrl(A),c=s.tronJsonRpc;if(r)return new st(r,i,c);{let m=new yi({fullHost:o});return new st(m,i,c)}}case"SOLANA":{let o=a.getNodeRpcUrl(A);return new Nt(o,i)}case"SRB":return new _t(a,s,i)}}import{Big as W}from"big.js";function Aa(A,i,a){let s=bi(A,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo),r=Ti(s.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:s,swapFromVUsdCalcResult:r}}function ca(A,i,a){let s=Pi(A,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),r=Si(s.amountIncludingCommissionInSystemPrecision,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo);return{swapToVUsdCalcResult:s,swapFromVUsdCalcResult:r}}function bi(A,{feeShare:i,decimals:a},s){let r=W(A),o=r.times(i),c=r.minus(o);return{bridgeFeeInTokenPrecision:o.round().toFixed(),amountIncludingCommissionInSystemPrecision:ra(xe(c,a),s),amountExcludingCommissionInSystemPrecision:ra(xe(r,a),s)}}function ra(A,i){if(A.eq(0))return"0";let a=W(i.tokenBalance).plus(A),s=de(a.toFixed(),i.aValue,i.dValue);return W(i.vUsdBalance).minus(s).round().toFixed()}function Ti(A,{feeShare:i,decimals:a},s){if(W(A).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let o=W(A).plus(s.vUsdBalance),c=de(o,s.aValue,s.dValue),m=H(W(s.tokenBalance).minus(c),a),u=W(m).times(i),l=W(m).minus(u).round();return{bridgeFeeInTokenPrecision:u.round().toFixed(),amountIncludingCommissionInTokenPrecision:l.toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}function Pi(A,{feeShare:i,decimals:a},s){let r=W(i).div(W(1).minus(i)),o=W(A).times(r),c=W(A).plus(o);return{bridgeFeeInTokenPrecision:o.round().toFixed(),amountIncludingCommissionInSystemPrecision:oa(xe(c,a),s),amountExcludingCommissionInSystemPrecision:oa(xe(A,a),s)}}function oa(A,i){let a=W(i.tokenBalance).minus(A),s=de(a.toFixed(),i.aValue,i.dValue);return W(s).minus(i.vUsdBalance).round().toFixed()}function Si(A,{feeShare:i,decimals:a},s){if(W(A).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let r=W(s.vUsdBalance).minus(A),o=de(r.toFixed(),s.aValue,s.dValue),c=W(o).minus(s.tokenBalance),m=H(c.toFixed(),a),u=W(i).div(W(1).minus(i)),l=W(m).times(u),p=W(m).plus(l);return{bridgeFeeInTokenPrecision:l.round().toFixed(),amountIncludingCommissionInTokenPrecision:p.round().toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}import{Big as ke}from"big.js";function ma(A,i,a,s,r){let o=le(A,i,a),c=H(o,i.decimals),m=ze(o,s,r),u=ke(A).times(i.feeShare),l=ke(m).div(ke(1).minus(s.feeShare)).minus(m);return{sourceLPSwap:{fee:w(u,i.decimals).neg().round(i.decimals,ke.roundUp).toFixed(),swap:w(ke(A).minus(c).minus(u),i.decimals).neg().round(i.decimals,ke.roundUp).toFixed()},destLPSwap:{fee:w(l,s.decimals).neg().round(s.decimals,ke.roundUp).toFixed(),swap:w(H(o,s.decimals).minus(m).minus(l),s.decimals).neg().round(s.decimals,ke.roundUp).toFixed()}}}import{Connection as wi,PublicKey as Ci,TransactionMessage as Bi}from"@solana/web3.js";var Ot=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.params=a}async addMemoToTx(i,a){if(a.length>28)throw new M("InvalidArgumentException memo cannot be more than 28 characters");let s=new wi(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),r=await We(i,s),o=Bi.decompile(i.message,{addressLookupTableAccounts:r});o.instructions[o.instructions.length-1].keys.push({pubkey:new Ci(Buffer.from(a)),isSigner:!1,isWritable:!1}),i.message=o.compileToV0Message(r)}};import{Asset as vi,BASE_FEE as Mi,Horizon as ua,Operation as ki,Operation as xi,SorobanRpc as ot,TimeoutInfinite as Fi,TransactionBuilder as dn,TransactionBuilder as la,contract as Cd}from"@stellar/stellar-sdk";import{contract as e}from"@stellar/stellar-sdk";var Ii=e.Spec,Ri=e.Client;var rt=class extends Ri{constructor(a){super(new Ii(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),a);this.options=a;this.fromJSON={allowance:this.txFromJSON,authorized:this.txFromJSON,approve:this.txFromJSON,balance:this.txFromJSON,burn:this.txFromJSON,burn_from:this.txFromJSON,clawback:this.txFromJSON,decimals:this.txFromJSON,mint:this.txFromJSON,name:this.txFromJSON,set_admin:this.txFromJSON,admin:this.txFromJSON,set_authorized:this.txFromJSON,symbol:this.txFromJSON,transfer:this.txFromJSON,transfer_from:this.txFromJSON}}};var Wi=100,Gi=180,Et=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.params=a}async buildChangeTrustLineXdrTx(i){let s=await new ua.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(i.sender),o=(await this.getContract(rt,i.tokenAddress).name()).result,[c,m]=o.split(":"),u=new vi(c,m),l=xi.changeTrust({asset:u,limit:i.limit});return new la(s,{fee:Wi.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(l).setTimeout(Gi).build().toXDR()}async getBalanceLine(i,a){let r=(await this.getContract(rt,a).name()).result,[o,c]=r.split(":"),m=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new ua.Server(m).loadAccount(i)).balances.find(d=>(d.asset_type==="credit_alphanum4"||d.asset_type==="credit_alphanum12")&&d.asset_code==o&&d.asset_issuer==c)}async submitTransactionStellar(i){let a=new ua.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),s=la.fromXDR(i,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await a.submitTransaction(s)}async simulateAndCheckRestoreTxRequiredSoroban(i,a){let s=new ot.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),r=await s.getAccount(a),o=dn.fromXDR(i,this.params.sorobanNetworkPassphrase),c=await s.simulateTransaction(o);if(ot.Api.isSimulationRestore(c))return new dn(r,{fee:(+Mi+ +c.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(c.restorePreamble.transactionData.build()).addOperation(ki.restoreFootprint({})).setTimeout(Fi).build().toXDR()}async sendTransactionSoroban(i){let a=new ot.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),s=dn.fromXDR(i,this.params.sorobanNetworkPassphrase);return a.sendTransaction(s)}async confirmTx(i,a=15){let s=new ot.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),r=await vn(()=>s.getTransaction(i),o=>o.status===ot.Api.GetTransactionStatus.NOT_FOUND,a);return r[r.length-1]}getContract(i,a){let s={contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new i(s)}};var Xt=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.srb=new Et(i,a),this.sol=new Ot(i,a)}};var Ve=(a=>(a.WITH_NATIVE_CURRENCY="native",a.WITH_STABLECOIN="stablecoin",a))(Ve||{}),Ct=(a=>(a.INT="int",a.FLOAT="float",a))(Ct||{});import{Big as Xi}from"big.js";import Yi from"tronweb";import Li from"web3";import pn from"erc-20-abi";import{Big as da}from"big.js";var re=class{async checkAllowance(i){let a=await this.getAllowance(i);return da(a).gte(da(i.amount))}};var Zi="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Di="0xdac17f958d2ee523a2206206994597c13d831ec7",Ni=1e5,At=class extends re{constructor(a,s){super();this.web3=a;this.api=s;this.chainType="EVM"}getAllowance(a){let s=a.token.tokenAddress,r=a.owner,o=a.spender;return this.getAllowanceByTokenAddress(s,r,o)}getAllowanceByTokenAddress(a,s,r){return this.getContract(pn,a).methods.allowance(s,r).call()}async getTokenBalance(a){return await this.getContract(pn,a.token.tokenAddress).methods.balanceOf(a.account).call()}async getNativeTokenBalance(a){return await this.web3.eth.getBalance(a.account)}async approve(a){if(this.isUsdt(a.tokenAddress)&&await this.getAllowanceByTokenAddress(a.tokenAddress,a.owner,a.spender)!=="0"){let o=await this.buildRawTransactionApprove({...a,amount:"0"});await this.sendRawTransaction(o,a.chainSymbol)}let s=await this.buildRawTransactionApprove(a);return await this.sendRawTransaction(s,a.chainSymbol)}isUsdt(a){return a.toLowerCase()===Di}async buildRawTransactionApprove(a){let{tokenAddress:s,spender:r,owner:o,amount:c}=a,u=await this.getContract(pn,s).methods.approve(r,c==null?Zi:Wt(c));return{from:o,to:s,value:"0",data:u.encodeABI()}}async sendRawTransaction(a,s){let r=a,o={maxPriorityFeePerGas:null,maxFeePerGas:null};s=="POL"?r.gas=Ni:r.gas=await this.web3.eth.estimateGas(a);let{transactionHash:c}=await this.web3.eth.sendTransaction({...r,...o});return{txId:c}}getContract(a,s){return new this.web3.eth.Contract(a,s)}};import{AnchorProvider as Ui}from"@project-serum/anchor";import{Connection as _i,PublicKey as Yt}from"@solana/web3.js";var Lt=class extends re{constructor(a,s){super();this.solanaRpcUrl=a;this.api=s;this.chainType="SOLANA"}approve(a){throw new J}buildRawTransactionApprove(a){throw new J}buildAnchorProvider(a){let s=new _i(this.solanaRpcUrl,"confirmed"),r=new Yt(a);return new Ui(s,{publicKey:r},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(a){throw new J}async getTokenBalance(a){let{account:s,token:r}=a;try{let o=await ae(new Yt(s),new Yt(r.tokenAddress));return(await Oe(o,this.buildAnchorProvider(s))).amount.toString()}catch(o){if(o instanceof Error)return o.message.startsWith("Account does not exist"),"0";throw o}}async getNativeTokenBalance(a){return(await this.buildAnchorProvider(a.account).connection.getBalance(new Yt(a.account))).toString()}};import{Horizon as al,NotFoundError as Vi}from"@stellar/stellar-sdk";var Jt=class extends re{constructor(a,s,r){super();this.nodeRpcUrlsConfig=a;this.params=s;this.api=r;this.chainType="SRB"}getAllowance(){throw new J}async getTokenBalance(a){if(!a.token.originTokenAddress)throw new M("OriginTokenAddress missing");let[s,r]=a.token.originTokenAddress.split(":"),o=new al.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),c;try{c=await o.loadAccount(a.account)}catch(l){if(l instanceof Vi)return"0";throw l}let u=c.balances.find(l=>(l.asset_type==="credit_alphanum4"||l.asset_type==="credit_alphanum12")&&l.asset_code==s&&l.asset_issuer==r);return u?.balance?R(u.balance,N[L[a.token.chainSymbol].chainType]).toFixed():"0"}async getNativeTokenBalance(a){let c=(await new al.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.account)).balances.find(m=>m.asset_type==="native");return c?.balance?R(c.balance,N[L[a.chainSymbol].chainType]).toFixed():"0"}approve(){throw new J}buildRawTransactionApprove(){throw new J}};var pa=[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];var Ei="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",ct=class extends re{constructor(a,s){super();this.tronWeb=a;this.api=s;this.chainType="TRX"}async getAllowance(a){let{token:{tokenAddress:s},owner:r}=a;return(await(await this.getContract(s)).methods.allowance(r,a.spender).call()).toString()}async getTokenBalance(a){return(await(await this.getContract(a.token.tokenAddress)).balanceOf(a.account).call()).toString()}async getNativeTokenBalance(a){return(await this.tronWeb.trx.getBalance(a.account)).toString()}async approve(a){let s=await this.buildRawTransactionApprove(a);return await Gt(this.tronWeb,s)}async buildRawTransactionApprove(a){let{tokenAddress:s,spender:r,owner:o,amount:c}=a,m=c==null?Ei:Wt(c),u=[{type:"address",value:r},{type:"uint256",value:m}];return this.buildRawTransaction(s,"approve(address,uint256)",u,"0",o)}async getContract(a){return await this.tronWeb.contract(pa,a)}async buildRawTransaction(a,s,r,o,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(a,s,{callValue:o},r,c);if(!m?.result?.result)throw new M("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var Kt=class{constructor(i,a,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s}async getAllowance(i,a){let s=await this.getChainTokenService(i.token.chainSymbol,i.owner,a).getAllowance(i);return w(s,i.token.decimals).toFixed()}async checkAllowance(i,a){return k(i.amount),x("amount",i.amount,i.token.decimals),this.getChainTokenService(i.token.chainSymbol,i.owner,a).checkAllowance(this.prepareCheckAllowanceParams(i))}async approve(i,a){return a.amount&&(k(a.amount),x("amount",a.amount,a.token.decimals)),this.getChainTokenService(a.token.chainSymbol,a.owner,i).approve(this.prepareApproveParams(a))}async buildRawTransactionApprove(i,a){return i.amount&&(k(i.amount),x("amount",i.amount,i.token.decimals)),this.getChainTokenService(i.token.chainSymbol,i.owner,a).buildRawTransactionApprove(this.prepareApproveParams(i))}async getTokenBalance(i,a){let s=await this.getChainTokenService(i.token.chainSymbol,i.account,a).getTokenBalance(i);return i.token.decimals?w(s,i.token.decimals).toFixed():s}async getNativeTokenBalance(i,a){let s=await this.getChainTokenService(i.chainSymbol,i.account,a).getNativeTokenBalance(i);return{int:s,float:w(s,N[L[i.chainSymbol].chainType]).toFixed()}}getChainTokenService(i,a,s){switch(L[i].chainType){case"EVM":{if(s)return new At(s,this.api);{let r=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new At(new Li(r),this.api)}}case"TRX":{if(s)return new ct(s,this.api);{let r=this.nodeRpcUrlsConfig.getNodeRpcUrl(i),o=new Yi({fullHost:r});return o.setAddress(a),new ct(o,this.api)}}case"SOLANA":{let r=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new Lt(r,this.api)}case"SRB":return new Jt(this.nodeRpcUrlsConfig,this.params,this.api)}}prepareCheckAllowanceParams(i){return{...i,amount:R(i.amount,i.token.decimals)}}prepareApproveParams(i){return{tokenAddress:i.token.tokenAddress,owner:i.owner,spender:i.spender,chainSymbol:i.token.chainSymbol,amount:i.amount==null?void 0:Xi(i.amount).toFixed()}}};var mt=class{constructor(i){this.nodeRpcUrls=i}getNodeRpcUrl(i){let a=this.nodeRpcUrls[i];if(a!==void 0)return a;throw new yt(i)}},Qt=class{constructor(i,a=lt){let s=new bt(a),r=new Pt(s),o=new dt(r);this.api=new St(o),this.tokenService=new Kt(this.api,i,a),this.bridge=new Zt(this.api,i,a,this.tokenService),this.pool=new Vt(this.api,i,a,this.tokenService),this.params=a}async chainDetailsMap(){return this.api.getChainDetailsMap()}async tokens(){return this.api.tokens()}async tokensByChain(i){return(await this.api.getChainDetailsMap())[i].tokens}async getTransferStatus(i,a){return this.api.getTransferStatus(i,a)}async getGasBalance(i,a){return this.api.getGasBalance(i,a)}async checkAddress(){return new Promise(i=>{i({status:"OK",gasBalance:null})})}async getPendingStatusInfo(i,a,s,r){k(i);let o;a=="float"?(x("amount",i,s.decimals),o=R(i,s.decimals).toFixed()):o=i;let c=le(o,s,await U(this.api,s)),m=await U(this.api,r),u=this.getAmountFromVUsdFormatted(c,r,m),l,p=await this.api.getPendingInfo();for(let d in p[r.chainSymbol])d.toLowerCase()===r.tokenAddress.toLowerCase()&&(l=p[r.chainSymbol][d]);if(l){let d=yn(l.totalSentAmount,m),h=this.getAmountFromVUsdFormatted(c,r,d),b;return ge(h.int).gt(u.int)?b={min:u,max:h}:b={min:h,max:u},{pendingTxs:l.pendingTxs,pendingAmount:{int:we(l.totalSentAmount,3,r.decimals).toFixed(0),float:w(l.totalSentAmount,3).toFixed()},estimatedAmount:b}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:u,max:u}}}async getTokenBalance(i,a){return this.tokenService.getTokenBalance(i,a)}async getNativeTokenBalance(i,a){return this.tokenService.getNativeTokenBalance(i,a)}async calculateFeePercentOnSourceChain(i,a){k(i),x("amountFloat",i,a.decimals);let s=R(i,a.decimals);if(s.eq(0))return 0;let r=le(s,a,await U(this.api,a)),o=H(r,a.decimals);return zt(s,o)}async calculateFeePercentOnDestinationChain(i,a,s){k(i),x("amountFloat",i,a.decimals);let r=R(i,a.decimals);if(r.eq(0))return 0;let o=le(r,a,await U(this.api,a)),c=ze(o,s,await U(this.api,s)),m=H(o,s.decimals);return zt(m,c)}async getAmountToBeReceivedAndGasFeeOptions(i,a,s,r){return k(i),x("amountToSendFloat",i,a.decimals),{amountToSendFloat:ge(i).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(i,a,s,r),gasFeeOptions:await this.getGasFeeOptions(a,s,r)}}async getAmountToSendAndGasFeeOptions(i,a,s,r){return k(i),x("amountToBeReceivedFloat",i,s.decimals),{amountToSendFloat:await this.getAmountToSend(i,a,s,r),amountToBeReceivedFloat:ge(i).toFixed(),gasFeeOptions:await this.getGasFeeOptions(a,s,r)}}async getAmountToBeReceived(i,a,s,r){let o=await U(this.api,a),c=await U(this.api,s);return this.getAmountToBeReceivedFromPools(i,a,s,o,c,r)}async getAmountToBeReceivedFromChain(i,a,s,r,o,c){let m=await this.pool.getPoolInfoFromChain(a,o),u=await this.pool.getPoolInfoFromChain(s,c);return this.getAmountToBeReceivedFromPools(i,a,s,m,u,r)}getAmountToBeReceivedFromPools(i,a,s,r,o,c){k(i),x("amountToSendFloat",i,a.decimals);let m=R(i,a.decimals);if(c&&c==3){if(!a.cctpAddress||!s.cctpAddress||!a.cctpFeeShare)throw new ne("Such route does not support CCTP protocol");let l=m.mul(ge(1).minus(a.cctpFeeShare)).round(0,ge.roundUp),p=we(l,a.decimals,s.decimals).round(0);return w(p,s.decimals).toFixed()}let u=le(m,a,r);return this.getAmountFromVUsdFormatted(u,s,o).float}async getAmountToSend(i,a,s,r){let o=await U(this.api,a),c=await U(this.api,s);return this.getAmountToSendFromPools(i,a,s,o,c,r)}async getAmountToSendFromChain(i,a,s,r,o,c){let m=await this.pool.getPoolInfoFromChain(a,o),u=await this.pool.getPoolInfoFromChain(s,c);return this.getAmountToSendFromPools(i,a,s,m,u,r)}getAmountToSendFromPools(i,a,s,r,o,c){k(i),x("amountToBeReceivedFloat",i,s.decimals);let m=R(i,s.decimals);if(c&&c==3){if(!a.cctpAddress||!s.cctpAddress||!a.cctpFeeShare)throw new ne("Such route does not support CCTP protocol");let p=m.div(ge(1).minus(a.cctpFeeShare)).round(0,ge.roundDown),d=we(p,s.decimals,a.decimals).round(0);return w(d,a.decimals).toFixed()}let u=bn(m,s,o),l=hn(u,a,r);if(ge(l).lte(0))throw new ye;return w(l,a.decimals).toFixed()}async getGasFeeOptions(i,a,s){return rn(i.allbridgeChainId,i.chainType,a.allbridgeChainId,i.decimals,s,this.api)}getAverageTransferTime(i,a,s){return i.transferTime?.[a.chainSymbol]?.[s]??null}async getPoolInfoByToken(i){return await this.api.getPoolInfoByKey({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress})}async refreshPoolInfo(i){if(i){let s=(i instanceof Array?i:[i]).map(r=>({chainSymbol:r.chainSymbol,poolAddress:r.poolAddress}));return this.api.refreshPoolInfo(s)}return this.api.refreshPoolInfo()}aprInPercents(i){return Pn(i)}async getExtraGasMaxLimits(i,a){return await on(i,a,this.api)}async getVUsdFromAmount(i,a,s){k(i);let r;a=="float"?(x("amount",i,s.decimals),r=R(i,s.decimals).toFixed()):r=i;let o=le(r,s,await U(this.api,s));return{int:o,float:w(o,3).toFixed()}}async getAmountFromVUsd(i,a){return this.getAmountFromVUsdFormatted(i,a,await U(this.api,a))}getAmountFromVUsdFormatted(i,a,s){k(i);let r=ze(i,a,s);if(ge(r).lt(0))throw new ye;return{int:r,float:w(r,a.decimals).toFixed()}}async swapAndBridgeFeeCalculation(i,a,s){return Aa(i,{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await U(this.api,a)},{decimals:s.decimals,feeShare:s.feeShare,poolInfo:await U(this.api,s)})}async swapAndBridgeFeeCalculationReverse(i,a,s){let r=ca(i,{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await U(this.api,a)},{decimals:s.decimals,feeShare:s.feeShare,poolInfo:await U(this.api,s)}),o=r.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(ge(o).lt(0))throw new ye;return r}async getSendAmountDetails(i,a,s,r){k(i);let o;return a=="float"?(x("amount",i,s.decimals),o=R(i,s.decimals).toFixed()):o=i,ma(o,s,await U(this.api,s),r,await U(this.api,r))}};function Ji(A){return"solanaRpcUrl"in A}var ga=class{constructor(i,a=lt){let s;Ji(i)?s=new mt({SOL:i.solanaRpcUrl,TRX:i.tronRpcUrl}):s=new mt(i),this.service=new Qt(s,a),this.bridge=this.service.bridge,this.pool=this.service.pool,this.utils=new Xt(s,a),this.params=a}async chainDetailsMap(){return this.service.chainDetailsMap()}async tokens(){return this.service.tokens()}async tokensByChain(i){return this.service.tokensByChain(i)}async getTransferStatus(i,a){return this.service.getTransferStatus(i,a)}async getGasBalance(i,a){return this.service.getGasBalance(i,a)}async checkAddress(i,a,s){return await this.service.checkAddress()}async getPendingStatusInfo(i,a,s,r){return this.service.getPendingStatusInfo(i,a,s,r)}async getTokenBalance(i,a){return this.service.getTokenBalance(i,a)}async getNativeTokenBalance(i,a){return this.service.getNativeTokenBalance(i,a)}async calculateFeePercentOnSourceChain(i,a){return this.service.calculateFeePercentOnSourceChain(i,a)}async calculateFeePercentOnDestinationChain(i,a,s){return this.service.calculateFeePercentOnDestinationChain(i,a,s)}async getAmountToBeReceivedAndGasFeeOptions(i,a,s,r){return this.service.getAmountToBeReceivedAndGasFeeOptions(i,a,s,r)}async getAmountToSendAndGasFeeOptions(i,a,s,r){return this.service.getAmountToSendAndGasFeeOptions(i,a,s,r)}async getAmountToBeReceived(i,a,s,r){return this.service.getAmountToBeReceived(i,a,s,r)}async getAmountToBeReceivedFromChain(i,a,s,r,o,c){return this.service.getAmountToBeReceivedFromChain(i,a,s,r,o,c)}getAmountToBeReceivedFromPools(i,a,s,r,o,c){return this.service.getAmountToBeReceivedFromPools(i,a,s,r,o,c)}async getAmountToSend(i,a,s,r){return this.service.getAmountToSend(i,a,s,r)}async getAmountToSendFromChain(i,a,s,r,o,c){return this.service.getAmountToSendFromChain(i,a,s,r,o,c)}getAmountToSendFromPools(i,a,s,r,o,c){return this.service.getAmountToSendFromPools(i,a,s,r,o,c)}async getGasFeeOptions(i,a,s){return this.service.getGasFeeOptions(i,a,s)}getAverageTransferTime(i,a,s){return this.service.getAverageTransferTime(i,a,s)}async getPoolInfoByToken(i){return this.service.getPoolInfoByToken(i)}async refreshPoolInfo(i){return this.service.refreshPoolInfo(i)}aprInPercents(i){return this.service.aprInPercents(i)}async getExtraGasMaxLimits(i,a){return this.service.getExtraGasMaxLimits(i,a)}async getVUsdFromAmount(i,a,s){return this.service.getVUsdFromAmount(i,a,s)}async getAmountFromVUsd(i,a){return this.service.getAmountFromVUsd(i,a)}async swapAndBridgeFeeCalculation(i,a,s){return this.service.swapAndBridgeFeeCalculation(i,a,s)}async swapAndBridgeFeeCalculationReverse(i,a,s){return this.service.swapAndBridgeFeeCalculationReverse(i,a,s)}async getSendAmountDetails(i,a,s,r){return this.service.getSendAmountDetails(i,a,s,r)}};export{jt as AddressStatus,ga as AllbridgeCoreSdk,Ct as AmountFormat,Ge as AmountNotEnoughError,ft as ArgumentInvalidDecimalsError,ne as CCTPDoesNotSupportedError,ue as ChainSymbol,D as ChainType,ya as ErrorCode,gt as ExtraGasMaxLimitExceededError,Ve as FeePaymentMethod,ye as InsufficientPoolLiquidityError,pt as InvalidAmountError,Je as InvalidGasFeePaymentOptionError,fn as InvalidMessengerOptionError,Ze as InvalidTxError,V as JupiterError,he as Messenger,J as MethodNotSupportedError,yt as NodeRpcUrlNotInitializedError,M as SdkError,G as SdkRootError,An as SolanaAutoTxFee,Qe as TimeoutError,ht as TxTooLargeError,Ke as VerifyTxError,lt as mainnet,qi as nodeRpcUrlsDefault,ji as nodeUrlsDefault,Ki as testnet,Hi as testnetNodeRpcUrlsDefault,Qi as testnetNodeUrlsDefault};
6
+ &onlyDirectRoutes=true`)}catch(d){throw d instanceof ta&&d.response&&d.response.data&&d.response.data.error?new V(d.response.data.error):new V("Cannot get route")}let c;if(r&&o?.data?.inAmount)c=o.data.inAmount;else if(r)throw new V("Cannot get inAmount");let m;try{m=await ea.post(`${this.jupiterUrl}/swap`,{quoteResponse:o.data,userPublicKey:i,wrapAndUnwrapSol:!0})}catch(d){throw d instanceof ta&&d.response&&d.response.data&&d.response.data.error?new V(d.response.data.error):new V("Cannot get swap transaction")}let l;if(m?.data?.swapTransaction)l=m.data.swapTransaction;else throw new V("Cannot get swap transaction");let u=Buffer.from(l,"base64"),p=qa.deserialize(u);return r?{tx:p,amountIn:c}:{tx:p}}async amendJupiterWithSdkTx(i,a){try{let s=await We(i,this.connection),r=await We(a,this.connection),o=$n.decompile(i.message,{addressLookupTableAccounts:s}),c=$n.decompile(a.message,{addressLookupTableAccounts:r});if(c.instructions.shift(),o.instructions.push(...c.instructions),s.push(...r),i.message=o.compileToV0Message(s),a.message.header.numRequiredSignatures===2&&i.signatures.length===1){let m=a.signatures[0];if(!m)throw new P("Signature is undefined");i.signatures.push(m)}return i}catch(s){throw s instanceof Error&&s.message?new V(`Some error occurred during creation final swap and bridge transaction. ${s.message}`):new V("Some error occurred during creation final swap and bridge transaction")}}};var ln=1e6,ti=1.1,xt=class extends ie{constructor(a,s,r){super();this.solanaRpcUrl=a;this.params=s;this.api=r;this.chainType="SOLANA";this.jupiterService=new Mt(a,s.jupiterUrl)}async buildRawTransactionSwap(a){let s=Be(this.chainType,a);return await this.buildSwapTransaction(s,a.sourceToken.poolAddress,a.destinationToken.poolAddress,a.txFeeParams)}async buildSwapTransaction(a,s,r,o){let{fromAccountAddress:c,amount:m,contractAddress:l,fromTokenAddress:u,toTokenAddress:p,toAccountAddress:d,minimumReceiveAmount:g}=a,h=c,b=l,T=u,y=p,S=r,B=d,w=new F(h),D=Ce(this.solanaRpcUrl,w.toString()),M=new mn(et,b,D),I=await De(M.programId),J=await we(M.programId),N=new F(T),oe=await Ne(N,M.programId),Ae=new F(s),ge=await ae(w,N),q=new F(B),Y=new F(y),j=await Ne(Y,M.programId),$=new F(S),K=await ae(q,Y),ce=[Ie.ComputeBudgetProgram.setComputeUnitLimit({units:ln})];try{await Ve(K,D)}catch{let ya=await $a.associatedToken(D).methods.create().accounts({mint:Y,owner:q,associatedAccount:K}).instruction();ce.push(ya)}let me=await M.methods.swap(new Ee(m),new Ee(g||0)).accounts({payer:w,config:J,bridgeAuthority:I,user:w,sendBridgeToken:oe,sendMint:N,sendPool:Ae,sendUserToken:ge,receiveBridgeToken:j,receiveMint:Y,receivePool:$,receiveUserToken:K}).preInstructions(ce).transaction(),ee=D.connection;return me.recentBlockhash=(await ee.getLatestBlockhash()).blockhash,me.feePayer=w,await Oe(me,o,this.solanaRpcUrl),await this.convertToVersionedTransaction(me,ee)}async buildRawTransactionSend(a){let s=await Te(this.chainType,a,this.api),r=this.addPoolAddress(a,s),o=r.gasFeePaymentMethod=="stablecoin",c;if(o)try{let{tx:u,solTxSendUpdatedParams:p}=await this.processJup(r,a,!0);c=u,r={...r,...p}}catch{try{let{tx:p,solTxSendUpdatedParams:d}=await this.processJup(r,a,!1);c=p,r={...r,...d}}catch(p){throw p instanceof Z?p:p instanceof Error&&p.message?new V(`Some error occurred during creation Jupiter swap transaction. ${p.message}`):new V("Some error occurred during creation Jupiter swap transaction")}}let m,l;switch(s.messenger){case 1:{let u=await this.prepareSwapAndBridgeData(r);m=await this.buildSwapAndBridgeAllbridgeTransaction(u);break}case 2:{let u=await this.prepareSwapAndBridgeData(r),{transaction:p,messageAccount:d}=await this.buildSwapAndBridgeWormholeTransaction(u);m=p,l=d;break}case 3:{let u=await this.prepareSwapAndBridgeCctpData(r),{transaction:p,messageSentEventDataKeypair:d}=await this.buildSwapAndBridgeCctpTransaction(a.destinationToken.chainSymbol,u);m=p,l=d;break}}if(o){if(!c)throw new V("Swap tx is absent");m=await this.jupiterService.amendJupiterWithSdkTx(c,m)}return await jn(m,a.txFeeParams,this.solanaRpcUrl),l&&m.sign([l]),m}async processJup(a,s,r){let{fee:o,extraGas:c,gasFeePaymentMethod:m}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(s.sourceToken.decimals,a),l=r?de(o):de(a.fee);c&&(l=l.plus(c)),r||(l=l.mul(ti));let{tx:u,amountIn:p}=await this.jupiterService.getJupiterSwapTx(s.fromAccountAddress,s.sourceToken.tokenAddress,l.toFixed(0),r),d;if(r){if(!p)throw new V("Cannot get inAmount");d=de(a.amount).minus(p).toFixed(0)}else d=de(a.amount).minus(l).toFixed(0);if(de(d).lte(0))throw new Fe(`Amount not enough to pay fee, ${C(de(d).minus(1).neg(),s.sourceToken.decimals).toFixed()} stables is missing`);return{tx:u,solTxSendUpdatedParams:{amount:d,fee:o,extraGas:c,gasFeePaymentMethod:m}}}addPoolAddress(a,s){return{...s,poolAddress:a.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(a,s){if(s.gasFeePaymentMethod=="stablecoin"){let r=(await this.api.getReceiveTransactionCost({sourceChainId:s.fromChainId,destinationChainId:s.toChainId,messenger:s.messenger})).sourceNativeTokenPrice,o=de(s.fee).div(r).mul(de(10).pow(R.getChainDecimalsByType("SOLANA")-a)).toFixed(0),c;return s.extraGas&&(c=de(s.extraGas).div(r).mul(de(10).pow(R.getChainDecimalsByType("SOLANA")-a)).toFixed(0)),{fee:o,extraGas:c,gasFeePaymentMethod:"native"}}return{fee:s.fee,extraGas:s.extraGas,gasFeePaymentMethod:"native"}}getExtraGasInstruction(a,s,r){return Ie.SystemProgram.transfer({fromPubkey:s,toPubkey:r,lamports:+a})}async prepareSwapAndBridgeData(a){let{amount:s,contractAddress:r,fromChainId:o,fromAccountAddress:c,fromTokenAddress:m,toChainId:l,toAccountAddress:u,toTokenAddress:p,poolAddress:d,extraGas:g}=a,h=m,b=c,T=l,y=p,S=u,B=r,w=o,D=Ce(this.solanaRpcUrl,b),M=new mn(et,B,D),I=Array.from(_e()),J=new F(d),N=await Jn(s,M,J),oe=await Wn(I,M.programId),Ae=await De(M.programId),ge=await ae(new F(b),new F(h)),q=await Ne(new F(h),M.programId),Y=await tn(T,M.programId),j=await Gn(T,Buffer.from(y),M.programId),$=await we(M.programId),K=await M.account.config.fetch($),ce=await ze(T,K.gasOracleProgramId),me=await ze(w,K.gasOracleProgramId),ee=Kn({amount:N,recipient:Buffer.from(S),nonce:Buffer.from(I),receiveToken:Buffer.from(y),destinationChainId:T,sourceChainId:w,chainBridge:(await De(M.programId)).toBuffer()}),v={};return v.bridge=M,v.amount=new Ee(s),v.vusdAmount=new Ee(N),v.nonce=I,v.recipient=Array.from(S),v.receiveToken=Array.from(y),v.poolAccount=J,v.lockAccount=oe,v.bridgeAuthority=Ae,v.userToken=ge,v.bridgeTokenAccount=q,v.chainBridgeAccount=Y,v.otherBridgeTokenAccount=j,v.userAccount=new F(b),v.destinationChainId=T,v.mint=new F(h),v.config=$,v.configAccountInfo=K,v.gasPrice=ce,v.thisGasPrice=me,v.message=ee,g&&(v.extraGasInstruction=this.getExtraGasInstruction(g,v.userAccount,$)),v}async buildSwapAndBridgeAllbridgeTransaction(a){let{bridge:s,vusdAmount:r,nonce:o,recipient:c,receiveToken:m,poolAccount:l,lockAccount:u,bridgeAuthority:p,userToken:d,bridgeTokenAccount:g,chainBridgeAccount:h,otherBridgeTokenAccount:b,userAccount:T,destinationChainId:y,mint:S,config:B,configAccountInfo:w,gasPrice:D,thisGasPrice:M,message:I,extraGasInstruction:J}=a,N=w.allbridgeMessengerProgramId,oe=await nn(y,N),Ae=await we(N),ge=await Zn(I,N),q=[];J&&q.push(J);let Y=await s.methods.swapAndBridge({vusdAmount:r,nonce:o,destinationChainId:y,recipient:c,receiveToken:m}).accounts({mint:S,user:T,config:B,lock:u,pool:l,gasPrice:D,thisGasPrice:M,bridgeAuthority:p,userToken:d,bridgeToken:g,chainBridge:h,messenger:N,messengerGasUsage:oe,messengerConfig:Ae,sentMessageAccount:ge,otherBridgeToken:b}).preInstructions([Ie.ComputeBudgetProgram.setComputeUnitLimit({units:ln})]).postInstructions(q).transaction(),j=Ce(this.solanaRpcUrl,T.toString()).connection;return Y.recentBlockhash=(await j.getLatestBlockhash()).blockhash,Y.feePayer=T,await this.convertToVersionedTransaction(Y,j)}async convertToVersionedTransaction(a,s){let r=await s.getAddressLookupTable(new F(this.params.solanaLookUpTable)).then(c=>c.value);if(!r)throw new P("Cannot find allbridgeLookupTableAccount");let o=new Ie.TransactionMessage({payerKey:a.feePayer,recentBlockhash:a.recentBlockhash,instructions:a.instructions}).compileToV0Message([r]);return new Ie.VersionedTransaction(o)}async buildSwapAndBridgeWormholeTransaction(a){let{bridge:s,vusdAmount:r,nonce:o,recipient:c,receiveToken:m,poolAccount:l,lockAccount:u,bridgeAuthority:p,userToken:d,bridgeTokenAccount:g,chainBridgeAccount:h,otherBridgeTokenAccount:b,userAccount:T,destinationChainId:y,mint:S,config:B,configAccountInfo:w,gasPrice:D,thisGasPrice:M,message:I,extraGasInstruction:J}=a,N=this.params.wormholeMessengerProgramId,[oe]=F.findProgramAddressSync([Buffer.from("Bridge")],new F(N)),[Ae]=F.findProgramAddressSync([Buffer.from("fee_collector")],new F(N)),[ge]=F.findProgramAddressSync([Buffer.from("Sequence"),p.toBuffer()],new F(N)),q=await nn(y,w.wormholeMessengerProgramId),Y=await we(w.wormholeMessengerProgramId),j=na.generate(),$=Ce(this.solanaRpcUrl,T.toString()),K=await $.connection.getAccountInfo(oe);if(K==null)throw new P("Cannot fetch wormhole bridge account info");let ce=new Ee(K.data.slice(16,24),"le").toString(),me=ei.transfer({fromPubkey:T,toPubkey:Ae,lamports:+ce}),ee=[];J&&ee.push(J);let v={mint:S,user:T,config:B,lock:u,pool:l,gasPrice:D,thisGasPrice:M,bridgeAuthority:p,userToken:d,bridgeToken:g,chainBridge:h,otherBridgeToken:b,messengerGasUsage:q,wormholeProgram:N,bridge:oe,message:j.publicKey,wormholeMessenger:w.wormholeMessengerProgramId,sequence:ge,feeCollector:Ae,wormholeMessengerConfig:Y,clock:Ie.SYSVAR_CLOCK_PUBKEY},mt=await s.methods.swapAndBridgeWormhole({vusdAmount:r,nonce:o,destinationChainId:y,recipient:c,receiveToken:m}).accounts(v).preInstructions([Ie.ComputeBudgetProgram.setComputeUnitLimit({units:ln}),me]).postInstructions(ee).signers([j]).transaction();return mt.recentBlockhash=(await $.connection.getLatestBlockhash()).blockhash,mt.feePayer=T,{transaction:await this.convertToVersionedTransaction(mt,$.connection),messageAccount:j}}async prepareSwapAndBridgeCctpData(a){let{contractAddress:s,amount:r,fromAccountAddress:o,fromTokenAddress:c,toChainId:m,toAccountAddress:l,toTokenAddress:u,extraGas:p}=a,d=s;if(!d)throw new te("Such route does not support CCTP protocol");let g=4,h=o,b=u,T=l,y=Ce(this.solanaRpcUrl,h),S=new mn(Ln,d,y),B=new F(c),w=await Dn(B,S.programId),D=new F(h),M=await S.account.cctpBridge.fetch(w),I={};return I.cctpBridge=S,I.cctpBridgeAccount=w,I.cctpAddressAccount=new F(d),I.amount=new Ee(r),I.recipient=Array.from(T),I.receiveToken=Array.from(b),I.userToken=await ae(D,B),I.bridgeAuthority=await Fn(w,S.programId),I.bridgeTokenAccount=await Nn(B,S.programId),I.chainBridgeAccount=await tn(m,S.programId),I.userAccount=D,I.destinationChainId=m,I.mint=B,I.gasPrice=await ze(m,M.gasOracleProgramId),I.thisGasPrice=await ze(g,M.gasOracleProgramId),I.provider=y,p&&(I.extraGasInstruction=this.getExtraGasInstruction(p,I.userAccount,w)),I}async buildSwapAndBridgeCctpTransaction(a,s){let{cctpBridge:r,cctpBridgeAccount:o,amount:c,recipient:m,receiveToken:l,bridgeAuthority:u,userToken:p,bridgeTokenAccount:d,chainBridgeAccount:g,userAccount:h,destinationChainId:b,mint:T,gasPrice:y,thisGasPrice:S,extraGasInstruction:B,provider:w}=s,D=this.params.cctpParams.cctpDomains[a],M=this.params.cctpParams.cctpTransmitterProgramId,I=this.params.cctpParams.cctpTokenMessengerMinter;if(D==null||!M||!I)throw new P("CCTP is not configured");let J=new F(M),N=new F(I),{messageTransmitterAccount:oe,tokenMessenger:Ae,tokenMessengerEventAuthority:ge,tokenMinter:q,localToken:Y,remoteTokenMessengerKey:j,authorityPda:$}=Un(D,T,J,N),K=[];B&&K.push(B);let ce=na.generate(),me=_n(r.programId,ce.publicKey),ee=await r.methods.bridge({amount:c,destinationChainId:b,recipient:m,receiveToken:l}).accounts({mint:T,user:h,cctpBridge:o,messageSentEventData:ce.publicKey,lock:me,cctpMessenger:N,messageTransmitterProgram:J,messageTransmitterAccount:oe,tokenMessenger:Ae,tokenMinter:q,localToken:Y,remoteTokenMessengerKey:j,authorityPda:$,eventAuthority:ge,bridgeToken:d,gasPrice:y,thisGasPrice:S,chainBridge:g,userToken:p,bridgeAuthority:u}).preInstructions([Ie.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(K).transaction(),v=w.connection;return ee.recentBlockhash=(await v.getLatestBlockhash()).blockhash,ee.feePayer=h,{transaction:await this.convertToVersionedTransaction(ee,v),messageSentEventDataKeypair:ce}}send(a){throw new L}};import{Address as un,contract as Vd}from"@stellar/stellar-sdk";import{Big as ii}from"big.js";import{contract as n}from"@stellar/stellar-sdk";var ni=n.Spec,ai=n.Client;var tt=class extends ai{constructor(a){super(new ni(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),a);this.options=a;this.fromJSON={initialize:this.txFromJSON,swap_and_bridge:this.txFromJSON,receive_tokens:this.txFromJSON,swap:this.txFromJSON,stop_swap:this.txFromJSON,start_swap:this.txFromJSON,set_gas_oracle:this.txFromJSON,set_stop_authority:this.txFromJSON,set_rebalancer:this.txFromJSON,set_messenger:this.txFromJSON,set_gas_usage:this.txFromJSON,register_bridge:this.txFromJSON,add_bridge_token:this.txFromJSON,remove_bridge_token:this.txFromJSON,add_pool:this.txFromJSON,withdraw_gas_tokens:this.txFromJSON,withdraw_bridging_fee_in_tokens:this.txFromJSON,has_processed_message:this.txFromJSON,has_received_message:this.txFromJSON,get_pool_address:this.txFromJSON,get_config:this.txFromJSON,get_stop_authority:this.txFromJSON,get_transaction_cost:this.txFromJSON,get_gas_usage:this.txFromJSON,get_admin:this.txFromJSON,get_gas_oracle:this.txFromJSON,get_another_bridge:this.txFromJSON,set_admin:this.txFromJSON,upgrade:this.txFromJSON}}};var Wt=class extends ie{constructor(a,s,r){super();this.nodeRpcUrlsConfig=a;this.params=s;this.api=r;this.chainType="SRB"}async buildRawTransactionSend(a){let s=await Te(this.chainType,a,this.api);return await this.buildRawTransactionSendFromParams(s)}async buildRawTransactionSendFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toChainId:m,toAccountAddress:l,toTokenAddress:u,fee:p,gasFeePaymentMethod:d,extraGas:g}=a,h=p;g&&(h=ii(h).plus(g).toFixed());let b=this.getContract(tt,r,o),T;return d==="stablecoin"?T=await b.swap_and_bridge({sender:o,token:un.contract(Buffer.from(c)).toString(),amount:BigInt(s),recipient:Buffer.from(l),destination_chain_id:+m,receive_token:Buffer.from(u),nonce:sn(),gas_amount:BigInt(0),fee_token_amount:BigInt(h)}):T=await b.swap_and_bridge({sender:o,token:un.contract(Buffer.from(c)).toString(),amount:BigInt(s),recipient:Buffer.from(l),destination_chain_id:+m,receive_token:Buffer.from(u),nonce:sn(),gas_amount:BigInt(h),fee_token_amount:BigInt(0)}),T.toXDR()}async buildRawTransactionSwap(a){let s=Be(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s)}async buildRawTransactionSwapFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:l,minimumReceiveAmount:u}=a;return(await this.getContract(tt,r,o).swap({sender:o,amount:BigInt(s),token:un.contract(Buffer.from(c)).toBuffer(),receive_token:Buffer.from(l),recipient:m,receive_amount_min:BigInt(u)})).toXDR()}send(a){throw new L}getContract(a,s,r){let o={publicKey:r,contractId:s,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(o)}};import{Big as oi}from"big.js";import si from"bn.js";function Ft(A){return"0x"+new si(A).toString("hex")}function aa(A){return new Promise(i=>setTimeout(()=>i(),A))}var Xe=A=>(...i)=>new Promise((a,s)=>A(...i,(r,o)=>r?s(r):a(o)));async function Gt(A,i){let a=await A.trx.sign(i);if(!a.signature)throw new Ge("Transaction was not signed properly");let r=(await A.trx.sendRawTransaction(a)).txid;return await ri(A,r),{txId:r}}async function ri(A,i,a=1e4){let s=Date.now();for(;;){if(Date.now()-s>a)throw new Je("Transaction not found");let r=await A.trx.getUnconfirmedTransactionInfo(i);if(!r?.receipt){await aa(2e3);continue}if(r.receipt.result==="SUCCESS")return r;throw new Je(`Transaction status is ${r.receipt.result}`)}}var nt=class extends ie{constructor(a,s){super();this.tronWeb=a;this.api=s;this.chainType="TRX"}async send(a){let s=await Te(this.chainType,a,this.api),r=await this.buildRawTransactionSendFromParams(s);return await Gt(this.tronWeb,r)}async buildRawTransactionSwap(a){let s=Be(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s)}async buildRawTransactionSwapFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:l,minimumReceiveAmount:u}=a,p=[{type:"uint256",value:s},{type:"bytes32",value:c},{type:"bytes32",value:l},{type:"address",value:m},{type:"uint256",value:u}];return this.buildRawTransaction(r,"swap(uint256,bytes32,bytes32,address,uint256)",p,"0",o)}async buildRawTransactionSend(a){let s=await Te(this.chainType,a,this.api);return this.buildRawTransactionSendFromParams(s)}async buildRawTransactionSendFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toChainId:m,toAccountAddress:l,toTokenAddress:u,messenger:p,fee:d,gasFeePaymentMethod:g,extraGas:h}=a,b=d;h&&(b=oi(b).plus(h).toFixed());let T=_e().toJSON().data,y,S,B;return p==3?(g==="stablecoin"?(y=[{type:"uint256",value:s},{type:"bytes32",value:l},{type:"uint256",value:m},{type:"uint256",value:b}],S="0"):(y=[{type:"uint256",value:s},{type:"bytes32",value:l},{type:"uint256",value:m},{type:"uint256",value:0}],S=b),B="bridge(uint256,bytes32,uint256,uint256)"):(g==="stablecoin"?(y=[{type:"bytes32",value:c},{type:"uint256",value:s},{type:"bytes32",value:l},{type:"uint256",value:m},{type:"bytes32",value:u},{type:"uint256",value:T},{type:"uint8",value:p},{type:"uint256",value:b}],S="0"):(y=[{type:"bytes32",value:c},{type:"uint256",value:s},{type:"bytes32",value:l},{type:"uint256",value:m},{type:"bytes32",value:u},{type:"uint256",value:T},{type:"uint8",value:p},{type:"uint256",value:0}],S=b),B="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)"),this.buildRawTransaction(r,B,y,S,o)}async buildRawTransaction(a,s,r,o,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(a,s,{callValue:o},r,c);if(!m?.result?.result)throw new P("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var Zt=class{constructor(i,a,s,r){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=r;this.rawTxBuilder=new It(i,a,s,r)}async getAllowance(i,a){let s,r;a?(s=i,r=a):r=i;let o=$e(r.token,r.messenger);return await this.tokenService.getAllowance({...r,spender:o},s)}async checkAllowance(i,a){let s,r;a?(s=i,r=a):r=i;let o=$e(r.token,r.messenger);return this.tokenService.checkAllowance({...r,spender:o},s)}async approve(i,a){let s=$e(a.token,a.messenger);return this.tokenService.approve(i,{...a,spender:s})}async send(i,a){return x(a.amount),W("amount",a.amount,a.sourceToken.decimals),Rt(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).send(a)}};function $e(A,i){if(i&&i==3){if(A.cctpAddress)return A.cctpAddress;throw new te("Such route does not support CCTP protocol")}else return A.bridgeAddress}function Rt(A,i,a,s,r){switch(R.getChainProperty(A).chainType){case"EVM":{if(r)return new qe(r,i,a);{let o=a.getNodeRpcUrl(A);return new qe(new ci(o),i,a)}}case"TRX":{if(r)return new nt(r,i);{let o=a.getNodeRpcUrl(A);return new nt(new Ai({fullHost:o}),i)}}case"SOLANA":return new xt(a.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:s.wormholeMessengerProgramId,solanaLookUpTable:s.solanaLookUpTable,cctpParams:s.cctpParams,jupiterUrl:s.jupiterUrl},i);case"SRB":return new Wt(a,s,i)}}import{Big as bi}from"big.js";import Ti from"timed-cache";import Pi from"tronweb";import Si from"web3";import{Big as Pe}from"big.js";function ia(A,i,a,s,r){let o=k(A,3),c=Pe(o),m=Pe(a),l=Pe(s).plus(r),u,p;if(m.eq(0)||l.eq(0)){let g=c.div(2);u=Pe(s).plus(g),p=Pe(r).plus(g)}else u=Pe(s).plus(c.mul(s).div(l)),p=Pe(r).plus(c.mul(r).div(l));return Pe(Sn(i,u.toFixed(),p.toFixed())).minus(m).toFixed()}function sa(A){let i=k(A,3);return Pe(i).round().toFixed()}var Re=[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];var z=class{constructor(i){this.lpAmount=i.lpAmount,this.rewardDebt=i.rewardDebt}get userLiquidity(){return C(this.lpAmount,3).toFixed()}earned(i,a){let s=Tn(this.lpAmount,this.rewardDebt,i.accRewardPerShareP,i.p);return a?C(s,a).toFixed():s}};var se=class{};var at=class extends se{constructor(a,s){super();this.web3=a;this.api=s;this.chainType="EVM";this.P=52}async getUserBalanceInfo(a,s){let r;try{r=await wt(this.getUserBalanceInfoByBatch(a,s),`Cannot get UserBalanceInfo for ${s.name} on ${s.chainSymbol}`,5e3)}catch{r=await en(()=>this.getUserBalanceInfoPerProperty(a,s),`Cannot get UserBalanceInfo for ${s.name} on ${s.chainSymbol}`,5,2e3)}return r}async getUserBalanceInfoByBatch(a,s){let r=new this.web3.BatchRequest,o=new this.web3.eth.Contract(Re,s.poolAddress),c=["userRewardDebt","balanceOf"].map(u=>Xe(p=>r.add(o.methods[u](a).call.request({},p)))());r.execute();let[m,l]=await Promise.all(c);return new z({lpAmount:l,rewardDebt:m})}async getUserBalanceInfoPerProperty(a,s){let r=await this.getPoolContract(s.poolAddress).methods.userRewardDebt(a).call(),o=await this.getPoolContract(s.poolAddress).methods.balanceOf(a).call();return new z({lpAmount:o,rewardDebt:r})}async getPoolInfoFromChain(a){let s;try{s=await wt(this.getPoolInfoByBatch(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5e3)}catch{s=await en(()=>this.getPoolInfoPerProperty(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5,2e3)}return s}async getPoolInfoByBatch(a){let s=new this.web3.BatchRequest,r=new this.web3.eth.Contract(Re,a.poolAddress),o=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(T=>Xe(y=>s.add(r.methods[T]().call.request({},y)))());s.execute();let[c,m,l,u,p,d]=await Promise.all(o),g=l.toString(),h=u.toString(),b=H({tokenBalance:g,vUsdBalance:h});return{aValue:c.toString(),dValue:m.toString(),tokenBalance:g,vUsdBalance:h,totalLpAmount:p.toString(),accRewardPerShareP:d.toString(),p:this.P,imbalance:b}}async getPoolInfoPerProperty(a){let s=this.getPoolContract(a.poolAddress),r=await s.methods.a().call(),o=await s.methods.d().call(),c=await s.methods.tokenBalance().call(),m=await s.methods.vUsdBalance().call(),l=await s.methods.totalSupply().call(),u=await s.methods.accRewardPerShareP().call(),p=H({tokenBalance:c,vUsdBalance:m});return{aValue:r,dValue:o,tokenBalance:c,vUsdBalance:m,totalLpAmount:l,accRewardPerShareP:u,p:this.P,imbalance:p}}async buildRawTransactionDeposit(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.deposit(a.amount).encodeABI()})}async buildRawTransactionWithdraw(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.withdraw(a.amount).encodeABI()})}async buildRawTransactionClaimRewards(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(a){return{from:a.accountAddress,to:a.token.poolAddress,value:"0"}}getContract(a,s){return new this.web3.eth.Contract(a,s)}getPoolContract(a){return this.getContract(Re,a)}};var Dt=class{constructor(i,a,s,r){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=r}async approve(i,a){if(a){let s=i,r=a;return this.tokenService.buildRawTransactionApprove({...r,spender:r.token.poolAddress},s)}else{let s=i;return this.tokenService.buildRawTransactionApprove({...s,spender:s.token.poolAddress})}}async deposit(i,a){return x(i.amount),W("amount",i.amount,i.token.decimals),i.amount=k(i.amount,i.token.decimals).toFixed(),Ye(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionDeposit(i)}async withdraw(i,a){return x(i.amount),W("amount",i.amount,i.token.decimals),i.amount=k(i.amount,3).toFixed(),Ye(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionWithdraw(i)}async claimRewards(i,a){return Ye(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionClaimRewards(i)}};import{AnchorProvider as li,BN as ra,Program as ui,Spl as di,web3 as pi}from"@project-serum/anchor";import{Connection as gi,PublicKey as ve}from"@solana/web3.js";var Nt=class extends se{constructor(a,s){super();this.solanaRpcUrl=a;this.api=s;this.chainType="SOLANA";this.P=48}async getUserBalanceInfo(a,s){let r=this.buildAnchorProvider(a),o=this.getBridge(s.bridgeAddress,r),c=new ve(s.poolAddress),m=await o.account.pool.fetch(c);try{let l=await an(new ve(a),m.mint,o.programId),{lpAmount:u,rewardDebt:p}=await o.account.userDeposit.fetch(l);return new z({lpAmount:u.toString(),rewardDebt:p.toString()})}catch{return new z({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(a){let s=this.buildAnchorProvider(a.bridgeAddress),r=await this.getBridge(a.bridgeAddress,s).account.pool.fetch(a.poolAddress),o=r.vUsdBalance.toString(),c=r.tokenBalance.toString(),m=H({tokenBalance:c,vUsdBalance:o});return{dValue:r.d.toString(),aValue:r.a.toString(),totalLpAmount:r.totalLpAmount.toString(),vUsdBalance:o,tokenBalance:c,accRewardPerShareP:r.accRewardPerShareP.toString(),p:this.P,imbalance:m}}async buildRawTransactionDeposit(a){let{bridge:s,accounts:r,preInstructions:o}=await this.prepareDataForTransaction(a),c=await s.methods.deposit(new ra(a.amount)).accounts(r).preInstructions(o).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new ve(a.accountAddress),await Oe(c,a.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionWithdraw(a){let{bridge:s,accounts:r,preInstructions:o}=await this.prepareDataForTransaction(a),c=await s.methods.withdraw(new ra(a.amount)).accounts(r).preInstructions(o).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new ve(a.accountAddress),await Oe(c,a.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionClaimRewards(a){let{bridge:s,accounts:r,preInstructions:o}=await this.prepareDataForTransaction(a),c=await s.methods.claimRewards().accounts(r).preInstructions(o).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new ve(a.accountAddress),await Oe(c,a.txFeeParams,this.solanaRpcUrl),c}async prepareDataForTransaction(a){let s=this.buildAnchorProvider(a.accountAddress),r=this.getBridge(a.token.bridgeAddress,s),{accounts:o,preInstructions:c}=await this._getLPTransactionData(r,a.token.poolAddress,a.accountAddress,s);return{bridge:r,accounts:o,preInstructions:c}}getBridge(a,s){return new ui(et,a,s)}buildAnchorProvider(a){let s=new gi(this.solanaRpcUrl,"confirmed"),r=new ve(a);return new li(s,{publicKey:r},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(a,s,r,o){let c=new ve(r),m=await we(a.programId),l=await De(a.programId),u=new ve(s),d=(await a.account.pool.fetch(u)).mint,g=await ae(c,d),h=await Ne(d,a.programId),b=await an(c,d,a.programId),T=[pi.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await Ve(g,o)}catch{let w=await di.associatedToken(o).methods.create().accounts({mint:d,owner:c,associatedAccount:g}).instruction();T.push(w)}try{await a.account.userDeposit.fetch(b)}catch{let B=await a.methods.initDepositAccount().accounts({mint:d,user:c,userDeposit:b}).instruction();T.push(B)}return{accounts:{mint:d,user:c,config:m,pool:u,bridgeAuthority:l,userDeposit:b,userToken:g,bridgeToken:h},preInstructions:T}}};import{contract as Od}from"@stellar/stellar-sdk";import{contract as t}from"@stellar/stellar-sdk";var fi=t.Spec,yi=t.Client;var _t=class extends yi{constructor(a){super(new fi(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),a);this.options=a;this.fromJSON={initialize:this.txFromJSON,deposit:this.txFromJSON,withdraw:this.txFromJSON,swap_to_v_usd:this.txFromJSON,swap_from_v_usd:this.txFromJSON,claim_rewards:this.txFromJSON,set_fee_share:this.txFromJSON,adjust_total_lp_amount:this.txFromJSON,set_balance_ratio_min_bp:this.txFromJSON,stop_deposit:this.txFromJSON,start_deposit:this.txFromJSON,stop_withdraw:this.txFromJSON,start_withdraw:this.txFromJSON,set_stop_authority:this.txFromJSON,set_bridge:this.txFromJSON,set_admin:this.txFromJSON,set_admin_fee_share:this.txFromJSON,claim_admin_fee:this.txFromJSON,pending_reward:this.txFromJSON,get_pool:this.txFromJSON,get_admin:this.txFromJSON,get_stop_authority:this.txFromJSON,get_bridge:this.txFromJSON,get_user_deposit:this.txFromJSON,upgrade:this.txFromJSON}}};var Ut=class extends se{constructor(a,s,r){super();this.nodeRpcUrlsConfig=a;this.params=s;this.api=r;this.chainType="SRB";this.P=48}async getUserBalanceInfo(a,s){let o=(await this.getContract(s.poolAddress).get_user_deposit({user:a})).result;if(o.isErr())throw new P;let c=o.unwrap();return new z({lpAmount:c.lp_amount.toString(),rewardDebt:c.reward_debt.toString()})}async getPoolInfoFromChain(a){let r=(await this.getContract(a.poolAddress).get_pool()).result;if(r.isErr())throw new P;let o=r.unwrap();return{aValue:o.a.toString(),accRewardPerShareP:o.acc_reward_per_share_p.toString(),dValue:o.d.toString(),tokenBalance:o.token_balance.toString(),p:this.P,totalLpAmount:o.total_lp_amount.toString(),vUsdBalance:o.v_usd_balance.toString(),imbalance:H({tokenBalance:o.token_balance.toString(),vUsdBalance:o.v_usd_balance.toString()})}}async buildRawTransactionDeposit(a){let s=this.getContract(a.token.poolAddress,a.accountAddress);return console.log("sender",a.accountAddress),console.log("poolAddress",a.token.poolAddress),(await s.deposit({sender:a.accountAddress,amount:BigInt(a.amount)})).toXDR()}async buildRawTransactionWithdraw(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).withdraw({sender:a.accountAddress,amount_lp:BigInt(a.amount)})).toXDR()}async buildRawTransactionClaimRewards(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).claim_rewards({sender:a.accountAddress})).toXDR()}getContract(a,s){let r={publicKey:s,contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new _t(r)}};import hi from"web3";var it=class extends se{constructor(a,s,r){super();this.tronWeb=a;this.api=s;this.chainType="TRX";this.P=52;r&&(this.web3=new hi(r))}async getUserBalanceInfo(a,s){let r;if(this.web3)try{r=await this.getUserBalanceInfoByBatch(this.web3,a,s)}catch{r=await this.getUserBalanceInfoPerProperty(a,s)}else r=await this.getUserBalanceInfoPerProperty(a,s);return r}async getUserBalanceInfoByBatch(a,s,r){let o=new a.BatchRequest,c=new a.eth.Contract(Re,je(r.poolAddress)),m=je(s),l=["userRewardDebt","balanceOf"].map(d=>Xe(g=>o.add(c.methods[d](m).call.request({},g)))());o.execute();let[u,p]=await Promise.all(l);return new z({lpAmount:p,rewardDebt:u})}async getUserBalanceInfoPerProperty(a,s){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a);let r=await this.getContract(s.poolAddress),o=(await r.methods.userRewardDebt(a).call()).toString(),c=(await r.methods.balanceOf(a).call()).toString();return new z({lpAmount:c,rewardDebt:o})}async getPoolInfoFromChain(a){let s;if(this.web3)try{s=await this.getPoolInfoByBatch(this.web3,a)}catch{s=await this.getPoolInfoPerProperty(a)}else s=await this.getPoolInfoPerProperty(a);return s}async getPoolInfoByBatch(a,s){let r=new a.BatchRequest,o=new a.eth.Contract(Re,je(s.poolAddress)),c=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(y=>Xe(S=>r.add(o.methods[y]().call.request({},S)))());r.execute();let[m,l,u,p,d,g]=await Promise.all(c),h=u.toString(),b=p.toString(),T=H({tokenBalance:h,vUsdBalance:b});return{aValue:m.toString(),dValue:l.toString(),tokenBalance:h,vUsdBalance:b,totalLpAmount:d.toString(),accRewardPerShareP:g.toString(),p:this.P,imbalance:T}}async getPoolInfoPerProperty(a){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a.poolAddress);let s=await this.getContract(a.poolAddress),[r,o,c,m,l,u]=await Promise.all([s.methods.a().call(),s.methods.d().call(),s.methods.tokenBalance().call(),s.methods.vUsdBalance().call(),s.methods.totalSupply().call(),s.methods.accRewardPerShareP().call()]),p=c.toString(),d=m.toString(),g=H({tokenBalance:p,vUsdBalance:d});return{aValue:r.toString(),dValue:o.toString(),tokenBalance:p,vUsdBalance:d,totalLpAmount:l.toString(),accRewardPerShareP:u.toString(),p:this.P,imbalance:g}}buildRawTransactionDeposit(a){let{amount:s,accountAddress:r}=a,o=[{type:"uint256",value:s}];return this.buildRawTransaction(a.token.poolAddress,"deposit(uint256)",o,"0",r)}buildRawTransactionWithdraw(a){let{amount:s,accountAddress:r}=a,o=[{type:"uint256",value:s}];return this.buildRawTransaction(a.token.poolAddress,"withdraw(uint256)",o,"0",r)}buildRawTransactionClaimRewards(a){let{accountAddress:s}=a,r=[];return this.buildRawTransaction(a.token.poolAddress,"claimRewards()",r,"0",s)}async buildRawTransaction(a,s,r,o,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(a,s,{callValue:o},r,c);if(!m?.result?.result)throw new P("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}async getContract(a){return await this.tronWeb.contract(Re,a)}};var Vt=class{constructor(i,a,s,r){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=r;this.rawTxBuilder=new Dt(i,a,this.params,r);let o=s.cachePoolInfoChainSec>0?s.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new Ti({defaultTtl:o})}async getAllowance(i,a){if(a){let s=i,r=a;return await this.tokenService.getAllowance({...r,spender:r.token.poolAddress},s)}else{let s=i;return await this.tokenService.getAllowance({...s,spender:s.token.poolAddress})}}async checkAllowance(i,a){if(a){let s=i,r=a;return this.tokenService.checkAllowance({...r,spender:r.token.poolAddress},s)}else{let s=i;return this.tokenService.checkAllowance({...s,spender:s.token.poolAddress})}}async approve(i,a){return this.tokenService.approve(i,{...a,spender:a.token.poolAddress})}async getAmountToBeDeposited(i,a,s){x(i),W("amount",i,a.decimals);let r=await this.getPoolInfoFromChain(a,s),{vUsdBalance:o,tokenBalance:c,aValue:m,dValue:l}=r,u=ia(i,m,l,c,o);return C(u,3).toFixed()}async getAmountToBeWithdrawn(i,a,s,r){x(i),W("amount",i,s.decimals);let o=await this.getPoolInfoFromChain(s,r),c=sa(i),m=Q(c,s.decimals),u=(await this.getUserBalanceInfo(a,s,r)).earned(o)||"0",p=bi(m).plus(u).toFixed();return C(p,s.decimals).toFixed()}async getUserBalanceInfo(i,a,s){return Ye(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,s).getUserBalanceInfo(i,a)}async getPoolInfoFromChain(i,a){let s={chainSymbol:i.chainSymbol,poolAddress:i.poolAddress},r=this.cache.get(s);if(r)return r;{let o=await Ye(i.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).getPoolInfoFromChain(i);return this.cache.put(s,o),this.api.cachePut({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress},o),o}}};function Ye(A,i,a,s,r){switch(R.getChainProperty(A).chainType){case"EVM":{if(r)return new at(r,i);{let o=a.getNodeRpcUrl(A);return new at(new Si(o),i)}}case"TRX":{let o=a.getNodeRpcUrl(A),c=s.tronJsonRpc;if(r)return new it(r,i,c);{let m=new Pi({fullHost:o});return new it(m,i,c)}}case"SOLANA":{let o=a.getNodeRpcUrl(A);return new Nt(o,i)}case"SRB":return new Ut(a,s,i)}}import{Big as G}from"big.js";function ca(A,i,a){let s=wi(A,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo),r=Ci(s.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:s,swapFromVUsdCalcResult:r}}function ma(A,i,a){let s=Bi(A,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),r=Ii(s.amountIncludingCommissionInSystemPrecision,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo);return{swapToVUsdCalcResult:s,swapFromVUsdCalcResult:r}}function wi(A,{feeShare:i,decimals:a},s){let r=G(A),o=r.times(i),c=r.minus(o);return{bridgeFeeInTokenPrecision:o.round().toFixed(),amountIncludingCommissionInSystemPrecision:oa(Me(c,a),s),amountExcludingCommissionInSystemPrecision:oa(Me(r,a),s)}}function oa(A,i){if(A.eq(0))return"0";let a=G(i.tokenBalance).plus(A),s=ue(a.toFixed(),i.aValue,i.dValue);return G(i.vUsdBalance).minus(s).round().toFixed()}function Ci(A,{feeShare:i,decimals:a},s){if(G(A).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let o=G(A).plus(s.vUsdBalance),c=ue(o,s.aValue,s.dValue),m=Q(G(s.tokenBalance).minus(c),a),l=G(m).times(i),u=G(m).minus(l).round();return{bridgeFeeInTokenPrecision:l.round().toFixed(),amountIncludingCommissionInTokenPrecision:u.toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}function Bi(A,{feeShare:i,decimals:a},s){let r=G(i).div(G(1).minus(i)),o=G(A).times(r),c=G(A).plus(o);return{bridgeFeeInTokenPrecision:o.round().toFixed(),amountIncludingCommissionInSystemPrecision:Aa(Me(c,a),s),amountExcludingCommissionInSystemPrecision:Aa(Me(A,a),s)}}function Aa(A,i){let a=G(i.tokenBalance).minus(A),s=ue(a.toFixed(),i.aValue,i.dValue);return G(s).minus(i.vUsdBalance).round().toFixed()}function Ii(A,{feeShare:i,decimals:a},s){if(G(A).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let r=G(s.vUsdBalance).minus(A),o=ue(r.toFixed(),s.aValue,s.dValue),c=G(o).minus(s.tokenBalance),m=Q(c.toFixed(),a),l=G(i).div(G(1).minus(i)),u=G(m).times(l),p=G(m).plus(u);return{bridgeFeeInTokenPrecision:u.round().toFixed(),amountIncludingCommissionInTokenPrecision:p.round().toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}import{Big as ke}from"big.js";function la(A,i,a,s,r){let o=le(A,i,a),c=Q(o,i.decimals),m=He(o,s,r),l=ke(A).times(i.feeShare),u=ke(m).div(ke(1).minus(s.feeShare)).minus(m);return{sourceLPSwap:{fee:C(l,i.decimals).neg().round(i.decimals,ke.roundUp).toFixed(),swap:C(ke(A).minus(c).minus(l),i.decimals).neg().round(i.decimals,ke.roundUp).toFixed()},destLPSwap:{fee:C(u,s.decimals).neg().round(s.decimals,ke.roundUp).toFixed(),swap:C(Q(o,s.decimals).minus(m).minus(u),s.decimals).neg().round(s.decimals,ke.roundUp).toFixed()}}}import{Connection as Ri,PublicKey as vi,TransactionMessage as ki}from"@solana/web3.js";var Ot=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.params=a}async addMemoToTx(i,a){if(a.length>28)throw new P("InvalidArgumentException memo cannot be more than 28 characters");let s=new Ri(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),r=await We(i,s),o=ki.decompile(i.message,{addressLookupTableAccounts:r}),c=o.instructions[o.instructions.length-1];if(!c?.keys)throw new P("Last instruction or its keys are invalid.");c.keys.push({pubkey:new vi(Buffer.from(a)),isSigner:!1,isWritable:!1}),i.message=o.compileToV0Message(r)}};import{Asset as Wi,BASE_FEE as Fi,Horizon as ua,Operation as Gi,Operation as Zi,SorobanRpc as rt,TimeoutInfinite as Di,TransactionBuilder as dn,TransactionBuilder as da,contract as Ed}from"@stellar/stellar-sdk";import{contract as e}from"@stellar/stellar-sdk";var Mi=e.Spec,xi=e.Client;var st=class extends xi{constructor(a){super(new Mi(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),a);this.options=a;this.fromJSON={allowance:this.txFromJSON,authorized:this.txFromJSON,approve:this.txFromJSON,balance:this.txFromJSON,burn:this.txFromJSON,burn_from:this.txFromJSON,clawback:this.txFromJSON,decimals:this.txFromJSON,mint:this.txFromJSON,name:this.txFromJSON,set_admin:this.txFromJSON,admin:this.txFromJSON,set_authorized:this.txFromJSON,symbol:this.txFromJSON,transfer:this.txFromJSON,transfer_from:this.txFromJSON}}};var Ni=100,_i=180,Et=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.params=a}async buildChangeTrustLineXdrTx(i){let s=await new ua.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(i.sender),o=(await this.getContract(st,i.tokenAddress).name()).result,[c,m]=o.split(":");if(c===void 0||m===void 0)throw new P("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let l=new Wi(c,m),u=Zi.changeTrust({asset:l,limit:i.limit});return new da(s,{fee:Ni.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(u).setTimeout(_i).build().toXDR()}async getBalanceLine(i,a){let r=(await this.getContract(st,a).name()).result,[o,c]=r.split(":"),m=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new ua.Server(m).loadAccount(i)).balances.find(d=>(d.asset_type==="credit_alphanum4"||d.asset_type==="credit_alphanum12")&&d.asset_code==o&&d.asset_issuer==c)}async submitTransactionStellar(i){let a=new ua.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),s=da.fromXDR(i,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await a.submitTransaction(s)}async simulateAndCheckRestoreTxRequiredSoroban(i,a){let s=new rt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),r=await s.getAccount(a),o=dn.fromXDR(i,this.params.sorobanNetworkPassphrase),c=await s.simulateTransaction(o);if(rt.Api.isSimulationRestore(c))return new dn(r,{fee:(+Fi+ +c.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(c.restorePreamble.transactionData.build()).addOperation(Gi.restoreFootprint({})).setTimeout(Di).build().toXDR()}async sendTransactionSoroban(i){let a=new rt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),s=dn.fromXDR(i,this.params.sorobanNetworkPassphrase);return a.sendTransaction(s)}async confirmTx(i,a=15){let s=new rt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),r=await kn(()=>s.getTransaction(i),c=>c.status===rt.Api.GetTransactionStatus.NOT_FOUND,a);if(r.length===0)throw new P("No transaction responses found.");let o=r[r.length-1];if(!o)throw new P("Unexpected error: last response is undefined.");return o}getContract(i,a){let s={contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new i(s)}};var Xt=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.srb=new Et(i,a),this.sol=new Ot(i,a)}};var Ue=(a=>(a.WITH_NATIVE_CURRENCY="native",a.WITH_STABLECOIN="stablecoin",a))(Ue||{}),Ct=(a=>(a.INT="int",a.FLOAT="float",a))(Ct||{});import{Big as Ki}from"big.js";import Qi from"tronweb";import Hi from"web3";import pn from"erc-20-abi";import{Big as pa}from"big.js";var re=class{async checkAllowance(i){let a=await this.getAllowance(i);return pa(a).gte(pa(i.amount))}};var Ui="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Vi="0xdac17f958d2ee523a2206206994597c13d831ec7",Oi=1e5,ot=class extends re{constructor(a,s){super();this.web3=a;this.api=s;this.chainType="EVM"}getAllowance(a){let s=a.token.tokenAddress,r=a.owner,o=a.spender;return this.getAllowanceByTokenAddress(s,r,o)}getAllowanceByTokenAddress(a,s,r){return this.getContract(pn,a).methods.allowance(s,r).call()}async getTokenBalance(a){return await this.getContract(pn,a.token.tokenAddress).methods.balanceOf(a.account).call()}async getNativeTokenBalance(a){return await this.web3.eth.getBalance(a.account)}async approve(a){if(this.isUsdt(a.tokenAddress)&&await this.getAllowanceByTokenAddress(a.tokenAddress,a.owner,a.spender)!=="0"){let o=await this.buildRawTransactionApprove({...a,amount:"0"});await this.sendRawTransaction(o,a.chainSymbol)}let s=await this.buildRawTransactionApprove(a);return await this.sendRawTransaction(s,a.chainSymbol)}isUsdt(a){return a.toLowerCase()===Vi}async buildRawTransactionApprove(a){let{tokenAddress:s,spender:r,owner:o,amount:c}=a,l=await this.getContract(pn,s).methods.approve(r,c==null?Ui:Ft(c));return{from:o,to:s,value:"0",data:l.encodeABI()}}async sendRawTransaction(a,s){let r=a,o={maxPriorityFeePerGas:null,maxFeePerGas:null};s==="POL"?r.gas=Oi:r.gas=await this.web3.eth.estimateGas(a);let{transactionHash:c}=await this.web3.eth.sendTransaction({...r,...o});return{txId:c}}getContract(a,s){return new this.web3.eth.Contract(a,s)}};import{AnchorProvider as Ei}from"@project-serum/anchor";import{Connection as Xi,PublicKey as Yt}from"@solana/web3.js";var Lt=class extends re{constructor(a,s){super();this.solanaRpcUrl=a;this.api=s;this.chainType="SOLANA"}approve(a){throw new L}buildRawTransactionApprove(a){throw new L}buildAnchorProvider(a){let s=new Xi(this.solanaRpcUrl,"confirmed"),r=new Yt(a);return new Ei(s,{publicKey:r},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(a){throw new L}async getTokenBalance(a){let{account:s,token:r}=a;try{let o=await ae(new Yt(s),new Yt(r.tokenAddress));return(await Ve(o,this.buildAnchorProvider(s))).amount.toString()}catch(o){if(o instanceof Error)return o.message.startsWith("Account does not exist"),"0";throw o}}async getNativeTokenBalance(a){return(await this.buildAnchorProvider(a.account).connection.getBalance(new Yt(a.account))).toString()}};import{Horizon as lu,NotFoundError as Yi}from"@stellar/stellar-sdk";var Jt=class extends re{constructor(a,s,r){super();this.nodeRpcUrlsConfig=a;this.params=s;this.api=r;this.chainType="SRB"}getAllowance(){throw new L}async getTokenBalance(a){if(!a.token.originTokenAddress)throw new P("OriginTokenAddress missing");let[s,r]=a.token.originTokenAddress.split(":"),o=new lu.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),c;try{c=await o.loadAccount(a.account)}catch(u){if(u instanceof Yi)return"0";throw u}let l=c.balances.find(u=>(u.asset_type==="credit_alphanum4"||u.asset_type==="credit_alphanum12")&&u.asset_code==s&&u.asset_issuer==r);return l?.balance?k(l.balance,R.getChainDecimalsByType(R.getChainProperty(a.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(a){let c=(await new lu.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.account)).balances.find(m=>m.asset_type==="native");return c?.balance?k(c.balance,R.getChainDecimalsByType(R.getChainProperty(a.chainSymbol).chainType)).toFixed():"0"}approve(){throw new L}buildRawTransactionApprove(){throw new L}};var ga=[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];var Ji="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",At=class extends re{constructor(a,s){super();this.tronWeb=a;this.api=s;this.chainType="TRX"}async getAllowance(a){let{token:{tokenAddress:s},owner:r}=a;return(await(await this.getContract(s)).methods.allowance(r,a.spender).call()).toString()}async getTokenBalance(a){return(await(await this.getContract(a.token.tokenAddress)).balanceOf(a.account).call()).toString()}async getNativeTokenBalance(a){return(await this.tronWeb.trx.getBalance(a.account)).toString()}async approve(a){let s=await this.buildRawTransactionApprove(a);return await Gt(this.tronWeb,s)}async buildRawTransactionApprove(a){let{tokenAddress:s,spender:r,owner:o,amount:c}=a,m=c==null?Ji:Ft(c),l=[{type:"address",value:r},{type:"uint256",value:m}];return this.buildRawTransaction(s,"approve(address,uint256)",l,"0",o)}async getContract(a){return await this.tronWeb.contract(ga,a)}async buildRawTransaction(a,s,r,o,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(a,s,{callValue:o},r,c);if(!m?.result?.result)throw new P("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var Kt=class{constructor(i,a,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s}async getAllowance(i,a){let s=await this.getChainTokenService(i.token.chainSymbol,i.owner,a).getAllowance(i);return C(s,i.token.decimals).toFixed()}async checkAllowance(i,a){return x(i.amount),W("amount",i.amount,i.token.decimals),this.getChainTokenService(i.token.chainSymbol,i.owner,a).checkAllowance(this.prepareCheckAllowanceParams(i))}async approve(i,a){return a.amount&&(x(a.amount),W("amount",a.amount,a.token.decimals)),this.getChainTokenService(a.token.chainSymbol,a.owner,i).approve(this.prepareApproveParams(a))}async buildRawTransactionApprove(i,a){return i.amount&&(x(i.amount),W("amount",i.amount,i.token.decimals)),this.getChainTokenService(i.token.chainSymbol,i.owner,a).buildRawTransactionApprove(this.prepareApproveParams(i))}async getTokenBalance(i,a){let s=await this.getChainTokenService(i.token.chainSymbol,i.account,a).getTokenBalance(i);return i.token.decimals?C(s,i.token.decimals).toFixed():s}async getNativeTokenBalance(i,a){let s=await this.getChainTokenService(i.chainSymbol,i.account,a).getNativeTokenBalance(i);return{int:s,float:C(s,R.getChainDecimalsByType(R.getChainProperty(i.chainSymbol).chainType)).toFixed()}}getChainTokenService(i,a,s){switch(R.getChainProperty(i).chainType){case"EVM":{if(s)return new ot(s,this.api);{let r=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new ot(new Hi(r),this.api)}}case"TRX":{if(s)return new At(s,this.api);{let r=this.nodeRpcUrlsConfig.getNodeRpcUrl(i),o=new Qi({fullHost:r});return o.setAddress(a),new At(o,this.api)}}case"SOLANA":{let r=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new Lt(r,this.api)}case"SRB":return new Jt(this.nodeRpcUrlsConfig,this.params,this.api)}}prepareCheckAllowanceParams(i){return{...i,amount:k(i.amount,i.token.decimals)}}prepareApproveParams(i){return{tokenAddress:i.token.tokenAddress,owner:i.owner,spender:i.spender,chainSymbol:i.token.chainSymbol,amount:i.amount==null?void 0:Ki(i.amount).toFixed()}}};var ct=class{constructor(i){this.nodeRpcUrls=i}getNodeRpcUrl(i){let a=this.nodeRpcUrls[i];if(a!==void 0)return a;throw new gt(i)}},Qt=class{constructor(i,a=lt){R.addChainsProperties(a.additionalChainsProperties);let s=new yt(a),r=new bt(s),o=new Tt(r),c=new St(o);this.api=new Pt(c,a),this.tokenService=new Kt(this.api,i,a),this.bridge=new Zt(this.api,i,a,this.tokenService),this.pool=new Vt(this.api,i,a,this.tokenService),this.params=a}async chainDetailsMap(i){return this.api.getChainDetailsMap(i)}async tokens(i){return this.api.tokens(i)}async tokensByChain(i,a){let r=(await this.api.getChainDetailsMap(a))[i];return r?r.tokens:[]}async getTransferStatus(i,a){return this.api.getTransferStatus(i,a)}async getGasBalance(i,a){return this.api.getGasBalance(i,a)}async checkAddress(){return new Promise(i=>{i({status:"OK",gasBalance:null})})}async getPendingStatusInfo(i,a,s,r){x(i);let o;a=="float"?(W("amount",i,s.decimals),o=k(i,s.decimals).toFixed()):o=i;let c=le(o,s,await U(this.api,s)),m=await U(this.api,r),l=this.getAmountFromVUsdFormatted(c,r,m),u,p=await this.api.getPendingInfo();for(let d in p[r.chainSymbol]){let g=p[r.chainSymbol];if(!g)throw new P("Cannot find pending info for "+r.chainSymbol);u=g[d]}if(u){let d=yn(u.totalSentAmount,m),g=this.getAmountFromVUsdFormatted(c,r,d),h;return pe(g.int).gt(l.int)?h={min:l,max:g}:h={min:g,max:l},{pendingTxs:u.pendingTxs,pendingAmount:{int:Se(u.totalSentAmount,3,r.decimals).toFixed(0),float:C(u.totalSentAmount,3).toFixed()},estimatedAmount:h}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:l,max:l}}}async getTokenBalance(i,a){return this.tokenService.getTokenBalance(i,a)}async getNativeTokenBalance(i,a){return this.tokenService.getNativeTokenBalance(i,a)}async calculateFeePercentOnSourceChain(i,a){x(i),W("amountFloat",i,a.decimals);let s=k(i,a.decimals);if(s.eq(0))return 0;let r=le(s,a,await U(this.api,a)),o=Q(r,a.decimals);return zt(s,o)}async calculateFeePercentOnDestinationChain(i,a,s){x(i),W("amountFloat",i,a.decimals);let r=k(i,a.decimals);if(r.eq(0))return 0;let o=le(r,a,await U(this.api,a)),c=He(o,s,await U(this.api,s)),m=Q(o,s.decimals);return zt(m,c)}async getAmountToBeReceivedAndGasFeeOptions(i,a,s,r){return x(i),W("amountToSendFloat",i,a.decimals),{amountToSendFloat:pe(i).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(i,a,s,r),gasFeeOptions:await this.getGasFeeOptions(a,s,r)}}async getAmountToSendAndGasFeeOptions(i,a,s,r){return x(i),W("amountToBeReceivedFloat",i,s.decimals),{amountToSendFloat:await this.getAmountToSend(i,a,s,r),amountToBeReceivedFloat:pe(i).toFixed(),gasFeeOptions:await this.getGasFeeOptions(a,s,r)}}async getAmountToBeReceived(i,a,s,r){let o=await U(this.api,a),c=await U(this.api,s);return this.getAmountToBeReceivedFromPools(i,a,s,o,c,r)}async getAmountToBeReceivedFromChain(i,a,s,r,o,c){let m=await this.pool.getPoolInfoFromChain(a,o),l=await this.pool.getPoolInfoFromChain(s,c);return this.getAmountToBeReceivedFromPools(i,a,s,m,l,r)}getAmountToBeReceivedFromPools(i,a,s,r,o,c){x(i),W("amountToSendFloat",i,a.decimals);let m=k(i,a.decimals);if(c&&c==3){if(!a.cctpAddress||!s.cctpAddress||!a.cctpFeeShare)throw new te("Such route does not support CCTP protocol");let u=m.mul(pe(1).minus(a.cctpFeeShare)).round(0,pe.roundUp),p=Se(u,a.decimals,s.decimals).round(0);return C(p,s.decimals).toFixed()}let l=le(m,a,r);return this.getAmountFromVUsdFormatted(l,s,o).float}async getAmountToSend(i,a,s,r){let o=await U(this.api,a),c=await U(this.api,s);return this.getAmountToSendFromPools(i,a,s,o,c,r)}async getAmountToSendFromChain(i,a,s,r,o,c){let m=await this.pool.getPoolInfoFromChain(a,o),l=await this.pool.getPoolInfoFromChain(s,c);return this.getAmountToSendFromPools(i,a,s,m,l,r)}getAmountToSendFromPools(i,a,s,r,o,c){x(i),W("amountToBeReceivedFloat",i,s.decimals);let m=k(i,s.decimals);if(c&&c==3){if(!a.cctpAddress||!s.cctpAddress||!a.cctpFeeShare)throw new te("Such route does not support CCTP protocol");let p=m.div(pe(1).minus(a.cctpFeeShare)).round(0,pe.roundDown),d=Se(p,s.decimals,a.decimals).round(0);return C(d,a.decimals).toFixed()}let l=bn(m,s,o),u=hn(l,a,r);if(pe(u).lte(0))throw new fe;return C(u,a.decimals).toFixed()}async getGasFeeOptions(i,a,s){return rn(i.allbridgeChainId,i.chainType,a.allbridgeChainId,i.decimals,s,this.api)}getAverageTransferTime(i,a,s){return i.transferTime?.[a.chainSymbol]?.[s]??null}async getPoolInfoByToken(i){return await this.api.getPoolInfoByKey({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress})}async refreshPoolInfo(i){if(i){let s=(i instanceof Array?i:[i]).map(r=>({chainSymbol:r.chainSymbol,poolAddress:r.poolAddress}));return this.api.refreshPoolInfo(s)}return this.api.refreshPoolInfo()}aprInPercents(i){return Pn(i)}async getExtraGasMaxLimits(i,a){return await on(i,a,this.api)}async getVUsdFromAmount(i,a,s){x(i);let r;a=="float"?(W("amount",i,s.decimals),r=k(i,s.decimals).toFixed()):r=i;let o=le(r,s,await U(this.api,s));return{int:o,float:C(o,3).toFixed()}}async getAmountFromVUsd(i,a){return this.getAmountFromVUsdFormatted(i,a,await U(this.api,a))}getAmountFromVUsdFormatted(i,a,s){x(i);let r=He(i,a,s);if(pe(r).lt(0))throw new fe;return{int:r,float:C(r,a.decimals).toFixed()}}async swapAndBridgeFeeCalculation(i,a,s){return ca(i,{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await U(this.api,a)},{decimals:s.decimals,feeShare:s.feeShare,poolInfo:await U(this.api,s)})}async swapAndBridgeFeeCalculationReverse(i,a,s){let r=ma(i,{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await U(this.api,a)},{decimals:s.decimals,feeShare:s.feeShare,poolInfo:await U(this.api,s)}),o=r.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(pe(o).lt(0))throw new fe;return r}async getSendAmountDetails(i,a,s,r){x(i);let o;return a=="float"?(W("amount",i,s.decimals),o=k(i,s.decimals).toFixed()):o=i,la(o,s,await U(this.api,s),r,await U(this.api,r))}};function zi(A){return"solanaRpcUrl"in A}var fa=class{constructor(i,a=lt){let s;zi(i)?s=new ct({SOL:i.solanaRpcUrl,TRX:i.tronRpcUrl}):s=new ct(i),this.service=new Qt(s,a),this.bridge=this.service.bridge,this.pool=this.service.pool,this.utils=new Xt(s,a),this.params=a}async chainDetailsMap(i="swap"){return this.service.chainDetailsMap(i)}async tokens(i="swap"){return this.service.tokens(i)}async tokensByChain(i,a="swap"){return this.service.tokensByChain(i,a)}async getTransferStatus(i,a){return this.service.getTransferStatus(i,a)}async getGasBalance(i,a){return this.service.getGasBalance(i,a)}async checkAddress(i,a,s){return await this.service.checkAddress()}async getPendingStatusInfo(i,a,s,r){return this.service.getPendingStatusInfo(i,a,s,r)}async getTokenBalance(i,a){return this.service.getTokenBalance(i,a)}async getNativeTokenBalance(i,a){return this.service.getNativeTokenBalance(i,a)}async calculateFeePercentOnSourceChain(i,a){return this.service.calculateFeePercentOnSourceChain(i,a)}async calculateFeePercentOnDestinationChain(i,a,s){return this.service.calculateFeePercentOnDestinationChain(i,a,s)}async getAmountToBeReceivedAndGasFeeOptions(i,a,s,r){return this.service.getAmountToBeReceivedAndGasFeeOptions(i,a,s,r)}async getAmountToSendAndGasFeeOptions(i,a,s,r){return this.service.getAmountToSendAndGasFeeOptions(i,a,s,r)}async getAmountToBeReceived(i,a,s,r){return this.service.getAmountToBeReceived(i,a,s,r)}async getAmountToBeReceivedFromChain(i,a,s,r,o,c){return this.service.getAmountToBeReceivedFromChain(i,a,s,r,o,c)}getAmountToBeReceivedFromPools(i,a,s,r,o,c){return this.service.getAmountToBeReceivedFromPools(i,a,s,r,o,c)}async getAmountToSend(i,a,s,r){return this.service.getAmountToSend(i,a,s,r)}async getAmountToSendFromChain(i,a,s,r,o,c){return this.service.getAmountToSendFromChain(i,a,s,r,o,c)}getAmountToSendFromPools(i,a,s,r,o,c){return this.service.getAmountToSendFromPools(i,a,s,r,o,c)}async getGasFeeOptions(i,a,s){return this.service.getGasFeeOptions(i,a,s)}getAverageTransferTime(i,a,s){return this.service.getAverageTransferTime(i,a,s)}async getPoolInfoByToken(i){return this.service.getPoolInfoByToken(i)}async refreshPoolInfo(i){return this.service.refreshPoolInfo(i)}aprInPercents(i){return this.service.aprInPercents(i)}async getExtraGasMaxLimits(i,a){return this.service.getExtraGasMaxLimits(i,a)}async getVUsdFromAmount(i,a,s){return this.service.getVUsdFromAmount(i,a,s)}async getAmountFromVUsd(i,a){return this.service.getAmountFromVUsd(i,a)}async swapAndBridgeFeeCalculation(i,a,s){return this.service.swapAndBridgeFeeCalculation(i,a,s)}async swapAndBridgeFeeCalculationReverse(i,a,s){return this.service.swapAndBridgeFeeCalculationReverse(i,a,s)}async getSendAmountDetails(i,a,s,r){return this.service.getSendAmountDetails(i,a,s,r)}};export{jt as AddressStatus,fa as AllbridgeCoreSdk,Ct as AmountFormat,Fe as AmountNotEnoughError,pt as ArgumentInvalidDecimalsError,te as CCTPDoesNotSupportedError,ne as ChainSymbol,_ as ChainType,ha as ErrorCode,dt as ExtraGasMaxLimitExceededError,Ue as FeePaymentMethod,fe as InsufficientPoolLiquidityError,ut as InvalidAmountError,Le as InvalidGasFeePaymentOptionError,gn as InvalidMessengerOptionError,Ge as InvalidTxError,V as JupiterError,ye as Messenger,L as MethodNotSupportedError,gt as NodeRpcUrlNotInitializedError,P as SdkError,Z as SdkRootError,An as SolanaAutoTxFee,Ke as TimeoutError,ft as TxTooLargeError,Je as VerifyTxError,lt as mainnet,qi as nodeRpcUrlsDefault,ji as nodeUrlsDefault};
7
7
  //# sourceMappingURL=index.js.map