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