@allbridge/bridge-core-sdk 3.15.0-alpha.2 → 3.15.0-alpha.4

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 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}
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.4";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
2
  &outputMint=${ii.toString()}
3
3
  &amount=${a}
4
4
  &slippageBps=100
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};
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}`,5,2e3)}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}`,5,2e3)}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=await a.methods.a().call(),r=await a.methods.d().call(),o=await a.methods.tokenBalance().call(),A=await a.methods.vUsdBalance().call(),c=await a.methods.totalSupply().call(),m=await 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 ed}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