@allbridge/bridge-core-sdk 3.15.0-alpha.1 → 3.15.0-alpha.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.
package/dist/esm/index.js CHANGED
@@ -1,6 +1,6 @@
1
- var Ar={coreApiUrl:"https://core-dev.a11bd.net",coreApiQueryParams:{},coreApiHeaders:{},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}}},cr={solanaRpcUrl:"https://api.devnet.solana.com",tronRpcUrl:"https://nile.trongrid.io"},mr={SOL:"https://api.devnet.solana.com",TRX:"https://nile.trongrid.io",SRB:"https://soroban-testnet.stellar.org",STLR:"https://horizon-testnet.stellar.org"};var yt={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},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}}},lr={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},pr={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 ye}from"big.js";var ht=class{constructor(n){this.apiClient=n}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let n=await this.getChainDetailsMap();return Object.values(n).flatMap(t=>t.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(n,t){return this.apiClient.getGasBalance(n,t)}async checkAddress(n,t,a){return this.apiClient.checkAddress(n,t,a)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(n,t){return await this.apiClient.getTransferStatus(n,t)}async getReceiveTransactionCost(n){return await this.apiClient.getReceiveTransactionCost(n)}async getPoolInfoMap(n){return await this.apiClient.getPoolInfoMap(n)}};import Wa from"axios";var wn="3.15.0-alpha.1";var de=(d=>(d.GRL="GRL",d.SPL="SPL",d.HOL="HOL",d.BSC="BSC",d.ETH="ETH",d.BAS="BAS",d.SOL="SOL",d.TRX="TRX",d.POL="POL",d.MUM="MUM",d.AMO="AMO",d.ARB="ARB",d.CEL="CEL",d.AVA="AVA",d.SRB="SRB",d.STLR="STLR",d.OPT="OPT",d))(de||{}),E=(i=>(i.EVM="EVM",i.SOLANA="SOLANA",i.TRX="TRX",i.SRB="SRB",i))(E||{}),U={EVM:18,SOLANA:9,TRX:6,SRB:7},X={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 p}from"big.js";import an from"bn.js";var D=class extends Error{constructor(n,t){super(t),this.errorCode=n}},R=class extends D{constructor(n){super("SdkError",n)}},Tt=class extends D{constructor(n){super("InvalidAmountError",n)}},Oe=class extends D{constructor(n){super("AmountNotEnoughError",n)}},Te=class extends D{constructor(n){super("InsufficientPoolLiquidityError",n)}},K=class extends D{constructor(n){super("JupiterError",n)}},ze=class extends D{constructor(n){super("InvalidGasFeePaymentOptionError",n)}},Cn=class extends D{constructor(n){super("InvalidMessengerOptionError",n)}},Q=class extends D{constructor(n){super("MethodNotSupportedError",n)}},je=class extends D{constructor(n){super("VerifyTxError",n)}},Ve=class extends D{constructor(n){super("InvalidTxError",n)}},bt=class extends D{constructor(n){super("ExtraGasMaxLimitExceededError",n)}},Pt=class extends D{constructor(n,t,a){super("ArgumentInvalidDecimalsError",`Argument '${n}' decimals '${t}' cannot be greater than '${a}'`)}},St=class extends D{constructor(n){super("TimeoutError",n)}},wt=class extends D{constructor(n){super("NodeRpcUrlNotInitializedError",`For chain '${n}' Node RPC URL not initialized`)}},ie=class extends D{constructor(n){super("CCTPDoesNotSupportedError",n)}},Ct=class extends D{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},Ma=(g=>(g.SDK_ERROR="SdkError",g.INVALID_AMOUNT_ERROR="InvalidAmountError",g.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",g.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",g.JUPITER_ERROR="JupiterError",g.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",g.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",g.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",g.VERIFY_TX_ERROR="VerifyTxError",g.INVALID_TX_ERROR="InvalidTxError",g.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",g.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",g.TIMEOUT_ERROR="TimeoutError",g.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",g.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",g.TX_TOO_LARGE="TxTooLargeError",g))(Ma||{});function rn(s,n){return p(100).minus(p(100).times(n).div(s)).toNumber()}function We(s,n){return ke(s,n,3).round(0,p.roundDown)}function z(s,n){return ke(s,3,n)}function ke(s,n,t){let a=p(t).minus(n).toNumber();return p(s).times(qe(a))}function qe(s){return p(10).pow(s)}function B(s,n){return p(s).times(qe(n))}function P(s,n){let t=p(s);return t.eq(0)?p(0):p(t).div(qe(n))}function j(s){return P(p(s.tokenBalance).minus(s.vUsdBalance).toFixed(),3).div(2).toFixed()}function ge(s,{feeShare:n,decimals:t},a){let i=p(s);if(i.lte(0))return"0";let r=i.times(n),o=i.minus(r),A=We(o,t),c=p(a.tokenBalance).plus(A),m=fe(c,a.aValue,a.dValue);return p(a.vUsdBalance).minus(m).round(0,p.roundDown).toFixed()}function $e(s,{feeShare:n,decimals:t},a){let i=p(s);if(i.lte(0))return p(0).toFixed();let r=i.plus(a.vUsdBalance),o=fe(r,a.aValue,a.dValue),A=z(p(a.tokenBalance).minus(o),t),c=p(A).times(n);return p(A).minus(c).round(0,p.roundDown).toFixed()}function Bn(s,n){let t=p(s);if(t.lte(0))return n;let a=t.plus(n.vUsdBalance),i=fe(a,n.aValue,n.dValue);return{aValue:n.aValue,dValue:n.dValue,tokenBalance:i.toFixed(0),vUsdBalance:a.toFixed(0)}}function kn(s,{feeShare:n,decimals:t},a){if(p(s).lte(0))return p(0);let i=p(a.vUsdBalance).minus(s);if(i.lte(0))throw new Te;let r=fe(i,a.aValue,a.dValue),o=p(r).minus(a.tokenBalance),A=z(o,t),c=p(n).div(p(1).minus(n)),m=p(A).times(c).round(0,p.roundUp);return p(A).plus(m).round(0,p.roundDown)}function Rn(s,{feeShare:n,decimals:t},a){if(p(s).lte(0))return p(0);let i=p(n).div(p(1).minus(n)),r=p(s).times(i).round(0,p.roundUp),o=p(s).plus(r),A=We(o,t),c=p(a.tokenBalance).minus(A);if(c.lte(0))throw new Te;let m=fe(c,a.aValue,a.dValue);return p(m).minus(a.vUsdBalance).round(0,p.roundDown)}function fe(s,n,t){let a=p(4).times(n).times(p(t).minus(s)).minus(t),i=p(t).pow(3),r=a.pow(2),o=p(s).times(p(s).times(r).plus(p(4).times(n).times(i))).sqrt().round(0,p.roundDown),A=p(8).times(n).times(s),c=a.times(s).plus(o).div(A).round(0,p.roundDown);return c.eq(0)?p(0):c.plus(1)}function Mn(s,n,t,a){let i=new an(s),r=new an(t),o=new an(n);return i.mul(r).shrn(a).sub(o).toString()}function vn(s){return s*100>0?`${Number(p(s).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function In(s,n,t){let a=p(n).times(t),i=p(n).plus(t),r=p(8).times(s).times(a).times(i),o=a.times(p(16).times(s).minus(4)).div(3),A=r.times(r),c=o.times(o).times(o),m=A.plus(c),u=p(m).sqrt(),l=p(Math.cbrt(+r.plus(u).toFixed())),f=p(Math.cbrt(+r.minus(u).toFixed()));return l.plus(f).toFixed()}var xn=(o=>(o.OK="OK",o.INVALID="INVALID",o.FORBIDDEN="FORBIDDEN",o.UNINITIALIZED="UNINITIALIZED",o.CONTRACT_ADDRESS="CONTRACT_ADDRESS",o.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",o))(xn||{});var be=(a=>(a[a.ALLBRIDGE=1]="ALLBRIDGE",a[a.WORMHOLE=2]="WORMHOLE",a[a.CCTP=3]="CCTP",a))(be||{});function Dn(s){return Object.entries(s).reduce((n,t)=>{let a=t[0],i=t[1],r=Fa(a,i);return r&&(n[a]=r),n},{})}function Fn(s){let n={};for(let[t,a]of Object.entries(s)){let i=t;for(let r of a.tokens){let o=Ge({chainSymbol:i,poolAddress:r.poolAddress}),A=j(r.poolInfo);n[o]={...r.poolInfo,imbalance:A}}}return n}function va(s,n){let{name:t,...a}=s,{poolInfo:i,...r}=n;return{...r,...a,chainName:t}}function Ia(s){switch(s){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;default:return null}}function xa(s){return Object.entries(s).reduce((n,[t,a])=>(n[t]=Da(a),n),{})}function Da(s){return Object.entries(s).reduce((n,[t,a])=>{let i=Ia(t);return i&&(n[i]=a),n},{})}function Fa(s,n){let t=X[s];if(!t)return null;let a={...t,allbridgeChainId:n.chainId,bridgeAddress:n.bridgeAddress,transferTime:xa(n.transferTime),txCostAmount:n.txCostAmount,confirmations:n.confirmations};return{...a,tokens:n.tokens.map(i=>va(a,i))}}function Ge(s){return s.chainSymbol+"_"+s.poolAddress}function Wn(s){let n=[];for(let[t,a]of Object.entries(s)){let i=t;for(let r of a.tokens)n.push({chainSymbol:i,poolAddress:r.poolAddress})}return n}function En(s){let n={};for(let[t,a]of Object.entries(s)){let i=t;for(let[r,o]of Object.entries(a))o.imbalance=j(o),n[Ge({chainSymbol:i,poolAddress:r})]=o}return n}var Bt=class{constructor(n){this.api=Wa.create({baseURL:n.coreApiUrl,headers:{Accept:"application/json",...n.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+wn},params:n.coreApiQueryParams})}async getTokenInfo(){let{data:n}=await this.api.get("/token-info");return{chainDetailsMap:Dn(n),poolInfoMap:Fn(n)}}async getPendingInfo(){let{data:n}=await this.api.get("/pending-info");return n}async getGasBalance(n,t){let{data:a}=await this.api.get(`/check/${n}/${t}`);return a}async checkAddress(n,t,a){if(a){let{data:r}=await this.api.get(`/check/${n}/${t}`,{params:{token:a,...this.api.defaults.params}});return r}let{data:i}=await this.api.get(`/check/${n}/${t}`);return i}async getTransferStatus(n,t){let{data:a}=await this.api.get(`/chain/${n}/${t}`);return a}async getReceiveTransactionCost(n){let{data:t}=await this.api.post("/receive-fee",n,{headers:{"Content-Type":"application/json"}});return{exchangeRate:t.exchangeRate,fee:t.fee,sourceNativeTokenPrice:t.sourceNativeTokenPrice}}async getPoolInfoMap(n){let t=n instanceof Array?n:[n],{data:a}=await this.api.post("/pool-info",{pools:t},{headers:{"Content-Type":"application/json"}});return En(a)}};import kt from"timed-cache";var sn=20*1e3,Ea=55*1e3,Rt=class{constructor(n){this.apiClient=n;this.tokenInfoCache=new kt({defaultTtl:Ea}),this.receivedTransactionCache=new kt({defaultTtl:sn}),this.pendingInfoCache=new kt({defaultTtl:sn}),this.gasBalanceCache=new kt({defaultTtl:sn})}getTokenInfo(){let n="TOKEN_INFO_CACHE_KEY",t=this.tokenInfoCache.get(n);if(t)return t;let a=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(n,a),a}async getGasBalance(n,t){let a=`GAS_BALANCE_${n}_${t}`,i=this.gasBalanceCache.get(a);if(i)return i;let r=this.apiClient.getGasBalance(n,t);return this.gasBalanceCache.put(a,r),r}async checkAddress(n,t,a){return this.apiClient.checkAddress(n,t,a)}async getPendingInfo(){let n="PENDING_INFO_CACHE_KEY",t=this.pendingInfoCache.get(n);if(t)return t;let a=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(n,a),a}async getReceiveTransactionCost(n){let t=`RECEIVE_TX_COST_${n.sourceChainId}_${n.destinationChainId}_${n.messenger}`,a=this.receivedTransactionCache.get(t);if(a)return a;let i=await this.apiClient.getReceiveTransactionCost(n);return this.receivedTransactionCache.put(t,i),i}async getTransferStatus(n,t){return this.apiClient.getTransferStatus(n,t)}async getPoolInfoMap(n){return this.apiClient.getPoolInfoMap(n)}};import Ua from"timed-cache";var Na=55*1e3,Mt=class{constructor(n){this.client=n;this.poolInfoCache=new on}async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(n,t){return this.client.getTransferStatus(n,t)}getReceiveTransactionCost(n){return this.client.getReceiveTransactionCost(n)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(n,t){return this.client.getGasBalance(n,t)}checkAddress(n,t,a){return this.client.checkAddress(n,t,a)}async getPoolInfoByKey(n){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let t=this.poolInfoCache.get(n);if(t)return t;{let a=await this.client.getPoolInfoMap(n);return this.poolInfoCache.putAll(a),a[Ge(n)]}}async refreshPoolInfo(n){let t;if(n)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),t=await this.client.getPoolInfoMap(n);else{let a=await this.client.getChainDetailsMapAndPoolInfoMap();t=await this.client.getPoolInfoMap(Wn(a.chainDetailsMap))}this.poolInfoCache.putAll(t)}cachePut(n,t){this.poolInfoCache.put(Ge(n),t)}},on=class{constructor(){this.cache=new Ua({defaultTtl:Na})}putAll(n){for(let[t,a]of Object.entries(n))this.cache.put(t,a)}putAllIfNotExists(n){for(let[t,a]of Object.entries(n))this.cache.get(t)||this.cache.put(t,a)}put(n,t){this.cache.put(n,t)}get(n){let t=Ge(n);return this.cache.get(t)}};import wi from"tronweb";import Ci from"web3";import{Big as Un}from"big.js";async function N(s,n){return await s.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}function M(s){if(Un(s).lte(0))throw new Tt("Amount must be greater than zero")}function v(s,n,t){let a=Un(n).toFixed();if(a.split(".").length==2&&a.split(".")[1].length>t)throw new Pt(s,a.split(".")[1].length,t)}async function et(s,n,t){return await Promise.race([s,new Promise((a,i)=>{setTimeout(()=>i(new St(n)),t)})])}async function Nn(s,n,t,a=1.5,i=!1){let r=[],o=0;if(r.push(await s()),!n(r[r.length-1]))return r;let A=new Date(Date.now()+t*1e3).valueOf(),c=1e3,m=c;for(;Date.now()<A&&n(r[r.length-1]);)o++,i&&console.info(`Waiting ${c}ms before trying again (bringing the total wait time to ${m}ms so far, of total ${t*1e3}ms)`),await new Promise(u=>setTimeout(u,c)),c=c*a,new Date(Date.now()+c).valueOf()>A&&(c=A-Date.now(),i&&console.info(`was gonna wait too long; new waitTime: ${c}ms`)),m=c+m,r.push(await s(r[r.length-1])),i&&n(r[r.length-1])&&console.info(`${o}. Called ${s.name}; ${r.length} prev attempts. Most recent: ${JSON.stringify(r[r.length-1],null,2)}`);return r}import*as It from"@project-serum/anchor";import{PublicKey as qn}from"@solana/web3.js";import{Big as za}from"big.js";var On=[{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 Vn=[{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 Z from"@project-serum/anchor";import{PublicKey as L}from"@solana/web3.js";async function re(s,n){return Z.utils.token.associatedAddress({mint:n,owner:s})}async function Re(s){let[n]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("config")],s);return n}async function Gn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("lock"),Uint8Array.from(s)],n);return t}async function tt(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([s])],n);return t}async function Ze(s){let n=await Re(s),[t]=await L.findProgramAddress([n.toBuffer()],s);return t}async function Zn(s,n){let[t]=await L.findProgramAddress([s.toBuffer()],n);return t}async function Le(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("token"),s.toBytes()],n);return t}async function Ln(s,n,t){let[a]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([s]),n],t);return a}async function An(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([s])],n);return t}async function cn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([s])],n);return t}async function _n(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("sent_message"),s],n);return t}async function mn(s,n,t){let[a]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("user_deposit"),n.toBytes(),s.toBytes()],t);return a}async function Xn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("cctp_bridge"),s.toBytes()],n);return t}async function Kn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("token"),s.toBytes()],n);return t}function Qn(s,n){let[t]=L.findProgramAddressSync([Z.utils.bytes.utf8.encode("lock"),n.toBuffer()],s);return t}function Yn(s,n,t,a){let i=Ee("message_transmitter",t),r=Ee("token_messenger",a),o=Ee("__event_authority",a),A=Ee("token_minter",a),c=Ee("local_token",a,[n]),m=Ee("remote_token_messenger",a,[s.toString()]),u=Ee("sender_authority",a);return{messageTransmitterAccount:i,tokenMessenger:r,tokenMessengerEventAuthority:o,tokenMinter:A,localToken:c,remoteTokenMessengerKey:m,authorityPda:u}}function Ee(s,n,t=[]){let a=[Buffer.from(Z.utils.bytes.utf8.encode(s))];for(let r of t)typeof r=="string"?a.push(Buffer.from(Z.utils.bytes.utf8.encode(r))):Array.isArray(r)?a.push(Buffer.from(r)):Buffer.isBuffer(r)?a.push(r):a.push(r.toBuffer());return L.findProgramAddressSync(a,n)[0]}import{AnchorProvider as Ga}from"@project-serum/anchor";import{Connection as Za,PublicKey as La}from"@solana/web3.js";function Me(s,n){let t=new Za(s,"confirmed"),a=new La(n);return new Ga(t,{publicKey:a},{preflightCommitment:"confirmed",commitment:"confirmed"})}var se=class{};import{PublicKey as _a}from"@solana/web3.js";import{Big as Pe}from"big.js";import Jn from"randombytes";import{Address as Xa}from"stellar-sdk";import*as Hn from"tronweb";function Se(s,n,t){let a;switch(n){case"EVM":{a=Ka(s);break}case"SOLANA":{a=new _a(s).toBuffer();break}case"TRX":{a=Qa(s);break}case"SRB":{a=new Xa(s).toBuffer();break}}switch(t){case"EVM":return"0x"+a.toString("hex");case"SOLANA":return Array.from(a);case"TRX":return a.toJSON().data;case"SRB":return a.toJSON().data}}function zn(s){return Buffer.from(s.replace(/^0x/i,""),"hex")}function Ka(s){let t=zn(s);return Buffer.concat([Buffer.alloc(32-t.length,0),t],32)}function Qa(s){let n=nt(s),t=zn(n);return Ya(t,32)}function nt(s){return Buffer.from(Hn.utils.crypto.decodeBase58Address(s)).toString("hex").replace(/^41/,"0x")}function Ya(s,n){if(s.length>=n)return s;let t=Buffer.alloc(n,0);return s.copy(t,n-s.length),t}function _e(){return Jn(32)}function un(){let s=Jn(32).readBigInt64BE();return s<0?s*-1n:s}function ve(s,n){let t={},a=n.sourceToken;return t.amount=B(n.amount,a.decimals).toFixed(),t.contractAddress=a.bridgeAddress,t.fromAccountAddress=n.fromAccountAddress,t.fromTokenAddress=Se(a.tokenAddress,s,s),t.toAccountAddress=n.toAccountAddress,t.toTokenAddress=Se(n.destinationToken.tokenAddress,s,s),t.minimumReceiveAmount=n.minimumReceiveAmount?B(n.minimumReceiveAmount,n.destinationToken.decimals).toFixed():"0",t}async function we(s,n,t){let a={};a.fromChainId=n.sourceToken.allbridgeChainId,a.fromChainSymbol=n.sourceToken.chainSymbol;let i=X[n.destinationToken.chainSymbol].chainType;a.fromTokenAddress=n.sourceToken.tokenAddress,a.toChainId=n.destinationToken.allbridgeChainId,a.toTokenAddress=n.destinationToken.tokenAddress,n.gasFeePaymentMethod==="stablecoin"?a.gasFeePaymentMethod="stablecoin":a.gasFeePaymentMethod="native";let r=n.sourceToken;if(n.messenger===3){if(!r.cctpAddress||!n.destinationToken.cctpAddress)throw new ie("Such route does not support CCTP protocol");a.contractAddress=r.cctpAddress}else a.contractAddress=r.bridgeAddress;a.messenger=n.messenger,a.fromAccountAddress=n.fromAccountAddress,a.amount=B(n.amount,r.decimals).toFixed();let{fee:o,feeFormat:A}=n;if(!o){let l=(await ln(a.fromChainId,n.sourceToken.chainType,a.toChainId,r.decimals,a.messenger,t))[a.gasFeePaymentMethod];if(!l)throw new ze;o=l.int,A="int"}if(A=="float")switch(a.gasFeePaymentMethod){case"native":a.fee=B(o,U[r.chainType]).toFixed(0);break;case"stablecoin":a.fee=B(o,r.decimals).toFixed(0);break}else a.fee=o;let{extraGas:c,extraGasFormat:m}=n;if(c&&+c>0){if(m=="float")switch(a.gasFeePaymentMethod){case"native":a.extraGas=B(c,U[r.chainType]).toFixed(0);break;case"stablecoin":a.extraGas=B(c,r.decimals).toFixed(0);break}else a.extraGas=c;await Ha(a.extraGas,a.gasFeePaymentMethod,r,n.destinationToken,t)}return a.fromTokenAddress=Se(a.fromTokenAddress,s,s),a.toAccountAddress=Se(n.toAccountAddress,i,s),a.toTokenAddress=Se(a.toTokenAddress,i,s),a.gasFeePaymentMethod=="stablecoin"&&Ja(a.amount,r.decimals,a.fee,a.extraGas),a}function Ja(s,n,t,a){let i=Pe(s).minus(t).minus(a??0);if(i.lte(0))throw new Oe(`Amount not enough to pay fee, ${P(Pe(i).minus(1).neg(),n).toFixed()} stables is missing`)}async function ln(s,n,t,a,i,r){let o=await r.getReceiveTransactionCost({sourceChainId:s,destinationChainId:t,messenger:i}),A={native:{int:o.fee,float:P(o.fee,U[n]).toFixed()}};if(o.sourceNativeTokenPrice){let c=ke(new Pe(o.fee).mul(o.sourceNativeTokenPrice),U[n],a).toFixed(0,Pe.roundUp);A.stablecoin={int:c,float:P(c,a).toFixed()}}return A}async function Ha(s,n,t,a,i){let o=(await pn(t,a,i)).extraGasMax[n];if(!o)throw new ze(`Impossible to pay extra gas by '${n}' payment method`);let A=o.int;if(Pe(s).gt(A))throw new bt(`Extra gas ${s} in int format, exceeded limit ${A} for '${n}' payment method`)}async function pn(s,n,t){let a={},i=await t.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:n.allbridgeChainId,messenger:1}),r=n.txCostAmount.maxAmount,o=P(r,U[n.chainType]).toFixed(),A=Pe(o).div(i.exchangeRate).toFixed(U[s.chainType],Pe.roundDown),c=B(A,U[s.chainType]).toFixed(0);if(a.native={int:c,float:A},i.sourceNativeTokenPrice){let m=Pe(A).mul(i.sourceNativeTokenPrice).toFixed(s.decimals,Pe.roundDown);a.stablecoin={int:B(m,s.decimals).toFixed(0),float:m}}return{extraGasMax:a,destinationChain:{gasAmountMax:{int:r,float:o},swap:{int:n.txCostAmount.swap,float:P(n.txCostAmount.swap,U[n.chainType]).toFixed()},transfer:{int:n.txCostAmount.transfer,float:P(n.txCostAmount.transfer,U[n.chainType]).toFixed()}},exchangeRate:i.exchangeRate,sourceNativeTokenPrice:i.sourceNativeTokenPrice}}function jn(s){return s.sourceToken.chainSymbol!==s.destinationToken.chainSymbol}var at=class extends se{constructor(t,a,i){super();this.web3=t;this.api=a;this.nodeRpcUrlsConfig=i;this.chainType="EVM"}async send(t){let a=await this.buildRawTransactionSend(t);return this.sendRawTransaction(a)}async buildRawTransactionSwap(t){let a=ve(this.chainType,t);return await this.buildRawTransactionSwapFromParams(a)}async buildRawTransactionSwapFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toAccountAddress:A,toTokenAddress:c,minimumReceiveAmount:m}=t,l=this.getBridgeContract(i).methods.swap(a,o,c,A,m);return Promise.resolve({from:r,to:i,data:l.encodeABI()})}async buildRawTransactionSend(t){let a=await we(this.chainType,t,this.api),{amount:i,contractAddress:r,fromAccountAddress:o,fromTokenAddress:A,toChainId:c,toAccountAddress:m,toTokenAddress:u,messenger:l,fee:f,gasFeePaymentMethod:y,extraGas:h}=a,T="0x"+_e().toString("hex"),g,d,S=f;if(h&&(S=za(S).plus(h).toFixed()),l===3){let b=await this.buildRawTransactionCctpSend(t,a,S);g=b.sendMethod,d=b.value}else{let b=this.getBridgeContract(r);y==="stablecoin"?(g=b.methods.swapAndBridge(A,i,m,c,u,T,l,S),d="0"):(g=b.methods.swapAndBridge(A,i,m,c,u,T,l,0),d=S)}return Promise.resolve({from:o,to:r,value:d,data:g.encodeABI()})}async buildRawTransactionCctpSend(t,a,i){let{amount:r,contractAddress:o,toChainId:A,toAccountAddress:c,gasFeePaymentMethod:m}=a,u=this.getContract(Vn,o),l,f;if(t.destinationToken.chainType==="SOLANA"){let y,h=new qn(t.toAccountAddress),T=new qn(t.destinationToken.tokenAddress),g=await re(h,T),d=Me(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),t.toAccountAddress);It.setProvider(d);let S=await It.Spl.token(d).account.token.fetchNullable(g);if(S?.authority.equals(h))y=Se(g.toBase58(),"SOLANA",this.chainType);else{let b=await d.connection.getTokenAccountsByOwner(h,{mint:T});if(b.value.length===0&&!S)y=Se(g.toBase58(),"SOLANA",this.chainType);else if(b.value.length>0)y=Se(b.value[0].pubkey.toBase58(),"SOLANA",this.chainType);else throw new R("Associated account has wrong owner")}m==="stablecoin"?(l=u.methods.bridgeWithWalletAddress(r,y,c,A,i),f="0"):(l=u.methods.bridgeWithWalletAddress(r,y,c,A,0),f=i)}else m==="stablecoin"?(l=u.methods.bridge(r,c,A,i),f="0"):(l=u.methods.bridge(r,c,A,0),f=i);return{sendMethod:l,value:f}}async sendRawTransaction(t){let a=await this.web3.eth.estimateGas(t),i={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:r}=await this.web3.eth.sendTransaction({...t,gas:a,...i});return{txId:r}}getContract(t,a){return new this.web3.eth.Contract(t,a)}getBridgeContract(t){return this.getContract(On,t)}};var xt=class{constructor(n,t,a,i){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a;this.tokenService=i}async approve(n,t){let a,i;t?(a=n,i=t):i=n;let r=it(i.token,i.messenger);return this.tokenService.buildRawTransactionApprove({...i,spender:r},a)}async send(n,t){return M(n.amount),v("amount",n.amount,n.sourceToken.decimals),jn(n)?Dt(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionSend(n):Dt(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionSwap(n)}};import{BN as Ye,Program as fn,Spl as si,web3 as Ie}from"@project-serum/anchor";import{Keypair as ma,PublicKey as I,SystemProgram as oi}from"@solana/web3.js";import{Big as xe}from"big.js";var rt={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 $n={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 ja}from"@project-serum/anchor";import qa from"big.js";import Ft from"web3";async function Ke(s,n){return await ja.token(n).account.token.fetch(s)}async function ea(s,n,t){let a=await n.account.pool.fetch(t),i=a.decimals,r=qa(a.feeShareBp.toString()).div(1e4).toFixed(),o={aValue:a.a.toString(),dValue:a.d.toString(),totalLpAmount:a.totalLpAmount.toString(),tokenBalance:a.tokenBalance.toString(),vUsdBalance:a.vUsdBalance.toString(),accRewardPerShareP:a.accRewardPerShareP.toString()};return ge(s,{decimals:i,feeShare:r},o)}function ta(s){let n=s.amount,t="0x"+s.recipient.toString("hex"),a=s.sourceChainId,i=s.destinationChainId,r="0x"+s.receiveToken.toString("hex"),o="0x"+s.nonce.toString("hex"),A=1,c="0x"+s.chainBridge.toString("hex"),m=Ft.utils.encodePacked({t:"uint256",v:n},{t:"bytes32",v:t},{t:"uint256",v:a},{t:"bytes32",v:r},{t:"uint256",v:o},{t:"uint8",v:A});if(!m)throw new R("message cannot be undefined");let u=Ft.utils.keccak256(Buffer.from(m.replace("0x",""),"hex")),l=Buffer.from(u.replace("0x",""),"hex");l[0]=a,l[1]=i;let f=Ft.utils.encodePacked({t:"bytes32",v:"0x"+l.toString("hex")},{t:"bytes32",v:c});if(!f)throw new Ve("messageWithSigner cannot be undefined");let y=Ft.utils.keccak256(Buffer.from(f.replace("0x",""),"hex")),h=Buffer.from(y.replace("0x",""),"hex");return h[0]=l[0],h[1]=l[1],h}import{ComputeBudgetInstruction as aa,ComputeBudgetProgram as Wt,Connection as ia,TransactionMessage as $a}from"@solana/web3.js";import{Big as ei}from"big.js";import{AddressLookupTableAccount as na}from"@solana/web3.js";async function Ue(s,n){return await Promise.all(s.message.addressTableLookups.map(async t=>new na({key:t.accountKey,state:na.deserialize(await n.getAccountInfo(t.accountKey).then(a=>{if(!a)throw new R("Cannot get AccountInfo");return a.data}))})))}var dn="AUTO";async function Qe(s,n,t){let a=new ia(t,"confirmed"),i=(await a.simulateTransaction(s)).value.unitsConsumed;await sa(s.instructions,i,n,a)}async function ra(s,n,t){let a=new ia(t,"confirmed"),i=await Ue(s,a),r=$a.decompile(s.message,{addressLookupTableAccounts:i});if(s.serialize().length>1232)throw new Ct;await sa(r.instructions,769230,n,a),s.message=r.compileToV0Message(i)}async function sa(s,n,t,a){if(n>0){let i=ti(n,s);if(t?.solana){let r=t.solana;if(r===dn)await gn(s,a);else if("pricePerUnitInMicroLamports"in r)await gn(s,a,r.pricePerUnitInMicroLamports);else{let o=ei(r.extraFeeInLamports).div(i).mul(qe(6)).toFixed(0);await gn(s,a,o)}}}}function ti(s,n){let t=n.findIndex(r=>r.programId.equals(Wt.programId)&&aa.decodeInstructionType(r)==="SetComputeUnitLimit"),a=Number((s*1.3).toFixed(0)),i=Wt.setComputeUnitLimit({units:a});return t>=0?n[t]=i:n.push(i),a.toString()}async function gn(s,n,t){let a=s.findIndex(o=>o.programId.equals(Wt.programId)&&aa.decodeInstructionType(o)==="SetComputeUnitPrice"),i=BigInt(t||await ni(n)),r=Wt.setComputeUnitPrice({microLamports:i});return a>=0?s[a]=r:s.push(r),i.toString()}async function ni(s){let n=await s.getRecentPrioritizationFees(),t=0;for(let a of n)t+=a.prioritizationFee;return(t/n.length).toFixed(0)}import{NATIVE_MINT as ai}from"@solana/spl-token";import{Connection as ii,TransactionMessage as oa,VersionedTransaction as ri}from"@solana/web3.js";import Aa,{AxiosError as ca}from"axios";var Et=class{constructor(n){this.connection=new ii(n)}async getJupiterSwapTx(n,t,a){let i;try{i=await Aa.get(`https://quote-api.jup.ag/v6/quote?inputMint=${t}
2
- &outputMint=${ai.toString()}
1
+ var cr={coreApiUrl:"https://core-dev.a11bd.net",coreApiQueryParams:{},coreApiHeaders:{},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}}},mr={solanaRpcUrl:"https://api.devnet.solana.com",tronRpcUrl:"https://nile.trongrid.io"},ur={SOL:"https://api.devnet.solana.com",TRX:"https://nile.trongrid.io",SRB:"https://soroban-testnet.stellar.org",STLR:"https://horizon-testnet.stellar.org"};var yt={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},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}}},pr={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},dr={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 ye}from"big.js";var ht=class{constructor(n){this.apiClient=n}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let n=await this.getChainDetailsMap();return Object.values(n).flatMap(t=>t.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(n,t){return this.apiClient.getGasBalance(n,t)}async checkAddress(n,t,a){return this.apiClient.checkAddress(n,t,a)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(n,t){return await this.apiClient.getTransferStatus(n,t)}async getReceiveTransactionCost(n){return await this.apiClient.getReceiveTransactionCost(n)}async getPoolInfoMap(n){return await this.apiClient.getPoolInfoMap(n)}};import Ea from"axios";var Cn="3.15.0-alpha.2";var de=(d=>(d.GRL="GRL",d.SPL="SPL",d.HOL="HOL",d.BSC="BSC",d.ETH="ETH",d.BAS="BAS",d.SOL="SOL",d.TRX="TRX",d.POL="POL",d.MUM="MUM",d.AMO="AMO",d.ARB="ARB",d.CEL="CEL",d.AVA="AVA",d.SRB="SRB",d.STLR="STLR",d.OPT="OPT",d))(de||{}),E=(i=>(i.EVM="EVM",i.SOLANA="SOLANA",i.TRX="TRX",i.SRB="SRB",i))(E||{}),U={EVM:18,SOLANA:9,TRX:6,SRB:7},X={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 p}from"big.js";import an from"bn.js";var D=class extends Error{constructor(n,t){super(t),this.errorCode=n}},R=class extends D{constructor(n){super("SdkError",n)}},Tt=class extends D{constructor(n){super("InvalidAmountError",n)}},Oe=class extends D{constructor(n){super("AmountNotEnoughError",n)}},Te=class extends D{constructor(n){super("InsufficientPoolLiquidityError",n)}},K=class extends D{constructor(n){super("JupiterError",n)}},ze=class extends D{constructor(n){super("InvalidGasFeePaymentOptionError",n)}},Bn=class extends D{constructor(n){super("InvalidMessengerOptionError",n)}},Q=class extends D{constructor(n){super("MethodNotSupportedError",n)}},je=class extends D{constructor(n){super("VerifyTxError",n)}},Ve=class extends D{constructor(n){super("InvalidTxError",n)}},bt=class extends D{constructor(n){super("ExtraGasMaxLimitExceededError",n)}},Pt=class extends D{constructor(n,t,a){super("ArgumentInvalidDecimalsError",`Argument '${n}' decimals '${t}' cannot be greater than '${a}'`)}},qe=class extends D{constructor(n){super("TimeoutError",n)}},St=class extends D{constructor(n){super("NodeRpcUrlNotInitializedError",`For chain '${n}' Node RPC URL not initialized`)}},ie=class extends D{constructor(n){super("CCTPDoesNotSupportedError",n)}},wt=class extends D{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},va=(g=>(g.SDK_ERROR="SdkError",g.INVALID_AMOUNT_ERROR="InvalidAmountError",g.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",g.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",g.JUPITER_ERROR="JupiterError",g.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",g.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",g.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",g.VERIFY_TX_ERROR="VerifyTxError",g.INVALID_TX_ERROR="InvalidTxError",g.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",g.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",g.TIMEOUT_ERROR="TimeoutError",g.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",g.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",g.TX_TOO_LARGE="TxTooLargeError",g))(va||{});function rn(s,n){return p(100).minus(p(100).times(n).div(s)).toNumber()}function We(s,n){return ke(s,n,3).round(0,p.roundDown)}function z(s,n){return ke(s,3,n)}function ke(s,n,t){let a=p(t).minus(n).toNumber();return p(s).times($e(a))}function $e(s){return p(10).pow(s)}function B(s,n){return p(s).times($e(n))}function P(s,n){let t=p(s);return t.eq(0)?p(0):p(t).div($e(n))}function j(s){return P(p(s.tokenBalance).minus(s.vUsdBalance).toFixed(),3).div(2).toFixed()}function ge(s,{feeShare:n,decimals:t},a){let i=p(s);if(i.lte(0))return"0";let r=i.times(n),o=i.minus(r),A=We(o,t),c=p(a.tokenBalance).plus(A),m=fe(c,a.aValue,a.dValue);return p(a.vUsdBalance).minus(m).round(0,p.roundDown).toFixed()}function et(s,{feeShare:n,decimals:t},a){let i=p(s);if(i.lte(0))return p(0).toFixed();let r=i.plus(a.vUsdBalance),o=fe(r,a.aValue,a.dValue),A=z(p(a.tokenBalance).minus(o),t),c=p(A).times(n);return p(A).minus(c).round(0,p.roundDown).toFixed()}function kn(s,n){let t=p(s);if(t.lte(0))return n;let a=t.plus(n.vUsdBalance),i=fe(a,n.aValue,n.dValue);return{aValue:n.aValue,dValue:n.dValue,tokenBalance:i.toFixed(0),vUsdBalance:a.toFixed(0)}}function Rn(s,{feeShare:n,decimals:t},a){if(p(s).lte(0))return p(0);let i=p(a.vUsdBalance).minus(s);if(i.lte(0))throw new Te;let r=fe(i,a.aValue,a.dValue),o=p(r).minus(a.tokenBalance),A=z(o,t),c=p(n).div(p(1).minus(n)),m=p(A).times(c).round(0,p.roundUp);return p(A).plus(m).round(0,p.roundDown)}function Mn(s,{feeShare:n,decimals:t},a){if(p(s).lte(0))return p(0);let i=p(n).div(p(1).minus(n)),r=p(s).times(i).round(0,p.roundUp),o=p(s).plus(r),A=We(o,t),c=p(a.tokenBalance).minus(A);if(c.lte(0))throw new Te;let m=fe(c,a.aValue,a.dValue);return p(m).minus(a.vUsdBalance).round(0,p.roundDown)}function fe(s,n,t){let a=p(4).times(n).times(p(t).minus(s)).minus(t),i=p(t).pow(3),r=a.pow(2),o=p(s).times(p(s).times(r).plus(p(4).times(n).times(i))).sqrt().round(0,p.roundDown),A=p(8).times(n).times(s),c=a.times(s).plus(o).div(A).round(0,p.roundDown);return c.eq(0)?p(0):c.plus(1)}function vn(s,n,t,a){let i=new an(s),r=new an(t),o=new an(n);return i.mul(r).shrn(a).sub(o).toString()}function In(s){return s*100>0?`${Number(p(s).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function xn(s,n,t){let a=p(n).times(t),i=p(n).plus(t),r=p(8).times(s).times(a).times(i),o=a.times(p(16).times(s).minus(4)).div(3),A=r.times(r),c=o.times(o).times(o),m=A.plus(c),u=p(m).sqrt(),l=p(Math.cbrt(+r.plus(u).toFixed())),f=p(Math.cbrt(+r.minus(u).toFixed()));return l.plus(f).toFixed()}var Dn=(o=>(o.OK="OK",o.INVALID="INVALID",o.FORBIDDEN="FORBIDDEN",o.UNINITIALIZED="UNINITIALIZED",o.CONTRACT_ADDRESS="CONTRACT_ADDRESS",o.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",o))(Dn||{});var be=(a=>(a[a.ALLBRIDGE=1]="ALLBRIDGE",a[a.WORMHOLE=2]="WORMHOLE",a[a.CCTP=3]="CCTP",a))(be||{});function Fn(s){return Object.entries(s).reduce((n,t)=>{let a=t[0],i=t[1],r=Wa(a,i);return r&&(n[a]=r),n},{})}function Wn(s){let n={};for(let[t,a]of Object.entries(s)){let i=t;for(let r of a.tokens){let o=Ge({chainSymbol:i,poolAddress:r.poolAddress}),A=j(r.poolInfo);n[o]={...r.poolInfo,imbalance:A}}}return n}function Ia(s,n){let{name:t,...a}=s,{poolInfo:i,...r}=n;return{...r,...a,chainName:t}}function xa(s){switch(s){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;default:return null}}function Da(s){return Object.entries(s).reduce((n,[t,a])=>(n[t]=Fa(a),n),{})}function Fa(s){return Object.entries(s).reduce((n,[t,a])=>{let i=xa(t);return i&&(n[i]=a),n},{})}function Wa(s,n){let t=X[s];if(!t)return null;let a={...t,allbridgeChainId:n.chainId,bridgeAddress:n.bridgeAddress,transferTime:Da(n.transferTime),txCostAmount:n.txCostAmount,confirmations:n.confirmations};return{...a,tokens:n.tokens.map(i=>Ia(a,i))}}function Ge(s){return s.chainSymbol+"_"+s.poolAddress}function En(s){let n=[];for(let[t,a]of Object.entries(s)){let i=t;for(let r of a.tokens)n.push({chainSymbol:i,poolAddress:r.poolAddress})}return n}function Un(s){let n={};for(let[t,a]of Object.entries(s)){let i=t;for(let[r,o]of Object.entries(a))o.imbalance=j(o),n[Ge({chainSymbol:i,poolAddress:r})]=o}return n}var Ct=class{constructor(n){this.api=Ea.create({baseURL:n.coreApiUrl,headers:{Accept:"application/json",...n.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+Cn},params:n.coreApiQueryParams})}async getTokenInfo(){let{data:n}=await this.api.get("/token-info");return{chainDetailsMap:Fn(n),poolInfoMap:Wn(n)}}async getPendingInfo(){let{data:n}=await this.api.get("/pending-info");return n}async getGasBalance(n,t){let{data:a}=await this.api.get(`/check/${n}/${t}`);return a}async checkAddress(n,t,a){if(a){let{data:r}=await this.api.get(`/check/${n}/${t}`,{params:{token:a,...this.api.defaults.params}});return r}let{data:i}=await this.api.get(`/check/${n}/${t}`);return i}async getTransferStatus(n,t){let{data:a}=await this.api.get(`/chain/${n}/${t}`);return a}async getReceiveTransactionCost(n){let{data:t}=await this.api.post("/receive-fee",n,{headers:{"Content-Type":"application/json"}});return{exchangeRate:t.exchangeRate,fee:t.fee,sourceNativeTokenPrice:t.sourceNativeTokenPrice}}async getPoolInfoMap(n){let t=n instanceof Array?n:[n],{data:a}=await this.api.post("/pool-info",{pools:t},{headers:{"Content-Type":"application/json"}});return Un(a)}};import Bt from"timed-cache";var sn=20*1e3,Ua=55*1e3,kt=class{constructor(n){this.apiClient=n;this.tokenInfoCache=new Bt({defaultTtl:Ua}),this.receivedTransactionCache=new Bt({defaultTtl:sn}),this.pendingInfoCache=new Bt({defaultTtl:sn}),this.gasBalanceCache=new Bt({defaultTtl:sn})}getTokenInfo(){let n="TOKEN_INFO_CACHE_KEY",t=this.tokenInfoCache.get(n);if(t)return t;let a=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(n,a),a}async getGasBalance(n,t){let a=`GAS_BALANCE_${n}_${t}`,i=this.gasBalanceCache.get(a);if(i)return i;let r=this.apiClient.getGasBalance(n,t);return this.gasBalanceCache.put(a,r),r}async checkAddress(n,t,a){return this.apiClient.checkAddress(n,t,a)}async getPendingInfo(){let n="PENDING_INFO_CACHE_KEY",t=this.pendingInfoCache.get(n);if(t)return t;let a=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(n,a),a}async getReceiveTransactionCost(n){let t=`RECEIVE_TX_COST_${n.sourceChainId}_${n.destinationChainId}_${n.messenger}`,a=this.receivedTransactionCache.get(t);if(a)return a;let i=await this.apiClient.getReceiveTransactionCost(n);return this.receivedTransactionCache.put(t,i),i}async getTransferStatus(n,t){return this.apiClient.getTransferStatus(n,t)}async getPoolInfoMap(n){return this.apiClient.getPoolInfoMap(n)}};import Na from"timed-cache";var Oa=55*1e3,Rt=class{constructor(n){this.client=n;this.poolInfoCache=new on}async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(n,t){return this.client.getTransferStatus(n,t)}getReceiveTransactionCost(n){return this.client.getReceiveTransactionCost(n)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(n,t){return this.client.getGasBalance(n,t)}checkAddress(n,t,a){return this.client.checkAddress(n,t,a)}async getPoolInfoByKey(n){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let t=this.poolInfoCache.get(n);if(t)return t;{let a=await this.client.getPoolInfoMap(n);return this.poolInfoCache.putAll(a),a[Ge(n)]}}async refreshPoolInfo(n){let t;if(n)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),t=await this.client.getPoolInfoMap(n);else{let a=await this.client.getChainDetailsMapAndPoolInfoMap();t=await this.client.getPoolInfoMap(En(a.chainDetailsMap))}this.poolInfoCache.putAll(t)}cachePut(n,t){this.poolInfoCache.put(Ge(n),t)}},on=class{constructor(){this.cache=new Na({defaultTtl:Oa})}putAll(n){for(let[t,a]of Object.entries(n))this.cache.put(t,a)}putAllIfNotExists(n){for(let[t,a]of Object.entries(n))this.cache.get(t)||this.cache.put(t,a)}put(n,t){this.cache.put(n,t)}get(n){let t=Ge(n);return this.cache.get(t)}};import Ci from"tronweb";import Bi from"web3";import{Big as Nn}from"big.js";async function N(s,n){return await s.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}function M(s){if(Nn(s).lte(0))throw new Tt("Amount must be greater than zero")}function v(s,n,t){let a=Nn(n).toFixed();if(a.split(".").length==2&&a.split(".")[1].length>t)throw new Pt(s,a.split(".")[1].length,t)}async function Mt(s,n,t){return await Promise.race([s,new Promise((a,i)=>{setTimeout(()=>i(new qe(n)),t)})])}async function An(s,n,t,a){if(t<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${t} was received.`);let i=0;for(;;)try{return await Mt(s(),n,a)}catch{if(++i>=t)throw new qe(n)}}async function On(s,n,t,a=1.5,i=!1){let r=[],o=0;if(r.push(await s()),!n(r[r.length-1]))return r;let A=new Date(Date.now()+t*1e3).valueOf(),c=1e3,m=c;for(;Date.now()<A&&n(r[r.length-1]);)o++,i&&console.info(`Waiting ${c}ms before trying again (bringing the total wait time to ${m}ms so far, of total ${t*1e3}ms)`),await new Promise(u=>setTimeout(u,c)),c=c*a,new Date(Date.now()+c).valueOf()>A&&(c=A-Date.now(),i&&console.info(`was gonna wait too long; new waitTime: ${c}ms`)),m=c+m,r.push(await s(r[r.length-1])),i&&n(r[r.length-1])&&console.info(`${o}. Called ${s.name}; ${r.length} prev attempts. Most recent: ${JSON.stringify(r[r.length-1],null,2)}`);return r}import*as It from"@project-serum/anchor";import{PublicKey as $n}from"@solana/web3.js";import{Big as ja}from"big.js";var Vn=[{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 Gn=[{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 Z from"@project-serum/anchor";import{PublicKey as L}from"@solana/web3.js";async function re(s,n){return Z.utils.token.associatedAddress({mint:n,owner:s})}async function Re(s){let[n]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("config")],s);return n}async function Zn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("lock"),Uint8Array.from(s)],n);return t}async function tt(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([s])],n);return t}async function Ze(s){let n=await Re(s),[t]=await L.findProgramAddress([n.toBuffer()],s);return t}async function Ln(s,n){let[t]=await L.findProgramAddress([s.toBuffer()],n);return t}async function Le(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("token"),s.toBytes()],n);return t}async function _n(s,n,t){let[a]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([s]),n],t);return a}async function cn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([s])],n);return t}async function mn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([s])],n);return t}async function Xn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("sent_message"),s],n);return t}async function un(s,n,t){let[a]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("user_deposit"),n.toBytes(),s.toBytes()],t);return a}async function Kn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("cctp_bridge"),s.toBytes()],n);return t}async function Qn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("token"),s.toBytes()],n);return t}function Yn(s,n){let[t]=L.findProgramAddressSync([Z.utils.bytes.utf8.encode("lock"),n.toBuffer()],s);return t}function Jn(s,n,t,a){let i=Ee("message_transmitter",t),r=Ee("token_messenger",a),o=Ee("__event_authority",a),A=Ee("token_minter",a),c=Ee("local_token",a,[n]),m=Ee("remote_token_messenger",a,[s.toString()]),u=Ee("sender_authority",a);return{messageTransmitterAccount:i,tokenMessenger:r,tokenMessengerEventAuthority:o,tokenMinter:A,localToken:c,remoteTokenMessengerKey:m,authorityPda:u}}function Ee(s,n,t=[]){let a=[Buffer.from(Z.utils.bytes.utf8.encode(s))];for(let r of t)typeof r=="string"?a.push(Buffer.from(Z.utils.bytes.utf8.encode(r))):Array.isArray(r)?a.push(Buffer.from(r)):Buffer.isBuffer(r)?a.push(r):a.push(r.toBuffer());return L.findProgramAddressSync(a,n)[0]}import{AnchorProvider as Za}from"@project-serum/anchor";import{Connection as La,PublicKey as _a}from"@solana/web3.js";function Me(s,n){let t=new La(s,"confirmed"),a=new _a(n);return new Za(t,{publicKey:a},{preflightCommitment:"confirmed",commitment:"confirmed"})}var se=class{};import{PublicKey as Xa}from"@solana/web3.js";import{Big as Pe}from"big.js";import Hn from"randombytes";import{Address as Ka}from"stellar-sdk";import*as zn from"tronweb";function Se(s,n,t){let a;switch(n){case"EVM":{a=Qa(s);break}case"SOLANA":{a=new Xa(s).toBuffer();break}case"TRX":{a=Ya(s);break}case"SRB":{a=new Ka(s).toBuffer();break}}switch(t){case"EVM":return"0x"+a.toString("hex");case"SOLANA":return Array.from(a);case"TRX":return a.toJSON().data;case"SRB":return a.toJSON().data}}function jn(s){return Buffer.from(s.replace(/^0x/i,""),"hex")}function Qa(s){let t=jn(s);return Buffer.concat([Buffer.alloc(32-t.length,0),t],32)}function Ya(s){let n=nt(s),t=jn(n);return Ja(t,32)}function nt(s){return Buffer.from(zn.utils.crypto.decodeBase58Address(s)).toString("hex").replace(/^41/,"0x")}function Ja(s,n){if(s.length>=n)return s;let t=Buffer.alloc(n,0);return s.copy(t,n-s.length),t}function _e(){return Hn(32)}function ln(){let s=Hn(32).readBigInt64BE();return s<0?s*-1n:s}function ve(s,n){let t={},a=n.sourceToken;return t.amount=B(n.amount,a.decimals).toFixed(),t.contractAddress=a.bridgeAddress,t.fromAccountAddress=n.fromAccountAddress,t.fromTokenAddress=Se(a.tokenAddress,s,s),t.toAccountAddress=n.toAccountAddress,t.toTokenAddress=Se(n.destinationToken.tokenAddress,s,s),t.minimumReceiveAmount=n.minimumReceiveAmount?B(n.minimumReceiveAmount,n.destinationToken.decimals).toFixed():"0",t}async function we(s,n,t){let a={};a.fromChainId=n.sourceToken.allbridgeChainId,a.fromChainSymbol=n.sourceToken.chainSymbol;let i=X[n.destinationToken.chainSymbol].chainType;a.fromTokenAddress=n.sourceToken.tokenAddress,a.toChainId=n.destinationToken.allbridgeChainId,a.toTokenAddress=n.destinationToken.tokenAddress,n.gasFeePaymentMethod==="stablecoin"?a.gasFeePaymentMethod="stablecoin":a.gasFeePaymentMethod="native";let r=n.sourceToken;if(n.messenger===3){if(!r.cctpAddress||!n.destinationToken.cctpAddress)throw new ie("Such route does not support CCTP protocol");a.contractAddress=r.cctpAddress}else a.contractAddress=r.bridgeAddress;a.messenger=n.messenger,a.fromAccountAddress=n.fromAccountAddress,a.amount=B(n.amount,r.decimals).toFixed();let{fee:o,feeFormat:A}=n;if(!o){let l=(await pn(a.fromChainId,n.sourceToken.chainType,a.toChainId,r.decimals,a.messenger,t))[a.gasFeePaymentMethod];if(!l)throw new ze;o=l.int,A="int"}if(A=="float")switch(a.gasFeePaymentMethod){case"native":a.fee=B(o,U[r.chainType]).toFixed(0);break;case"stablecoin":a.fee=B(o,r.decimals).toFixed(0);break}else a.fee=o;let{extraGas:c,extraGasFormat:m}=n;if(c&&+c>0){if(m=="float")switch(a.gasFeePaymentMethod){case"native":a.extraGas=B(c,U[r.chainType]).toFixed(0);break;case"stablecoin":a.extraGas=B(c,r.decimals).toFixed(0);break}else a.extraGas=c;await za(a.extraGas,a.gasFeePaymentMethod,r,n.destinationToken,t)}return a.fromTokenAddress=Se(a.fromTokenAddress,s,s),a.toAccountAddress=Se(n.toAccountAddress,i,s),a.toTokenAddress=Se(a.toTokenAddress,i,s),a.gasFeePaymentMethod=="stablecoin"&&Ha(a.amount,r.decimals,a.fee,a.extraGas),a}function Ha(s,n,t,a){let i=Pe(s).minus(t).minus(a??0);if(i.lte(0))throw new Oe(`Amount not enough to pay fee, ${P(Pe(i).minus(1).neg(),n).toFixed()} stables is missing`)}async function pn(s,n,t,a,i,r){let o=await r.getReceiveTransactionCost({sourceChainId:s,destinationChainId:t,messenger:i}),A={native:{int:o.fee,float:P(o.fee,U[n]).toFixed()}};if(o.sourceNativeTokenPrice){let c=ke(new Pe(o.fee).mul(o.sourceNativeTokenPrice),U[n],a).toFixed(0,Pe.roundUp);A.stablecoin={int:c,float:P(c,a).toFixed()}}return A}async function za(s,n,t,a,i){let o=(await dn(t,a,i)).extraGasMax[n];if(!o)throw new ze(`Impossible to pay extra gas by '${n}' payment method`);let A=o.int;if(Pe(s).gt(A))throw new bt(`Extra gas ${s} in int format, exceeded limit ${A} for '${n}' payment method`)}async function dn(s,n,t){let a={},i=await t.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:n.allbridgeChainId,messenger:1}),r=n.txCostAmount.maxAmount,o=P(r,U[n.chainType]).toFixed(),A=Pe(o).div(i.exchangeRate).toFixed(U[s.chainType],Pe.roundDown),c=B(A,U[s.chainType]).toFixed(0);if(a.native={int:c,float:A},i.sourceNativeTokenPrice){let m=Pe(A).mul(i.sourceNativeTokenPrice).toFixed(s.decimals,Pe.roundDown);a.stablecoin={int:B(m,s.decimals).toFixed(0),float:m}}return{extraGasMax:a,destinationChain:{gasAmountMax:{int:r,float:o},swap:{int:n.txCostAmount.swap,float:P(n.txCostAmount.swap,U[n.chainType]).toFixed()},transfer:{int:n.txCostAmount.transfer,float:P(n.txCostAmount.transfer,U[n.chainType]).toFixed()}},exchangeRate:i.exchangeRate,sourceNativeTokenPrice:i.sourceNativeTokenPrice}}function qn(s){return s.sourceToken.chainSymbol!==s.destinationToken.chainSymbol}var at=class extends se{constructor(t,a,i){super();this.web3=t;this.api=a;this.nodeRpcUrlsConfig=i;this.chainType="EVM"}async send(t){let a=await this.buildRawTransactionSend(t);return this.sendRawTransaction(a)}async buildRawTransactionSwap(t){let a=ve(this.chainType,t);return await this.buildRawTransactionSwapFromParams(a)}async buildRawTransactionSwapFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toAccountAddress:A,toTokenAddress:c,minimumReceiveAmount:m}=t,l=this.getBridgeContract(i).methods.swap(a,o,c,A,m);return Promise.resolve({from:r,to:i,data:l.encodeABI()})}async buildRawTransactionSend(t){let a=await we(this.chainType,t,this.api),{amount:i,contractAddress:r,fromAccountAddress:o,fromTokenAddress:A,toChainId:c,toAccountAddress:m,toTokenAddress:u,messenger:l,fee:f,gasFeePaymentMethod:y,extraGas:h}=a,T="0x"+_e().toString("hex"),g,d,S=f;if(h&&(S=ja(S).plus(h).toFixed()),l===3){let b=await this.buildRawTransactionCctpSend(t,a,S);g=b.sendMethod,d=b.value}else{let b=this.getBridgeContract(r);y==="stablecoin"?(g=b.methods.swapAndBridge(A,i,m,c,u,T,l,S),d="0"):(g=b.methods.swapAndBridge(A,i,m,c,u,T,l,0),d=S)}return Promise.resolve({from:o,to:r,value:d,data:g.encodeABI()})}async buildRawTransactionCctpSend(t,a,i){let{amount:r,contractAddress:o,toChainId:A,toAccountAddress:c,gasFeePaymentMethod:m}=a,u=this.getContract(Gn,o),l,f;if(t.destinationToken.chainType==="SOLANA"){let y,h=new $n(t.toAccountAddress),T=new $n(t.destinationToken.tokenAddress),g=await re(h,T),d=Me(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),t.toAccountAddress);It.setProvider(d);let S=await It.Spl.token(d).account.token.fetchNullable(g);if(S?.authority.equals(h))y=Se(g.toBase58(),"SOLANA",this.chainType);else{let b=await d.connection.getTokenAccountsByOwner(h,{mint:T});if(b.value.length===0&&!S)y=Se(g.toBase58(),"SOLANA",this.chainType);else if(b.value.length>0)y=Se(b.value[0].pubkey.toBase58(),"SOLANA",this.chainType);else throw new R("Associated account has wrong owner")}m==="stablecoin"?(l=u.methods.bridgeWithWalletAddress(r,y,c,A,i),f="0"):(l=u.methods.bridgeWithWalletAddress(r,y,c,A,0),f=i)}else m==="stablecoin"?(l=u.methods.bridge(r,c,A,i),f="0"):(l=u.methods.bridge(r,c,A,0),f=i);return{sendMethod:l,value:f}}async sendRawTransaction(t){let a=await this.web3.eth.estimateGas(t),i={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:r}=await this.web3.eth.sendTransaction({...t,gas:a,...i});return{txId:r}}getContract(t,a){return new this.web3.eth.Contract(t,a)}getBridgeContract(t){return this.getContract(Vn,t)}};var xt=class{constructor(n,t,a,i){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a;this.tokenService=i}async approve(n,t){let a,i;t?(a=n,i=t):i=n;let r=it(i.token,i.messenger);return this.tokenService.buildRawTransactionApprove({...i,spender:r},a)}async send(n,t){return M(n.amount),v("amount",n.amount,n.sourceToken.decimals),qn(n)?Dt(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionSend(n):Dt(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionSwap(n)}};import{BN as Ye,Program as yn,Spl as oi,web3 as Ie}from"@project-serum/anchor";import{Keypair as ua,PublicKey as I,SystemProgram as Ai}from"@solana/web3.js";import{Big as xe}from"big.js";var rt={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 ea={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 qa}from"@project-serum/anchor";import $a from"big.js";import Ft from"web3";async function Ke(s,n){return await qa.token(n).account.token.fetch(s)}async function ta(s,n,t){let a=await n.account.pool.fetch(t),i=a.decimals,r=$a(a.feeShareBp.toString()).div(1e4).toFixed(),o={aValue:a.a.toString(),dValue:a.d.toString(),totalLpAmount:a.totalLpAmount.toString(),tokenBalance:a.tokenBalance.toString(),vUsdBalance:a.vUsdBalance.toString(),accRewardPerShareP:a.accRewardPerShareP.toString()};return ge(s,{decimals:i,feeShare:r},o)}function na(s){let n=s.amount,t="0x"+s.recipient.toString("hex"),a=s.sourceChainId,i=s.destinationChainId,r="0x"+s.receiveToken.toString("hex"),o="0x"+s.nonce.toString("hex"),A=1,c="0x"+s.chainBridge.toString("hex"),m=Ft.utils.encodePacked({t:"uint256",v:n},{t:"bytes32",v:t},{t:"uint256",v:a},{t:"bytes32",v:r},{t:"uint256",v:o},{t:"uint8",v:A});if(!m)throw new R("message cannot be undefined");let u=Ft.utils.keccak256(Buffer.from(m.replace("0x",""),"hex")),l=Buffer.from(u.replace("0x",""),"hex");l[0]=a,l[1]=i;let f=Ft.utils.encodePacked({t:"bytes32",v:"0x"+l.toString("hex")},{t:"bytes32",v:c});if(!f)throw new Ve("messageWithSigner cannot be undefined");let y=Ft.utils.keccak256(Buffer.from(f.replace("0x",""),"hex")),h=Buffer.from(y.replace("0x",""),"hex");return h[0]=l[0],h[1]=l[1],h}import{ComputeBudgetInstruction as ia,ComputeBudgetProgram as Wt,Connection as ra,TransactionMessage as ei}from"@solana/web3.js";import{Big as ti}from"big.js";import{AddressLookupTableAccount as aa}from"@solana/web3.js";async function Ue(s,n){return await Promise.all(s.message.addressTableLookups.map(async t=>new aa({key:t.accountKey,state:aa.deserialize(await n.getAccountInfo(t.accountKey).then(a=>{if(!a)throw new R("Cannot get AccountInfo");return a.data}))})))}var gn="AUTO";async function Qe(s,n,t){let a=new ra(t,"confirmed"),i=(await a.simulateTransaction(s)).value.unitsConsumed;await oa(s.instructions,i,n,a)}async function sa(s,n,t){let a=new ra(t,"confirmed"),i=await Ue(s,a),r=ei.decompile(s.message,{addressLookupTableAccounts:i});if(s.serialize().length>1232)throw new wt;await oa(r.instructions,769230,n,a),s.message=r.compileToV0Message(i)}async function oa(s,n,t,a){if(n>0){let i=ni(n,s);if(t?.solana){let r=t.solana;if(r===gn)await fn(s,a);else if("pricePerUnitInMicroLamports"in r)await fn(s,a,r.pricePerUnitInMicroLamports);else{let o=ti(r.extraFeeInLamports).div(i).mul($e(6)).toFixed(0);await fn(s,a,o)}}}}function ni(s,n){let t=n.findIndex(r=>r.programId.equals(Wt.programId)&&ia.decodeInstructionType(r)==="SetComputeUnitLimit"),a=Number((s*1.3).toFixed(0)),i=Wt.setComputeUnitLimit({units:a});return t>=0?n[t]=i:n.push(i),a.toString()}async function fn(s,n,t){let a=s.findIndex(o=>o.programId.equals(Wt.programId)&&ia.decodeInstructionType(o)==="SetComputeUnitPrice"),i=BigInt(t||await ai(n)),r=Wt.setComputeUnitPrice({microLamports:i});return a>=0?s[a]=r:s.push(r),i.toString()}async function ai(s){let n=await s.getRecentPrioritizationFees(),t=0;for(let a of n)t+=a.prioritizationFee;return(t/n.length).toFixed(0)}import{NATIVE_MINT as ii}from"@solana/spl-token";import{Connection as ri,TransactionMessage as Aa,VersionedTransaction as si}from"@solana/web3.js";import ca,{AxiosError as ma}from"axios";var Et=class{constructor(n){this.connection=new ri(n)}async getJupiterSwapTx(n,t,a){let i;try{i=await ca.get(`https://quote-api.jup.ag/v6/quote?inputMint=${t}
2
+ &outputMint=${ii.toString()}
3
3
  &amount=${a}
4
4
  &slippageBps=100
5
- &onlyDirectRoutes=true`)}catch(c){throw c instanceof ca&&c.response&&c.response.data&&c.response.data.error?new K(c.response.data.error):new K("Cannot get route")}let r;try{r=await Aa.post("https://quote-api.jup.ag/v6/swap",JSON.stringify({quoteResponse:i.data,userPublicKey:n,wrapAndUnwrapSol:!0}))}catch(c){throw c instanceof ca&&c.response&&c.response.data&&c.response.data.error?new K(c.response.data.error):new K("Cannot get swap transaction")}let o;if(r?.data?.swapTransaction)o=r.data.swapTransaction;else throw new K("Cannot get swap transaction");let A=Buffer.from(o,"base64");return{tx:ri.deserialize(A)}}async amendJupiterWithSdkTx(n,t){try{let a=await Ue(n,this.connection),i=await Ue(t,this.connection),r=oa.decompile(n.message,{addressLookupTableAccounts:a}),o=oa.decompile(t.message,{addressLookupTableAccounts:i});return o.instructions.shift(),r.instructions.push(...o.instructions),a.push(...i),n.message=r.compileToV0Message(a),t.message.header.numRequiredSignatures===2&&n.signatures.length===1&&n.signatures.push(t.signatures[0]),n}catch(a){throw a instanceof Error&&a.message?new K(`Some error occurred during creation final swap and bridge transaction. ${a.message}`):new K("Some error occurred during creation final swap and bridge transaction")}}};var yn=1e6,Ut=class extends se{constructor(t,a,i){super();this.solanaRpcUrl=t;this.params=a;this.api=i;this.chainType="SOLANA";this.jupiterService=new Et(t)}async buildRawTransactionSwap(t){let a=ve(this.chainType,t);return await this.buildSwapTransaction(a,t.sourceToken.poolAddress,t.destinationToken.poolAddress,t.txFeeParams)}async buildSwapTransaction(t,a,i,r){let{fromAccountAddress:o,amount:A,contractAddress:c,fromTokenAddress:m,toTokenAddress:u,toAccountAddress:l,minimumReceiveAmount:f}=t,y=o,h=c,T=m,g=u,d=i,S=l,b=new I(y),V=Me(this.solanaRpcUrl,b.toString()),k=new fn(rt,h,V),w=await Ze(k.programId),J=await Re(k.programId),W=new I(T),me=await Le(W,k.programId),ue=new I(a),he=await re(b,W),te=new I(S),_=new I(g),$=await Le(_,k.programId),ne=new I(d),H=await re(te,_),le=[Ie.ComputeBudgetProgram.setComputeUnitLimit({units:yn})];try{await Ke(H,V)}catch{let Ra=await si.associatedToken(V).methods.create().accounts({mint:_,owner:te,associatedAccount:H}).instruction();le.push(Ra)}let pe=await k.methods.swap(new Ye(A),new Ye(f||0)).accounts({payer:b,config:J,bridgeAuthority:w,user:b,sendBridgeToken:me,sendMint:W,sendPool:ue,sendUserToken:he,receiveBridgeToken:$,receiveMint:_,receivePool:ne,receiveUserToken:H}).preInstructions(le).transaction(),ae=V.connection;return pe.recentBlockhash=(await ae.getLatestBlockhash()).blockhash,pe.feePayer=b,await Qe(pe,r,this.solanaRpcUrl),await this.convertToVersionedTransaction(pe,ae)}async buildRawTransactionSend(t){let a=await we(this.chainType,t,this.api),i=this.addPoolAddress(t,a),r=i.gasFeePaymentMethod=="stablecoin",o;if(r)try{let m=xe(i.fee);i.extraGas&&(m=m.plus(i.extraGas)),i=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(t.sourceToken.decimals,i);let{tx:u}=await this.jupiterService.getJupiterSwapTx(t.fromAccountAddress,t.sourceToken.tokenAddress,m.toFixed(0));if(o=u,i.amount=xe(i.amount).minus(m).toFixed(0),xe(i.amount).lte(0))throw new Oe(`Amount not enough to pay fee, ${P(xe(i.amount).minus(1).neg(),t.sourceToken.decimals).toFixed()} stables is missing`)}catch(m){throw m instanceof D?m:m instanceof Error&&m.message?new K(`Some error occurred during creation Jupiter swap transaction. ${m.message}`):new K("Some error occurred during creation Jupiter swap transaction")}let A,c;switch(a.messenger){case 1:{let m=await this.prepareSwapAndBridgeData(i);A=await this.buildSwapAndBridgeAllbridgeTransaction(m);break}case 2:{let m=await this.prepareSwapAndBridgeData(i),{transaction:u,messageAccount:l}=await this.buildSwapAndBridgeWormholeTransaction(m);A=u,c=l;break}case 3:{let m=await this.prepareSwapAndBridgeCctpData(i),{transaction:u,messageSentEventDataKeypair:l}=await this.buildSwapAndBridgeCctpTransaction(t.destinationToken.chainSymbol,m);A=u,c=l;break}}if(r){if(!o)throw new K("Swap tx is absent");A=await this.jupiterService.amendJupiterWithSdkTx(o,A)}return await ra(A,t.txFeeParams,this.solanaRpcUrl),c&&A.sign([c]),A}addPoolAddress(t,a){return{...a,poolAddress:t.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(t,a){if(a.gasFeePaymentMethod=="stablecoin"){let i=(await this.api.getReceiveTransactionCost({sourceChainId:a.fromChainId,destinationChainId:a.toChainId,messenger:a.messenger})).sourceNativeTokenPrice;a.fee=xe(a.fee).div(i).mul(xe(10).pow(U.SOLANA-t)).toFixed(0),a.extraGas&&(a.extraGas=xe(a.extraGas).div(i).mul(xe(10).pow(U.SOLANA-t)).toFixed(0)),a.gasFeePaymentMethod="native"}return a}getExtraGasInstruction(t,a,i){return Ie.SystemProgram.transfer({fromPubkey:a,toPubkey:i,lamports:+t})}async prepareSwapAndBridgeData(t){let{amount:a,contractAddress:i,fromChainId:r,fromAccountAddress:o,fromTokenAddress:A,toChainId:c,toAccountAddress:m,toTokenAddress:u,poolAddress:l,extraGas:f}=t,y=A,h=o,T=c,g=u,d=m,S=i,b=r,V=Me(this.solanaRpcUrl,h),k=new fn(rt,S,V),w=Array.from(_e()),J=new I(l),W=await ea(a,k,J),me=await Gn(w,k.programId),ue=await Ze(k.programId),he=await re(new I(h),new I(y)),te=await Le(new I(y),k.programId),_=await An(T,k.programId),$=await Ln(T,Buffer.from(g),k.programId),ne=await Re(k.programId),H=await k.account.config.fetch(ne),le=await tt(T,H.gasOracleProgramId),pe=await tt(b,H.gasOracleProgramId),ae=ta({amount:W,recipient:Buffer.from(d),nonce:Buffer.from(w),receiveToken:Buffer.from(g),destinationChainId:T,sourceChainId:b,chainBridge:(await Ze(k.programId)).toBuffer()}),C={};return C.bridge=k,C.amount=new Ye(a),C.vusdAmount=new Ye(W),C.nonce=w,C.recipient=Array.from(d),C.receiveToken=Array.from(g),C.poolAccount=J,C.lockAccount=me,C.bridgeAuthority=ue,C.userToken=he,C.bridgeTokenAccount=te,C.chainBridgeAccount=_,C.otherBridgeTokenAccount=$,C.userAccount=new I(h),C.destinationChainId=T,C.mint=new I(y),C.config=ne,C.configAccountInfo=H,C.gasPrice=le,C.thisGasPrice=pe,C.message=ae,f&&(C.extraGasInstruction=this.getExtraGasInstruction(f,C.userAccount,ne)),C}async buildSwapAndBridgeAllbridgeTransaction(t){let{bridge:a,vusdAmount:i,nonce:r,recipient:o,receiveToken:A,poolAccount:c,lockAccount:m,bridgeAuthority:u,userToken:l,bridgeTokenAccount:f,chainBridgeAccount:y,otherBridgeTokenAccount:h,userAccount:T,destinationChainId:g,mint:d,config:S,configAccountInfo:b,gasPrice:V,thisGasPrice:k,message:w,extraGasInstruction:J}=t,W=b.allbridgeMessengerProgramId,me=await cn(g,W),ue=await Re(W),he=await _n(w,W),te=[];J&&te.push(J);let _=await a.methods.swapAndBridge({vusdAmount:i,nonce:r,destinationChainId:g,recipient:o,receiveToken:A}).accounts({mint:d,user:T,config:S,lock:m,pool:c,gasPrice:V,thisGasPrice:k,bridgeAuthority:u,userToken:l,bridgeToken:f,chainBridge:y,messenger:W,messengerGasUsage:me,messengerConfig:ue,sentMessageAccount:he,otherBridgeToken:h}).preInstructions([Ie.ComputeBudgetProgram.setComputeUnitLimit({units:yn})]).postInstructions(te).transaction(),$=Me(this.solanaRpcUrl,T.toString()).connection;return _.recentBlockhash=(await $.getLatestBlockhash()).blockhash,_.feePayer=T,await this.convertToVersionedTransaction(_,$)}async convertToVersionedTransaction(t,a){let i=await a.getAddressLookupTable(new I(this.params.solanaLookUpTable)).then(o=>o.value);if(!i)throw new R("Cannot find allbridgeLookupTableAccount");let r=new Ie.TransactionMessage({payerKey:t.feePayer,recentBlockhash:t.recentBlockhash,instructions:t.instructions}).compileToV0Message([i]);return new Ie.VersionedTransaction(r)}async buildSwapAndBridgeWormholeTransaction(t){let{bridge:a,vusdAmount:i,nonce:r,recipient:o,receiveToken:A,poolAccount:c,lockAccount:m,bridgeAuthority:u,userToken:l,bridgeTokenAccount:f,chainBridgeAccount:y,otherBridgeTokenAccount:h,userAccount:T,destinationChainId:g,mint:d,config:S,configAccountInfo:b,gasPrice:V,thisGasPrice:k,message:w,extraGasInstruction:J}=t,W=this.params.wormholeMessengerProgramId,[me]=I.findProgramAddressSync([Buffer.from("Bridge")],new I(W)),[ue]=I.findProgramAddressSync([Buffer.from("fee_collector")],new I(W)),[he]=I.findProgramAddressSync([Buffer.from("Sequence"),u.toBuffer()],new I(W)),te=await cn(g,b.wormholeMessengerProgramId),_=await Re(b.wormholeMessengerProgramId),$=ma.generate(),ne=Me(this.solanaRpcUrl,T.toString()),H=await ne.connection.getAccountInfo(me);if(H==null)throw new R("Cannot fetch wormhole bridge account info");let le=new Ye(H.data.slice(16,24),"le").toString(),pe=oi.transfer({fromPubkey:T,toPubkey:ue,lamports:+le}),ae=[];J&&ae.push(J);let C={mint:d,user:T,config:S,lock:m,pool:c,gasPrice:V,thisGasPrice:k,bridgeAuthority:u,userToken:l,bridgeToken:f,chainBridge:y,otherBridgeToken:h,messengerGasUsage:te,wormholeProgram:W,bridge:me,message:$.publicKey,wormholeMessenger:b.wormholeMessengerProgramId,sequence:he,feeCollector:ue,wormholeMessengerConfig:_,clock:Ie.SYSVAR_CLOCK_PUBKEY},ft=await a.methods.swapAndBridgeWormhole({vusdAmount:i,nonce:r,destinationChainId:g,recipient:o,receiveToken:A}).accounts(C).preInstructions([Ie.ComputeBudgetProgram.setComputeUnitLimit({units:yn}),pe]).postInstructions(ae).signers([$]).transaction();return ft.recentBlockhash=(await ne.connection.getLatestBlockhash()).blockhash,ft.feePayer=T,{transaction:await this.convertToVersionedTransaction(ft,ne.connection),messageAccount:$}}async prepareSwapAndBridgeCctpData(t){let{contractAddress:a,amount:i,fromAccountAddress:r,fromTokenAddress:o,toChainId:A,toAccountAddress:c,toTokenAddress:m,extraGas:u}=t,l=a;if(!l)throw new ie("Such route does not support CCTP protocol");let f=4,y=r,h=m,T=c,g=Me(this.solanaRpcUrl,y),d=new fn($n,l,g),S=new I(o),b=await Xn(S,d.programId),V=new I(y),k=await d.account.cctpBridge.fetch(b),w={};return w.cctpBridge=d,w.cctpBridgeAccount=b,w.cctpAddressAccount=new I(l),w.amount=new Ye(i),w.recipient=Array.from(T),w.receiveToken=Array.from(h),w.userToken=await re(V,S),w.bridgeAuthority=await Zn(b,d.programId),w.bridgeTokenAccount=await Kn(S,d.programId),w.chainBridgeAccount=await An(A,d.programId),w.userAccount=V,w.destinationChainId=A,w.mint=S,w.gasPrice=await tt(A,k.gasOracleProgramId),w.thisGasPrice=await tt(f,k.gasOracleProgramId),w.provider=g,u&&(w.extraGasInstruction=this.getExtraGasInstruction(u,w.userAccount,b)),w}async buildSwapAndBridgeCctpTransaction(t,a){let{cctpBridge:i,cctpBridgeAccount:r,amount:o,recipient:A,receiveToken:c,bridgeAuthority:m,userToken:u,bridgeTokenAccount:l,chainBridgeAccount:f,userAccount:y,destinationChainId:h,mint:T,gasPrice:g,thisGasPrice:d,extraGasInstruction:S,provider:b}=a,V=this.params.cctpParams.cctpDomains[t],k=this.params.cctpParams.cctpTransmitterProgramId,w=this.params.cctpParams.cctpTokenMessengerMinter;if(V==null||!k||!w)throw new R("CCTP is not configured");let J=new I(k),W=new I(w),{messageTransmitterAccount:me,tokenMessenger:ue,tokenMessengerEventAuthority:he,tokenMinter:te,localToken:_,remoteTokenMessengerKey:$,authorityPda:ne}=Yn(V,T,J,W),H=[];S&&H.push(S);let le=ma.generate(),pe=Qn(i.programId,le.publicKey),ae=await i.methods.bridge({amount:o,destinationChainId:h,recipient:A,receiveToken:c}).accounts({mint:T,user:y,cctpBridge:r,messageSentEventData:le.publicKey,lock:pe,cctpMessenger:W,messageTransmitterProgram:J,messageTransmitterAccount:me,tokenMessenger:ue,tokenMinter:te,localToken:_,remoteTokenMessengerKey:$,authorityPda:ne,eventAuthority:he,bridgeToken:l,gasPrice:g,thisGasPrice:d,chainBridge:f,userToken:u,bridgeAuthority:m}).preInstructions([Ie.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(H).transaction(),C=b.connection;return ae.recentBlockhash=(await C.getLatestBlockhash()).blockhash,ae.feePayer=y,{transaction:await this.convertToVersionedTransaction(ae,C),messageSentEventDataKeypair:le}}send(t){throw new Q}};import{Big as Ti}from"big.js";import{Address as Tn}from"stellar-sdk";import{Address as Ot,ContractSpec as hi}from"stellar-sdk";import{Account as Ai,Address as oA,BASE_FEE as ci,Contract as mi,SorobanRpc as Nt,TimeoutInfinite as ui,TransactionBuilder as li}from"stellar-sdk";var oe=class{constructor(n){this.value=n}unwrapErr(){throw new Error("No error")}unwrap(){return this.value}isOk(){return!0}isErr(){return!this.isOk()}},ee=class{constructor(n){this.error=n}unwrapErr(){return this.error}unwrap(){throw new Error(this.error.message)}isOk(){return!1}isErr(){return!this.isOk()}},pi=/Error\(Contract, #(\d+)\)/,di="GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF",F=class s{constructor(n){this.options=n;this.simulate=async()=>(this.simulation=await this.server.simulateTransaction(this.raw),Nt.Api.isSimulationSuccess(this.simulation)&&(this.raw=Nt.assembleTransaction(this.raw,this.simulation).build()),this);this.getAccount=()=>new Ai(di,"0");this.server=new Nt.Server(this.options.rpcUrl,{allowHttp:this.options.rpcUrl.startsWith("http://")})}static async fromSimulation(n){let t=new s(n),a=new mi(n.contractId);return t.raw=new li(t.getAccount(),{fee:n.fee?.toString(10)??ci,networkPassphrase:n.networkPassphrase}).addOperation(a.call(n.method,...n.args??[])).setTimeout(ui).build(),await t.simulate()}get simulationData(){if(this.simulationResult&&this.simulationTransactionData)return{result:this.simulationResult,transactionData:this.simulationTransactionData};let n=this.simulation;if(Nt.Api.isSimulationError(n))throw new Error(`Transaction simulation failed: "${n.error}"`);if(!n.result)throw new Error(`Expected an invocation simulation, but got no 'result' field. Simulation: ${JSON.stringify(n,null,2)}`);return this.simulationResult=n.result,this.simulationTransactionData=n.transactionData.build(),{result:this.simulationResult,transactionData:this.simulationTransactionData}}get result(){try{return this.options.parseResultXdr(this.simulationData.result.retval)}catch(n){let t=this.parseError(n.toString());if(t)return t;throw n}}parseError(n){if(!this.options.errorTypes)return;let t=n.match(pi);if(!t)return;let a=parseInt(t[1],10),i=this.options.errorTypes[a];if(i.message)return new ee(i)}};import{Address as uA,BASE_FEE as gi,Contract as fi,Operation as yi,SorobanRpc as hn,TimeoutInfinite as ua,TransactionBuilder as la}from"stellar-sdk";var Ce=class s{constructor(n){this.options=n;this.simulate=async()=>(this.simulation=await this.server.simulateTransaction(this.raw),hn.Api.isSimulationSuccess(this.simulation)&&(this.raw=hn.assembleTransaction(this.raw,this.simulation).build()),this);this.server=new hn.Server(this.options.rpcUrl,{allowHttp:this.options.rpcUrl.startsWith("http://")})}static async xdrFromSimulation(n){let t=new s(n),a=new fi(n.contractId);t.raw=new la(await t.server.getAccount(n.account),{fee:n.fee?.toString(10)??gi,networkPassphrase:n.networkPassphrase}).addOperation(a.call(n.method,...n.args??[])).setTimeout(ua).build();let i=await t.simulate(),r=i.raw.operations[0];return i.raw=new la(await t.server.getAccount(n.account),{fee:i.raw.fee,networkPassphrase:n.networkPassphrase}).setTimeout(ua).addOperation(yi.invokeHostFunction({...r,auth:r.auth??[]})).build(),await i.simulate(),i.raw.toXDR()}};var pa={0:{message:""},1:{message:""},2:{message:""},3:{message:""},4:{message:""},5:{message:""},6:{message:""},7:{message:""},8:{message:""},9:{message:""},103:{message:""},104:{message:""},105:{message:""},106:{message:""},107:{message:""},108:{message:""},109:{message:""},203:{message:""},204:{message:""},205:{message:""},206:{message:""},207:{message:""},208:{message:""},209:{message:""},210:{message:""},211:{message:""},212:{message:""},214:{message:""},215:{message:""},216:{message:""},217:{message:""},218:{message:""},300:{message:""},301:{message:""},302:{message:""},303:{message:""},400:{message:""}},st=class{constructor(n){this.options=n;this.parsers={swapAndBridge:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("swap_and_bridge",n)),swap:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("swap",n))};this.swapAndBridge=async({sender:n,token:t,amount:a,recipient:i,destination_chain_id:r,receive_token:o,nonce:A,gas_amount:c,fee_token_amount:m},u={})=>await Ce.xdrFromSimulation({method:"swap_and_bridge",args:this.spec.funcArgsToScVals("swap_and_bridge",{sender:new Ot(n),token:new Ot(t),amount:a,recipient:i,destination_chain_id:r,receive_token:o,nonce:A,gas_amount:c,fee_token_amount:m}),account:n,...u,...this.options,errorTypes:pa,parseResultXdr:this.parsers.swapAndBridge});this.swap=async({sender:n,amount:t,token:a,receive_token:i,recipient:r,receive_amount_min:o},A={})=>await Ce.xdrFromSimulation({method:"swap",args:this.spec.funcArgsToScVals("swap",{sender:new Ot(n),amount:t,token:a,receive_token:i,recipient:new Ot(r),receive_amount_min:o}),account:n,...A,...this.options,errorTypes:pa,parseResultXdr:this.parsers.swap});this.spec=new hi(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJY2xhaW1hYmxlAAAAAAAAAQAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+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=","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACWNsYWltYWJsZQAAAAAAAAEAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAJQAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"])}};var Vt=class extends se{constructor(t,a,i){super();this.nodeRpcUrlsConfig=t;this.params=a;this.api=i;this.chainType="SRB"}async buildRawTransactionSend(t){let a=await we(this.chainType,t,this.api);return await this.buildRawTransactionSendFromParams(a)}async buildRawTransactionSendFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toChainId:A,toAccountAddress:c,toTokenAddress:m,fee:u,gasFeePaymentMethod:l,extraGas:f}=t,y=u;f&&(y=Ti(y).plus(f).toFixed());let h=this.getContract(st,i),T;return l==="stablecoin"?T=await h.swapAndBridge({sender:r,token:Tn.contract(Buffer.from(o)).toString(),amount:BigInt(a),recipient:Buffer.from(c),destination_chain_id:+A,receive_token:Buffer.from(m),nonce:un(),gas_amount:BigInt(0),fee_token_amount:BigInt(y)}):T=await h.swapAndBridge({sender:r,token:Tn.contract(Buffer.from(o)).toString(),amount:BigInt(a),recipient:Buffer.from(c),destination_chain_id:+A,receive_token:Buffer.from(m),nonce:un(),gas_amount:BigInt(y),fee_token_amount:BigInt(0)}),T}async buildRawTransactionSwap(t){let a=ve(this.chainType,t);return await this.buildRawTransactionSwapFromParams(a)}async buildRawTransactionSwapFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toAccountAddress:A,toTokenAddress:c,minimumReceiveAmount:m}=t;return await this.getContract(st,i).swap({sender:r,amount:BigInt(a),token:Tn.contract(Buffer.from(o)).toBuffer(),receive_token:Buffer.from(c),recipient:A,receive_amount_min:BigInt(m)})}send(t){throw new Q}getContract(t,a){let i={contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new t(i)}};import{Big as Si}from"big.js";import bi from"bn.js";function Gt(s){return"0x"+new bi(s).toString("hex")}function da(s){return new Promise(n=>setTimeout(()=>n(),s))}var Je=s=>(...n)=>new Promise((t,a)=>s(...n,(i,r)=>i?a(i):t(r)));async function Zt(s,n){let t=await s.trx.sign(n);if(!t.signature)throw new Ve("Transaction was not signed properly");let i=(await s.trx.sendRawTransaction(t)).txid;return await Pi(s,i),{txId:i}}async function Pi(s,n,t=1e4){let a=Date.now();for(;;){if(Date.now()-a>t)throw new je("Transaction not found");let i=await s.trx.getUnconfirmedTransactionInfo(n);if(!i?.receipt){await da(2e3);continue}if(i.receipt.result==="SUCCESS")return i;throw new je(`Transaction status is ${i.receipt.result}`)}}var ot=class extends se{constructor(t,a){super();this.tronWeb=t;this.api=a;this.chainType="TRX"}async send(t){let a=await we(this.chainType,t,this.api),i=await this.buildRawTransactionSendFromParams(a);return await Zt(this.tronWeb,i)}async buildRawTransactionSwap(t){let a=ve(this.chainType,t);return await this.buildRawTransactionSwapFromParams(a)}async buildRawTransactionSwapFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toAccountAddress:A,toTokenAddress:c,minimumReceiveAmount:m}=t,u=[{type:"uint256",value:a},{type:"bytes32",value:o},{type:"bytes32",value:c},{type:"address",value:A},{type:"uint256",value:m}];return this.buildRawTransaction(i,"swap(uint256,bytes32,bytes32,address,uint256)",u,"0",r)}async buildRawTransactionSend(t){let a=await we(this.chainType,t,this.api);return this.buildRawTransactionSendFromParams(a)}async buildRawTransactionSendFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toChainId:A,toAccountAddress:c,toTokenAddress:m,messenger:u,fee:l,gasFeePaymentMethod:f,extraGas:y}=t,h=l;y&&(h=Si(h).plus(y).toFixed());let T=_e().toJSON().data,g,d,S;return u==3?(f==="stablecoin"?(g=[{type:"uint256",value:a},{type:"bytes32",value:c},{type:"uint256",value:A},{type:"uint256",value:h}],d="0"):(g=[{type:"uint256",value:a},{type:"bytes32",value:c},{type:"uint256",value:A},{type:"uint256",value:0}],d=h),S="bridge(uint256,bytes32,uint256,uint256)"):(f==="stablecoin"?(g=[{type:"bytes32",value:o},{type:"uint256",value:a},{type:"bytes32",value:c},{type:"uint256",value:A},{type:"bytes32",value:m},{type:"uint256",value:T},{type:"uint8",value:u},{type:"uint256",value:h}],d="0"):(g=[{type:"bytes32",value:o},{type:"uint256",value:a},{type:"bytes32",value:c},{type:"uint256",value:A},{type:"bytes32",value:m},{type:"uint256",value:T},{type:"uint8",value:u},{type:"uint256",value:0}],d=h),S="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)"),this.buildRawTransaction(i,S,g,d,r)}async buildRawTransaction(t,a,i,r,o){let A=await this.tronWeb.transactionBuilder.triggerSmartContract(t,a,{callValue:r},i,o);if(!A?.result?.result)throw new R("Unknown error: "+JSON.stringify(A,null,2));return A.transaction}};var Lt=class{constructor(n,t,a,i){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a;this.tokenService=i;this.rawTxBuilder=new xt(n,t,a,i)}async getAllowance(n,t){let a,i;t?(a=n,i=t):i=n;let r=it(i.token,i.messenger);return await this.tokenService.getAllowance({...i,spender:r},a)}async checkAllowance(n,t){let a,i;t?(a=n,i=t):i=n;let r=it(i.token,i.messenger);return this.tokenService.checkAllowance({...i,spender:r},a)}async approve(n,t){let a=it(t.token,t.messenger);return this.tokenService.approve(n,{...t,spender:a})}async send(n,t){return M(t.amount),v("amount",t.amount,t.sourceToken.decimals),Dt(t.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,n).send(t)}};function it(s,n){if(n&&n==3){if(s.cctpAddress)return s.cctpAddress;throw new ie("Such route does not support CCTP protocol")}else return s.bridgeAddress}function Dt(s,n,t,a,i){switch(X[s].chainType){case"EVM":{if(i)return new at(i,n,t);{let r=t.getNodeRpcUrl(s);return new at(new Ci(r),n,t)}}case"TRX":{if(i)return new ot(i,n);{let r=t.getNodeRpcUrl(s);return new ot(new wi({fullHost:r}),n)}}case"SOLANA":return new Ut(t.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:a.wormholeMessengerProgramId,solanaLookUpTable:a.solanaLookUpTable,cctpParams:a.cctpParams},n);case"SRB":return new Vt(t,a,n)}}import{Big as Fi}from"big.js";import Wi from"tronweb";import Ei from"web3";import{Big as Be}from"big.js";function ga(s,n,t,a,i){let r=B(s,3),o=Be(r),A=Be(t),c=Be(a).plus(i),m,u;if(A.eq(0)||c.eq(0)){let f=o.div(2);m=Be(a).plus(f),u=Be(i).plus(f)}else m=Be(a).plus(o.mul(a).div(c)),u=Be(i).plus(o.mul(i).div(c));return Be(In(n,m.toFixed(),u.toFixed())).minus(A).toFixed()}function fa(s){let n=B(s,3);return Be(n).round().toFixed()}var Ne=[{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 q=class{constructor(n){this.lpAmount=n.lpAmount,this.rewardDebt=n.rewardDebt}get userLiquidity(){return P(this.lpAmount,3).toFixed()}earned(n,t){let a=Mn(this.lpAmount,this.rewardDebt,n.accRewardPerShareP,n.p);return t?P(a,t).toFixed():a}};var Ae=class{};var At=class extends Ae{constructor(t,a){super();this.web3=t;this.api=a;this.chainType="EVM";this.P=52}async getUserBalanceInfo(t,a){let i;try{i=await et(this.getUserBalanceInfoByBatch(t,a),`Cannot get UserBalanceInfo for ${a.name}`,5e3)}catch{i=await et(this.getUserBalanceInfoPerProperty(t,a),`Cannot get UserBalanceInfo for ${a.name}`,5e3)}return i}async getUserBalanceInfoByBatch(t,a){let i=new this.web3.BatchRequest,r=new this.web3.eth.Contract(Ne,a.poolAddress),o=["userRewardDebt","balanceOf"].map(m=>Je(u=>i.add(r.methods[m](t).call.request({},u)))());i.execute();let[A,c]=await Promise.all(o);return new q({lpAmount:c,rewardDebt:A})}async getUserBalanceInfoPerProperty(t,a){let i=await this.getPoolContract(a.poolAddress).methods.userRewardDebt(t).call(),r=await this.getPoolContract(a.poolAddress).methods.balanceOf(t).call();return new q({lpAmount:r,rewardDebt:i})}async getPoolInfoFromChain(t){let a;try{a=await et(this.getPoolInfoByBatch(t),`Cannot get PoolInfo for ${t.name}`,5e3)}catch{a=await et(this.getPoolInfoPerProperty(t),`Cannot get PoolInfo for ${t.name}`,5e3)}return a}async getPoolInfoByBatch(t){let a=new this.web3.BatchRequest,i=new this.web3.eth.Contract(Ne,t.poolAddress),r=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(T=>Je(g=>a.add(i.methods[T]().call.request({},g)))());a.execute();let[o,A,c,m,u,l]=await Promise.all(r),f=c.toString(),y=m.toString(),h=j({tokenBalance:f,vUsdBalance:y});return{aValue:o.toString(),dValue:A.toString(),tokenBalance:f,vUsdBalance:y,totalLpAmount:u.toString(),accRewardPerShareP:l.toString(),p:this.P,imbalance:h}}async getPoolInfoPerProperty(t){let a=this.getPoolContract(t.poolAddress),[i,r,o,A,c,m]=await Promise.all([a.methods.a().call(),a.methods.d().call(),a.methods.tokenBalance().call(),a.methods.vUsdBalance().call(),a.methods.totalSupply().call(),a.methods.accRewardPerShareP().call()]),u=j({tokenBalance:o,vUsdBalance:A});return{aValue:i,dValue:r,tokenBalance:o,vUsdBalance:A,totalLpAmount:c,accRewardPerShareP:m,p:this.P,imbalance:u}}async buildRawTransactionDeposit(t){return Promise.resolve({...this.buildTxParams(t),data:this.getPoolContract(t.token.poolAddress).methods.deposit(t.amount).encodeABI()})}async buildRawTransactionWithdraw(t){return Promise.resolve({...this.buildTxParams(t),data:this.getPoolContract(t.token.poolAddress).methods.withdraw(t.amount).encodeABI()})}async buildRawTransactionClaimRewards(t){return Promise.resolve({...this.buildTxParams(t),data:this.getPoolContract(t.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(t){return{from:t.accountAddress,to:t.token.poolAddress,value:"0"}}getContract(t,a){return new this.web3.eth.Contract(t,a)}getPoolContract(t){return this.getContract(Ne,t)}};var _t=class{constructor(n,t,a,i){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a;this.tokenService=i}async approve(n,t){if(t){let a=n,i=t;return this.tokenService.buildRawTransactionApprove({...i,spender:i.token.poolAddress},a)}else{let a=n;return this.tokenService.buildRawTransactionApprove({...a,spender:a.token.poolAddress})}}async deposit(n,t){return M(n.amount),v("amount",n.amount,n.token.decimals),n.amount=B(n.amount,n.token.decimals).toFixed(),He(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionDeposit(n)}async withdraw(n,t){return M(n.amount),v("amount",n.amount,n.token.decimals),n.amount=B(n.amount,3).toFixed(),He(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionWithdraw(n)}async claimRewards(n,t){return He(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionClaimRewards(n)}};import{AnchorProvider as ki,BN as ya,Program as Ri,Spl as Mi,web3 as vi}from"@project-serum/anchor";import{Connection as Ii,PublicKey as De}from"@solana/web3.js";var Xt=class extends Ae{constructor(t,a){super();this.solanaRpcUrl=t;this.api=a;this.chainType="SOLANA";this.P=48}async getUserBalanceInfo(t,a){let i=this.buildAnchorProvider(t),r=this.getBridge(a.bridgeAddress,i),o=new De(a.poolAddress),A=await r.account.pool.fetch(o);try{let c=await mn(new De(t),A.mint,r.programId),{lpAmount:m,rewardDebt:u}=await r.account.userDeposit.fetch(c);return new q({lpAmount:m.toString(),rewardDebt:u.toString()})}catch{return new q({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(t){let a=this.buildAnchorProvider(t.bridgeAddress),i=await this.getBridge(t.bridgeAddress,a).account.pool.fetch(t.poolAddress),r=i.vUsdBalance.toString(),o=i.tokenBalance.toString(),A=j({tokenBalance:o,vUsdBalance:r});return{dValue:i.d.toString(),aValue:i.a.toString(),totalLpAmount:i.totalLpAmount.toString(),vUsdBalance:r,tokenBalance:o,accRewardPerShareP:i.accRewardPerShareP.toString(),p:this.P,imbalance:A}}async buildRawTransactionDeposit(t){let{bridge:a,accounts:i,preInstructions:r}=await this.prepareDataForTransaction(t),o=await a.methods.deposit(new ya(t.amount)).accounts(i).preInstructions(r).transaction();return o.recentBlockhash=(await this.buildAnchorProvider(t.accountAddress).connection.getLatestBlockhash()).blockhash,o.feePayer=new De(t.accountAddress),await Qe(o,t.txFeeParams,this.solanaRpcUrl),o}async buildRawTransactionWithdraw(t){let{bridge:a,accounts:i,preInstructions:r}=await this.prepareDataForTransaction(t),o=await a.methods.withdraw(new ya(t.amount)).accounts(i).preInstructions(r).transaction();return o.recentBlockhash=(await this.buildAnchorProvider(t.accountAddress).connection.getLatestBlockhash()).blockhash,o.feePayer=new De(t.accountAddress),await Qe(o,t.txFeeParams,this.solanaRpcUrl),o}async buildRawTransactionClaimRewards(t){let{bridge:a,accounts:i,preInstructions:r}=await this.prepareDataForTransaction(t),o=await a.methods.claimRewards().accounts(i).preInstructions(r).transaction();return o.recentBlockhash=(await this.buildAnchorProvider(t.accountAddress).connection.getLatestBlockhash()).blockhash,o.feePayer=new De(t.accountAddress),await Qe(o,t.txFeeParams,this.solanaRpcUrl),o}async prepareDataForTransaction(t){let a=this.buildAnchorProvider(t.accountAddress),i=this.getBridge(t.token.bridgeAddress,a),{accounts:r,preInstructions:o}=await this._getLPTransactionData(i,t.token.poolAddress,t.accountAddress,a);return{bridge:i,accounts:r,preInstructions:o}}getBridge(t,a){return new Ri(rt,t,a)}buildAnchorProvider(t){let a=new Ii(this.solanaRpcUrl,"confirmed"),i=new De(t);return new ki(a,{publicKey:i},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(t,a,i,r){let o=new De(i),A=await Re(t.programId),c=await Ze(t.programId),m=new De(a),l=(await t.account.pool.fetch(m)).mint,f=await re(o,l),y=await Le(l,t.programId),h=await mn(o,l,t.programId),T=[vi.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await Ke(f,r)}catch{let b=await Mi.associatedToken(r).methods.create().accounts({mint:l,owner:o,associatedAccount:f}).instruction();T.push(b)}try{await t.account.userDeposit.fetch(h)}catch{let S=await t.methods.initDepositAccount().accounts({mint:l,user:o,userDeposit:h}).instruction();T.push(S)}return{accounts:{mint:l,user:o,config:A,pool:m,bridgeAuthority:c,userDeposit:h,userToken:f,bridgeToken:y},preInstructions:T}}};import{Address as Kt,ContractSpec as xi}from"stellar-sdk";var ct={0:{message:""},1:{message:""},2:{message:""},3:{message:""},4:{message:""},5:{message:""},6:{message:""},7:{message:""},8:{message:""},9:{message:""},103:{message:""},104:{message:""},105:{message:""},106:{message:""},107:{message:""},108:{message:""},109:{message:""},203:{message:""},204:{message:""},205:{message:""},206:{message:""},207:{message:""},208:{message:""},209:{message:""},210:{message:""},211:{message:""},212:{message:""},214:{message:""},215:{message:""},216:{message:""},217:{message:""},218:{message:""},300:{message:""},301:{message:""},302:{message:""},303:{message:""},400:{message:""}},Qt=class{constructor(n){this.options=n;this.parsers={deposit:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("deposit",n)),withdraw:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("withdraw",n)),claimRewards:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("claim_rewards",n)),getPool:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("get_pool",n)),getUserDeposit:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("get_user_deposit",n))};this.depositXdr=async({sender:n,amount:t},a={})=>await Ce.xdrFromSimulation({method:"deposit",args:this.spec.funcArgsToScVals("deposit",{sender:new Kt(n),amount:t}),account:n,...a,...this.options,errorTypes:ct,parseResultXdr:this.parsers.deposit});this.withdrawXdr=async({sender:n,amount_lp:t},a={})=>await Ce.xdrFromSimulation({method:"withdraw",args:this.spec.funcArgsToScVals("withdraw",{sender:new Kt(n),amount_lp:t}),account:n,...a,...this.options,errorTypes:ct,parseResultXdr:this.parsers.withdraw});this.claimRewardsXdr=async({sender:n},t={})=>await Ce.xdrFromSimulation({method:"claim_rewards",args:this.spec.funcArgsToScVals("claim_rewards",{sender:new Kt(n)}),account:n,...t,...this.options,errorTypes:ct,parseResultXdr:this.parsers.claimRewards});this.getPool=async(n={})=>await F.fromSimulation({method:"get_pool",args:this.spec.funcArgsToScVals("get_pool",{}),...n,...this.options,errorTypes:ct,parseResultXdr:this.parsers.getPool});this.getUserDeposit=async({user:n},t={})=>await F.fromSimulation({method:"get_user_deposit",args:this.spec.funcArgsToScVals("get_user_deposit",{user:new Kt(n)}),...t,...this.options,errorTypes:ct,parseResultXdr:this.parsers.getUserDeposit});this.spec=new xi(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAUAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAAAAAAJY2xhaW1hYmxlAAAAAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANY2xhaW1fYmFsYW5jZQAAAAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","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=","AAAAAAAAAAAAAAAVZ2V0X2NsYWltYWJsZV9iYWxhbmNlAAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAADkJhbGFuY2VDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAgAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAATAAAAAQAAAAAAAAAQQ2xhaW1hYmxlQmFsYW5jZQAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAAEENsYWltYWJsZUJhbGFuY2UAAAABAAAAAAAAAAZhbW91bnQAAAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAJQAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"])}};var Yt=class extends Ae{constructor(t,a,i){super();this.nodeRpcUrlsConfig=t;this.params=a;this.api=i;this.chainType="SRB";this.P=48}async getUserBalanceInfo(t,a){let r=(await this.getContract(a.poolAddress).getUserDeposit({user:t})).result;if(r.isErr())throw new R;let o=r.unwrap();return new q({lpAmount:o.lp_amount.toString(),rewardDebt:o.reward_debt.toString()})}async getPoolInfoFromChain(t){let i=(await this.getContract(t.poolAddress).getPool()).result;if(i.isErr())throw new R;let r=i.unwrap();return{aValue:r.a.toString(),accRewardPerShareP:r.acc_reward_per_share_p.toString(),dValue:r.d.toString(),tokenBalance:r.token_balance.toString(),p:this.P,totalLpAmount:r.total_lp_amount.toString(),vUsdBalance:r.v_usd_balance.toString(),imbalance:j({tokenBalance:r.token_balance.toString(),vUsdBalance:r.v_usd_balance.toString()})}}async buildRawTransactionDeposit(t){return await this.getContract(t.token.poolAddress).depositXdr({sender:t.accountAddress,amount:BigInt(t.amount)})}async buildRawTransactionWithdraw(t){return await this.getContract(t.token.poolAddress).withdrawXdr({sender:t.accountAddress,amount_lp:BigInt(t.amount)})}async buildRawTransactionClaimRewards(t){return await this.getContract(t.token.poolAddress).claimRewardsXdr({sender:t.accountAddress})}getContract(t){let a={contractId:t,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new Qt(a)}};import Di from"web3";var mt=class s extends Ae{constructor(t,a,i){super();this.tronWeb=t;this.api=a;this.chainType="TRX";this.P=52;i&&(this.web3=new Di(i))}static{this.contracts=new Map}async getUserBalanceInfo(t,a){let i;if(this.web3)try{i=await this.getUserBalanceInfoByBatch(this.web3,t,a)}catch{i=await this.getUserBalanceInfoPerProperty(t,a)}else i=await this.getUserBalanceInfoPerProperty(t,a);return i}async getUserBalanceInfoByBatch(t,a,i){let r=new t.BatchRequest,o=new t.eth.Contract(Ne,nt(i.poolAddress)),A=nt(a),c=["userRewardDebt","balanceOf"].map(l=>Je(f=>r.add(o.methods[l](A).call.request({},f)))());r.execute();let[m,u]=await Promise.all(c);return new q({lpAmount:u,rewardDebt:m})}async getUserBalanceInfoPerProperty(t,a){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(t);let i=await this.getContract(a.poolAddress),r=(await i.methods.userRewardDebt(t).call()).toString(),o=(await i.methods.balanceOf(t).call()).toString();return new q({lpAmount:o,rewardDebt:r})}async getPoolInfoFromChain(t){let a;if(this.web3)try{a=await this.getPoolInfoByBatch(this.web3,t)}catch{a=await this.getPoolInfoPerProperty(t)}else a=await this.getPoolInfoPerProperty(t);return a}async getPoolInfoByBatch(t,a){let i=new t.BatchRequest,r=new t.eth.Contract(Ne,nt(a.poolAddress)),o=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(g=>Je(d=>i.add(r.methods[g]().call.request({},d)))());i.execute();let[A,c,m,u,l,f]=await Promise.all(o),y=m.toString(),h=u.toString(),T=j({tokenBalance:y,vUsdBalance:h});return{aValue:A.toString(),dValue:c.toString(),tokenBalance:y,vUsdBalance:h,totalLpAmount:l.toString(),accRewardPerShareP:f.toString(),p:this.P,imbalance:T}}async getPoolInfoPerProperty(t){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(t.poolAddress);let a=await this.getContract(t.poolAddress),[i,r,o,A,c,m]=await Promise.all([a.methods.a().call(),a.methods.d().call(),a.methods.tokenBalance().call(),a.methods.vUsdBalance().call(),a.methods.totalSupply().call(),a.methods.accRewardPerShareP().call()]),u=o.toString(),l=A.toString(),f=j({tokenBalance:u,vUsdBalance:l});return{aValue:i.toString(),dValue:r.toString(),tokenBalance:u,vUsdBalance:l,totalLpAmount:c.toString(),accRewardPerShareP:m.toString(),p:this.P,imbalance:f}}buildRawTransactionDeposit(t){let{amount:a,accountAddress:i}=t,r=[{type:"uint256",value:a}];return this.buildRawTransaction(t.token.poolAddress,"deposit(uint256)",r,"0",i)}buildRawTransactionWithdraw(t){let{amount:a,accountAddress:i}=t,r=[{type:"uint256",value:a}];return this.buildRawTransaction(t.token.poolAddress,"withdraw(uint256)",r,"0",i)}buildRawTransactionClaimRewards(t){let{accountAddress:a}=t,i=[];return this.buildRawTransaction(t.token.poolAddress,"claimRewards()",i,"0",a)}async buildRawTransaction(t,a,i,r,o){let A=await this.tronWeb.transactionBuilder.triggerSmartContract(t,a,{callValue:r},i,o);if(!A?.result?.result)throw new R("Unknown error: "+JSON.stringify(A,null,2));return A.transaction}async getContract(t){if(s.contracts.has(t))return s.contracts.get(t);let a=await this.tronWeb.contract().at(t);return s.contracts.set(t,a),a}};var Jt=class{constructor(n,t,a,i){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a;this.tokenService=i;this.rawTxBuilder=new _t(n,t,this.params,i)}async getAllowance(n,t){if(t){let a=n,i=t;return await this.tokenService.getAllowance({...i,spender:i.token.poolAddress},a)}else{let a=n;return await this.tokenService.getAllowance({...a,spender:a.token.poolAddress})}}async checkAllowance(n,t){if(t){let a=n,i=t;return this.tokenService.checkAllowance({...i,spender:i.token.poolAddress},a)}else{let a=n;return this.tokenService.checkAllowance({...a,spender:a.token.poolAddress})}}async approve(n,t){return this.tokenService.approve(n,{...t,spender:t.token.poolAddress})}async getAmountToBeDeposited(n,t,a){M(n),v("amount",n,t.decimals);let i=await this.getPoolInfoFromChain(t,a),{vUsdBalance:r,tokenBalance:o,aValue:A,dValue:c}=i,m=ga(n,A,c,o,r);return P(m,3).toFixed()}async getAmountToBeWithdrawn(n,t,a,i){M(n),v("amount",n,a.decimals);let r=await this.getPoolInfoFromChain(a,i),o=fa(n),A=z(o,a.decimals),m=(await this.getUserBalanceInfo(t,a,i)).earned(r)||"0",u=Fi(A).plus(m).toFixed();return P(u,a.decimals).toFixed()}async getUserBalanceInfo(n,t,a){return He(t.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).getUserBalanceInfo(n,t)}async getPoolInfoFromChain(n,t){let a=await He(n.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).getPoolInfoFromChain(n);return this.api.cachePut({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress},a),a}};function He(s,n,t,a,i){switch(X[s].chainType){case"EVM":{if(i)return new At(i,n);{let r=t.getNodeRpcUrl(s);return new At(new Ei(r),n)}}case"TRX":{let r=t.getNodeRpcUrl(s),o=a.tronJsonRpc;if(i)return new mt(i,n,o);{let A=new Wi({fullHost:r});return new mt(A,n,o)}}case"SOLANA":{let r=t.getNodeRpcUrl(s);return new Xt(r,n)}case"SRB":return new Yt(t,a,n)}}import{Big as x}from"big.js";function ba(s,n,t){let a=Ui(s,{decimals:n.decimals,feeShare:n.feeShare},n.poolInfo),i=Ni(a.amountIncludingCommissionInSystemPrecision,{decimals:t.decimals,feeShare:t.feeShare},t.poolInfo);return{swapToVUsdCalcResult:a,swapFromVUsdCalcResult:i}}function Pa(s,n,t){let a=Oi(s,{decimals:t.decimals,feeShare:t.feeShare},t.poolInfo),i=Vi(a.amountIncludingCommissionInSystemPrecision,{decimals:n.decimals,feeShare:n.feeShare},n.poolInfo);return{swapToVUsdCalcResult:a,swapFromVUsdCalcResult:i}}function Ui(s,{feeShare:n,decimals:t},a){let i=x(s),r=i.times(n),o=i.minus(r);return{bridgeFeeInTokenPrecision:r.round().toFixed(),amountIncludingCommissionInSystemPrecision:ha(We(o,t),a),amountExcludingCommissionInSystemPrecision:ha(We(i,t),a)}}function ha(s,n){if(s.eq(0))return"0";let t=x(n.tokenBalance).plus(s),a=fe(t.toFixed(),n.aValue,n.dValue);return x(n.vUsdBalance).minus(a).round().toFixed()}function Ni(s,{feeShare:n,decimals:t},a){if(x(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let r=x(s).plus(a.vUsdBalance),o=fe(r,a.aValue,a.dValue),A=z(x(a.tokenBalance).minus(o),t),c=x(A).times(n),m=x(A).minus(c).round();return{bridgeFeeInTokenPrecision:c.round().toFixed(),amountIncludingCommissionInTokenPrecision:m.toFixed(),amountExcludingCommissionInTokenPrecision:A.toFixed()}}function Oi(s,{feeShare:n,decimals:t},a){let i=x(n).div(x(1).minus(n)),r=x(s).times(i),o=x(s).plus(r);return{bridgeFeeInTokenPrecision:r.round().toFixed(),amountIncludingCommissionInSystemPrecision:Ta(We(o,t),a),amountExcludingCommissionInSystemPrecision:Ta(We(s,t),a)}}function Ta(s,n){let t=x(n.tokenBalance).minus(s),a=fe(t.toFixed(),n.aValue,n.dValue);return x(a).minus(n.vUsdBalance).round().toFixed()}function Vi(s,{feeShare:n,decimals:t},a){if(x(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let i=x(a.vUsdBalance).minus(s),r=fe(i.toFixed(),a.aValue,a.dValue),o=x(r).minus(a.tokenBalance),A=z(o.toFixed(),t),c=x(n).div(x(1).minus(n)),m=x(A).times(c),u=x(A).plus(m);return{bridgeFeeInTokenPrecision:m.round().toFixed(),amountIncludingCommissionInTokenPrecision:u.round().toFixed(),amountExcludingCommissionInTokenPrecision:A.toFixed()}}import{Big as Fe}from"big.js";function Sa(s,n,t,a,i){let r=ge(s,n,t),o=z(r,n.decimals),A=$e(r,a,i),c=Fe(s).times(n.feeShare),m=Fe(A).div(Fe(1).minus(a.feeShare)).minus(A);return{sourceLPSwap:{fee:P(c,n.decimals).neg().round(n.decimals,Fe.roundUp).toFixed(),swap:P(Fe(s).minus(o).minus(c),n.decimals).neg().round(n.decimals,Fe.roundUp).toFixed()},destLPSwap:{fee:P(m,a.decimals).neg().round(a.decimals,Fe.roundUp).toFixed(),swap:P(z(r,a.decimals).minus(A).minus(m),a.decimals).neg().round(a.decimals,Fe.roundUp).toFixed()}}}import{Connection as Gi,PublicKey as Zi,TransactionMessage as Li}from"@solana/web3.js";var Ht=class{constructor(n,t){this.nodeRpcUrlsConfig=n;this.params=t}async addMemoToTx(n,t){if(t.length>28)throw new R("InvalidArgumentException memo cannot be more than 28 characters");let a=new Gi(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),i=await Ue(n,a),r=Li.decompile(n.message,{addressLookupTableAccounts:i});r.instructions[r.instructions.length-1].keys.push({pubkey:new Zi(Buffer.from(t)),isSigner:!1,isWritable:!1}),n.message=r.compileToV0Message(i)}};import{Asset as Xi,BASE_FEE as Ki,Horizon as bn,Operation as Qi,Operation as Yi,SorobanRpc as lt,TimeoutInfinite as Ji,TransactionBuilder as Pn,TransactionBuilder as wa}from"stellar-sdk";import{HorizonApi as ed}from"stellar-sdk/lib/horizon";import{Address as O,ContractSpec as _i}from"stellar-sdk";var Y={},ut=class{constructor(n){this.options=n;this.parsers={initialize:()=>{},mint:()=>{},setAdmin:()=>{},allowance:n=>this.spec.funcResToNative("allowance",n),approve:()=>{},balance:n=>this.spec.funcResToNative("balance",n),spendableBalance:n=>this.spec.funcResToNative("spendable_balance",n),transfer:()=>{},transferFrom:()=>{},burn:()=>{},burnFrom:()=>{},decimals:n=>this.spec.funcResToNative("decimals",n),name:n=>this.spec.funcResToNative("name",n),symbol:n=>this.spec.funcResToNative("symbol",n)};this.initialize=async({admin:n,decimal:t,name:a,symbol:i},r={})=>await F.fromSimulation({method:"initialize",args:this.spec.funcArgsToScVals("initialize",{admin:new O(n),decimal:t,name:a,symbol:i}),...r,...this.options,errorTypes:Y,parseResultXdr:this.parsers.initialize});this.mint=async({to:n,amount:t},a={})=>await F.fromSimulation({method:"mint",args:this.spec.funcArgsToScVals("mint",{to:new O(n),amount:t}),...a,...this.options,errorTypes:Y,parseResultXdr:this.parsers.mint});this.setAdmin=async({new_admin:n},t={})=>await F.fromSimulation({method:"set_admin",args:this.spec.funcArgsToScVals("set_admin",{new_admin:new O(n)}),...t,...this.options,errorTypes:Y,parseResultXdr:this.parsers.setAdmin});this.allowance=async({from:n,spender:t},a={})=>await F.fromSimulation({method:"allowance",args:this.spec.funcArgsToScVals("allowance",{from:new O(n),spender:new O(t)}),...a,...this.options,errorTypes:Y,parseResultXdr:this.parsers.allowance});this.approve=async({from:n,spender:t,amount:a,expiration_ledger:i},r={})=>await F.fromSimulation({method:"approve",args:this.spec.funcArgsToScVals("approve",{from:new O(n),spender:new O(t),amount:a,expiration_ledger:i}),...r,...this.options,errorTypes:Y,parseResultXdr:this.parsers.approve});this.balance=async({id:n},t={})=>await F.fromSimulation({method:"balance",args:this.spec.funcArgsToScVals("balance",{id:new O(n)}),...t,...this.options,errorTypes:Y,parseResultXdr:this.parsers.balance});this.spendableBalance=async({id:n},t={})=>await F.fromSimulation({method:"spendable_balance",args:this.spec.funcArgsToScVals("spendable_balance",{id:new O(n)}),...t,...this.options,errorTypes:Y,parseResultXdr:this.parsers.spendableBalance});this.transfer=async({from:n,to:t,amount:a},i={})=>await F.fromSimulation({method:"transfer",args:this.spec.funcArgsToScVals("transfer",{from:new O(n),to:new O(t),amount:a}),...i,...this.options,errorTypes:Y,parseResultXdr:this.parsers.transfer});this.transferFrom=async({spender:n,from:t,to:a,amount:i},r={})=>await F.fromSimulation({method:"transfer_from",args:this.spec.funcArgsToScVals("transfer_from",{spender:new O(n),from:new O(t),to:new O(a),amount:i}),...r,...this.options,errorTypes:Y,parseResultXdr:this.parsers.transferFrom});this.burn=async({from:n,amount:t},a={})=>await F.fromSimulation({method:"burn",args:this.spec.funcArgsToScVals("burn",{from:new O(n),amount:t}),...a,...this.options,errorTypes:Y,parseResultXdr:this.parsers.burn});this.burnFrom=async({spender:n,from:t,amount:a},i={})=>await F.fromSimulation({method:"burn_from",args:this.spec.funcArgsToScVals("burn_from",{spender:new O(n),from:new O(t),amount:a}),...i,...this.options,errorTypes:Y,parseResultXdr:this.parsers.burnFrom});this.decimals=async(n={})=>await F.fromSimulation({method:"decimals",args:this.spec.funcArgsToScVals("decimals",{}),...n,...this.options,errorTypes:Y,parseResultXdr:this.parsers.decimals});this.name=async(n={})=>await F.fromSimulation({method:"name",args:this.spec.funcArgsToScVals("name",{}),...n,...this.options,errorTypes:Y,parseResultXdr:this.parsers.name});this.symbol=async(n={})=>await F.fromSimulation({method:"symbol",args:this.spec.funcArgsToScVals("symbol",{}),...n,...this.options,errorTypes:Y,parseResultXdr:this.parsers.symbol});this.spec=new _i(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAdkZWNpbWFsAAAAAAQAAAAAAAAABG5hbWUAAAAQAAAAAAAAAAZzeW1ib2wAAAAAABAAAAAA","AAAAAAAAAAAAAAAEbWludAAAAAIAAAAAAAAAAnRvAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAA","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAA=","AAAAAAAAAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAAAAAAAHYXBwcm92ZQAAAAAEAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAAAAAAEWV4cGlyYXRpb25fbGVkZ2VyAAAAAAAABAAAAAA=","AAAAAAAAAAAAAAAHYmFsYW5jZQAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAL","AAAAAAAAAAAAAAARc3BlbmRhYmxlX2JhbGFuY2UAAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAL","AAAAAAAAAAAAAAAIdHJhbnNmZXIAAAADAAAAAAAAAARmcm9tAAAAEwAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAAAAAAANdHJhbnNmZXJfZnJvbQAAAAAAAAQAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAEZnJvbQAAABMAAAAAAAAAAnRvAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAA","AAAAAAAAAAAAAAAEYnVybgAAAAIAAAAAAAAABGZyb20AAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAA","AAAAAAAAAAAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAAAAAAAIZGVjaW1hbHMAAAAAAAAAAQAAAAQ=","AAAAAAAAAAAAAAAEbmFtZQAAAAAAAAABAAAAEA==","AAAAAAAAAAAAAAAGc3ltYm9sAAAAAAAAAAAAAQAAABA=","AAAAAQAAAAAAAAAAAAAAEEFsbG93YW5jZURhdGFLZXkAAAACAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAHc3BlbmRlcgAAAAAT","AAAAAQAAAAAAAAAAAAAADkFsbG93YW5jZVZhbHVlAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAAAAAAEWV4cGlyYXRpb25fbGVkZ2VyAAAAAAAABA==","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAABQAAAAEAAAAAAAAACUFsbG93YW5jZQAAAAAAAAEAAAfQAAAAEEFsbG93YW5jZURhdGFLZXkAAAABAAAAAAAAAAdCYWxhbmNlAAAAAAEAAAATAAAAAQAAAAAAAAAFTm9uY2UAAAAAAAABAAAAEwAAAAEAAAAAAAAABVN0YXRlAAAAAAAAAQAAABMAAAAAAAAAAAAAAAVBZG1pbgAAAA==","AAAAAQAAAAAAAAAAAAAADVRva2VuTWV0YWRhdGEAAAAAAAADAAAAAAAAAAdkZWNpbWFsAAAAAAQAAAAAAAAABG5hbWUAAAAQAAAAAAAAAAZzeW1ib2wAAAAAABA="])}};var Hi=100,zi=180,zt=class{constructor(n,t){this.nodeRpcUrlsConfig=n;this.params=t}async buildChangeTrustLineXdrTx(n){let a=await new bn.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(n.sender),r=(await this.getContract(ut,n.tokenAddress).name()).result,[o,A]=r.split(":"),c=new Xi(o,A),m=Yi.changeTrust({asset:c,limit:n.limit});return new wa(a,{fee:Hi.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(m).setTimeout(zi).build().toXDR()}async getBalanceLine(n,t){let i=(await this.getContract(ut,t).name()).result,[r,o]=i.split(":"),A=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new bn.Server(A).loadAccount(n)).balances.find(l=>(l.asset_type==="credit_alphanum4"||l.asset_type==="credit_alphanum12")&&l.asset_code==r&&l.asset_issuer==o)}async submitTransactionStellar(n){let t=new bn.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),a=wa.fromXDR(n,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await t.submitTransaction(a)}async simulateAndCheckRestoreTxRequiredSoroban(n,t){let a=new lt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),i=await a.getAccount(t),r=Pn.fromXDR(n,this.params.sorobanNetworkPassphrase),o=await a.simulateTransaction(r);if(lt.Api.isSimulationRestore(o))return new Pn(i,{fee:(+Ki+ +o.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(o.restorePreamble.transactionData.build()).addOperation(Qi.restoreFootprint({})).setTimeout(Ji).build().toXDR()}async sendTransactionSoroban(n){let t=new lt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),a=Pn.fromXDR(n,this.params.sorobanNetworkPassphrase);return t.sendTransaction(a)}async confirmTx(n,t=15){let a=new lt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),i=await Nn(()=>a.getTransaction(n),r=>r.status===lt.Api.GetTransactionStatus.NOT_FOUND,t);return i[i.length-1]}getContract(n,t){let a={contractId:t,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new n(a)}};var jt=class{constructor(n,t){this.nodeRpcUrlsConfig=n;this.srb=new zt(n,t),this.sol=new Ht(n,t)}};var Xe=(t=>(t.WITH_NATIVE_CURRENCY="native",t.WITH_STABLECOIN="stablecoin",t))(Xe||{}),vt=(t=>(t.INT="int",t.FLOAT="float",t))(vt||{});import{Big as ir}from"big.js";import rr from"tronweb";import sr from"web3";import Sn from"erc-20-abi";import{Big as Ca}from"big.js";var ce=class{async checkAllowance(n){let t=await this.getAllowance(n);return Ca(t).gte(Ca(n.amount))}};var ji="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",qi="0xdac17f958d2ee523a2206206994597c13d831ec7",$i=1e5,pt=class extends ce{constructor(t,a){super();this.web3=t;this.api=a;this.chainType="EVM"}getAllowance(t){let a=t.token.tokenAddress,i=t.owner,r=t.spender;return this.getAllowanceByTokenAddress(a,i,r)}getAllowanceByTokenAddress(t,a,i){return this.getContract(Sn,t).methods.allowance(a,i).call()}async getTokenBalance(t){return await this.getContract(Sn,t.token.tokenAddress).methods.balanceOf(t.account).call()}async getNativeTokenBalance(t){return await this.web3.eth.getBalance(t.account)}async approve(t){if(this.isUsdt(t.tokenAddress)&&await this.getAllowanceByTokenAddress(t.tokenAddress,t.owner,t.spender)!=="0"){let r=await this.buildRawTransactionApprove({...t,amount:"0"});await this.sendRawTransaction(r,t.chainSymbol)}let a=await this.buildRawTransactionApprove(t);return await this.sendRawTransaction(a,t.chainSymbol)}isUsdt(t){return t.toLowerCase()===qi}async buildRawTransactionApprove(t){let{tokenAddress:a,spender:i,owner:r,amount:o}=t,c=await this.getContract(Sn,a).methods.approve(i,o==null?ji:Gt(o));return{from:r,to:a,value:"0",data:c.encodeABI()}}async sendRawTransaction(t,a){let i=t,r={maxPriorityFeePerGas:null,maxFeePerGas:null};a=="POL"?i.gas=$i:i.gas=await this.web3.eth.estimateGas(t);let{transactionHash:o}=await this.web3.eth.sendTransaction({...i,...r});return{txId:o}}getContract(t,a){return new this.web3.eth.Contract(t,a)}};import{AnchorProvider as er}from"@project-serum/anchor";import{Connection as tr,PublicKey as qt}from"@solana/web3.js";var $t=class extends ce{constructor(t,a){super();this.solanaRpcUrl=t;this.api=a;this.chainType="SOLANA"}approve(t){throw new Q}buildRawTransactionApprove(t){throw new Q}buildAnchorProvider(t){let a=new tr(this.solanaRpcUrl,"confirmed"),i=new qt(t);return new er(a,{publicKey:i},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(t){throw new Q}async getTokenBalance(t){let{account:a,token:i}=t;try{let r=await re(new qt(a),new qt(i.tokenAddress));return(await Ke(r,this.buildAnchorProvider(a))).amount.toString()}catch(r){if(r instanceof Error)return r.message.startsWith("Account does not exist"),"0";throw r}}async getNativeTokenBalance(t){return(await this.buildAnchorProvider(t.account).connection.getBalance(new qt(t.account))).toString()}};import{Horizon as Ba,NotFoundError as nr}from"stellar-sdk";import{HorizonApi as e}from"stellar-sdk/lib/horizon";var en=class extends ce{constructor(t,a,i){super();this.nodeRpcUrlsConfig=t;this.params=a;this.api=i;this.chainType="SRB"}getAllowance(){throw new Q}async getTokenBalance(t){if(!t.token.originTokenAddress)throw new R("OriginTokenAddress missing");let[a,i]=t.token.originTokenAddress.split(":"),r=new Ba.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),o;try{o=await r.loadAccount(t.account)}catch(m){if(m instanceof nr)return"0";throw m}let c=o.balances.find(m=>(m.asset_type==="credit_alphanum4"||m.asset_type==="credit_alphanum12")&&m.asset_code==a&&m.asset_issuer==i);return c?.balance?B(c.balance,U[X[t.token.chainSymbol].chainType]).toFixed():"0"}async getNativeTokenBalance(t){let o=(await new Ba.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(t.account)).balances.find(A=>A.asset_type==="native");return o?.balance?B(o.balance,U[X[t.chainSymbol].chainType]).toFixed():"0"}approve(){throw new Q}buildRawTransactionApprove(){throw new Q}};var ar="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",dt=class s extends ce{constructor(t,a){super();this.tronWeb=t;this.api=a;this.chainType="TRX"}static{this.contracts=new Map}async getAllowance(t){let{token:{tokenAddress:a},owner:i}=t;return(await(await this.getContract(a)).methods.allowance(i,t.spender).call()).toString()}async getTokenBalance(t){return(await(await this.getContract(t.token.tokenAddress)).balanceOf(t.account).call()).toString()}async getNativeTokenBalance(t){return(await this.tronWeb.trx.getBalance(t.account)).toString()}async approve(t){let a=await this.buildRawTransactionApprove(t);return await Zt(this.tronWeb,a)}async buildRawTransactionApprove(t){let{tokenAddress:a,spender:i,owner:r,amount:o}=t,A=o==null?ar:Gt(o),c=[{type:"address",value:i},{type:"uint256",value:A}];return this.buildRawTransaction(a,"approve(address,uint256)",c,"0",r)}async getContract(t){if(s.contracts.has(t))return s.contracts.get(t);let a=await this.tronWeb.contract().at(t);return s.contracts.set(t,a),a}async buildRawTransaction(t,a,i,r,o){let A=await this.tronWeb.transactionBuilder.triggerSmartContract(t,a,{callValue:r},i,o);if(!A?.result?.result)throw new R("Unknown error: "+JSON.stringify(A,null,2));return A.transaction}};var tn=class{constructor(n,t,a){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a}async getAllowance(n,t){let a=await this.getChainTokenService(n.token.chainSymbol,n.owner,t).getAllowance(n);return P(a,n.token.decimals).toFixed()}async checkAllowance(n,t){return M(n.amount),v("amount",n.amount,n.token.decimals),this.getChainTokenService(n.token.chainSymbol,n.owner,t).checkAllowance(this.prepareCheckAllowanceParams(n))}async approve(n,t){return t.amount&&(M(t.amount),v("amount",t.amount,t.token.decimals)),this.getChainTokenService(t.token.chainSymbol,t.owner,n).approve(this.prepareApproveParams(t))}async buildRawTransactionApprove(n,t){return n.amount&&(M(n.amount),v("amount",n.amount,n.token.decimals)),this.getChainTokenService(n.token.chainSymbol,n.owner,t).buildRawTransactionApprove(this.prepareApproveParams(n))}async getTokenBalance(n,t){let a=await this.getChainTokenService(n.token.chainSymbol,n.account,t).getTokenBalance(n);return n.token.decimals?P(a,n.token.decimals).toFixed():a}async getNativeTokenBalance(n,t){let a=await this.getChainTokenService(n.chainSymbol,n.account,t).getNativeTokenBalance(n);return{int:a,float:P(a,U[X[n.chainSymbol].chainType]).toFixed()}}getChainTokenService(n,t,a){switch(X[n].chainType){case"EVM":{if(a)return new pt(a,this.api);{let i=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new pt(new sr(i),this.api)}}case"TRX":{if(a)return new dt(a,this.api);{let i=this.nodeRpcUrlsConfig.getNodeRpcUrl(n),r=new rr({fullHost:i});return r.setAddress(t),new dt(r,this.api)}}case"SOLANA":{let i=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new $t(i,this.api)}case"SRB":return new en(this.nodeRpcUrlsConfig,this.params,this.api)}}prepareCheckAllowanceParams(n){return{...n,amount:B(n.amount,n.token.decimals)}}prepareApproveParams(n){return{tokenAddress:n.token.tokenAddress,owner:n.owner,spender:n.spender,chainSymbol:n.token.chainSymbol,amount:n.amount==null?void 0:ir(n.amount).toFixed()}}};var gt=class{constructor(n){this.nodeRpcUrls=n}getNodeRpcUrl(n){let t=this.nodeRpcUrls[n];if(t!==void 0)return t;throw new wt(n)}},nn=class{constructor(n,t=yt){let a=new Bt(t),i=new Rt(a),r=new ht(i);this.api=new Mt(r),this.tokenService=new tn(this.api,n,t),this.bridge=new Lt(this.api,n,t,this.tokenService),this.pool=new Jt(this.api,n,t,this.tokenService),this.params=t}async chainDetailsMap(){return this.api.getChainDetailsMap()}async tokens(){return this.api.tokens()}async tokensByChain(n){return(await this.api.getChainDetailsMap())[n].tokens}async getTransferStatus(n,t){return this.api.getTransferStatus(n,t)}async getGasBalance(n,t){return this.api.getGasBalance(n,t)}async checkAddress(n,t,a){return this.api.checkAddress(n,t,a)}async getPendingStatusInfo(n,t,a,i){M(n);let r;t=="float"?(v("amount",n,a.decimals),r=B(n,a.decimals).toFixed()):r=n;let o=ge(r,a,await N(this.api,a)),A=await N(this.api,i),c=this.getAmountFromVUsdFormatted(o,i,A),m,u=await this.api.getPendingInfo();for(let l in u[i.chainSymbol])l.toLowerCase()===i.tokenAddress.toLowerCase()&&(m=u[i.chainSymbol][l]);if(m){let l=Bn(m.totalSentAmount,A),f=this.getAmountFromVUsdFormatted(o,i,l),y;return ye(f.int).gt(c.int)?y={min:c,max:f}:y={min:f,max:c},{pendingTxs:m.pendingTxs,pendingAmount:{int:ke(m.totalSentAmount,3,i.decimals).toFixed(0),float:P(m.totalSentAmount,3).toFixed()},estimatedAmount:y}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:c,max:c}}}async getTokenBalance(n,t){return this.tokenService.getTokenBalance(n,t)}async getNativeTokenBalance(n,t){return this.tokenService.getNativeTokenBalance(n,t)}async calculateFeePercentOnSourceChain(n,t){M(n),v("amountFloat",n,t.decimals);let a=B(n,t.decimals);if(a.eq(0))return 0;let i=ge(a,t,await N(this.api,t)),r=z(i,t.decimals);return rn(a,r)}async calculateFeePercentOnDestinationChain(n,t,a){M(n),v("amountFloat",n,t.decimals);let i=B(n,t.decimals);if(i.eq(0))return 0;let r=ge(i,t,await N(this.api,t)),o=$e(r,a,await N(this.api,a)),A=z(r,a.decimals);return rn(A,o)}async getAmountToBeReceivedAndGasFeeOptions(n,t,a,i){return M(n),v("amountToSendFloat",n,t.decimals),{amountToSendFloat:ye(n).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(n,t,a,i),gasFeeOptions:await this.getGasFeeOptions(t,a,i)}}async getAmountToSendAndGasFeeOptions(n,t,a,i){return M(n),v("amountToBeReceivedFloat",n,a.decimals),{amountToSendFloat:await this.getAmountToSend(n,t,a,i),amountToBeReceivedFloat:ye(n).toFixed(),gasFeeOptions:await this.getGasFeeOptions(t,a,i)}}async getAmountToBeReceived(n,t,a,i){let r=await N(this.api,t),o=await N(this.api,a);return this.getAmountToBeReceivedFromPools(n,t,a,r,o,i)}async getAmountToBeReceivedFromChain(n,t,a,i,r,o){let A=await this.pool.getPoolInfoFromChain(t,r),c=await this.pool.getPoolInfoFromChain(a,o);return this.getAmountToBeReceivedFromPools(n,t,a,A,c,i)}getAmountToBeReceivedFromPools(n,t,a,i,r,o){M(n),v("amountToSendFloat",n,t.decimals);let A=B(n,t.decimals);if(o&&o==3){if(!t.cctpAddress||!a.cctpAddress||!t.cctpFeeShare)throw new ie("Such route does not support CCTP protocol");let m=A.mul(ye(1).minus(t.cctpFeeShare)).round(0,ye.roundUp),u=ke(m,t.decimals,a.decimals).round(0);return P(u,a.decimals).toFixed()}let c=ge(A,t,i);return this.getAmountFromVUsdFormatted(c,a,r).float}async getAmountToSend(n,t,a,i){let r=await N(this.api,t),o=await N(this.api,a);return this.getAmountToSendFromPools(n,t,a,r,o,i)}async getAmountToSendFromChain(n,t,a,i,r,o){let A=await this.pool.getPoolInfoFromChain(t,r),c=await this.pool.getPoolInfoFromChain(a,o);return this.getAmountToSendFromPools(n,t,a,A,c,i)}getAmountToSendFromPools(n,t,a,i,r,o){M(n),v("amountToBeReceivedFloat",n,a.decimals);let A=B(n,a.decimals);if(o&&o==3){if(!t.cctpAddress||!a.cctpAddress||!t.cctpFeeShare)throw new ie("Such route does not support CCTP protocol");let u=A.div(ye(1).minus(t.cctpFeeShare)).round(0,ye.roundDown),l=ke(u,a.decimals,t.decimals).round(0);return P(l,t.decimals).toFixed()}let c=Rn(A,a,r),m=kn(c,t,i);if(ye(m).lte(0))throw new Te;return P(m,t.decimals).toFixed()}async getGasFeeOptions(n,t,a){return ln(n.allbridgeChainId,n.chainType,t.allbridgeChainId,n.decimals,a,this.api)}getAverageTransferTime(n,t,a){return n.transferTime?.[t.chainSymbol]?.[a]??null}async getPoolInfoByToken(n){return await this.api.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}async refreshPoolInfo(n){if(n){let a=(n instanceof Array?n:[n]).map(i=>({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress}));return this.api.refreshPoolInfo(a)}return this.api.refreshPoolInfo()}aprInPercents(n){return vn(n)}async getExtraGasMaxLimits(n,t){return await pn(n,t,this.api)}async getVUsdFromAmount(n,t,a){M(n);let i;t=="float"?(v("amount",n,a.decimals),i=B(n,a.decimals).toFixed()):i=n;let r=ge(i,a,await N(this.api,a));return{int:r,float:P(r,3).toFixed()}}async getAmountFromVUsd(n,t){return this.getAmountFromVUsdFormatted(n,t,await N(this.api,t))}getAmountFromVUsdFormatted(n,t,a){M(n);let i=$e(n,t,a);if(ye(i).lt(0))throw new Te;return{int:i,float:P(i,t.decimals).toFixed()}}async swapAndBridgeFeeCalculation(n,t,a){return ba(n,{decimals:t.decimals,feeShare:t.feeShare,poolInfo:await N(this.api,t)},{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await N(this.api,a)})}async swapAndBridgeFeeCalculationReverse(n,t,a){let i=Pa(n,{decimals:t.decimals,feeShare:t.feeShare,poolInfo:await N(this.api,t)},{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await N(this.api,a)}),r=i.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(ye(r).lt(0))throw new Te;return i}async getSendAmountDetails(n,t,a,i){M(n);let r;return t=="float"?(v("amount",n,a.decimals),r=B(n,a.decimals).toFixed()):r=n,Sa(r,a,await N(this.api,a),i,await N(this.api,i))}};function or(s){return"solanaRpcUrl"in s}var ka=class{constructor(n,t=yt){let a;or(n)?a=new gt({SOL:n.solanaRpcUrl,TRX:n.tronRpcUrl}):a=new gt(n),this.service=new nn(a,t),this.bridge=this.service.bridge,this.pool=this.service.pool,this.utils=new jt(a,t),this.params=t}async chainDetailsMap(){return this.service.chainDetailsMap()}async tokens(){return this.service.tokens()}async tokensByChain(n){return this.service.tokensByChain(n)}async getTransferStatus(n,t){return this.service.getTransferStatus(n,t)}async getGasBalance(n,t){return this.service.getGasBalance(n,t)}async checkAddress(n,t,a){return this.service.checkAddress(n,t,a)}async getPendingStatusInfo(n,t,a,i){return this.service.getPendingStatusInfo(n,t,a,i)}async getTokenBalance(n,t){return this.service.getTokenBalance(n,t)}async getNativeTokenBalance(n,t){return this.service.getNativeTokenBalance(n,t)}async calculateFeePercentOnSourceChain(n,t){return this.service.calculateFeePercentOnSourceChain(n,t)}async calculateFeePercentOnDestinationChain(n,t,a){return this.service.calculateFeePercentOnDestinationChain(n,t,a)}async getAmountToBeReceivedAndGasFeeOptions(n,t,a,i){return this.service.getAmountToBeReceivedAndGasFeeOptions(n,t,a,i)}async getAmountToSendAndGasFeeOptions(n,t,a,i){return this.service.getAmountToSendAndGasFeeOptions(n,t,a,i)}async getAmountToBeReceived(n,t,a,i){return this.service.getAmountToBeReceived(n,t,a,i)}async getAmountToBeReceivedFromChain(n,t,a,i,r,o){return this.service.getAmountToBeReceivedFromChain(n,t,a,i,r,o)}getAmountToBeReceivedFromPools(n,t,a,i,r,o){return this.service.getAmountToBeReceivedFromPools(n,t,a,i,r,o)}async getAmountToSend(n,t,a,i){return this.service.getAmountToSend(n,t,a,i)}async getAmountToSendFromChain(n,t,a,i,r,o){return this.service.getAmountToSendFromChain(n,t,a,i,r,o)}getAmountToSendFromPools(n,t,a,i,r,o){return this.service.getAmountToSendFromPools(n,t,a,i,r,o)}async getGasFeeOptions(n,t,a){return this.service.getGasFeeOptions(n,t,a)}getAverageTransferTime(n,t,a){return this.service.getAverageTransferTime(n,t,a)}async getPoolInfoByToken(n){return this.service.getPoolInfoByToken(n)}async refreshPoolInfo(n){return this.service.refreshPoolInfo(n)}aprInPercents(n){return this.service.aprInPercents(n)}async getExtraGasMaxLimits(n,t){return this.service.getExtraGasMaxLimits(n,t)}async getVUsdFromAmount(n,t,a){return this.service.getVUsdFromAmount(n,t,a)}async getAmountFromVUsd(n,t){return this.service.getAmountFromVUsd(n,t)}async swapAndBridgeFeeCalculation(n,t,a){return this.service.swapAndBridgeFeeCalculation(n,t,a)}async swapAndBridgeFeeCalculationReverse(n,t,a){return this.service.swapAndBridgeFeeCalculationReverse(n,t,a)}async getSendAmountDetails(n,t,a,i){return this.service.getSendAmountDetails(n,t,a,i)}};export{xn as AddressStatus,ka as AllbridgeCoreSdk,vt as AmountFormat,Oe as AmountNotEnoughError,Pt as ArgumentInvalidDecimalsError,ie as CCTPDoesNotSupportedError,de as ChainSymbol,E as ChainType,Ma as ErrorCode,bt as ExtraGasMaxLimitExceededError,Xe as FeePaymentMethod,Te as InsufficientPoolLiquidityError,Tt as InvalidAmountError,ze as InvalidGasFeePaymentOptionError,Cn as InvalidMessengerOptionError,Ve as InvalidTxError,K as JupiterError,be as Messenger,Q as MethodNotSupportedError,wt as NodeRpcUrlNotInitializedError,R as SdkError,D as SdkRootError,dn as SolanaAutoTxFee,St as TimeoutError,Ct as TxTooLargeError,je as VerifyTxError,yt as mainnet,pr as nodeRpcUrlsDefault,lr as nodeUrlsDefault,Ar as testnet,mr as testnetNodeRpcUrlsDefault,cr as testnetNodeUrlsDefault};
5
+ &onlyDirectRoutes=true`)}catch(c){throw c instanceof ma&&c.response&&c.response.data&&c.response.data.error?new K(c.response.data.error):new K("Cannot get route")}let r;try{r=await ca.post("https://quote-api.jup.ag/v6/swap",JSON.stringify({quoteResponse:i.data,userPublicKey:n,wrapAndUnwrapSol:!0}))}catch(c){throw c instanceof ma&&c.response&&c.response.data&&c.response.data.error?new K(c.response.data.error):new K("Cannot get swap transaction")}let o;if(r?.data?.swapTransaction)o=r.data.swapTransaction;else throw new K("Cannot get swap transaction");let A=Buffer.from(o,"base64");return{tx:si.deserialize(A)}}async amendJupiterWithSdkTx(n,t){try{let a=await Ue(n,this.connection),i=await Ue(t,this.connection),r=Aa.decompile(n.message,{addressLookupTableAccounts:a}),o=Aa.decompile(t.message,{addressLookupTableAccounts:i});return o.instructions.shift(),r.instructions.push(...o.instructions),a.push(...i),n.message=r.compileToV0Message(a),t.message.header.numRequiredSignatures===2&&n.signatures.length===1&&n.signatures.push(t.signatures[0]),n}catch(a){throw a instanceof Error&&a.message?new K(`Some error occurred during creation final swap and bridge transaction. ${a.message}`):new K("Some error occurred during creation final swap and bridge transaction")}}};var hn=1e6,Ut=class extends se{constructor(t,a,i){super();this.solanaRpcUrl=t;this.params=a;this.api=i;this.chainType="SOLANA";this.jupiterService=new Et(t)}async buildRawTransactionSwap(t){let a=ve(this.chainType,t);return await this.buildSwapTransaction(a,t.sourceToken.poolAddress,t.destinationToken.poolAddress,t.txFeeParams)}async buildSwapTransaction(t,a,i,r){let{fromAccountAddress:o,amount:A,contractAddress:c,fromTokenAddress:m,toTokenAddress:u,toAccountAddress:l,minimumReceiveAmount:f}=t,y=o,h=c,T=m,g=u,d=i,S=l,b=new I(y),V=Me(this.solanaRpcUrl,b.toString()),k=new yn(rt,h,V),w=await Ze(k.programId),J=await Re(k.programId),W=new I(T),me=await Le(W,k.programId),ue=new I(a),he=await re(b,W),te=new I(S),_=new I(g),$=await Le(_,k.programId),ne=new I(d),H=await re(te,_),le=[Ie.ComputeBudgetProgram.setComputeUnitLimit({units:hn})];try{await Ke(H,V)}catch{let Ma=await oi.associatedToken(V).methods.create().accounts({mint:_,owner:te,associatedAccount:H}).instruction();le.push(Ma)}let pe=await k.methods.swap(new Ye(A),new Ye(f||0)).accounts({payer:b,config:J,bridgeAuthority:w,user:b,sendBridgeToken:me,sendMint:W,sendPool:ue,sendUserToken:he,receiveBridgeToken:$,receiveMint:_,receivePool:ne,receiveUserToken:H}).preInstructions(le).transaction(),ae=V.connection;return pe.recentBlockhash=(await ae.getLatestBlockhash()).blockhash,pe.feePayer=b,await Qe(pe,r,this.solanaRpcUrl),await this.convertToVersionedTransaction(pe,ae)}async buildRawTransactionSend(t){let a=await we(this.chainType,t,this.api),i=this.addPoolAddress(t,a),r=i.gasFeePaymentMethod=="stablecoin",o;if(r)try{let m=xe(i.fee);i.extraGas&&(m=m.plus(i.extraGas)),i=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(t.sourceToken.decimals,i);let{tx:u}=await this.jupiterService.getJupiterSwapTx(t.fromAccountAddress,t.sourceToken.tokenAddress,m.toFixed(0));if(o=u,i.amount=xe(i.amount).minus(m).toFixed(0),xe(i.amount).lte(0))throw new Oe(`Amount not enough to pay fee, ${P(xe(i.amount).minus(1).neg(),t.sourceToken.decimals).toFixed()} stables is missing`)}catch(m){throw m instanceof D?m:m instanceof Error&&m.message?new K(`Some error occurred during creation Jupiter swap transaction. ${m.message}`):new K("Some error occurred during creation Jupiter swap transaction")}let A,c;switch(a.messenger){case 1:{let m=await this.prepareSwapAndBridgeData(i);A=await this.buildSwapAndBridgeAllbridgeTransaction(m);break}case 2:{let m=await this.prepareSwapAndBridgeData(i),{transaction:u,messageAccount:l}=await this.buildSwapAndBridgeWormholeTransaction(m);A=u,c=l;break}case 3:{let m=await this.prepareSwapAndBridgeCctpData(i),{transaction:u,messageSentEventDataKeypair:l}=await this.buildSwapAndBridgeCctpTransaction(t.destinationToken.chainSymbol,m);A=u,c=l;break}}if(r){if(!o)throw new K("Swap tx is absent");A=await this.jupiterService.amendJupiterWithSdkTx(o,A)}return await sa(A,t.txFeeParams,this.solanaRpcUrl),c&&A.sign([c]),A}addPoolAddress(t,a){return{...a,poolAddress:t.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(t,a){if(a.gasFeePaymentMethod=="stablecoin"){let i=(await this.api.getReceiveTransactionCost({sourceChainId:a.fromChainId,destinationChainId:a.toChainId,messenger:a.messenger})).sourceNativeTokenPrice;a.fee=xe(a.fee).div(i).mul(xe(10).pow(U.SOLANA-t)).toFixed(0),a.extraGas&&(a.extraGas=xe(a.extraGas).div(i).mul(xe(10).pow(U.SOLANA-t)).toFixed(0)),a.gasFeePaymentMethod="native"}return a}getExtraGasInstruction(t,a,i){return Ie.SystemProgram.transfer({fromPubkey:a,toPubkey:i,lamports:+t})}async prepareSwapAndBridgeData(t){let{amount:a,contractAddress:i,fromChainId:r,fromAccountAddress:o,fromTokenAddress:A,toChainId:c,toAccountAddress:m,toTokenAddress:u,poolAddress:l,extraGas:f}=t,y=A,h=o,T=c,g=u,d=m,S=i,b=r,V=Me(this.solanaRpcUrl,h),k=new yn(rt,S,V),w=Array.from(_e()),J=new I(l),W=await ta(a,k,J),me=await Zn(w,k.programId),ue=await Ze(k.programId),he=await re(new I(h),new I(y)),te=await Le(new I(y),k.programId),_=await cn(T,k.programId),$=await _n(T,Buffer.from(g),k.programId),ne=await Re(k.programId),H=await k.account.config.fetch(ne),le=await tt(T,H.gasOracleProgramId),pe=await tt(b,H.gasOracleProgramId),ae=na({amount:W,recipient:Buffer.from(d),nonce:Buffer.from(w),receiveToken:Buffer.from(g),destinationChainId:T,sourceChainId:b,chainBridge:(await Ze(k.programId)).toBuffer()}),C={};return C.bridge=k,C.amount=new Ye(a),C.vusdAmount=new Ye(W),C.nonce=w,C.recipient=Array.from(d),C.receiveToken=Array.from(g),C.poolAccount=J,C.lockAccount=me,C.bridgeAuthority=ue,C.userToken=he,C.bridgeTokenAccount=te,C.chainBridgeAccount=_,C.otherBridgeTokenAccount=$,C.userAccount=new I(h),C.destinationChainId=T,C.mint=new I(y),C.config=ne,C.configAccountInfo=H,C.gasPrice=le,C.thisGasPrice=pe,C.message=ae,f&&(C.extraGasInstruction=this.getExtraGasInstruction(f,C.userAccount,ne)),C}async buildSwapAndBridgeAllbridgeTransaction(t){let{bridge:a,vusdAmount:i,nonce:r,recipient:o,receiveToken:A,poolAccount:c,lockAccount:m,bridgeAuthority:u,userToken:l,bridgeTokenAccount:f,chainBridgeAccount:y,otherBridgeTokenAccount:h,userAccount:T,destinationChainId:g,mint:d,config:S,configAccountInfo:b,gasPrice:V,thisGasPrice:k,message:w,extraGasInstruction:J}=t,W=b.allbridgeMessengerProgramId,me=await mn(g,W),ue=await Re(W),he=await Xn(w,W),te=[];J&&te.push(J);let _=await a.methods.swapAndBridge({vusdAmount:i,nonce:r,destinationChainId:g,recipient:o,receiveToken:A}).accounts({mint:d,user:T,config:S,lock:m,pool:c,gasPrice:V,thisGasPrice:k,bridgeAuthority:u,userToken:l,bridgeToken:f,chainBridge:y,messenger:W,messengerGasUsage:me,messengerConfig:ue,sentMessageAccount:he,otherBridgeToken:h}).preInstructions([Ie.ComputeBudgetProgram.setComputeUnitLimit({units:hn})]).postInstructions(te).transaction(),$=Me(this.solanaRpcUrl,T.toString()).connection;return _.recentBlockhash=(await $.getLatestBlockhash()).blockhash,_.feePayer=T,await this.convertToVersionedTransaction(_,$)}async convertToVersionedTransaction(t,a){let i=await a.getAddressLookupTable(new I(this.params.solanaLookUpTable)).then(o=>o.value);if(!i)throw new R("Cannot find allbridgeLookupTableAccount");let r=new Ie.TransactionMessage({payerKey:t.feePayer,recentBlockhash:t.recentBlockhash,instructions:t.instructions}).compileToV0Message([i]);return new Ie.VersionedTransaction(r)}async buildSwapAndBridgeWormholeTransaction(t){let{bridge:a,vusdAmount:i,nonce:r,recipient:o,receiveToken:A,poolAccount:c,lockAccount:m,bridgeAuthority:u,userToken:l,bridgeTokenAccount:f,chainBridgeAccount:y,otherBridgeTokenAccount:h,userAccount:T,destinationChainId:g,mint:d,config:S,configAccountInfo:b,gasPrice:V,thisGasPrice:k,message:w,extraGasInstruction:J}=t,W=this.params.wormholeMessengerProgramId,[me]=I.findProgramAddressSync([Buffer.from("Bridge")],new I(W)),[ue]=I.findProgramAddressSync([Buffer.from("fee_collector")],new I(W)),[he]=I.findProgramAddressSync([Buffer.from("Sequence"),u.toBuffer()],new I(W)),te=await mn(g,b.wormholeMessengerProgramId),_=await Re(b.wormholeMessengerProgramId),$=ua.generate(),ne=Me(this.solanaRpcUrl,T.toString()),H=await ne.connection.getAccountInfo(me);if(H==null)throw new R("Cannot fetch wormhole bridge account info");let le=new Ye(H.data.slice(16,24),"le").toString(),pe=Ai.transfer({fromPubkey:T,toPubkey:ue,lamports:+le}),ae=[];J&&ae.push(J);let C={mint:d,user:T,config:S,lock:m,pool:c,gasPrice:V,thisGasPrice:k,bridgeAuthority:u,userToken:l,bridgeToken:f,chainBridge:y,otherBridgeToken:h,messengerGasUsage:te,wormholeProgram:W,bridge:me,message:$.publicKey,wormholeMessenger:b.wormholeMessengerProgramId,sequence:he,feeCollector:ue,wormholeMessengerConfig:_,clock:Ie.SYSVAR_CLOCK_PUBKEY},ft=await a.methods.swapAndBridgeWormhole({vusdAmount:i,nonce:r,destinationChainId:g,recipient:o,receiveToken:A}).accounts(C).preInstructions([Ie.ComputeBudgetProgram.setComputeUnitLimit({units:hn}),pe]).postInstructions(ae).signers([$]).transaction();return ft.recentBlockhash=(await ne.connection.getLatestBlockhash()).blockhash,ft.feePayer=T,{transaction:await this.convertToVersionedTransaction(ft,ne.connection),messageAccount:$}}async prepareSwapAndBridgeCctpData(t){let{contractAddress:a,amount:i,fromAccountAddress:r,fromTokenAddress:o,toChainId:A,toAccountAddress:c,toTokenAddress:m,extraGas:u}=t,l=a;if(!l)throw new ie("Such route does not support CCTP protocol");let f=4,y=r,h=m,T=c,g=Me(this.solanaRpcUrl,y),d=new yn(ea,l,g),S=new I(o),b=await Kn(S,d.programId),V=new I(y),k=await d.account.cctpBridge.fetch(b),w={};return w.cctpBridge=d,w.cctpBridgeAccount=b,w.cctpAddressAccount=new I(l),w.amount=new Ye(i),w.recipient=Array.from(T),w.receiveToken=Array.from(h),w.userToken=await re(V,S),w.bridgeAuthority=await Ln(b,d.programId),w.bridgeTokenAccount=await Qn(S,d.programId),w.chainBridgeAccount=await cn(A,d.programId),w.userAccount=V,w.destinationChainId=A,w.mint=S,w.gasPrice=await tt(A,k.gasOracleProgramId),w.thisGasPrice=await tt(f,k.gasOracleProgramId),w.provider=g,u&&(w.extraGasInstruction=this.getExtraGasInstruction(u,w.userAccount,b)),w}async buildSwapAndBridgeCctpTransaction(t,a){let{cctpBridge:i,cctpBridgeAccount:r,amount:o,recipient:A,receiveToken:c,bridgeAuthority:m,userToken:u,bridgeTokenAccount:l,chainBridgeAccount:f,userAccount:y,destinationChainId:h,mint:T,gasPrice:g,thisGasPrice:d,extraGasInstruction:S,provider:b}=a,V=this.params.cctpParams.cctpDomains[t],k=this.params.cctpParams.cctpTransmitterProgramId,w=this.params.cctpParams.cctpTokenMessengerMinter;if(V==null||!k||!w)throw new R("CCTP is not configured");let J=new I(k),W=new I(w),{messageTransmitterAccount:me,tokenMessenger:ue,tokenMessengerEventAuthority:he,tokenMinter:te,localToken:_,remoteTokenMessengerKey:$,authorityPda:ne}=Jn(V,T,J,W),H=[];S&&H.push(S);let le=ua.generate(),pe=Yn(i.programId,le.publicKey),ae=await i.methods.bridge({amount:o,destinationChainId:h,recipient:A,receiveToken:c}).accounts({mint:T,user:y,cctpBridge:r,messageSentEventData:le.publicKey,lock:pe,cctpMessenger:W,messageTransmitterProgram:J,messageTransmitterAccount:me,tokenMessenger:ue,tokenMinter:te,localToken:_,remoteTokenMessengerKey:$,authorityPda:ne,eventAuthority:he,bridgeToken:l,gasPrice:g,thisGasPrice:d,chainBridge:f,userToken:u,bridgeAuthority:m}).preInstructions([Ie.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(H).transaction(),C=b.connection;return ae.recentBlockhash=(await C.getLatestBlockhash()).blockhash,ae.feePayer=y,{transaction:await this.convertToVersionedTransaction(ae,C),messageSentEventDataKeypair:le}}send(t){throw new Q}};import{Big as bi}from"big.js";import{Address as bn}from"stellar-sdk";import{Address as Ot,ContractSpec as Ti}from"stellar-sdk";import{Account as ci,Address as AA,BASE_FEE as mi,Contract as ui,SorobanRpc as Nt,TimeoutInfinite as li,TransactionBuilder as pi}from"stellar-sdk";var oe=class{constructor(n){this.value=n}unwrapErr(){throw new Error("No error")}unwrap(){return this.value}isOk(){return!0}isErr(){return!this.isOk()}},ee=class{constructor(n){this.error=n}unwrapErr(){return this.error}unwrap(){throw new Error(this.error.message)}isOk(){return!1}isErr(){return!this.isOk()}},di=/Error\(Contract, #(\d+)\)/,gi="GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF",F=class s{constructor(n){this.options=n;this.simulate=async()=>(this.simulation=await this.server.simulateTransaction(this.raw),Nt.Api.isSimulationSuccess(this.simulation)&&(this.raw=Nt.assembleTransaction(this.raw,this.simulation).build()),this);this.getAccount=()=>new ci(gi,"0");this.server=new Nt.Server(this.options.rpcUrl,{allowHttp:this.options.rpcUrl.startsWith("http://")})}static async fromSimulation(n){let t=new s(n),a=new ui(n.contractId);return t.raw=new pi(t.getAccount(),{fee:n.fee?.toString(10)??mi,networkPassphrase:n.networkPassphrase}).addOperation(a.call(n.method,...n.args??[])).setTimeout(li).build(),await t.simulate()}get simulationData(){if(this.simulationResult&&this.simulationTransactionData)return{result:this.simulationResult,transactionData:this.simulationTransactionData};let n=this.simulation;if(Nt.Api.isSimulationError(n))throw new Error(`Transaction simulation failed: "${n.error}"`);if(!n.result)throw new Error(`Expected an invocation simulation, but got no 'result' field. Simulation: ${JSON.stringify(n,null,2)}`);return this.simulationResult=n.result,this.simulationTransactionData=n.transactionData.build(),{result:this.simulationResult,transactionData:this.simulationTransactionData}}get result(){try{return this.options.parseResultXdr(this.simulationData.result.retval)}catch(n){let t=this.parseError(n.toString());if(t)return t;throw n}}parseError(n){if(!this.options.errorTypes)return;let t=n.match(di);if(!t)return;let a=parseInt(t[1],10),i=this.options.errorTypes[a];if(i.message)return new ee(i)}};import{Address as lA,BASE_FEE as fi,Contract as yi,Operation as hi,SorobanRpc as Tn,TimeoutInfinite as la,TransactionBuilder as pa}from"stellar-sdk";var Ce=class s{constructor(n){this.options=n;this.simulate=async()=>(this.simulation=await this.server.simulateTransaction(this.raw),Tn.Api.isSimulationSuccess(this.simulation)&&(this.raw=Tn.assembleTransaction(this.raw,this.simulation).build()),this);this.server=new Tn.Server(this.options.rpcUrl,{allowHttp:this.options.rpcUrl.startsWith("http://")})}static async xdrFromSimulation(n){let t=new s(n),a=new yi(n.contractId);t.raw=new pa(await t.server.getAccount(n.account),{fee:n.fee?.toString(10)??fi,networkPassphrase:n.networkPassphrase}).addOperation(a.call(n.method,...n.args??[])).setTimeout(la).build();let i=await t.simulate(),r=i.raw.operations[0];return i.raw=new pa(await t.server.getAccount(n.account),{fee:i.raw.fee,networkPassphrase:n.networkPassphrase}).setTimeout(la).addOperation(hi.invokeHostFunction({...r,auth:r.auth??[]})).build(),await i.simulate(),i.raw.toXDR()}};var da={0:{message:""},1:{message:""},2:{message:""},3:{message:""},4:{message:""},5:{message:""},6:{message:""},7:{message:""},8:{message:""},9:{message:""},103:{message:""},104:{message:""},105:{message:""},106:{message:""},107:{message:""},108:{message:""},109:{message:""},203:{message:""},204:{message:""},205:{message:""},206:{message:""},207:{message:""},208:{message:""},209:{message:""},210:{message:""},211:{message:""},212:{message:""},214:{message:""},215:{message:""},216:{message:""},217:{message:""},218:{message:""},300:{message:""},301:{message:""},302:{message:""},303:{message:""},400:{message:""}},st=class{constructor(n){this.options=n;this.parsers={swapAndBridge:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("swap_and_bridge",n)),swap:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("swap",n))};this.swapAndBridge=async({sender:n,token:t,amount:a,recipient:i,destination_chain_id:r,receive_token:o,nonce:A,gas_amount:c,fee_token_amount:m},u={})=>await Ce.xdrFromSimulation({method:"swap_and_bridge",args:this.spec.funcArgsToScVals("swap_and_bridge",{sender:new Ot(n),token:new Ot(t),amount:a,recipient:i,destination_chain_id:r,receive_token:o,nonce:A,gas_amount:c,fee_token_amount:m}),account:n,...u,...this.options,errorTypes:da,parseResultXdr:this.parsers.swapAndBridge});this.swap=async({sender:n,amount:t,token:a,receive_token:i,recipient:r,receive_amount_min:o},A={})=>await Ce.xdrFromSimulation({method:"swap",args:this.spec.funcArgsToScVals("swap",{sender:new Ot(n),amount:t,token:a,receive_token:i,recipient:new Ot(r),receive_amount_min:o}),account:n,...A,...this.options,errorTypes:da,parseResultXdr:this.parsers.swap});this.spec=new Ti(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJY2xhaW1hYmxlAAAAAAAAAQAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+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=","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACWNsYWltYWJsZQAAAAAAAAEAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAJQAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"])}};var Vt=class extends se{constructor(t,a,i){super();this.nodeRpcUrlsConfig=t;this.params=a;this.api=i;this.chainType="SRB"}async buildRawTransactionSend(t){let a=await we(this.chainType,t,this.api);return await this.buildRawTransactionSendFromParams(a)}async buildRawTransactionSendFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toChainId:A,toAccountAddress:c,toTokenAddress:m,fee:u,gasFeePaymentMethod:l,extraGas:f}=t,y=u;f&&(y=bi(y).plus(f).toFixed());let h=this.getContract(st,i),T;return l==="stablecoin"?T=await h.swapAndBridge({sender:r,token:bn.contract(Buffer.from(o)).toString(),amount:BigInt(a),recipient:Buffer.from(c),destination_chain_id:+A,receive_token:Buffer.from(m),nonce:ln(),gas_amount:BigInt(0),fee_token_amount:BigInt(y)}):T=await h.swapAndBridge({sender:r,token:bn.contract(Buffer.from(o)).toString(),amount:BigInt(a),recipient:Buffer.from(c),destination_chain_id:+A,receive_token:Buffer.from(m),nonce:ln(),gas_amount:BigInt(y),fee_token_amount:BigInt(0)}),T}async buildRawTransactionSwap(t){let a=ve(this.chainType,t);return await this.buildRawTransactionSwapFromParams(a)}async buildRawTransactionSwapFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toAccountAddress:A,toTokenAddress:c,minimumReceiveAmount:m}=t;return await this.getContract(st,i).swap({sender:r,amount:BigInt(a),token:bn.contract(Buffer.from(o)).toBuffer(),receive_token:Buffer.from(c),recipient:A,receive_amount_min:BigInt(m)})}send(t){throw new Q}getContract(t,a){let i={contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new t(i)}};import{Big as wi}from"big.js";import Pi from"bn.js";function Gt(s){return"0x"+new Pi(s).toString("hex")}function ga(s){return new Promise(n=>setTimeout(()=>n(),s))}var Je=s=>(...n)=>new Promise((t,a)=>s(...n,(i,r)=>i?a(i):t(r)));async function Zt(s,n){let t=await s.trx.sign(n);if(!t.signature)throw new Ve("Transaction was not signed properly");let i=(await s.trx.sendRawTransaction(t)).txid;return await Si(s,i),{txId:i}}async function Si(s,n,t=1e4){let a=Date.now();for(;;){if(Date.now()-a>t)throw new je("Transaction not found");let i=await s.trx.getUnconfirmedTransactionInfo(n);if(!i?.receipt){await ga(2e3);continue}if(i.receipt.result==="SUCCESS")return i;throw new je(`Transaction status is ${i.receipt.result}`)}}var ot=class extends se{constructor(t,a){super();this.tronWeb=t;this.api=a;this.chainType="TRX"}async send(t){let a=await we(this.chainType,t,this.api),i=await this.buildRawTransactionSendFromParams(a);return await Zt(this.tronWeb,i)}async buildRawTransactionSwap(t){let a=ve(this.chainType,t);return await this.buildRawTransactionSwapFromParams(a)}async buildRawTransactionSwapFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toAccountAddress:A,toTokenAddress:c,minimumReceiveAmount:m}=t,u=[{type:"uint256",value:a},{type:"bytes32",value:o},{type:"bytes32",value:c},{type:"address",value:A},{type:"uint256",value:m}];return this.buildRawTransaction(i,"swap(uint256,bytes32,bytes32,address,uint256)",u,"0",r)}async buildRawTransactionSend(t){let a=await we(this.chainType,t,this.api);return this.buildRawTransactionSendFromParams(a)}async buildRawTransactionSendFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toChainId:A,toAccountAddress:c,toTokenAddress:m,messenger:u,fee:l,gasFeePaymentMethod:f,extraGas:y}=t,h=l;y&&(h=wi(h).plus(y).toFixed());let T=_e().toJSON().data,g,d,S;return u==3?(f==="stablecoin"?(g=[{type:"uint256",value:a},{type:"bytes32",value:c},{type:"uint256",value:A},{type:"uint256",value:h}],d="0"):(g=[{type:"uint256",value:a},{type:"bytes32",value:c},{type:"uint256",value:A},{type:"uint256",value:0}],d=h),S="bridge(uint256,bytes32,uint256,uint256)"):(f==="stablecoin"?(g=[{type:"bytes32",value:o},{type:"uint256",value:a},{type:"bytes32",value:c},{type:"uint256",value:A},{type:"bytes32",value:m},{type:"uint256",value:T},{type:"uint8",value:u},{type:"uint256",value:h}],d="0"):(g=[{type:"bytes32",value:o},{type:"uint256",value:a},{type:"bytes32",value:c},{type:"uint256",value:A},{type:"bytes32",value:m},{type:"uint256",value:T},{type:"uint8",value:u},{type:"uint256",value:0}],d=h),S="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)"),this.buildRawTransaction(i,S,g,d,r)}async buildRawTransaction(t,a,i,r,o){let A=await this.tronWeb.transactionBuilder.triggerSmartContract(t,a,{callValue:r},i,o);if(!A?.result?.result)throw new R("Unknown error: "+JSON.stringify(A,null,2));return A.transaction}};var Lt=class{constructor(n,t,a,i){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a;this.tokenService=i;this.rawTxBuilder=new xt(n,t,a,i)}async getAllowance(n,t){let a,i;t?(a=n,i=t):i=n;let r=it(i.token,i.messenger);return await this.tokenService.getAllowance({...i,spender:r},a)}async checkAllowance(n,t){let a,i;t?(a=n,i=t):i=n;let r=it(i.token,i.messenger);return this.tokenService.checkAllowance({...i,spender:r},a)}async approve(n,t){let a=it(t.token,t.messenger);return this.tokenService.approve(n,{...t,spender:a})}async send(n,t){return M(t.amount),v("amount",t.amount,t.sourceToken.decimals),Dt(t.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,n).send(t)}};function it(s,n){if(n&&n==3){if(s.cctpAddress)return s.cctpAddress;throw new ie("Such route does not support CCTP protocol")}else return s.bridgeAddress}function Dt(s,n,t,a,i){switch(X[s].chainType){case"EVM":{if(i)return new at(i,n,t);{let r=t.getNodeRpcUrl(s);return new at(new Bi(r),n,t)}}case"TRX":{if(i)return new ot(i,n);{let r=t.getNodeRpcUrl(s);return new ot(new Ci({fullHost:r}),n)}}case"SOLANA":return new Ut(t.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:a.wormholeMessengerProgramId,solanaLookUpTable:a.solanaLookUpTable,cctpParams:a.cctpParams},n);case"SRB":return new Vt(t,a,n)}}import{Big as Wi}from"big.js";import Ei from"tronweb";import Ui from"web3";import{Big as Be}from"big.js";function fa(s,n,t,a,i){let r=B(s,3),o=Be(r),A=Be(t),c=Be(a).plus(i),m,u;if(A.eq(0)||c.eq(0)){let f=o.div(2);m=Be(a).plus(f),u=Be(i).plus(f)}else m=Be(a).plus(o.mul(a).div(c)),u=Be(i).plus(o.mul(i).div(c));return Be(xn(n,m.toFixed(),u.toFixed())).minus(A).toFixed()}function ya(s){let n=B(s,3);return Be(n).round().toFixed()}var Ne=[{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 q=class{constructor(n){this.lpAmount=n.lpAmount,this.rewardDebt=n.rewardDebt}get userLiquidity(){return P(this.lpAmount,3).toFixed()}earned(n,t){let a=vn(this.lpAmount,this.rewardDebt,n.accRewardPerShareP,n.p);return t?P(a,t).toFixed():a}};var Ae=class{};var At=class extends Ae{constructor(t,a){super();this.web3=t;this.api=a;this.chainType="EVM";this.P=52}async getUserBalanceInfo(t,a){let i;try{i=await Mt(this.getUserBalanceInfoByBatch(t,a),`Cannot get UserBalanceInfo for ${a.name} on ${a.chainSymbol}`,5e3)}catch{i=await An(()=>this.getUserBalanceInfoPerProperty(t,a),`Cannot get UserBalanceInfo for ${a.name} on ${a.chainSymbol}`,3,5e3)}return i}async getUserBalanceInfoByBatch(t,a){let i=new this.web3.BatchRequest,r=new this.web3.eth.Contract(Ne,a.poolAddress),o=["userRewardDebt","balanceOf"].map(m=>Je(u=>i.add(r.methods[m](t).call.request({},u)))());i.execute();let[A,c]=await Promise.all(o);return new q({lpAmount:c,rewardDebt:A})}async getUserBalanceInfoPerProperty(t,a){let i=await this.getPoolContract(a.poolAddress).methods.userRewardDebt(t).call(),r=await this.getPoolContract(a.poolAddress).methods.balanceOf(t).call();return new q({lpAmount:r,rewardDebt:i})}async getPoolInfoFromChain(t){let a;try{a=await Mt(this.getPoolInfoByBatch(t),`Cannot get PoolInfo for ${t.name} on ${t.chainSymbol}`,5e3)}catch{a=await An(()=>this.getPoolInfoPerProperty(t),`Cannot get PoolInfo for ${t.name} on ${t.chainSymbol}`,3,5e3)}return a}async getPoolInfoByBatch(t){let a=new this.web3.BatchRequest,i=new this.web3.eth.Contract(Ne,t.poolAddress),r=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(T=>Je(g=>a.add(i.methods[T]().call.request({},g)))());a.execute();let[o,A,c,m,u,l]=await Promise.all(r),f=c.toString(),y=m.toString(),h=j({tokenBalance:f,vUsdBalance:y});return{aValue:o.toString(),dValue:A.toString(),tokenBalance:f,vUsdBalance:y,totalLpAmount:u.toString(),accRewardPerShareP:l.toString(),p:this.P,imbalance:h}}async getPoolInfoPerProperty(t){let a=this.getPoolContract(t.poolAddress),[i,r,o,A,c,m]=await Promise.all([a.methods.a().call(),a.methods.d().call(),a.methods.tokenBalance().call(),a.methods.vUsdBalance().call(),a.methods.totalSupply().call(),a.methods.accRewardPerShareP().call()]),u=j({tokenBalance:o,vUsdBalance:A});return{aValue:i,dValue:r,tokenBalance:o,vUsdBalance:A,totalLpAmount:c,accRewardPerShareP:m,p:this.P,imbalance:u}}async buildRawTransactionDeposit(t){return Promise.resolve({...this.buildTxParams(t),data:this.getPoolContract(t.token.poolAddress).methods.deposit(t.amount).encodeABI()})}async buildRawTransactionWithdraw(t){return Promise.resolve({...this.buildTxParams(t),data:this.getPoolContract(t.token.poolAddress).methods.withdraw(t.amount).encodeABI()})}async buildRawTransactionClaimRewards(t){return Promise.resolve({...this.buildTxParams(t),data:this.getPoolContract(t.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(t){return{from:t.accountAddress,to:t.token.poolAddress,value:"0"}}getContract(t,a){return new this.web3.eth.Contract(t,a)}getPoolContract(t){return this.getContract(Ne,t)}};var _t=class{constructor(n,t,a,i){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a;this.tokenService=i}async approve(n,t){if(t){let a=n,i=t;return this.tokenService.buildRawTransactionApprove({...i,spender:i.token.poolAddress},a)}else{let a=n;return this.tokenService.buildRawTransactionApprove({...a,spender:a.token.poolAddress})}}async deposit(n,t){return M(n.amount),v("amount",n.amount,n.token.decimals),n.amount=B(n.amount,n.token.decimals).toFixed(),He(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionDeposit(n)}async withdraw(n,t){return M(n.amount),v("amount",n.amount,n.token.decimals),n.amount=B(n.amount,3).toFixed(),He(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionWithdraw(n)}async claimRewards(n,t){return He(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionClaimRewards(n)}};import{AnchorProvider as Ri,BN as ha,Program as Mi,Spl as vi,web3 as Ii}from"@project-serum/anchor";import{Connection as xi,PublicKey as De}from"@solana/web3.js";var Xt=class extends Ae{constructor(t,a){super();this.solanaRpcUrl=t;this.api=a;this.chainType="SOLANA";this.P=48}async getUserBalanceInfo(t,a){let i=this.buildAnchorProvider(t),r=this.getBridge(a.bridgeAddress,i),o=new De(a.poolAddress),A=await r.account.pool.fetch(o);try{let c=await un(new De(t),A.mint,r.programId),{lpAmount:m,rewardDebt:u}=await r.account.userDeposit.fetch(c);return new q({lpAmount:m.toString(),rewardDebt:u.toString()})}catch{return new q({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(t){let a=this.buildAnchorProvider(t.bridgeAddress),i=await this.getBridge(t.bridgeAddress,a).account.pool.fetch(t.poolAddress),r=i.vUsdBalance.toString(),o=i.tokenBalance.toString(),A=j({tokenBalance:o,vUsdBalance:r});return{dValue:i.d.toString(),aValue:i.a.toString(),totalLpAmount:i.totalLpAmount.toString(),vUsdBalance:r,tokenBalance:o,accRewardPerShareP:i.accRewardPerShareP.toString(),p:this.P,imbalance:A}}async buildRawTransactionDeposit(t){let{bridge:a,accounts:i,preInstructions:r}=await this.prepareDataForTransaction(t),o=await a.methods.deposit(new ha(t.amount)).accounts(i).preInstructions(r).transaction();return o.recentBlockhash=(await this.buildAnchorProvider(t.accountAddress).connection.getLatestBlockhash()).blockhash,o.feePayer=new De(t.accountAddress),await Qe(o,t.txFeeParams,this.solanaRpcUrl),o}async buildRawTransactionWithdraw(t){let{bridge:a,accounts:i,preInstructions:r}=await this.prepareDataForTransaction(t),o=await a.methods.withdraw(new ha(t.amount)).accounts(i).preInstructions(r).transaction();return o.recentBlockhash=(await this.buildAnchorProvider(t.accountAddress).connection.getLatestBlockhash()).blockhash,o.feePayer=new De(t.accountAddress),await Qe(o,t.txFeeParams,this.solanaRpcUrl),o}async buildRawTransactionClaimRewards(t){let{bridge:a,accounts:i,preInstructions:r}=await this.prepareDataForTransaction(t),o=await a.methods.claimRewards().accounts(i).preInstructions(r).transaction();return o.recentBlockhash=(await this.buildAnchorProvider(t.accountAddress).connection.getLatestBlockhash()).blockhash,o.feePayer=new De(t.accountAddress),await Qe(o,t.txFeeParams,this.solanaRpcUrl),o}async prepareDataForTransaction(t){let a=this.buildAnchorProvider(t.accountAddress),i=this.getBridge(t.token.bridgeAddress,a),{accounts:r,preInstructions:o}=await this._getLPTransactionData(i,t.token.poolAddress,t.accountAddress,a);return{bridge:i,accounts:r,preInstructions:o}}getBridge(t,a){return new Mi(rt,t,a)}buildAnchorProvider(t){let a=new xi(this.solanaRpcUrl,"confirmed"),i=new De(t);return new Ri(a,{publicKey:i},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(t,a,i,r){let o=new De(i),A=await Re(t.programId),c=await Ze(t.programId),m=new De(a),l=(await t.account.pool.fetch(m)).mint,f=await re(o,l),y=await Le(l,t.programId),h=await un(o,l,t.programId),T=[Ii.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await Ke(f,r)}catch{let b=await vi.associatedToken(r).methods.create().accounts({mint:l,owner:o,associatedAccount:f}).instruction();T.push(b)}try{await t.account.userDeposit.fetch(h)}catch{let S=await t.methods.initDepositAccount().accounts({mint:l,user:o,userDeposit:h}).instruction();T.push(S)}return{accounts:{mint:l,user:o,config:A,pool:m,bridgeAuthority:c,userDeposit:h,userToken:f,bridgeToken:y},preInstructions:T}}};import{Address as Kt,ContractSpec as Di}from"stellar-sdk";var ct={0:{message:""},1:{message:""},2:{message:""},3:{message:""},4:{message:""},5:{message:""},6:{message:""},7:{message:""},8:{message:""},9:{message:""},103:{message:""},104:{message:""},105:{message:""},106:{message:""},107:{message:""},108:{message:""},109:{message:""},203:{message:""},204:{message:""},205:{message:""},206:{message:""},207:{message:""},208:{message:""},209:{message:""},210:{message:""},211:{message:""},212:{message:""},214:{message:""},215:{message:""},216:{message:""},217:{message:""},218:{message:""},300:{message:""},301:{message:""},302:{message:""},303:{message:""},400:{message:""}},Qt=class{constructor(n){this.options=n;this.parsers={deposit:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("deposit",n)),withdraw:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("withdraw",n)),claimRewards:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("claim_rewards",n)),getPool:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("get_pool",n)),getUserDeposit:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("get_user_deposit",n))};this.depositXdr=async({sender:n,amount:t},a={})=>await Ce.xdrFromSimulation({method:"deposit",args:this.spec.funcArgsToScVals("deposit",{sender:new Kt(n),amount:t}),account:n,...a,...this.options,errorTypes:ct,parseResultXdr:this.parsers.deposit});this.withdrawXdr=async({sender:n,amount_lp:t},a={})=>await Ce.xdrFromSimulation({method:"withdraw",args:this.spec.funcArgsToScVals("withdraw",{sender:new Kt(n),amount_lp:t}),account:n,...a,...this.options,errorTypes:ct,parseResultXdr:this.parsers.withdraw});this.claimRewardsXdr=async({sender:n},t={})=>await Ce.xdrFromSimulation({method:"claim_rewards",args:this.spec.funcArgsToScVals("claim_rewards",{sender:new Kt(n)}),account:n,...t,...this.options,errorTypes:ct,parseResultXdr:this.parsers.claimRewards});this.getPool=async(n={})=>await F.fromSimulation({method:"get_pool",args:this.spec.funcArgsToScVals("get_pool",{}),...n,...this.options,errorTypes:ct,parseResultXdr:this.parsers.getPool});this.getUserDeposit=async({user:n},t={})=>await F.fromSimulation({method:"get_user_deposit",args:this.spec.funcArgsToScVals("get_user_deposit",{user:new Kt(n)}),...t,...this.options,errorTypes:ct,parseResultXdr:this.parsers.getUserDeposit});this.spec=new Di(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAUAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAAAAAAJY2xhaW1hYmxlAAAAAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANY2xhaW1fYmFsYW5jZQAAAAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","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=","AAAAAAAAAAAAAAAVZ2V0X2NsYWltYWJsZV9iYWxhbmNlAAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAADkJhbGFuY2VDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAgAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAATAAAAAQAAAAAAAAAQQ2xhaW1hYmxlQmFsYW5jZQAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAAEENsYWltYWJsZUJhbGFuY2UAAAABAAAAAAAAAAZhbW91bnQAAAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAJQAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"])}};var Yt=class extends Ae{constructor(t,a,i){super();this.nodeRpcUrlsConfig=t;this.params=a;this.api=i;this.chainType="SRB";this.P=48}async getUserBalanceInfo(t,a){let r=(await this.getContract(a.poolAddress).getUserDeposit({user:t})).result;if(r.isErr())throw new R;let o=r.unwrap();return new q({lpAmount:o.lp_amount.toString(),rewardDebt:o.reward_debt.toString()})}async getPoolInfoFromChain(t){let i=(await this.getContract(t.poolAddress).getPool()).result;if(i.isErr())throw new R;let r=i.unwrap();return{aValue:r.a.toString(),accRewardPerShareP:r.acc_reward_per_share_p.toString(),dValue:r.d.toString(),tokenBalance:r.token_balance.toString(),p:this.P,totalLpAmount:r.total_lp_amount.toString(),vUsdBalance:r.v_usd_balance.toString(),imbalance:j({tokenBalance:r.token_balance.toString(),vUsdBalance:r.v_usd_balance.toString()})}}async buildRawTransactionDeposit(t){return await this.getContract(t.token.poolAddress).depositXdr({sender:t.accountAddress,amount:BigInt(t.amount)})}async buildRawTransactionWithdraw(t){return await this.getContract(t.token.poolAddress).withdrawXdr({sender:t.accountAddress,amount_lp:BigInt(t.amount)})}async buildRawTransactionClaimRewards(t){return await this.getContract(t.token.poolAddress).claimRewardsXdr({sender:t.accountAddress})}getContract(t){let a={contractId:t,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new Qt(a)}};import Fi from"web3";var mt=class s extends Ae{constructor(t,a,i){super();this.tronWeb=t;this.api=a;this.chainType="TRX";this.P=52;i&&(this.web3=new Fi(i))}static{this.contracts=new Map}async getUserBalanceInfo(t,a){let i;if(this.web3)try{i=await this.getUserBalanceInfoByBatch(this.web3,t,a)}catch{i=await this.getUserBalanceInfoPerProperty(t,a)}else i=await this.getUserBalanceInfoPerProperty(t,a);return i}async getUserBalanceInfoByBatch(t,a,i){let r=new t.BatchRequest,o=new t.eth.Contract(Ne,nt(i.poolAddress)),A=nt(a),c=["userRewardDebt","balanceOf"].map(l=>Je(f=>r.add(o.methods[l](A).call.request({},f)))());r.execute();let[m,u]=await Promise.all(c);return new q({lpAmount:u,rewardDebt:m})}async getUserBalanceInfoPerProperty(t,a){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(t);let i=await this.getContract(a.poolAddress),r=(await i.methods.userRewardDebt(t).call()).toString(),o=(await i.methods.balanceOf(t).call()).toString();return new q({lpAmount:o,rewardDebt:r})}async getPoolInfoFromChain(t){let a;if(this.web3)try{a=await this.getPoolInfoByBatch(this.web3,t)}catch{a=await this.getPoolInfoPerProperty(t)}else a=await this.getPoolInfoPerProperty(t);return a}async getPoolInfoByBatch(t,a){let i=new t.BatchRequest,r=new t.eth.Contract(Ne,nt(a.poolAddress)),o=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(g=>Je(d=>i.add(r.methods[g]().call.request({},d)))());i.execute();let[A,c,m,u,l,f]=await Promise.all(o),y=m.toString(),h=u.toString(),T=j({tokenBalance:y,vUsdBalance:h});return{aValue:A.toString(),dValue:c.toString(),tokenBalance:y,vUsdBalance:h,totalLpAmount:l.toString(),accRewardPerShareP:f.toString(),p:this.P,imbalance:T}}async getPoolInfoPerProperty(t){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(t.poolAddress);let a=await this.getContract(t.poolAddress),[i,r,o,A,c,m]=await Promise.all([a.methods.a().call(),a.methods.d().call(),a.methods.tokenBalance().call(),a.methods.vUsdBalance().call(),a.methods.totalSupply().call(),a.methods.accRewardPerShareP().call()]),u=o.toString(),l=A.toString(),f=j({tokenBalance:u,vUsdBalance:l});return{aValue:i.toString(),dValue:r.toString(),tokenBalance:u,vUsdBalance:l,totalLpAmount:c.toString(),accRewardPerShareP:m.toString(),p:this.P,imbalance:f}}buildRawTransactionDeposit(t){let{amount:a,accountAddress:i}=t,r=[{type:"uint256",value:a}];return this.buildRawTransaction(t.token.poolAddress,"deposit(uint256)",r,"0",i)}buildRawTransactionWithdraw(t){let{amount:a,accountAddress:i}=t,r=[{type:"uint256",value:a}];return this.buildRawTransaction(t.token.poolAddress,"withdraw(uint256)",r,"0",i)}buildRawTransactionClaimRewards(t){let{accountAddress:a}=t,i=[];return this.buildRawTransaction(t.token.poolAddress,"claimRewards()",i,"0",a)}async buildRawTransaction(t,a,i,r,o){let A=await this.tronWeb.transactionBuilder.triggerSmartContract(t,a,{callValue:r},i,o);if(!A?.result?.result)throw new R("Unknown error: "+JSON.stringify(A,null,2));return A.transaction}async getContract(t){if(s.contracts.has(t))return s.contracts.get(t);let a=await this.tronWeb.contract().at(t);return s.contracts.set(t,a),a}};var Jt=class{constructor(n,t,a,i){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a;this.tokenService=i;this.rawTxBuilder=new _t(n,t,this.params,i)}async getAllowance(n,t){if(t){let a=n,i=t;return await this.tokenService.getAllowance({...i,spender:i.token.poolAddress},a)}else{let a=n;return await this.tokenService.getAllowance({...a,spender:a.token.poolAddress})}}async checkAllowance(n,t){if(t){let a=n,i=t;return this.tokenService.checkAllowance({...i,spender:i.token.poolAddress},a)}else{let a=n;return this.tokenService.checkAllowance({...a,spender:a.token.poolAddress})}}async approve(n,t){return this.tokenService.approve(n,{...t,spender:t.token.poolAddress})}async getAmountToBeDeposited(n,t,a){M(n),v("amount",n,t.decimals);let i=await this.getPoolInfoFromChain(t,a),{vUsdBalance:r,tokenBalance:o,aValue:A,dValue:c}=i,m=fa(n,A,c,o,r);return P(m,3).toFixed()}async getAmountToBeWithdrawn(n,t,a,i){M(n),v("amount",n,a.decimals);let r=await this.getPoolInfoFromChain(a,i),o=ya(n),A=z(o,a.decimals),m=(await this.getUserBalanceInfo(t,a,i)).earned(r)||"0",u=Wi(A).plus(m).toFixed();return P(u,a.decimals).toFixed()}async getUserBalanceInfo(n,t,a){return He(t.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).getUserBalanceInfo(n,t)}async getPoolInfoFromChain(n,t){let a=await He(n.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).getPoolInfoFromChain(n);return this.api.cachePut({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress},a),a}};function He(s,n,t,a,i){switch(X[s].chainType){case"EVM":{if(i)return new At(i,n);{let r=t.getNodeRpcUrl(s);return new At(new Ui(r),n)}}case"TRX":{let r=t.getNodeRpcUrl(s),o=a.tronJsonRpc;if(i)return new mt(i,n,o);{let A=new Ei({fullHost:r});return new mt(A,n,o)}}case"SOLANA":{let r=t.getNodeRpcUrl(s);return new Xt(r,n)}case"SRB":return new Yt(t,a,n)}}import{Big as x}from"big.js";function Pa(s,n,t){let a=Ni(s,{decimals:n.decimals,feeShare:n.feeShare},n.poolInfo),i=Oi(a.amountIncludingCommissionInSystemPrecision,{decimals:t.decimals,feeShare:t.feeShare},t.poolInfo);return{swapToVUsdCalcResult:a,swapFromVUsdCalcResult:i}}function Sa(s,n,t){let a=Vi(s,{decimals:t.decimals,feeShare:t.feeShare},t.poolInfo),i=Gi(a.amountIncludingCommissionInSystemPrecision,{decimals:n.decimals,feeShare:n.feeShare},n.poolInfo);return{swapToVUsdCalcResult:a,swapFromVUsdCalcResult:i}}function Ni(s,{feeShare:n,decimals:t},a){let i=x(s),r=i.times(n),o=i.minus(r);return{bridgeFeeInTokenPrecision:r.round().toFixed(),amountIncludingCommissionInSystemPrecision:Ta(We(o,t),a),amountExcludingCommissionInSystemPrecision:Ta(We(i,t),a)}}function Ta(s,n){if(s.eq(0))return"0";let t=x(n.tokenBalance).plus(s),a=fe(t.toFixed(),n.aValue,n.dValue);return x(n.vUsdBalance).minus(a).round().toFixed()}function Oi(s,{feeShare:n,decimals:t},a){if(x(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let r=x(s).plus(a.vUsdBalance),o=fe(r,a.aValue,a.dValue),A=z(x(a.tokenBalance).minus(o),t),c=x(A).times(n),m=x(A).minus(c).round();return{bridgeFeeInTokenPrecision:c.round().toFixed(),amountIncludingCommissionInTokenPrecision:m.toFixed(),amountExcludingCommissionInTokenPrecision:A.toFixed()}}function Vi(s,{feeShare:n,decimals:t},a){let i=x(n).div(x(1).minus(n)),r=x(s).times(i),o=x(s).plus(r);return{bridgeFeeInTokenPrecision:r.round().toFixed(),amountIncludingCommissionInSystemPrecision:ba(We(o,t),a),amountExcludingCommissionInSystemPrecision:ba(We(s,t),a)}}function ba(s,n){let t=x(n.tokenBalance).minus(s),a=fe(t.toFixed(),n.aValue,n.dValue);return x(a).minus(n.vUsdBalance).round().toFixed()}function Gi(s,{feeShare:n,decimals:t},a){if(x(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let i=x(a.vUsdBalance).minus(s),r=fe(i.toFixed(),a.aValue,a.dValue),o=x(r).minus(a.tokenBalance),A=z(o.toFixed(),t),c=x(n).div(x(1).minus(n)),m=x(A).times(c),u=x(A).plus(m);return{bridgeFeeInTokenPrecision:m.round().toFixed(),amountIncludingCommissionInTokenPrecision:u.round().toFixed(),amountExcludingCommissionInTokenPrecision:A.toFixed()}}import{Big as Fe}from"big.js";function wa(s,n,t,a,i){let r=ge(s,n,t),o=z(r,n.decimals),A=et(r,a,i),c=Fe(s).times(n.feeShare),m=Fe(A).div(Fe(1).minus(a.feeShare)).minus(A);return{sourceLPSwap:{fee:P(c,n.decimals).neg().round(n.decimals,Fe.roundUp).toFixed(),swap:P(Fe(s).minus(o).minus(c),n.decimals).neg().round(n.decimals,Fe.roundUp).toFixed()},destLPSwap:{fee:P(m,a.decimals).neg().round(a.decimals,Fe.roundUp).toFixed(),swap:P(z(r,a.decimals).minus(A).minus(m),a.decimals).neg().round(a.decimals,Fe.roundUp).toFixed()}}}import{Connection as Zi,PublicKey as Li,TransactionMessage as _i}from"@solana/web3.js";var Ht=class{constructor(n,t){this.nodeRpcUrlsConfig=n;this.params=t}async addMemoToTx(n,t){if(t.length>28)throw new R("InvalidArgumentException memo cannot be more than 28 characters");let a=new Zi(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),i=await Ue(n,a),r=_i.decompile(n.message,{addressLookupTableAccounts:i});r.instructions[r.instructions.length-1].keys.push({pubkey:new Li(Buffer.from(t)),isSigner:!1,isWritable:!1}),n.message=r.compileToV0Message(i)}};import{Asset as Ki,BASE_FEE as Qi,Horizon as Pn,Operation as Yi,Operation as Ji,SorobanRpc as lt,TimeoutInfinite as Hi,TransactionBuilder as Sn,TransactionBuilder as Ca}from"stellar-sdk";import{HorizonApi as td}from"stellar-sdk/lib/horizon";import{Address as O,ContractSpec as Xi}from"stellar-sdk";var Y={},ut=class{constructor(n){this.options=n;this.parsers={initialize:()=>{},mint:()=>{},setAdmin:()=>{},allowance:n=>this.spec.funcResToNative("allowance",n),approve:()=>{},balance:n=>this.spec.funcResToNative("balance",n),spendableBalance:n=>this.spec.funcResToNative("spendable_balance",n),transfer:()=>{},transferFrom:()=>{},burn:()=>{},burnFrom:()=>{},decimals:n=>this.spec.funcResToNative("decimals",n),name:n=>this.spec.funcResToNative("name",n),symbol:n=>this.spec.funcResToNative("symbol",n)};this.initialize=async({admin:n,decimal:t,name:a,symbol:i},r={})=>await F.fromSimulation({method:"initialize",args:this.spec.funcArgsToScVals("initialize",{admin:new O(n),decimal:t,name:a,symbol:i}),...r,...this.options,errorTypes:Y,parseResultXdr:this.parsers.initialize});this.mint=async({to:n,amount:t},a={})=>await F.fromSimulation({method:"mint",args:this.spec.funcArgsToScVals("mint",{to:new O(n),amount:t}),...a,...this.options,errorTypes:Y,parseResultXdr:this.parsers.mint});this.setAdmin=async({new_admin:n},t={})=>await F.fromSimulation({method:"set_admin",args:this.spec.funcArgsToScVals("set_admin",{new_admin:new O(n)}),...t,...this.options,errorTypes:Y,parseResultXdr:this.parsers.setAdmin});this.allowance=async({from:n,spender:t},a={})=>await F.fromSimulation({method:"allowance",args:this.spec.funcArgsToScVals("allowance",{from:new O(n),spender:new O(t)}),...a,...this.options,errorTypes:Y,parseResultXdr:this.parsers.allowance});this.approve=async({from:n,spender:t,amount:a,expiration_ledger:i},r={})=>await F.fromSimulation({method:"approve",args:this.spec.funcArgsToScVals("approve",{from:new O(n),spender:new O(t),amount:a,expiration_ledger:i}),...r,...this.options,errorTypes:Y,parseResultXdr:this.parsers.approve});this.balance=async({id:n},t={})=>await F.fromSimulation({method:"balance",args:this.spec.funcArgsToScVals("balance",{id:new O(n)}),...t,...this.options,errorTypes:Y,parseResultXdr:this.parsers.balance});this.spendableBalance=async({id:n},t={})=>await F.fromSimulation({method:"spendable_balance",args:this.spec.funcArgsToScVals("spendable_balance",{id:new O(n)}),...t,...this.options,errorTypes:Y,parseResultXdr:this.parsers.spendableBalance});this.transfer=async({from:n,to:t,amount:a},i={})=>await F.fromSimulation({method:"transfer",args:this.spec.funcArgsToScVals("transfer",{from:new O(n),to:new O(t),amount:a}),...i,...this.options,errorTypes:Y,parseResultXdr:this.parsers.transfer});this.transferFrom=async({spender:n,from:t,to:a,amount:i},r={})=>await F.fromSimulation({method:"transfer_from",args:this.spec.funcArgsToScVals("transfer_from",{spender:new O(n),from:new O(t),to:new O(a),amount:i}),...r,...this.options,errorTypes:Y,parseResultXdr:this.parsers.transferFrom});this.burn=async({from:n,amount:t},a={})=>await F.fromSimulation({method:"burn",args:this.spec.funcArgsToScVals("burn",{from:new O(n),amount:t}),...a,...this.options,errorTypes:Y,parseResultXdr:this.parsers.burn});this.burnFrom=async({spender:n,from:t,amount:a},i={})=>await F.fromSimulation({method:"burn_from",args:this.spec.funcArgsToScVals("burn_from",{spender:new O(n),from:new O(t),amount:a}),...i,...this.options,errorTypes:Y,parseResultXdr:this.parsers.burnFrom});this.decimals=async(n={})=>await F.fromSimulation({method:"decimals",args:this.spec.funcArgsToScVals("decimals",{}),...n,...this.options,errorTypes:Y,parseResultXdr:this.parsers.decimals});this.name=async(n={})=>await F.fromSimulation({method:"name",args:this.spec.funcArgsToScVals("name",{}),...n,...this.options,errorTypes:Y,parseResultXdr:this.parsers.name});this.symbol=async(n={})=>await F.fromSimulation({method:"symbol",args:this.spec.funcArgsToScVals("symbol",{}),...n,...this.options,errorTypes:Y,parseResultXdr:this.parsers.symbol});this.spec=new Xi(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAdkZWNpbWFsAAAAAAQAAAAAAAAABG5hbWUAAAAQAAAAAAAAAAZzeW1ib2wAAAAAABAAAAAA","AAAAAAAAAAAAAAAEbWludAAAAAIAAAAAAAAAAnRvAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAA","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAA=","AAAAAAAAAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAAAAAAAHYXBwcm92ZQAAAAAEAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAAAAAAEWV4cGlyYXRpb25fbGVkZ2VyAAAAAAAABAAAAAA=","AAAAAAAAAAAAAAAHYmFsYW5jZQAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAL","AAAAAAAAAAAAAAARc3BlbmRhYmxlX2JhbGFuY2UAAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAL","AAAAAAAAAAAAAAAIdHJhbnNmZXIAAAADAAAAAAAAAARmcm9tAAAAEwAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAAAAAAANdHJhbnNmZXJfZnJvbQAAAAAAAAQAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAEZnJvbQAAABMAAAAAAAAAAnRvAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAA","AAAAAAAAAAAAAAAEYnVybgAAAAIAAAAAAAAABGZyb20AAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAA","AAAAAAAAAAAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAAAAAAAIZGVjaW1hbHMAAAAAAAAAAQAAAAQ=","AAAAAAAAAAAAAAAEbmFtZQAAAAAAAAABAAAAEA==","AAAAAAAAAAAAAAAGc3ltYm9sAAAAAAAAAAAAAQAAABA=","AAAAAQAAAAAAAAAAAAAAEEFsbG93YW5jZURhdGFLZXkAAAACAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAHc3BlbmRlcgAAAAAT","AAAAAQAAAAAAAAAAAAAADkFsbG93YW5jZVZhbHVlAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAAAAAAEWV4cGlyYXRpb25fbGVkZ2VyAAAAAAAABA==","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAABQAAAAEAAAAAAAAACUFsbG93YW5jZQAAAAAAAAEAAAfQAAAAEEFsbG93YW5jZURhdGFLZXkAAAABAAAAAAAAAAdCYWxhbmNlAAAAAAEAAAATAAAAAQAAAAAAAAAFTm9uY2UAAAAAAAABAAAAEwAAAAEAAAAAAAAABVN0YXRlAAAAAAAAAQAAABMAAAAAAAAAAAAAAAVBZG1pbgAAAA==","AAAAAQAAAAAAAAAAAAAADVRva2VuTWV0YWRhdGEAAAAAAAADAAAAAAAAAAdkZWNpbWFsAAAAAAQAAAAAAAAABG5hbWUAAAAQAAAAAAAAAAZzeW1ib2wAAAAAABA="])}};var zi=100,ji=180,zt=class{constructor(n,t){this.nodeRpcUrlsConfig=n;this.params=t}async buildChangeTrustLineXdrTx(n){let a=await new Pn.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(n.sender),r=(await this.getContract(ut,n.tokenAddress).name()).result,[o,A]=r.split(":"),c=new Ki(o,A),m=Ji.changeTrust({asset:c,limit:n.limit});return new Ca(a,{fee:zi.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(m).setTimeout(ji).build().toXDR()}async getBalanceLine(n,t){let i=(await this.getContract(ut,t).name()).result,[r,o]=i.split(":"),A=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new Pn.Server(A).loadAccount(n)).balances.find(l=>(l.asset_type==="credit_alphanum4"||l.asset_type==="credit_alphanum12")&&l.asset_code==r&&l.asset_issuer==o)}async submitTransactionStellar(n){let t=new Pn.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),a=Ca.fromXDR(n,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await t.submitTransaction(a)}async simulateAndCheckRestoreTxRequiredSoroban(n,t){let a=new lt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),i=await a.getAccount(t),r=Sn.fromXDR(n,this.params.sorobanNetworkPassphrase),o=await a.simulateTransaction(r);if(lt.Api.isSimulationRestore(o))return new Sn(i,{fee:(+Qi+ +o.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(o.restorePreamble.transactionData.build()).addOperation(Yi.restoreFootprint({})).setTimeout(Hi).build().toXDR()}async sendTransactionSoroban(n){let t=new lt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),a=Sn.fromXDR(n,this.params.sorobanNetworkPassphrase);return t.sendTransaction(a)}async confirmTx(n,t=15){let a=new lt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),i=await On(()=>a.getTransaction(n),r=>r.status===lt.Api.GetTransactionStatus.NOT_FOUND,t);return i[i.length-1]}getContract(n,t){let a={contractId:t,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new n(a)}};var jt=class{constructor(n,t){this.nodeRpcUrlsConfig=n;this.srb=new zt(n,t),this.sol=new Ht(n,t)}};var Xe=(t=>(t.WITH_NATIVE_CURRENCY="native",t.WITH_STABLECOIN="stablecoin",t))(Xe||{}),vt=(t=>(t.INT="int",t.FLOAT="float",t))(vt||{});import{Big as rr}from"big.js";import sr from"tronweb";import or from"web3";import wn from"erc-20-abi";import{Big as Ba}from"big.js";var ce=class{async checkAllowance(n){let t=await this.getAllowance(n);return Ba(t).gte(Ba(n.amount))}};var qi="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",$i="0xdac17f958d2ee523a2206206994597c13d831ec7",er=1e5,pt=class extends ce{constructor(t,a){super();this.web3=t;this.api=a;this.chainType="EVM"}getAllowance(t){let a=t.token.tokenAddress,i=t.owner,r=t.spender;return this.getAllowanceByTokenAddress(a,i,r)}getAllowanceByTokenAddress(t,a,i){return this.getContract(wn,t).methods.allowance(a,i).call()}async getTokenBalance(t){return await this.getContract(wn,t.token.tokenAddress).methods.balanceOf(t.account).call()}async getNativeTokenBalance(t){return await this.web3.eth.getBalance(t.account)}async approve(t){if(this.isUsdt(t.tokenAddress)&&await this.getAllowanceByTokenAddress(t.tokenAddress,t.owner,t.spender)!=="0"){let r=await this.buildRawTransactionApprove({...t,amount:"0"});await this.sendRawTransaction(r,t.chainSymbol)}let a=await this.buildRawTransactionApprove(t);return await this.sendRawTransaction(a,t.chainSymbol)}isUsdt(t){return t.toLowerCase()===$i}async buildRawTransactionApprove(t){let{tokenAddress:a,spender:i,owner:r,amount:o}=t,c=await this.getContract(wn,a).methods.approve(i,o==null?qi:Gt(o));return{from:r,to:a,value:"0",data:c.encodeABI()}}async sendRawTransaction(t,a){let i=t,r={maxPriorityFeePerGas:null,maxFeePerGas:null};a=="POL"?i.gas=er:i.gas=await this.web3.eth.estimateGas(t);let{transactionHash:o}=await this.web3.eth.sendTransaction({...i,...r});return{txId:o}}getContract(t,a){return new this.web3.eth.Contract(t,a)}};import{AnchorProvider as tr}from"@project-serum/anchor";import{Connection as nr,PublicKey as qt}from"@solana/web3.js";var $t=class extends ce{constructor(t,a){super();this.solanaRpcUrl=t;this.api=a;this.chainType="SOLANA"}approve(t){throw new Q}buildRawTransactionApprove(t){throw new Q}buildAnchorProvider(t){let a=new nr(this.solanaRpcUrl,"confirmed"),i=new qt(t);return new tr(a,{publicKey:i},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(t){throw new Q}async getTokenBalance(t){let{account:a,token:i}=t;try{let r=await re(new qt(a),new qt(i.tokenAddress));return(await Ke(r,this.buildAnchorProvider(a))).amount.toString()}catch(r){if(r instanceof Error)return r.message.startsWith("Account does not exist"),"0";throw r}}async getNativeTokenBalance(t){return(await this.buildAnchorProvider(t.account).connection.getBalance(new qt(t.account))).toString()}};import{Horizon as ka,NotFoundError as ar}from"stellar-sdk";import{HorizonApi as e}from"stellar-sdk/lib/horizon";var en=class extends ce{constructor(t,a,i){super();this.nodeRpcUrlsConfig=t;this.params=a;this.api=i;this.chainType="SRB"}getAllowance(){throw new Q}async getTokenBalance(t){if(!t.token.originTokenAddress)throw new R("OriginTokenAddress missing");let[a,i]=t.token.originTokenAddress.split(":"),r=new ka.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),o;try{o=await r.loadAccount(t.account)}catch(m){if(m instanceof ar)return"0";throw m}let c=o.balances.find(m=>(m.asset_type==="credit_alphanum4"||m.asset_type==="credit_alphanum12")&&m.asset_code==a&&m.asset_issuer==i);return c?.balance?B(c.balance,U[X[t.token.chainSymbol].chainType]).toFixed():"0"}async getNativeTokenBalance(t){let o=(await new ka.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(t.account)).balances.find(A=>A.asset_type==="native");return o?.balance?B(o.balance,U[X[t.chainSymbol].chainType]).toFixed():"0"}approve(){throw new Q}buildRawTransactionApprove(){throw new Q}};var ir="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",dt=class s extends ce{constructor(t,a){super();this.tronWeb=t;this.api=a;this.chainType="TRX"}static{this.contracts=new Map}async getAllowance(t){let{token:{tokenAddress:a},owner:i}=t;return(await(await this.getContract(a)).methods.allowance(i,t.spender).call()).toString()}async getTokenBalance(t){return(await(await this.getContract(t.token.tokenAddress)).balanceOf(t.account).call()).toString()}async getNativeTokenBalance(t){return(await this.tronWeb.trx.getBalance(t.account)).toString()}async approve(t){let a=await this.buildRawTransactionApprove(t);return await Zt(this.tronWeb,a)}async buildRawTransactionApprove(t){let{tokenAddress:a,spender:i,owner:r,amount:o}=t,A=o==null?ir:Gt(o),c=[{type:"address",value:i},{type:"uint256",value:A}];return this.buildRawTransaction(a,"approve(address,uint256)",c,"0",r)}async getContract(t){if(s.contracts.has(t))return s.contracts.get(t);let a=await this.tronWeb.contract().at(t);return s.contracts.set(t,a),a}async buildRawTransaction(t,a,i,r,o){let A=await this.tronWeb.transactionBuilder.triggerSmartContract(t,a,{callValue:r},i,o);if(!A?.result?.result)throw new R("Unknown error: "+JSON.stringify(A,null,2));return A.transaction}};var tn=class{constructor(n,t,a){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a}async getAllowance(n,t){let a=await this.getChainTokenService(n.token.chainSymbol,n.owner,t).getAllowance(n);return P(a,n.token.decimals).toFixed()}async checkAllowance(n,t){return M(n.amount),v("amount",n.amount,n.token.decimals),this.getChainTokenService(n.token.chainSymbol,n.owner,t).checkAllowance(this.prepareCheckAllowanceParams(n))}async approve(n,t){return t.amount&&(M(t.amount),v("amount",t.amount,t.token.decimals)),this.getChainTokenService(t.token.chainSymbol,t.owner,n).approve(this.prepareApproveParams(t))}async buildRawTransactionApprove(n,t){return n.amount&&(M(n.amount),v("amount",n.amount,n.token.decimals)),this.getChainTokenService(n.token.chainSymbol,n.owner,t).buildRawTransactionApprove(this.prepareApproveParams(n))}async getTokenBalance(n,t){let a=await this.getChainTokenService(n.token.chainSymbol,n.account,t).getTokenBalance(n);return n.token.decimals?P(a,n.token.decimals).toFixed():a}async getNativeTokenBalance(n,t){let a=await this.getChainTokenService(n.chainSymbol,n.account,t).getNativeTokenBalance(n);return{int:a,float:P(a,U[X[n.chainSymbol].chainType]).toFixed()}}getChainTokenService(n,t,a){switch(X[n].chainType){case"EVM":{if(a)return new pt(a,this.api);{let i=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new pt(new or(i),this.api)}}case"TRX":{if(a)return new dt(a,this.api);{let i=this.nodeRpcUrlsConfig.getNodeRpcUrl(n),r=new sr({fullHost:i});return r.setAddress(t),new dt(r,this.api)}}case"SOLANA":{let i=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new $t(i,this.api)}case"SRB":return new en(this.nodeRpcUrlsConfig,this.params,this.api)}}prepareCheckAllowanceParams(n){return{...n,amount:B(n.amount,n.token.decimals)}}prepareApproveParams(n){return{tokenAddress:n.token.tokenAddress,owner:n.owner,spender:n.spender,chainSymbol:n.token.chainSymbol,amount:n.amount==null?void 0:rr(n.amount).toFixed()}}};var gt=class{constructor(n){this.nodeRpcUrls=n}getNodeRpcUrl(n){let t=this.nodeRpcUrls[n];if(t!==void 0)return t;throw new St(n)}},nn=class{constructor(n,t=yt){let a=new Ct(t),i=new kt(a),r=new ht(i);this.api=new Rt(r),this.tokenService=new tn(this.api,n,t),this.bridge=new Lt(this.api,n,t,this.tokenService),this.pool=new Jt(this.api,n,t,this.tokenService),this.params=t}async chainDetailsMap(){return this.api.getChainDetailsMap()}async tokens(){return this.api.tokens()}async tokensByChain(n){return(await this.api.getChainDetailsMap())[n].tokens}async getTransferStatus(n,t){return this.api.getTransferStatus(n,t)}async getGasBalance(n,t){return this.api.getGasBalance(n,t)}async checkAddress(n,t,a){return this.api.checkAddress(n,t,a)}async getPendingStatusInfo(n,t,a,i){M(n);let r;t=="float"?(v("amount",n,a.decimals),r=B(n,a.decimals).toFixed()):r=n;let o=ge(r,a,await N(this.api,a)),A=await N(this.api,i),c=this.getAmountFromVUsdFormatted(o,i,A),m,u=await this.api.getPendingInfo();for(let l in u[i.chainSymbol])l.toLowerCase()===i.tokenAddress.toLowerCase()&&(m=u[i.chainSymbol][l]);if(m){let l=kn(m.totalSentAmount,A),f=this.getAmountFromVUsdFormatted(o,i,l),y;return ye(f.int).gt(c.int)?y={min:c,max:f}:y={min:f,max:c},{pendingTxs:m.pendingTxs,pendingAmount:{int:ke(m.totalSentAmount,3,i.decimals).toFixed(0),float:P(m.totalSentAmount,3).toFixed()},estimatedAmount:y}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:c,max:c}}}async getTokenBalance(n,t){return this.tokenService.getTokenBalance(n,t)}async getNativeTokenBalance(n,t){return this.tokenService.getNativeTokenBalance(n,t)}async calculateFeePercentOnSourceChain(n,t){M(n),v("amountFloat",n,t.decimals);let a=B(n,t.decimals);if(a.eq(0))return 0;let i=ge(a,t,await N(this.api,t)),r=z(i,t.decimals);return rn(a,r)}async calculateFeePercentOnDestinationChain(n,t,a){M(n),v("amountFloat",n,t.decimals);let i=B(n,t.decimals);if(i.eq(0))return 0;let r=ge(i,t,await N(this.api,t)),o=et(r,a,await N(this.api,a)),A=z(r,a.decimals);return rn(A,o)}async getAmountToBeReceivedAndGasFeeOptions(n,t,a,i){return M(n),v("amountToSendFloat",n,t.decimals),{amountToSendFloat:ye(n).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(n,t,a,i),gasFeeOptions:await this.getGasFeeOptions(t,a,i)}}async getAmountToSendAndGasFeeOptions(n,t,a,i){return M(n),v("amountToBeReceivedFloat",n,a.decimals),{amountToSendFloat:await this.getAmountToSend(n,t,a,i),amountToBeReceivedFloat:ye(n).toFixed(),gasFeeOptions:await this.getGasFeeOptions(t,a,i)}}async getAmountToBeReceived(n,t,a,i){let r=await N(this.api,t),o=await N(this.api,a);return this.getAmountToBeReceivedFromPools(n,t,a,r,o,i)}async getAmountToBeReceivedFromChain(n,t,a,i,r,o){let A=await this.pool.getPoolInfoFromChain(t,r),c=await this.pool.getPoolInfoFromChain(a,o);return this.getAmountToBeReceivedFromPools(n,t,a,A,c,i)}getAmountToBeReceivedFromPools(n,t,a,i,r,o){M(n),v("amountToSendFloat",n,t.decimals);let A=B(n,t.decimals);if(o&&o==3){if(!t.cctpAddress||!a.cctpAddress||!t.cctpFeeShare)throw new ie("Such route does not support CCTP protocol");let m=A.mul(ye(1).minus(t.cctpFeeShare)).round(0,ye.roundUp),u=ke(m,t.decimals,a.decimals).round(0);return P(u,a.decimals).toFixed()}let c=ge(A,t,i);return this.getAmountFromVUsdFormatted(c,a,r).float}async getAmountToSend(n,t,a,i){let r=await N(this.api,t),o=await N(this.api,a);return this.getAmountToSendFromPools(n,t,a,r,o,i)}async getAmountToSendFromChain(n,t,a,i,r,o){let A=await this.pool.getPoolInfoFromChain(t,r),c=await this.pool.getPoolInfoFromChain(a,o);return this.getAmountToSendFromPools(n,t,a,A,c,i)}getAmountToSendFromPools(n,t,a,i,r,o){M(n),v("amountToBeReceivedFloat",n,a.decimals);let A=B(n,a.decimals);if(o&&o==3){if(!t.cctpAddress||!a.cctpAddress||!t.cctpFeeShare)throw new ie("Such route does not support CCTP protocol");let u=A.div(ye(1).minus(t.cctpFeeShare)).round(0,ye.roundDown),l=ke(u,a.decimals,t.decimals).round(0);return P(l,t.decimals).toFixed()}let c=Mn(A,a,r),m=Rn(c,t,i);if(ye(m).lte(0))throw new Te;return P(m,t.decimals).toFixed()}async getGasFeeOptions(n,t,a){return pn(n.allbridgeChainId,n.chainType,t.allbridgeChainId,n.decimals,a,this.api)}getAverageTransferTime(n,t,a){return n.transferTime?.[t.chainSymbol]?.[a]??null}async getPoolInfoByToken(n){return await this.api.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}async refreshPoolInfo(n){if(n){let a=(n instanceof Array?n:[n]).map(i=>({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress}));return this.api.refreshPoolInfo(a)}return this.api.refreshPoolInfo()}aprInPercents(n){return In(n)}async getExtraGasMaxLimits(n,t){return await dn(n,t,this.api)}async getVUsdFromAmount(n,t,a){M(n);let i;t=="float"?(v("amount",n,a.decimals),i=B(n,a.decimals).toFixed()):i=n;let r=ge(i,a,await N(this.api,a));return{int:r,float:P(r,3).toFixed()}}async getAmountFromVUsd(n,t){return this.getAmountFromVUsdFormatted(n,t,await N(this.api,t))}getAmountFromVUsdFormatted(n,t,a){M(n);let i=et(n,t,a);if(ye(i).lt(0))throw new Te;return{int:i,float:P(i,t.decimals).toFixed()}}async swapAndBridgeFeeCalculation(n,t,a){return Pa(n,{decimals:t.decimals,feeShare:t.feeShare,poolInfo:await N(this.api,t)},{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await N(this.api,a)})}async swapAndBridgeFeeCalculationReverse(n,t,a){let i=Sa(n,{decimals:t.decimals,feeShare:t.feeShare,poolInfo:await N(this.api,t)},{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await N(this.api,a)}),r=i.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(ye(r).lt(0))throw new Te;return i}async getSendAmountDetails(n,t,a,i){M(n);let r;return t=="float"?(v("amount",n,a.decimals),r=B(n,a.decimals).toFixed()):r=n,wa(r,a,await N(this.api,a),i,await N(this.api,i))}};function Ar(s){return"solanaRpcUrl"in s}var Ra=class{constructor(n,t=yt){let a;Ar(n)?a=new gt({SOL:n.solanaRpcUrl,TRX:n.tronRpcUrl}):a=new gt(n),this.service=new nn(a,t),this.bridge=this.service.bridge,this.pool=this.service.pool,this.utils=new jt(a,t),this.params=t}async chainDetailsMap(){return this.service.chainDetailsMap()}async tokens(){return this.service.tokens()}async tokensByChain(n){return this.service.tokensByChain(n)}async getTransferStatus(n,t){return this.service.getTransferStatus(n,t)}async getGasBalance(n,t){return this.service.getGasBalance(n,t)}async checkAddress(n,t,a){return this.service.checkAddress(n,t,a)}async getPendingStatusInfo(n,t,a,i){return this.service.getPendingStatusInfo(n,t,a,i)}async getTokenBalance(n,t){return this.service.getTokenBalance(n,t)}async getNativeTokenBalance(n,t){return this.service.getNativeTokenBalance(n,t)}async calculateFeePercentOnSourceChain(n,t){return this.service.calculateFeePercentOnSourceChain(n,t)}async calculateFeePercentOnDestinationChain(n,t,a){return this.service.calculateFeePercentOnDestinationChain(n,t,a)}async getAmountToBeReceivedAndGasFeeOptions(n,t,a,i){return this.service.getAmountToBeReceivedAndGasFeeOptions(n,t,a,i)}async getAmountToSendAndGasFeeOptions(n,t,a,i){return this.service.getAmountToSendAndGasFeeOptions(n,t,a,i)}async getAmountToBeReceived(n,t,a,i){return this.service.getAmountToBeReceived(n,t,a,i)}async getAmountToBeReceivedFromChain(n,t,a,i,r,o){return this.service.getAmountToBeReceivedFromChain(n,t,a,i,r,o)}getAmountToBeReceivedFromPools(n,t,a,i,r,o){return this.service.getAmountToBeReceivedFromPools(n,t,a,i,r,o)}async getAmountToSend(n,t,a,i){return this.service.getAmountToSend(n,t,a,i)}async getAmountToSendFromChain(n,t,a,i,r,o){return this.service.getAmountToSendFromChain(n,t,a,i,r,o)}getAmountToSendFromPools(n,t,a,i,r,o){return this.service.getAmountToSendFromPools(n,t,a,i,r,o)}async getGasFeeOptions(n,t,a){return this.service.getGasFeeOptions(n,t,a)}getAverageTransferTime(n,t,a){return this.service.getAverageTransferTime(n,t,a)}async getPoolInfoByToken(n){return this.service.getPoolInfoByToken(n)}async refreshPoolInfo(n){return this.service.refreshPoolInfo(n)}aprInPercents(n){return this.service.aprInPercents(n)}async getExtraGasMaxLimits(n,t){return this.service.getExtraGasMaxLimits(n,t)}async getVUsdFromAmount(n,t,a){return this.service.getVUsdFromAmount(n,t,a)}async getAmountFromVUsd(n,t){return this.service.getAmountFromVUsd(n,t)}async swapAndBridgeFeeCalculation(n,t,a){return this.service.swapAndBridgeFeeCalculation(n,t,a)}async swapAndBridgeFeeCalculationReverse(n,t,a){return this.service.swapAndBridgeFeeCalculationReverse(n,t,a)}async getSendAmountDetails(n,t,a,i){return this.service.getSendAmountDetails(n,t,a,i)}};export{Dn as AddressStatus,Ra as AllbridgeCoreSdk,vt as AmountFormat,Oe as AmountNotEnoughError,Pt as ArgumentInvalidDecimalsError,ie as CCTPDoesNotSupportedError,de as ChainSymbol,E as ChainType,va as ErrorCode,bt as ExtraGasMaxLimitExceededError,Xe as FeePaymentMethod,Te as InsufficientPoolLiquidityError,Tt as InvalidAmountError,ze as InvalidGasFeePaymentOptionError,Bn as InvalidMessengerOptionError,Ve as InvalidTxError,K as JupiterError,be as Messenger,Q as MethodNotSupportedError,St as NodeRpcUrlNotInitializedError,R as SdkError,D as SdkRootError,gn as SolanaAutoTxFee,qe as TimeoutError,wt as TxTooLargeError,je as VerifyTxError,yt as mainnet,dr as nodeRpcUrlsDefault,pr as nodeUrlsDefault,cr as testnet,ur as testnetNodeRpcUrlsDefault,mr as testnetNodeUrlsDefault};
6
6
  //# sourceMappingURL=index.js.map