@allbridge/bridge-core-sdk 3.15.0 → 3.15.1-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/index.js +1 -1
- package/dist/browser/index.js.map +2 -2
- package/dist/cjs/index.js +3 -3
- package/dist/cjs/index.js.map +4 -4
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +2 -2
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/package.json +2 -1
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";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
|
-
&outputMint=${
|
|
1
|
+
"use strict";var Ja=Object.create;var Ut=Object.defineProperty;var Ha=Object.getOwnPropertyDescriptor;var za=Object.getOwnPropertyNames;var ja=Object.getPrototypeOf,qa=Object.prototype.hasOwnProperty;var $a=(i,t)=>{for(var e in t)Ut(i,e,{get:t[e],enumerable:!0})},Nn=(i,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of za(t))!qa.call(i,a)&&a!==e&&Ut(i,a,{get:()=>t[a],enumerable:!(n=Ha(t,a))||n.enumerable});return i};var O=(i,t,e)=>(e=i!=null?Ja(ja(i)):{},Nn(t||!i||!i.__esModule?Ut(e,"default",{value:i,enumerable:!0}):e,i)),ei=i=>Nn(Ut({},"__esModule",{value:!0}),i);var Oi={};$a(Oi,{AddressStatus:()=>yn,AllbridgeCoreSdk:()=>Un,AmountFormat:()=>bt,AmountNotEnoughError:()=>Ve,ArgumentInvalidDecimalsError:()=>pt,CCTPDoesNotSupportedError:()=>re,ChainSymbol:()=>me,ChainType:()=>N,ErrorCode:()=>Vn,ExtraGasMaxLimitExceededError:()=>lt,FeePaymentMethod:()=>Xe,InsufficientPoolLiquidityError:()=>we,InvalidAmountError:()=>ut,InvalidGasFeePaymentOptionError:()=>je,InvalidMessengerOptionError:()=>gn,InvalidTxError:()=>Ge,JupiterError:()=>Y,Messenger:()=>ke,MethodNotSupportedError:()=>J,NodeRpcUrlNotInitializedError:()=>dt,SdkError:()=>k,SdkRootError:()=>F,SolanaAutoTxFee:()=>Yt,TimeoutError:()=>$e,TxTooLargeError:()=>gt,VerifyTxError:()=>qe,mainnet:()=>mt,nodeRpcUrlsDefault:()=>ri,nodeUrlsDefault:()=>ii,testnet:()=>ti,testnetNodeRpcUrlsDefault:()=>ai,testnetNodeUrlsDefault:()=>ni});module.exports=ei(Oi);var ti={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}}},ni={solanaRpcUrl:"https://api.devnet.solana.com",tronRpcUrl:"https://nile.trongrid.io"},ai={SOL:"https://api.devnet.solana.com",TRX:"https://nile.trongrid.io",SRB:"https://soroban-testnet.stellar.org",STLR:"https://horizon-testnet.stellar.org"};var mt={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}}},ii={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},ri={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 zn=O(require("axios"));var On="3.15.1-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||{}),N=(a=>(a.EVM="EVM",a.SOLANA="SOLANA",a.TRX="TRX",a.SRB="SRB",a))(N||{}),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=O(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)}},ut=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)}},je=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)}},qe=class extends F{constructor(t){super("VerifyTxError",t)}},Ge=class extends F{constructor(t){super("InvalidTxError",t)}},lt=class extends F{constructor(t){super("ExtraGasMaxLimitExceededError",t)}},pt=class extends F{constructor(t,e,n){super("ArgumentInvalidDecimalsError",`Argument '${t}' decimals '${e}' cannot be greater than '${n}'`)}},$e=class extends F{constructor(t){super("TimeoutError",t)}},dt=class extends F{constructor(t){super("NodeRpcUrlNotInitializedError",`For chain '${t}' Node RPC URL not initialized`)}},re=class extends F{constructor(t){super("CCTPDoesNotSupportedError",t)}},gt=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")}},Vn=(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))(Vn||{});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(ft(n))}function ft(i){return(0,l.Big)(10).pow(i)}function B(i,t){return(0,l.Big)(i).times(ft(t))}function b(i,t){let e=(0,l.Big)(i);return e.eq(0)?(0,l.Big)(0):(0,l.Big)(e).div(ft(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 yt(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 Gn(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 Zn(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 _n(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 Ln(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 Xn(i){return i*100>0?`${Number((0,l.Big)(i).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function Kn(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 Qn(i){return Object.entries(i).reduce((t,e)=>{let n=e[0],a=e[1],r=mi(n,a);return r&&(t[n]=r),t},{})}function Yn(i){let t={};for(let[e,n]of Object.entries(i)){let a=e;for(let r of n.tokens){let s=et({chainSymbol:a,poolAddress:r.poolAddress}),o=te(r.poolInfo);t[s]={...r.poolInfo,imbalance:o}}}return t}function si(i,t){let{name:e,...n}=i,{poolInfo:a,...r}=t;return{...r,...n,chainName:e}}function oi(i){switch(i){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;default:return null}}function Ai(i){return Object.entries(i).reduce((t,[e,n])=>(t[e]=ci(n),t),{})}function ci(i){return Object.entries(i).reduce((t,[e,n])=>{let a=oi(e);return a&&(t[a]=n),t},{})}function mi(i,t){let e=z[i];if(!e)return null;let n={...e,allbridgeChainId:t.chainId,bridgeAddress:t.bridgeAddress,transferTime:Ai(t.transferTime),txCostAmount:t.txCostAmount,confirmations:t.confirmations};return{...n,tokens:t.tokens.map(a=>si(n,a))}}function et(i){return i.chainSymbol+"_"+i.poolAddress}function Jn(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 Hn(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[et({chainSymbol:a,poolAddress:r})]=s}return t}var Vt=class{constructor(t){this.api=zn.default.create({baseURL:t.coreApiUrl,headers:{Accept:"application/json",...t.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+On},params:t.coreApiQueryParams})}async getTokenInfo(){let{data:t}=await this.api.get("/token-info");return{chainDetailsMap:Qn(t),poolInfoMap:Yn(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 Hn(n)}};var ui=(i,t)=>i!==null&&Object.prototype.hasOwnProperty.call(i,t),jn="__cache__",hn=function(i){return typeof i!="string"?jn+JSON.stringify(i):jn+i},Tn=class{constructor(t={defaultTtl:60*1e3}){this.cache={},this.defaultTtl=t.defaultTtl||60*1e3}put(t,e,n){let a=(n?n.ttl:void 0)||this.defaultTtl,r=(n?n.callback:void 0)||function(){},s=hn(t),o=this.cache[s];o&&clearTimeout(o.handle);let A=setTimeout(()=>this.remove(t),a);this.cache[s]={handle:A,data:e,callback:r}}get(t){let e=this.cache[hn(t)];return e&&e.data}remove(t){let e=hn(t),n=this.cache[e];n&&(clearTimeout(n.handle),delete this.cache[e],n.callback(t,n.data))}clear(){for(let t in this.cache)ui(this.cache,t)&&clearTimeout(this.cache[t].handle);this.cache={}}size(){return Object.keys(this.cache).length}},_e=Tn;var bn=20*1e3,li=55*1e3,Gt=class{constructor(t){this.apiClient=t;this.tokenInfoCache=new _e({defaultTtl:li}),this.receivedTransactionCache=new _e({defaultTtl:bn}),this.pendingInfoCache=new _e({defaultTtl:bn}),this.gasBalanceCache=new _e({defaultTtl:bn})}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 pi=55*1e3,Zt=class{constructor(t){this.client=t;this.poolInfoCache=new Pn}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[et(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(Jn(n.chainDetailsMap))}this.poolInfoCache.putAll(e)}cachePut(t,e){this.poolInfoCache.put(et(t),e)}},Pn=class{constructor(){this.cache=new _e({defaultTtl:pi})}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=et(t);return this.cache.get(e)}};var Ia=O(require("tronweb")),xa=O(require("web3"));var Sn=require("big.js");async function G(i,t){return await i.getPoolInfoByKey({chainSymbol:t.chainSymbol,poolAddress:t.poolAddress})}function v(i){if((0,Sn.Big)(i).lte(0))throw new ut("Amount must be greater than zero")}function I(i,t,e){let n=(0,Sn.Big)(t).toFixed();if(n.split(".").length==2&&n.split(".")[1].length>e)throw new pt(i,n.split(".")[1].length,e)}async function _t(i,t,e){return await Promise.race([i,new Promise((n,a)=>{setTimeout(()=>a(new $e(t)),e)})])}async function wn(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 _t(i(),t,n)}catch{if(++a>=e)throw new $e(t)}}async function qn(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=O(require("@project-serum/anchor")),xn=require("@solana/web3.js"),ga=require("big.js");var $n=[{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 ea=[{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=O(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 ta(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 tt(i){let t=await Ue(i),[e]=await K.PublicKey.findProgramAddress([t.toBuffer()],i);return e}async function na(i,t){let[e]=await K.PublicKey.findProgramAddress([i.toBuffer()],t);return e}async function nt(i,t){let[e]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("token"),i.toBytes()],t);return e}async function aa(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 Cn(i,t){let[e]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([i])],t);return e}async function Bn(i,t){let[e]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([i])],t);return e}async function ia(i,t){let[e]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("sent_message"),i],t);return e}async function kn(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 ra(i,t){let[e]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("cctp_bridge"),i.toBytes()],t);return e}async function sa(i,t){let[e]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("token"),i.toBytes()],t);return e}function oa(i,t){let[e]=K.PublicKey.findProgramAddressSync([X.utils.bytes.utf8.encode("lock"),t.toBuffer()],i);return e}function Aa(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 ca=require("@project-serum/anchor"),Lt=require("@solana/web3.js");function Ne(i,t){let e=new Lt.Connection(i,"confirmed"),n=new Lt.PublicKey(t);return new ca.AnchorProvider(e,{publicKey:n},{preflightCommitment:"confirmed",commitment:"confirmed"})}var le=class{};var ma=require("@solana/web3.js"),Re=require("big.js"),Rn=O(require("randombytes")),ua=require("stellar-sdk"),la=O(require("tronweb"));function Ie(i,t,e){let n;switch(t){case"EVM":{n=fi(i);break}case"SOLANA":{n=new ma.PublicKey(i).toBuffer();break}case"TRX":{n=yi(i);break}case"SRB":{n=new ua.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 pa(i){return Buffer.from(i.replace(/^0x/i,""),"hex")}function fi(i){let e=pa(i);return Buffer.concat([Buffer.alloc(32-e.length,0),e],32)}function yi(i){let t=Tt(i),e=pa(t);return hi(e,32)}function Tt(i){return Buffer.from(la.utils.crypto.decodeBase58Address(i)).toString("hex").replace(/^41/,"0x")}function hi(i,t){if(i.length>=t)return i;let e=Buffer.alloc(t,0);return i.copy(e,t-i.length),e}function at(){return(0,Rn.default)(32)}function Mn(){let i=(0,Rn.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 vn(n.fromChainId,t.sourceToken.chainType,n.toChainId,r.decimals,n.messenger,e))[n.gasFeePaymentMethod];if(!u)throw new je;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 bi(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"&&Ti(n.amount,r.decimals,n.fee,n.extraGas),n}function Ti(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 vn(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 bi(i,t,e,n,a){let s=(await In(e,n,a)).extraGasMax[t];if(!s)throw new je(`Impossible to pay extra gas by '${t}' payment method`);let o=s.int;if((0,Re.Big)(i).gt(o))throw new lt(`Extra gas ${i} in int format, exceeded limit ${o} for '${t}' payment method`)}async function In(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 da(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"+at().toString("hex"),d,p,P=g;if(y&&(P=(0,ga.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(ea,s),u,g;if(e.destinationToken.chainType==="SOLANA"){let f,y=new xn.PublicKey(e.toAccountAddress),h=new xn.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($n,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),da(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 fa={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 ya=require("@project-serum/anchor"),ha=O(require("big.js")),Ct=O(require("web3"));async function it(i,t){return await ya.Spl.token(t).account.token.fetch(i)}async function Ta(i,t,e){let n=await t.account.pool.fetch(e),a=n.decimals,r=(0,ha.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 ba(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"),Pa=require("big.js");var Dn=require("@solana/web3.js");async function Ke(i,t){return await Promise.all(i.message.addressTableLookups.map(async e=>new Dn.AddressLookupTableAccount({key:e.accountKey,state:Dn.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 rt(i,t,e){let n=new ne.Connection(e,"confirmed"),a=(await n.simulateTransaction(i)).value.unitsConsumed;await wa(i.instructions,a,t,n)}async function Sa(i,t,e){let n=new ne.Connection(e,"confirmed"),a=await Ke(i,n),r=ne.TransactionMessage.decompile(i.message,{addressLookupTableAccounts:a});if(i.serialize().length>1232)throw new gt;await wa(r.instructions,769230,t,n),i.message=r.compileToV0Message(a)}async function wa(i,t,e,n){if(t>0){let a=Pi(t,i);if(e?.solana){let r=e.solana;if(r===Yt)await Fn(i,n);else if("pricePerUnitInMicroLamports"in r)await Fn(i,n,r.pricePerUnitInMicroLamports);else{let s=(0,Pa.Big)(r.extraFeeInLamports).div(a).mul(ft(6)).toFixed(0);await Fn(i,n,s)}}}}function Pi(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 Fn(i,t,e){let n=i.findIndex(s=>s.programId.equals(ne.ComputeBudgetProgram.programId)&&ne.ComputeBudgetInstruction.decodeInstructionType(s)==="SetComputeUnitPrice"),a=BigInt(e||await Si(t)),r=ne.ComputeBudgetProgram.setComputeUnitPrice({microLamports:a});return n>=0?i[n]=r:i.push(r),a.toString()}async function Si(i){let t=await i.getRecentPrioritizationFees(),e=0;for(let n of t)e+=n.prioritizationFee;return(e/t.length).toFixed(0)}var Ca=require("@solana/spl-token"),Qe=require("@solana/web3.js"),st=O(require("axios"));var Jt=class{constructor(t){this.connection=new Qe.Connection(t)}async getJupiterSwapTx(t,e,n){let a;try{a=await st.default.get(`https://quote-api.jup.ag/v6/quote?inputMint=${e}
|
|
2
|
+
&outputMint=${Ca.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}`,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});
|
|
5
|
+
&onlyDirectRoutes=true`)}catch(A){throw A instanceof st.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 st.default.post("https://quote-api.jup.ag/v6/swap",JSON.stringify({quoteResponse:a.data,userPublicKey:t,wrapAndUnwrapSol:!0}))}catch(A){throw A instanceof st.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:Qe.VersionedTransaction.deserialize(o)}}async amendJupiterWithSdkTx(t,e){try{let n=await Ke(t,this.connection),a=await Ke(e,this.connection),r=Qe.TransactionMessage.decompile(t.message,{addressLookupTableAccounts:n}),s=Qe.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 Wn=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),_=Ne(this.solanaRpcUrl,T.toString()),M=new x.Program(wt,y,_),S=await tt(M.programId),q=await Ue(M.programId),U=new C.PublicKey(h),Te=await nt(U,M.programId),be=new C.PublicKey(n),ve=await ue(T,U),oe=new C.PublicKey(P),H=new C.PublicKey(d),ie=await nt(H,M.programId),Ae=new C.PublicKey(p),$=await ue(oe,H),Pe=[x.web3.ComputeBudgetProgram.setComputeUnitLimit({units:Wn})];try{await it($,_)}catch{let Ya=await x.Spl.associatedToken(_).methods.create().accounts({mint:H,owner:oe,associatedAccount:$}).instruction();Pe.push(Ya)}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:U,sendPool:be,sendUserToken:ve,receiveBridgeToken:ie,receiveMint:H,receivePool:Ae,receiveUserToken:$}).preInstructions(Pe).transaction(),ce=_.connection;return Se.recentBlockhash=(await ce.getLatestBlockhash()).blockhash,Se.feePayer=T,await rt(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 Sa(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,_=Ne(this.solanaRpcUrl,y),M=new x.Program(wt,P,_),S=Array.from(at()),q=new C.PublicKey(u),U=await Ta(n,M,q),Te=await ta(S,M.programId),be=await tt(M.programId),ve=await ue(new C.PublicKey(y),new C.PublicKey(f)),oe=await nt(new C.PublicKey(f),M.programId),H=await Cn(h,M.programId),ie=await aa(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=ba({amount:U,recipient:Buffer.from(p),nonce:Buffer.from(S),receiveToken:Buffer.from(d),destinationChainId:h,sourceChainId:T,chainBridge:(await tt(M.programId)).toBuffer()}),w={};return w.bridge=M,w.amount=new x.BN(n),w.vusdAmount=new x.BN(U),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:_,thisGasPrice:M,message:S,extraGasInstruction:q}=e,U=T.allbridgeMessengerProgramId,Te=await Bn(d,U),be=await Ue(U),ve=await ia(S,U),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:_,thisGasPrice:M,bridgeAuthority:m,userToken:u,bridgeToken:g,chainBridge:f,messenger:U,messengerGasUsage:Te,messengerConfig:be,sentMessageAccount:ve,otherBridgeToken:y}).preInstructions([x.web3.ComputeBudgetProgram.setComputeUnitLimit({units:Wn})]).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:_,thisGasPrice:M,message:S,extraGasInstruction:q}=e,U=this.params.wormholeMessengerProgramId,[Te]=C.PublicKey.findProgramAddressSync([Buffer.from("Bridge")],new C.PublicKey(U)),[be]=C.PublicKey.findProgramAddressSync([Buffer.from("fee_collector")],new C.PublicKey(U)),[ve]=C.PublicKey.findProgramAddressSync([Buffer.from("Sequence"),m.toBuffer()],new C.PublicKey(U)),oe=await Bn(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:_,thisGasPrice:M,bridgeAuthority:m,userToken:u,bridgeToken:g,chainBridge:f,otherBridgeToken:y,messengerGasUsage:oe,wormholeProgram:U,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:Wn}),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(fa,u,d),P=new C.PublicKey(s),T=await ra(P,p.programId),_=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(_,P),S.bridgeAuthority=await na(T,p.programId),S.bridgeTokenAccount=await sa(P,p.programId),S.chainBridgeAccount=await Cn(o,p.programId),S.userAccount=_,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,_=this.params.cctpParams.cctpDomains[e],M=this.params.cctpParams.cctpTransmitterProgramId,S=this.params.cctpParams.cctpTokenMessengerMinter;if(_==null||!M||!S)throw new k("CCTP is not configured");let q=new C.PublicKey(M),U=new C.PublicKey(S),{messageTransmitterAccount:Te,tokenMessenger:be,tokenMessengerEventAuthority:ve,tokenMinter:oe,localToken:H,remoteTokenMessengerKey:ie,authorityPda:Ae}=Aa(_,h,q,U),$=[];P&&$.push(P);let Pe=C.Keypair.generate(),Se=oa(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:U,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 ka=require("big.js"),zt=require("stellar-sdk");var Ye=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()}},wi=/Error\(Contract, #(\d+)\)/,Ci="GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF",W=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(Ci,"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(wi);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 Ba={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 Ye.Address(t),token:new Ye.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:Ba,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 Ye.Address(t),amount:e,token:n,receive_token:a,recipient:new Ye.Address(r),receive_amount_min:s}),account:t,...o,...this.options,errorTypes:Ba,parseResultXdr:this.parsers.swap});this.spec=new Ye.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,ka.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:Mn(),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:Mn(),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 va=require("big.js");var Ra=O(require("bn.js"));function qt(i){return"0x"+new Ra.default(i).toString("hex")}function Ma(i){return new Promise(t=>setTimeout(()=>t(),i))}var ot=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 Bi(i,a),{txId:a}}async function Bi(i,t,e=1e4){let n=Date.now();for(;;){if(Date.now()-n>e)throw new qe("Transaction not found");let a=await i.trx.getUnconfirmedTransactionInfo(t);if(!a?.receipt){await Ma(2e3);continue}if(a.receipt.result==="SUCCESS")return a;throw new qe(`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,va.Big)(y).plus(f).toFixed());let h=at().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 xa.default(r),t,e)}}case"TRX":{if(a)return new kt(a,t);{let r=e.getNodeRpcUrl(i);return new kt(new Ia.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 Ea=require("big.js"),Ua=O(require("tronweb")),Na=O(require("web3"));var Me=require("big.js");function Da(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)(Kn(t,c.toFixed(),m.toFixed())).minus(o).toFixed()}function Fa(i){let t=B(i,3);return(0,Me.Big)(t).round().toFixed()}var Je=[{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=Ln(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 _t(this.getUserBalanceInfoByBatch(e,n),`Cannot get UserBalanceInfo for ${n.name} on ${n.chainSymbol}`,5e3)}catch{a=await wn(()=>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(Je,n.poolAddress),s=["userRewardDebt","balanceOf"].map(c=>ot(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 _t(this.getPoolInfoByBatch(e),`Cannot get PoolInfo for ${e.name} on ${e.chainSymbol}`,5e3)}catch{n=await wn(()=>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(Je,e.poolAddress),r=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(h=>ot(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(Je,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(),At(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(),At(t.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,e).buildRawTransactionWithdraw(t)}async claimRewards(t,e){return At(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 kn(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 rt(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 rt(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 rt(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 tt(e.programId),c=new ge.PublicKey(n),u=(await e.account.pool.fetch(c)).mint,g=await ue(s,u),f=await nt(u,e.programId),y=await kn(s,u,e.programId),h=[fe.web3.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await it(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 He=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 He.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 He.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 He.Address(t)}),account:t,...e,...this.options,errorTypes:Mt,parseResultXdr:this.parsers.claimRewards});this.getPool=async(t={})=>await W.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 W.fromSimulation({method:"get_user_deposit",args:this.spec.funcArgsToScVals("get_user_deposit",{user:new He.Address(t)}),...e,...this.options,errorTypes:Mt,parseResultXdr:this.parsers.getUserDeposit});this.spec=new He.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 Wa=O(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 Wa.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(Je,Tt(a.poolAddress)),o=Tt(n),A=["userRewardDebt","balanceOf"].map(u=>ot(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(Je,Tt(n.poolAddress)),s=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(d=>ot(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=Da(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=Fa(t),o=ee(s,n.decimals),c=(await this.getUserBalanceInfo(e,n,a)).earned(r)||"0",m=(0,Ea.Big)(o).plus(c).toFixed();return b(m,n.decimals).toFixed()}async getUserBalanceInfo(t,e,n){return At(e.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,n).getUserBalanceInfo(t,e)}async getPoolInfoFromChain(t,e){let n=await At(t.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,e).getPoolInfoFromChain(t);return this.api.cachePut({chainSymbol:t.chainSymbol,poolAddress:t.poolAddress},n),n}};function At(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 Na.default(r),t)}}case"TRX":{let r=e.getNodeRpcUrl(i),s=n.tronJsonRpc;if(a)return new vt(a,t,s);{let o=new Ua.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 Ga(i,t,e){let n=Ri(i,{decimals:t.decimals,feeShare:t.feeShare},t.poolInfo),a=Mi(n.amountIncludingCommissionInSystemPrecision,{decimals:e.decimals,feeShare:e.feeShare},e.poolInfo);return{swapToVUsdCalcResult:n,swapFromVUsdCalcResult:a}}function Za(i,t,e){let n=vi(i,{decimals:e.decimals,feeShare:e.feeShare},e.poolInfo),a=Ii(n.amountIncludingCommissionInSystemPrecision,{decimals:t.decimals,feeShare:t.feeShare},t.poolInfo);return{swapToVUsdCalcResult:n,swapFromVUsdCalcResult:a}}function Ri(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:Oa(Ze(s,e),n),amountExcludingCommissionInSystemPrecision:Oa(Ze(a,e),n)}}function Oa(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 Mi(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 vi(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:Va(Ze(s,e),n),amountExcludingCommissionInSystemPrecision:Va(Ze(i,e),n)}}function Va(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 Ii(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 _a(i,t,e,n,a){let r=Ce(i,t,e),s=ee(r,t.decimals),o=yt(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 ct=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 ct.Connection(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),a=await Ke(t,n),r=ct.TransactionMessage.decompile(t.message,{addressLookupTableAccounts:a});r.instructions[r.instructions.length-1].keys.push({pubkey:new ct.PublicKey(Buffer.from(e)),isSigner:!1,isWritable:!1}),t.message=r.compileToV0Message(a)}};var R=require("stellar-sdk"),Qc=require("stellar-sdk/lib/horizon");var E=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 W.fromSimulation({method:"initialize",args:this.spec.funcArgsToScVals("initialize",{admin:new E.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 W.fromSimulation({method:"mint",args:this.spec.funcArgsToScVals("mint",{to:new E.Address(t),amount:e}),...n,...this.options,errorTypes:j,parseResultXdr:this.parsers.mint});this.setAdmin=async({new_admin:t},e={})=>await W.fromSimulation({method:"set_admin",args:this.spec.funcArgsToScVals("set_admin",{new_admin:new E.Address(t)}),...e,...this.options,errorTypes:j,parseResultXdr:this.parsers.setAdmin});this.allowance=async({from:t,spender:e},n={})=>await W.fromSimulation({method:"allowance",args:this.spec.funcArgsToScVals("allowance",{from:new E.Address(t),spender:new E.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 W.fromSimulation({method:"approve",args:this.spec.funcArgsToScVals("approve",{from:new E.Address(t),spender:new E.Address(e),amount:n,expiration_ledger:a}),...r,...this.options,errorTypes:j,parseResultXdr:this.parsers.approve});this.balance=async({id:t},e={})=>await W.fromSimulation({method:"balance",args:this.spec.funcArgsToScVals("balance",{id:new E.Address(t)}),...e,...this.options,errorTypes:j,parseResultXdr:this.parsers.balance});this.spendableBalance=async({id:t},e={})=>await W.fromSimulation({method:"spendable_balance",args:this.spec.funcArgsToScVals("spendable_balance",{id:new E.Address(t)}),...e,...this.options,errorTypes:j,parseResultXdr:this.parsers.spendableBalance});this.transfer=async({from:t,to:e,amount:n},a={})=>await W.fromSimulation({method:"transfer",args:this.spec.funcArgsToScVals("transfer",{from:new E.Address(t),to:new E.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 W.fromSimulation({method:"transfer_from",args:this.spec.funcArgsToScVals("transfer_from",{spender:new E.Address(t),from:new E.Address(e),to:new E.Address(n),amount:a}),...r,...this.options,errorTypes:j,parseResultXdr:this.parsers.transferFrom});this.burn=async({from:t,amount:e},n={})=>await W.fromSimulation({method:"burn",args:this.spec.funcArgsToScVals("burn",{from:new E.Address(t),amount:e}),...n,...this.options,errorTypes:j,parseResultXdr:this.parsers.burn});this.burnFrom=async({spender:t,from:e,amount:n},a={})=>await W.fromSimulation({method:"burn_from",args:this.spec.funcArgsToScVals("burn_from",{spender:new E.Address(t),from:new E.Address(e),amount:n}),...a,...this.options,errorTypes:j,parseResultXdr:this.parsers.burnFrom});this.decimals=async(t={})=>await W.fromSimulation({method:"decimals",args:this.spec.funcArgsToScVals("decimals",{}),...t,...this.options,errorTypes:j,parseResultXdr:this.parsers.decimals});this.name=async(t={})=>await W.fromSimulation({method:"name",args:this.spec.funcArgsToScVals("name",{}),...t,...this.options,errorTypes:j,parseResultXdr:this.parsers.name});this.symbol=async(t={})=>await W.fromSimulation({method:"symbol",args:this.spec.funcArgsToScVals("symbol",{}),...t,...this.options,errorTypes:j,parseResultXdr:this.parsers.symbol});this.spec=new E.ContractSpec(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAdkZWNpbWFsAAAAAAQAAAAAAAAABG5hbWUAAAAQAAAAAAAAAAZzeW1ib2wAAAAAABAAAAAA","AAAAAAAAAAAAAAAEbWludAAAAAIAAAAAAAAAAnRvAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAA","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAA=","AAAAAAAAAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAAAAAAAHYXBwcm92ZQAAAAAEAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAAAAAAEWV4cGlyYXRpb25fbGVkZ2VyAAAAAAAABAAAAAA=","AAAAAAAAAAAAAAAHYmFsYW5jZQAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAL","AAAAAAAAAAAAAAARc3BlbmRhYmxlX2JhbGFuY2UAAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAL","AAAAAAAAAAAAAAAIdHJhbnNmZXIAAAADAAAAAAAAAARmcm9tAAAAEwAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAAAAAAANdHJhbnNmZXJfZnJvbQAAAAAAAAQAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAEZnJvbQAAABMAAAAAAAAAAnRvAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAA","AAAAAAAAAAAAAAAEYnVybgAAAAIAAAAAAAAABGZyb20AAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAA","AAAAAAAAAAAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAAAAAAAIZGVjaW1hbHMAAAAAAAAAAQAAAAQ=","AAAAAAAAAAAAAAAEbmFtZQAAAAAAAAABAAAAEA==","AAAAAAAAAAAAAAAGc3ltYm9sAAAAAAAAAAAAAQAAABA=","AAAAAQAAAAAAAAAAAAAAEEFsbG93YW5jZURhdGFLZXkAAAACAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAHc3BlbmRlcgAAAAAT","AAAAAQAAAAAAAAAAAAAADkFsbG93YW5jZVZhbHVlAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAAAAAAEWV4cGlyYXRpb25fbGVkZ2VyAAAAAAAABA==","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAABQAAAAEAAAAAAAAACUFsbG93YW5jZQAAAAAAAAEAAAfQAAAAEEFsbG93YW5jZURhdGFLZXkAAAABAAAAAAAAAAdCYWxhbmNlAAAAAAEAAAATAAAAAQAAAAAAAAAFTm9uY2UAAAAAAAABAAAAEwAAAAEAAAAAAAAABVN0YXRlAAAAAAAAAQAAABMAAAAAAAAAAAAAAAVBZG1pbgAAAA==","AAAAAQAAAAAAAAAAAAAADVRva2VuTWV0YWRhdGEAAAAAAAADAAAAAAAAAAdkZWNpbWFsAAAAAAQAAAAAAAAABG5hbWUAAAAQAAAAAAAAAAZzeW1ib2wAAAAAABA="])}};var xi=100,Di=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:xi.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(c).setTimeout(Di).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 qn(()=>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 Xe=(e=>(e.WITH_NATIVE_CURRENCY="native",e.WITH_STABLECOIN="stablecoin",e))(Xe||{}),bt=(e=>(e.INT="int",e.FLOAT="float",e))(bt||{});var Xa=require("big.js"),Ka=O(require("tronweb")),Qa=O(require("web3"));var mn=O(require("erc-20-abi"));var En=require("big.js"),ye=class{async checkAllowance(t){let e=await this.getAllowance(t);return(0,En.Big)(e).gte((0,En.Big)(t.amount))}};var Fi="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Wi="0xdac17f958d2ee523a2206206994597c13d831ec7",Ei=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()===Wi}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?Fi: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=Ei: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 La=require("@project-serum/anchor"),ze=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 ze.Connection(this.solanaRpcUrl,"confirmed"),a=new ze.PublicKey(e);return new La.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 ze.PublicKey(n),new ze.PublicKey(a.tokenAddress));return(await it(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 ze.PublicKey(e.account))).toString()}};var Dt=require("stellar-sdk"),Pl=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 Ui="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?Ui: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 Qa.default(a),this.api)}}case"TRX":{if(n)return new Ft(n,this.api);{let a=this.nodeRpcUrlsConfig.getNodeRpcUrl(t),r=new Ka.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,Xa.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 dt(t)}},dn=class{constructor(t,e=mt){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=Gn(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=yt(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=_n(o,n,r),c=Zn(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 vn(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 Xn(t)}async getExtraGasMaxLimits(t,e){return await In(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=yt(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 Ga(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=Za(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,_a(r,n,await G(this.api,n),a,await G(this.api,a))}};function Ni(i){return"solanaRpcUrl"in i}var Un=class{constructor(t,e=mt){let n;Ni(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
|