@allbridge/bridge-core-sdk 3.20.0-alpha.3 → 3.20.0
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 +1 -1
- package/dist/cjs/index.js.map +2 -2
- 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 +1 -1
package/dist/esm/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var lt={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://quote-api.jup.ag/v6",wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7}},cachePoolInfoChainSec:20},qi={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},$i={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org"};import{Big as pe}from"big.js";var D=class extends Error{errorCode;constructor(i,a){super(a),this.errorCode=i}},S=class extends D{constructor(i){super("SdkError",i)}},ut=class extends D{constructor(i){super("InvalidAmountError",i)}},Ge=class extends D{constructor(i){super("AmountNotEnoughError",i)}},fe=class extends D{constructor(i){super("InsufficientPoolLiquidityError",i)}},V=class extends D{constructor(i){super("JupiterError",i)}},Le=class extends D{constructor(i){super("InvalidGasFeePaymentOptionError",i)}},fn=class extends D{constructor(i){super("InvalidMessengerOptionError",i)}},L=class extends D{constructor(i){super("MethodNotSupportedError",i)}},Je=class extends D{constructor(i){super("VerifyTxError",i)}},Ze=class extends D{constructor(i){super("InvalidTxError",i)}},dt=class extends D{constructor(i){super("ExtraGasMaxLimitExceededError",i)}},pt=class extends D{constructor(i,a,s){super("ArgumentInvalidDecimalsError",`Argument '${i}' decimals '${a}' cannot be greater than '${s}'`)}},Ke=class extends D{constructor(i){super("TimeoutError",i)}},gt=class extends D{constructor(i){super("NodeRpcUrlNotInitializedError",`For chain '${i}' Node RPC URL not initialized`)}},te=class extends D{constructor(i){super("CCTPDoesNotSupportedError",i)}},ft=class extends D{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},ba=(y=>(y.SDK_ERROR="SdkError",y.INVALID_AMOUNT_ERROR="InvalidAmountError",y.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",y.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",y.JUPITER_ERROR="JupiterError",y.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",y.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",y.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",y.VERIFY_TX_ERROR="VerifyTxError",y.INVALID_TX_ERROR="InvalidTxError",y.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",y.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",y.TIMEOUT_ERROR="TimeoutError",y.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",y.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",y.TX_TOO_LARGE="TxTooLargeError",y))(ba||{});var ne=(g=>(g.BSC="BSC",g.ETH="ETH",g.BAS="BAS",g.SOL="SOL",g.TRX="TRX",g.POL="POL",g.ARB="ARB",g.CEL="CEL",g.AVA="AVA",g.SRB="SRB",g.STLR="STLR",g.OPT="OPT",g))(ne||{}),N=(r=>(r.EVM="EVM",r.SOLANA="SOLANA",r.TRX="TRX",r.SRB="SRB",r))(N||{});var Ta={EVM:18,SOLANA:9,TRX:6,SRB:7},Pa={BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"}},I=(()=>{let A={...Pa};return{addChainsProperties(i){A={...A,...i}},getChainProperty(i){let a=A[i];if(!a)throw new S(`Cannot find chain properties for ${i}`);return a},getChainsProperties(){return A},getChainDecimalsByType(i){return Ta[i]}}})();import Ia from"axios";var yn="3.20.0-alpha.3";import{Big as f}from"big.js";import qt from"bn.js";function $t(A,i){return f(100).minus(f(100).times(i).div(A)).toNumber()}function xe(A,i){return we(A,i,3).round(0,f.roundDown)}function Q(A,i){return we(A,3,i)}function we(A,i,a){let s=f(a).minus(i).toNumber();return f(A).times(Qe(s))}function Qe(A){return f(10).pow(A)}function M(A,i){return f(A).times(Qe(i))}function C(A,i){let a=f(A);return a.eq(0)?f(0):f(a).div(Qe(i))}function H(A){return C(f(A.tokenBalance).minus(A.vUsdBalance).toFixed(),3).div(2).toFixed()}function ue(A,{feeShare:i,decimals:a},s){let r=f(A);if(r.lte(0))return"0";let o=r.times(i),c=r.minus(o),m=xe(c,a),l=f(s.tokenBalance).plus(m),u=de(l,s.aValue,s.dValue);return f(s.vUsdBalance).minus(u).round(0,f.roundDown).toFixed()}function He(A,{feeShare:i,decimals:a},s){let r=f(A);if(r.lte(0))return f(0).toFixed();let o=r.plus(s.vUsdBalance),c=de(o,s.aValue,s.dValue),m=Q(f(s.tokenBalance).minus(c),a),l=f(m).times(i);return f(m).minus(l).round(0,f.roundDown).toFixed()}function hn(A,i){let a=f(A);if(a.lte(0))return i;let s=a.plus(i.vUsdBalance),r=de(s,i.aValue,i.dValue);return{aValue:i.aValue,dValue:i.dValue,tokenBalance:r.toFixed(0),vUsdBalance:s.toFixed(0)}}function bn(A,{feeShare:i,decimals:a},s){if(f(A).lte(0))return f(0);let r=f(s.vUsdBalance).minus(A);if(r.lte(0))throw new fe;let o=de(r,s.aValue,s.dValue),c=f(o).minus(s.tokenBalance),m=Q(c,a),l=f(i).div(f(1).minus(i)),u=f(m).times(l).round(0,f.roundUp);return f(m).plus(u).round(0,f.roundDown)}function Tn(A,{feeShare:i,decimals:a},s){if(f(A).lte(0))return f(0);let r=f(i).div(f(1).minus(i)),o=f(A).times(r).round(0,f.roundUp),c=f(A).plus(o),m=xe(c,a),l=f(s.tokenBalance).minus(m);if(l.lte(0))throw new fe;let u=de(l,s.aValue,s.dValue);return f(u).minus(s.vUsdBalance).round(0,f.roundDown)}function de(A,i,a){let s=f(4).times(i).times(f(a).minus(A)).minus(a),r=f(a).pow(3),o=s.pow(2),c=f(A).times(f(A).times(o).plus(f(4).times(i).times(r))).sqrt().round(0,f.roundDown),m=f(8).times(i).times(A),l=s.times(A).plus(c).div(m).round(0,f.roundDown);return l.eq(0)?f(0):l.plus(1)}function Pn(A,i,a,s){let r=new qt(A),o=new qt(a),c=new qt(i);return r.mul(o).shrn(s).sub(c).toString()}function Sn(A){return f(A).gt(0)?`${Number(f(A).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function wn(A,i,a){let s=f(i).times(a),r=f(i).plus(a),o=f(8).times(A).times(s).times(r),c=s.times(f(16).times(A).minus(4)).div(3),m=o.times(o),l=c.times(c).times(c),u=m.plus(l),p=f(u).sqrt(),d=f(Math.cbrt(+o.plus(p).toFixed())),g=f(Math.cbrt(+o.minus(p).toFixed()));return d.plus(g).toFixed()}var en=(c=>(c.OK="OK",c.INVALID="INVALID",c.FORBIDDEN="FORBIDDEN",c.UNINITIALIZED="UNINITIALIZED",c.CONTRACT_ADDRESS="CONTRACT_ADDRESS",c.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",c))(en||{});var ye=(s=>(s[s.ALLBRIDGE=1]="ALLBRIDGE",s[s.WORMHOLE=2]="WORMHOLE",s[s.CCTP=3]="CCTP",s))(ye||{});function Bn(A){return Object.entries(A).reduce((i,a)=>{let s=a[0],r=a[1],o=Ra(s,r);return o&&(i[s]=o),i},{})}function Cn(A){let i={};for(let[a,s]of Object.entries(A)){let r=a;for(let o of s.tokens){let c=De({chainSymbol:r,poolAddress:o.poolAddress}),m=H(o.poolInfo);i[c]={...o.poolInfo,imbalance:m}}}return i}function Sa(A,i){let{name:a,...s}=A,{poolInfo:r,...o}=i;return{...o,...s,chainName:a}}function wa(A){switch(A){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;default:return null}}function Ba(A){return Object.entries(A).reduce((i,[a,s])=>(i[a]=Ca(s),i),{})}function Ca(A){return Object.entries(A).reduce((i,[a,s])=>{let r=wa(a);return r&&(i[r]=s),i},{})}function Ra(A,i){let a=I.getChainsProperties()[A];if(!a)return null;let s={...a,allbridgeChainId:i.chainId,bridgeAddress:i.bridgeAddress,transferTime:Ba(i.transferTime),txCostAmount:i.txCostAmount,confirmations:i.confirmations};return{...s,tokens:i.tokens.map(r=>Sa(s,r))}}function De(A){return A.chainSymbol+"_"+A.poolAddress}function Rn(A){let i=[];for(let[a,s]of Object.entries(A)){let r=a;for(let o of s.tokens)i.push({chainSymbol:r,poolAddress:o.poolAddress})}return i}function In(A){let i={};for(let[a,s]of Object.entries(A)){let r=a;for(let[o,c]of Object.entries(s))c.imbalance=H(c),i[De({chainSymbol:r,poolAddress:o})]=c}return i}var yt=class{api;constructor(i){this.api=Ia.create({baseURL:i.coreApiUrl,headers:{Accept:"application/json",...i.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+yn},params:i.coreApiQueryParams})}async getTokenInfo(){let{data:i}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:Bn(i),poolInfoMap:Cn(i)}}async getPendingInfo(){let{data:i}=await this.api.get("/pending-info");return i}async getGasBalance(i,a){let{data:s}=await this.api.get(`/check/${i}/${a}`);return s}async getTransferStatus(i,a){let{data:s}=await this.api.get(`/chain/${i}/${a}`);return s}async getReceiveTransactionCost(i){let{data:a}=await this.api.post("/receive-fee",i,{headers:{"Content-Type":"application/json"}});return{exchangeRate:a.exchangeRate,fee:a.fee,sourceNativeTokenPrice:a.sourceNativeTokenPrice}}async getPoolInfoMap(i){let a=i instanceof Array?i:[i],{data:s}=await this.api.post("/pool-info",{pools:a},{headers:{"Content-Type":"application/json"}});return In(s)}};import ht from"timed-cache";var tn=20*1e3,va=55*1e3,bt=class{constructor(i){this.apiClient=i;this.tokenInfoCache=new ht({defaultTtl:va}),this.receivedTransactionCache=new ht({defaultTtl:tn}),this.pendingInfoCache=new ht({defaultTtl:tn}),this.gasBalanceCache=new ht({defaultTtl:tn})}tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let i="TOKEN_INFO_CACHE_KEY",a=this.tokenInfoCache.get(i);if(a)return a;let s=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(i,s),s}async getGasBalance(i,a){let s=`GAS_BALANCE_${i}_${a}`,r=this.gasBalanceCache.get(s);if(r)return r;let o=this.apiClient.getGasBalance(i,a);return this.gasBalanceCache.put(s,o),o}async getPendingInfo(){let i="PENDING_INFO_CACHE_KEY",a=this.pendingInfoCache.get(i);if(a)return a;let s=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(i,s),s}async getReceiveTransactionCost(i){let a=`RECEIVE_TX_COST_${i.sourceChainId}_${i.destinationChainId}_${i.messenger}`,s=this.receivedTransactionCache.get(a);if(s)return s;let r=await this.apiClient.getReceiveTransactionCost(i);return this.receivedTransactionCache.put(a,r),r}async getTransferStatus(i,a){return this.apiClient.getTransferStatus(i,a)}async getPoolInfoMap(i){return this.apiClient.getPoolInfoMap(i)}};var Tt=class{constructor(i){this.apiClient=i}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let i=await this.getChainDetailsMap();return Object.values(i).flatMap(a=>a.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(i,a){return this.apiClient.getGasBalance(i,a)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(i,a){return await this.apiClient.getTransferStatus(i,a)}async getReceiveTransactionCost(i){return await this.apiClient.getReceiveTransactionCost(i)}async getPoolInfoMap(i){return await this.apiClient.getPoolInfoMap(i)}};var Pt=class{constructor(i,a){this.client=i;this.isStaging=a.coreApiQueryParams?.staging==="true"}isStaging;async getChainDetailsMap(i){let a=await this.client.getChainDetailsMap(),s={};for(let r in a){let o=a[r];o&&(s[r]={...o,tokens:vn(o.tokens,i,this.isStaging)})}return s}async tokens(i){return vn(await this.client.tokens(),i,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(i,a){return this.client.getGasBalance(i,a)}async getTransferStatus(i,a){return await this.client.getTransferStatus(i,a)}async getReceiveTransactionCost(i){return await this.client.getReceiveTransactionCost(i)}cachePut(i,a){return this.client.cachePut(i,a)}getPoolInfoByKey(i){return this.client.getPoolInfoByKey(i)}refreshPoolInfo(i){return this.client.refreshPoolInfo(i)}};function vn(A,i,a){return A.filter(s=>a?!0:s.flags[i]).map(Ma)}function Ma(A){let{flags:i,...a}=A;return a}import ka from"timed-cache";var xa=55*1e3,St=class{constructor(i){this.client=i;this.poolInfoCache=new nn}poolInfoCache;async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(i,a){return this.client.getTransferStatus(i,a)}getReceiveTransactionCost(i){return this.client.getReceiveTransactionCost(i)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(i,a){return this.client.getGasBalance(i,a)}async getPoolInfoByKey(i){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let a=this.poolInfoCache.get(i);if(a)return a;{let s=await this.client.getPoolInfoMap(i);this.poolInfoCache.putAll(s);let r=s[De(i)];if(r)return r;throw new S("Cannot find pool info for "+i.poolAddress+" on chain "+i.chainSymbol)}}async refreshPoolInfo(i){let a;if(i)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),a=await this.client.getPoolInfoMap(i);else{let s=await this.client.getChainDetailsMapAndPoolInfoMap();a=await this.client.getPoolInfoMap(Rn(s.chainDetailsMap))}this.poolInfoCache.putAll(a)}cachePut(i,a){this.poolInfoCache.put(De(i),a)}},nn=class{cache;constructor(){this.cache=new ka({defaultTtl:xa})}putAll(i){for(let[a,s]of Object.entries(i))this.cache.put(a,s)}putAllIfNotExists(i){for(let[a,s]of Object.entries(i))this.cache.get(a)||this.cache.put(a,s)}put(i,a){this.cache.put(i,a)}get(i){let a=De(i);return this.cache.get(a)}};import{TronWeb as Ai}from"tronweb";import{Web3 as ci}from"web3";import{Big as Mn}from"big.js";async function U(A,i){return await A.getPoolInfoByKey({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress})}function x(A){if(Mn(A).lte(0))throw new ut("Amount must be greater than zero")}function W(A,i,a){let s=Mn(i).toFixed(),[r,o]=s.split(".");if(o&&o.length>a)throw new pt(A,o.length,a)}async function wt(A,i,a){return await Promise.race([A,new Promise((s,r)=>{setTimeout(()=>r(new Ke(i)),a)})])}async function an(A,i,a,s){if(a<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${a} was received.`);let r=0;for(;;)try{return await wt(A(),i,s)}catch{if(++r>=a)throw new Ke(i)}}async function kn(A,i,a,s=1.5,r=!1){let o=[],c=0,m=await A();if(o.push(m),!i(m))return o;let l=new Date(Date.now()+a*1e3).valueOf(),u=1e3,p=u;for(;Date.now()<l;){let d=o[o.length-1];if(d===void 0||!i(d))break;c++,r&&console.info(`Waiting ${u}ms before trying again (bringing the total wait time to ${p}ms so far, of total ${a*1e3}ms)`),await new Promise(h=>setTimeout(h,u)),u=u*s,new Date(Date.now()+u).valueOf()>l&&(u=l-Date.now(),r&&console.info(`was gonna wait too long; new waitTime: ${u}ms`)),p=u+p;let g=await A(d);o.push(g),r&&i(g)&&console.info(`${c}. Called ${A.name}; ${o.length} prev attempts. Most recent: ${JSON.stringify(o[o.length-1],null,2)}`)}return o}import*as It from"@project-serum/anchor";import{PublicKey as Ln}from"@solana/web3.js";import{Big as Ya}from"big.js";var Wa={abi:[{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"}]},xn=Wa;var Fa={abi:[{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"}]},Wn=Fa;import*as E from"@project-serum/anchor";import{PublicKey as X}from"@solana/web3.js";async function ae(A,i){return E.utils.token.associatedAddress({mint:i,owner:A})}async function Be(A){let[i]=await X.findProgramAddress([E.utils.bytes.utf8.encode("config")],A);return i}async function Fn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("lock"),Uint8Array.from(A)],i);return a}async function ze(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([A])],i);return a}async function _e(A){let i=await Be(A),[a]=await X.findProgramAddress([i.toBuffer()],A);return a}async function Gn(A,i){let[a]=await X.findProgramAddress([A.toBuffer()],i);return a}async function Ne(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("token"),A.toBytes()],i);return a}async function Zn(A,i,a){let[s]=await X.findProgramAddress([E.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([A]),i],a);return s}async function sn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([A])],i);return a}async function rn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([A])],i);return a}async function Dn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("sent_message"),A],i);return a}async function on(A,i,a){let[s]=await X.findProgramAddress([E.utils.bytes.utf8.encode("user_deposit"),i.toBytes(),A.toBytes()],a);return s}async function _n(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("cctp_bridge"),A.toBytes()],i);return a}async function Nn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("token"),A.toBytes()],i);return a}function Un(A,i){let[a]=X.findProgramAddressSync([E.utils.bytes.utf8.encode("lock"),i.toBuffer()],A);return a}function Vn(A,i,a,s){let r=We("message_transmitter",a),o=We("token_messenger",s),c=We("__event_authority",s),m=We("token_minter",s),l=We("local_token",s,[i]),u=We("remote_token_messenger",s,[A.toString()]),p=We("sender_authority",s);return{messageTransmitterAccount:r,tokenMessenger:o,tokenMessengerEventAuthority:c,tokenMinter:m,localToken:l,remoteTokenMessengerKey:u,authorityPda:p}}function We(A,i,a=[]){let s=[Buffer.from(E.utils.bytes.utf8.encode(A))];for(let o of a)typeof o=="string"?s.push(Buffer.from(E.utils.bytes.utf8.encode(o))):Array.isArray(o)||Buffer.isBuffer(o)?s.push(Buffer.from(Uint8Array.from(o))):s.push(Buffer.from(Uint8Array.from(o.toBuffer())));return X.findProgramAddressSync(s,i)[0]}import{AnchorProvider as Ga}from"@project-serum/anchor";import{Connection as Za,PublicKey as Da}from"@solana/web3.js";function Ce(A,i){let a=new Za(A,"confirmed"),s=new Da(i);return new Ga(a,{publicKey:s},{preflightCommitment:"confirmed",commitment:"confirmed"})}var ie=class{};import{PublicKey as _a}from"@solana/web3.js";import{Address as Na}from"@stellar/stellar-sdk";import{Big as he}from"big.js";import En from"randombytes";import{utils as On}from"tronweb";function be(A,i,a){let s;switch(i){case"EVM":{s=Ua(A);break}case"SOLANA":{s=new _a(A).toBuffer();break}case"TRX":{s=Va(A);break}case"SRB":{s=new Na(A).toBuffer();break}}switch(a){case"EVM":return"0x"+s.toString("hex");case"SOLANA":return Array.from(s);case"TRX":return s;case"SRB":return s.toJSON().data}}function Xn(A){return Buffer.from(A.replace(/^0x/i,""),"hex")}function Ua(A){let a=Xn(A);return Buffer.concat([Buffer.alloc(32-a.length,0),a],32)}function Va(A){let i=Bt(A),a=Xn(i);return Oa(a,32)}function Bt(A){let i=On.crypto.decodeBase58Address(A);return i?On.bytes.byteArray2hexStr(i).replace(/^41/,"0x"):""}function Oa(A,i){if(A.length>=i)return A;let a=Buffer.alloc(i,0);return A.copy(a,i-A.length),a}function Ct(){return En(32)}function je(){let A=En(32).readBigInt64BE();return A<0?A*-1n:A}function Re(A,i){let a={},s=i.sourceToken;return a.amount=M(i.amount,s.decimals).toFixed(),a.contractAddress=s.bridgeAddress,a.fromAccountAddress=i.fromAccountAddress,a.fromTokenAddress=be(s.tokenAddress,A,A),a.toAccountAddress=i.toAccountAddress,a.toTokenAddress=be(i.destinationToken.tokenAddress,A,A),a.minimumReceiveAmount=i.minimumReceiveAmount?M(i.minimumReceiveAmount,i.destinationToken.decimals).toFixed():"0",a}async function Te(A,i,a){let s={};s.fromChainId=i.sourceToken.allbridgeChainId,s.fromChainSymbol=i.sourceToken.chainSymbol;let r=I.getChainProperty(i.destinationToken.chainSymbol).chainType;s.fromTokenAddress=i.sourceToken.tokenAddress,s.toChainId=i.destinationToken.allbridgeChainId,s.toTokenAddress=i.destinationToken.tokenAddress,i.gasFeePaymentMethod==="stablecoin"?s.gasFeePaymentMethod="stablecoin":s.gasFeePaymentMethod="native";let o=i.sourceToken;if(i.messenger===3){if(!o.cctpAddress||!i.destinationToken.cctpAddress)throw new te("Such route does not support CCTP protocol");s.contractAddress=o.cctpAddress}else s.contractAddress=o.bridgeAddress;s.messenger=i.messenger,s.fromAccountAddress=i.fromAccountAddress,s.amount=M(i.amount,o.decimals).toFixed();let{fee:c,feeFormat:m}=i;if(!c){let d=(await An(s.fromChainId,i.sourceToken.chainType,s.toChainId,o.decimals,s.messenger,a))[s.gasFeePaymentMethod];if(!d)throw new Le;c=d.int,m="int"}if(m=="float")switch(s.gasFeePaymentMethod){case"native":s.fee=M(c,I.getChainDecimalsByType(o.chainType)).toFixed(0);break;case"stablecoin":s.fee=M(c,o.decimals).toFixed(0);break}else s.fee=c;let{extraGas:l,extraGasFormat:u}=i;if(l&&+l>0){if(u=="float")switch(s.gasFeePaymentMethod){case"native":s.extraGas=M(l,I.getChainDecimalsByType(o.chainType)).toFixed(0);break;case"stablecoin":s.extraGas=M(l,o.decimals).toFixed(0);break}else s.extraGas=l;await Xa(s.extraGas,s.gasFeePaymentMethod,o,i.destinationToken,a)}return s.fromTokenAddress=be(s.fromTokenAddress,A,A),s.toAccountAddress=be(i.toAccountAddress,r,A),s.toTokenAddress=be(s.toTokenAddress,r,A),s.gasFeePaymentMethod=="stablecoin"&&Ea(s.amount,o.decimals,s.fee,s.extraGas),s}function Ea(A,i,a,s){let r=he(A).minus(a).minus(s??0);if(r.lte(0))throw new Ge(`Amount not enough to pay fee, ${C(he(r).minus(1).neg(),i).toFixed()} stables is missing`)}async function An(A,i,a,s,r,o){let c=await o.getReceiveTransactionCost({sourceChainId:A,destinationChainId:a,messenger:r}),m={native:{int:c.fee,float:C(c.fee,I.getChainDecimalsByType(i)).toFixed()}};if(c.sourceNativeTokenPrice){let l=we(new he(c.fee).mul(c.sourceNativeTokenPrice),I.getChainDecimalsByType(i),s).toFixed(0,he.roundUp);m.stablecoin={int:l,float:C(l,s).toFixed()}}return m}async function Xa(A,i,a,s,r){let c=(await cn(a,s,r)).extraGasMax[i];if(!c)throw new Le(`Impossible to pay extra gas by '${i}' payment method`);let m=c.int;if(he(A).gt(m))throw new dt(`Extra gas ${A} in int format, exceeded limit ${m} for '${i}' payment method`)}async function cn(A,i,a){let s={},r=await a.getReceiveTransactionCost({sourceChainId:A.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:1}),o=i.txCostAmount.maxAmount,c=C(o,I.getChainDecimalsByType(i.chainType)).toFixed(),m=he(c).div(r.exchangeRate).toFixed(I.getChainDecimalsByType(A.chainType),he.roundDown),l=M(m,I.getChainDecimalsByType(A.chainType)).toFixed(0);if(s.native={int:l,float:m},r.sourceNativeTokenPrice){let u=he(m).mul(r.sourceNativeTokenPrice).toFixed(A.decimals,he.roundDown);s.stablecoin={int:M(u,A.decimals).toFixed(0),float:u}}return{extraGasMax:s,destinationChain:{gasAmountMax:{int:o,float:c},swap:{int:i.txCostAmount.swap,float:C(i.txCostAmount.swap,I.getChainDecimalsByType(i.chainType)).toFixed()},transfer:{int:i.txCostAmount.transfer,float:C(i.txCostAmount.transfer,I.getChainDecimalsByType(i.chainType)).toFixed()}},exchangeRate:r.exchangeRate,sourceNativeTokenPrice:r.sourceNativeTokenPrice}}function Yn(A){return A.sourceToken.chainSymbol!==A.destinationToken.chainSymbol}var qe=class extends ie{constructor(a,s,r){super();this.web3=a;this.api=s;this.nodeRpcUrlsConfig=r}chainType="EVM";async send(a){let s=await this.buildRawTransactionSend(a);return this.sendRawTransaction(s)}async buildRawTransactionSwap(a){let s=Re(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s)}async buildRawTransactionSwapFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:l,minimumReceiveAmount:u}=a,d=this.getBridgeContract(r).methods.swap(s,c,l,m,u);return Promise.resolve({from:o,to:r,data:d.encodeABI()})}async buildRawTransactionSend(a){let s=await Te(this.chainType,a,this.api),{amount:r,contractAddress:o,fromAccountAddress:c,fromTokenAddress:m,toChainId:l,toAccountAddress:u,toTokenAddress:p,messenger:d,fee:g,gasFeePaymentMethod:h,extraGas:b}=s,T="0x"+Ct().toString("hex"),y,P,B=g;if(b&&(B=Ya(B).plus(b).toFixed()),d===3){let w=await this.buildRawTransactionCctpSend(a,s,B);y=w.sendMethod,P=w.value}else{let w=this.getBridgeContract(o);h==="stablecoin"?(y=w.methods.swapAndBridge(m,r,u,l,p,T,d,B),P="0"):(y=w.methods.swapAndBridge(m,r,u,l,p,T,d,0),P=B)}return Promise.resolve({from:c,to:o,value:P,data:y.encodeABI()})}async buildRawTransactionCctpSend(a,s,r){let{amount:o,contractAddress:c,toChainId:m,toAccountAddress:l,gasFeePaymentMethod:u}=s,p=this.getCctpBridgeContract(c),d,g;if(a.destinationToken.chainType==="SOLANA"){let h,b=new Ln(a.toAccountAddress),T=new Ln(a.destinationToken.tokenAddress),y=await ae(b,T),P=Ce(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),a.toAccountAddress);It.setProvider(P);let B=await It.Spl.token(P).account.token.fetchNullable(y);if(B?.authority.equals(b))h=be(y.toBase58(),"SOLANA",this.chainType);else{let w=await P.connection.getTokenAccountsByOwner(b,{mint:T});if(w.value.length===0&&!B)h=be(y.toBase58(),"SOLANA",this.chainType);else if(w.value.length>0){let G=w.value[0];if(!G?.pubkey)throw new S("First token account or its public key is undefined");h=be(G.pubkey.toBase58(),"SOLANA",this.chainType)}else throw new S("Associated account has wrong owner")}u==="stablecoin"?(d=p.methods.bridgeWithWalletAddress(o,h,l,m,r),g="0"):(d=p.methods.bridgeWithWalletAddress(o,h,l,m,0),g=r)}else u==="stablecoin"?(d=p.methods.bridge(o,l,m,r),g="0"):(d=p.methods.bridge(o,l,m,0),g=r);return{sendMethod:d,value:g}}async sendRawTransaction(a){let s=await this.web3.eth.estimateGas(a),r={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:o}=await this.web3.eth.sendTransaction({...a,gas:s,...r});return{txId:o.toString()}}getBridgeContract(a){return new this.web3.eth.Contract(xn.abi,a)}getCctpBridgeContract(a){return new this.web3.eth.Contract(Wn.abi,a)}};var vt=class{constructor(i,a,s,r){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=r}async approve(i,a){let s,r;a?(s=i,r=a):r=i;let o=$e(r.token,r.messenger);return this.tokenService.buildRawTransactionApprove({...r,spender:o},s)}async send(i,a){return x(i.amount),W("amount",i.amount,i.sourceToken.decimals),Yn(i)?Mt(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSend(i):Mt(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSwap(i)}};import{BN as Ee,Program as un,Spl as ei,web3 as Ie}from"@project-serum/anchor";import{Keypair as aa,PublicKey as F,SystemProgram as ti}from"@solana/web3.js";import{Big as se}from"big.js";var et={version:"0.1.0",name:"bridge",instructions:[{name:"initialize",accounts:[{name:"admin",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"initializePool",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"token",isMut:!0,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializePoolArgs"}}]},{name:"initDepositAccount",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"deposit",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdraw",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amountLp",type:"u64"}]},{name:"swapAndBridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"messenger",isMut:!1,isSigner:!1},{name:"messengerConfig",isMut:!0,isSigner:!1},{name:"sentMessageAccount",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swapAndBridgeWormhole",accounts:[{name:"user",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"wormholeMessenger",isMut:!1,isSigner:!1},{name:"wormholeMessengerConfig",isMut:!0,isSigner:!1},{name:"wormholeProgram",isMut:!1,isSigner:!1},{name:"bridge",isMut:!0,isSigner:!1},{name:"message",isMut:!0,isSigner:!0},{name:"sequence",isMut:!0,isSigner:!1},{name:"feeCollector",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"clock",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swap",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"sendMint",isMut:!1,isSigner:!1},{name:"receiveMint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"sendPool",isMut:!0,isSigner:!1},{name:"receivePool",isMut:!0,isSigner:!1},{name:"sendBridgeToken",isMut:!0,isSigner:!1},{name:"receiveBridgeToken",isMut:!0,isSigner:!1},{name:"sendUserToken",isMut:!0,isSigner:!1},{name:"receiveUserToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"},{name:"receiveAmountMin",type:"u64"}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"receiveAndSwap",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"receiveAndSwapWormhole",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"claimRewards",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setAdmin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAdmin",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"startBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"stopBridge",accounts:[{name:"stopAuthority",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"setRebalancer",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"rebalancer",isMut:!1,isSigner:!1}],args:[]},{name:"setStopAuthority",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAuthority",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"setAllbridgeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setWormholeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setPoolFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setBalanceRatioMin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"balanceRatioMinBp",type:"u16"}]},{name:"setPoolAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"addOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"removeOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"adjustTotalLpAmount",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[]}],accounts:[{name:"chainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"config",type:{kind:"struct",fields:[{name:"admin",type:"publicKey"},{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"rebalancer",type:"publicKey"},{name:"stopAuthority",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"canSwap",type:"bool"},{name:"canDeposit",type:"bool"},{name:"canWithdraw",type:"bool"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"sentTokenAddress",type:"publicKey"},{name:"amount",type:"u64"},{name:"vusdAmount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:"Messenger"}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"otherBridgeToken",type:{kind:"struct",fields:[]}},{name:"pool",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"tokenBalance",type:"u64"},{name:"vUsdBalance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"totalLpAmount",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"accRewardPerShareP",type:"u128"},{name:"adminFeeAmount",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"vUsdAmount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"userDeposit",type:{kind:"struct",fields:[{name:"userAddress",type:"publicKey"},{name:"mint",type:"publicKey"},{name:"lpAmount",type:"u64"},{name:"rewardDebt",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"vusdAmount",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"publicKey"},{name:"sourceChainId",type:"u8"},{name:"receiveToken",type:"publicKey"},{name:"messenger",type:{defined:"Messenger"}},{name:"hash",type:{array:["u8",32]}},{name:"receiveAmountMin",type:"u64"}]}},{name:"RewardError",type:{kind:"enum",variants:[{name:"FeeTooHigh"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}}],errors:[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"PoolInfo overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"}]};var Jn={version:"0.1.0",name:"cctp_bridge",instructions:[{name:"initialize",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"bridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"messageSentEventData",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!0,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"cctpMessenger",isMut:!1,isSigner:!1},{name:"messageTransmitterProgram",isMut:!1,isSigner:!1},{name:"messageTransmitterAccount",isMut:!0,isSigner:!1},{name:"tokenMessenger",isMut:!1,isSigner:!1},{name:"tokenMinter",isMut:!1,isSigner:!1},{name:"localToken",isMut:!0,isSigner:!1},{name:"remoteTokenMessengerKey",isMut:!1,isSigner:!1},{name:"authorityPda",isMut:!1,isSigner:!1},{name:"eventAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"setAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setCctpTokenMessengerMinter",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]}],accounts:[{name:"cctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"admin",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"adminFeeShareBp",type:"u64"},{name:"adminFeeAmount",type:"u64"}]}},{name:"chainBridge",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"amount",type:"u64"},{name:"adminFee",type:"u64"},{name:"relayerFee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"slot",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gasOracleProgramId",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"}]}}],errors:[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}]};import{Spl as La}from"@project-serum/anchor";import Ja from"big.js";import{Web3 as kt}from"web3";async function Ve(A,i){return await La.token(i).account.token.fetch(A)}async function Kn(A,i,a){let s=await i.account.pool.fetch(a),r=s.decimals,o=Ja(s.feeShareBp.toString()).div(1e4).toFixed(),c={aValue:s.a.toString(),dValue:s.d.toString(),totalLpAmount:s.totalLpAmount.toString(),tokenBalance:s.tokenBalance.toString(),vUsdBalance:s.vUsdBalance.toString(),accRewardPerShareP:s.accRewardPerShareP.toString()};return ue(A,{decimals:r,feeShare:o},c)}function Qn(A){let i=A.amount,a="0x"+A.recipient.toString("hex"),s=A.sourceChainId,r=A.destinationChainId,o="0x"+A.receiveToken.toString("hex"),c="0x"+A.nonce.toString("hex"),m=1,l="0x"+A.chainBridge.toString("hex"),u=kt.utils.encodePacked({t:"uint256",v:i},{t:"bytes32",v:a},{t:"uint256",v:s},{t:"bytes32",v:o},{t:"uint256",v:c},{t:"uint8",v:m});if(!u)throw new S("message cannot be undefined");let p=kt.utils.keccak256(Buffer.from(u.replace("0x",""),"hex")),d=Buffer.from(p.replace("0x",""),"hex");d[0]=s,d[1]=r;let g=kt.utils.encodePacked({t:"bytes32",v:"0x"+d.toString("hex")},{t:"bytes32",v:l});if(!g)throw new Ze("messageWithSigner cannot be undefined");let h=kt.utils.keccak256(Buffer.from(g.replace("0x",""),"hex")),b=Buffer.from(h.replace("0x",""),"hex");return b[0]=d[0],b[1]=d[1],b}import{ComputeBudgetInstruction as zn,ComputeBudgetProgram as xt,Connection as jn,TransactionMessage as Ka}from"@solana/web3.js";import{Big as Qa}from"big.js";import{AddressLookupTableAccount as Hn}from"@solana/web3.js";async function Fe(A,i){return await Promise.all(A.message.addressTableLookups.map(async a=>new Hn({key:a.accountKey,state:Hn.deserialize(await i.getAccountInfo(a.accountKey).then(s=>{if(!s)throw new S("Cannot get AccountInfo");return s.data}))})))}var mn="AUTO";async function Oe(A,i,a){let s=new jn(a,"confirmed"),r=(await s.simulateTransaction(A)).value.unitsConsumed;await $n(A.instructions,r,i,s)}async function qn(A,i,a){let s=new jn(a,"confirmed"),r=await Fe(A,s),o=Ka.decompile(A.message,{addressLookupTableAccounts:r});if(A.serialize().length>1232)throw new ft;await $n(o.instructions,769230,i,s),A.message=o.compileToV0Message(r)}async function $n(A,i,a,s){if(i>0){let r=Ha(i,A);if(a?.solana){let o=a.solana;if(o===mn)await ln(A,s);else if("pricePerUnitInMicroLamports"in o)await ln(A,s,o.pricePerUnitInMicroLamports);else{let c=Qa(o.extraFeeInLamports).div(r).mul(Qe(6)).toFixed(0);await ln(A,s,c)}}}}function Ha(A,i){let a=i.findIndex(o=>o.programId.equals(xt.programId)&&zn.decodeInstructionType(o)==="SetComputeUnitLimit"),s=Number((A*1.3).toFixed(0)),r=xt.setComputeUnitLimit({units:s});return a>=0?i[a]=r:i.push(r),s.toString()}async function ln(A,i,a){let s=A.findIndex(c=>c.programId.equals(xt.programId)&&zn.decodeInstructionType(c)==="SetComputeUnitPrice"),r=BigInt(a||await za(i)),o=xt.setComputeUnitPrice({microLamports:r});return s>=0?A[s]=o:A.push(o),r.toString()}async function za(A){let i=await A.getRecentPrioritizationFees(),a=0;for(let s of i)a+=s.prioritizationFee;return(a/i.length).toFixed(0)}import{NATIVE_MINT as ja}from"@solana/spl-token";import{Connection as qa,TransactionMessage as ea,VersionedTransaction as $a}from"@solana/web3.js";import ta,{AxiosError as na}from"axios";var Wt=class{connection;jupiterUrl;maxAccounts;constructor(i,a,s){this.connection=new qa(i),this.jupiterUrl=a.replace(/\/$/,""),this.maxAccounts=s}async getJupiterSwapTx(i,a,s,r){let o;try{let d=r?"ExactOut":"ExactIn",g=`${this.jupiterUrl}/quote?inputMint=${a}&outputMint=${ja.toString()}&amount=${s}&swapMode=${d}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(g+=`&maxAccounts=${this.maxAccounts}`),o=await ta.get(g)}catch(d){throw d instanceof na&&d.response&&d.response.data&&d.response.data.error?new V(d.response.data.error):new V("Cannot get route")}let c;if(r&&o?.data?.inAmount)c=o.data.inAmount;else if(r)throw new V("Cannot get inAmount");let m;try{m=await ta.post(`${this.jupiterUrl}/swap`,{quoteResponse:o.data,userPublicKey:i,wrapAndUnwrapSol:!0})}catch(d){throw d instanceof na&&d.response&&d.response.data&&d.response.data.error?new V(d.response.data.error):new V("Cannot get swap transaction")}let l;if(m?.data?.swapTransaction)l=m.data.swapTransaction;else throw new V("Cannot get swap transaction");let u=Buffer.from(l,"base64"),p=$a.deserialize(u);return r?{tx:p,amountIn:c}:{tx:p}}async amendJupiterWithSdkTx(i,a){try{let s=await Fe(i,this.connection),r=await Fe(a,this.connection),o=ea.decompile(i.message,{addressLookupTableAccounts:s}),c=ea.decompile(a.message,{addressLookupTableAccounts:r});if(c.instructions.shift(),o.instructions.push(...c.instructions),s.push(...r),i.message=o.compileToV0Message(s),a.message.header.numRequiredSignatures===2&&i.signatures.length===1){let m=a.signatures[0];if(!m)throw new S("Signature is undefined");i.signatures.push(m)}return i}catch(s){throw s instanceof Error&&s.message?new V(`Some error occurred during creation final swap and bridge transaction. ${s.message}`):new V("Some error occurred during creation final swap and bridge transaction")}}};var dn=1e6,ia=1.1,Ft=class extends ie{constructor(a,s,r){super();this.solanaRpcUrl=a;this.params=s;this.api=r;this.jupiterService=new Wt(a,s.jupiterUrl,s.jupiterMaxAccounts)}chainType="SOLANA";jupiterService;async buildRawTransactionSwap(a){let s=Re(this.chainType,a);return await this.buildSwapTransaction(s,a.sourceToken.poolAddress,a.destinationToken.poolAddress,a.txFeeParams)}async buildSwapTransaction(a,s,r,o){let{fromAccountAddress:c,amount:m,contractAddress:l,fromTokenAddress:u,toTokenAddress:p,toAccountAddress:d,minimumReceiveAmount:g}=a,h=c,b=l,T=u,y=p,P=r,B=d,w=new F(h),G=Ce(this.solanaRpcUrl,w.toString()),k=new un(et,b,G),R=await _e(k.programId),J=await Be(k.programId),_=new F(T),Ae=await Ne(_,k.programId),ce=new F(s),ge=await ae(w,_),q=new F(B),Y=new F(y),j=await Ne(Y,k.programId),$=new F(P),K=await ae(q,Y),me=[Ie.ComputeBudgetProgram.setComputeUnitLimit({units:dn})];try{await Ve(K,G)}catch{let ha=await ei.associatedToken(G).methods.create().accounts({mint:Y,owner:q,associatedAccount:K}).instruction();me.push(ha)}let le=await k.methods.swap(new Ee(m),new Ee(g||0)).accounts({payer:w,config:J,bridgeAuthority:R,user:w,sendBridgeToken:Ae,sendMint:_,sendPool:ce,sendUserToken:ge,receiveBridgeToken:j,receiveMint:Y,receivePool:$,receiveUserToken:K}).preInstructions(me).transaction(),ee=G.connection;return le.recentBlockhash=(await ee.getLatestBlockhash()).blockhash,le.feePayer=w,await Oe(le,o,this.solanaRpcUrl),await this.convertToVersionedTransaction(le,ee)}async buildRawTransactionSend(a){let s=await Te(this.chainType,a,this.api),r=this.addPoolAddress(a,s),o=r.gasFeePaymentMethod=="stablecoin",c;if(o)try{let{tx:u,solTxSendUpdatedParams:p}=await this.processJup(r,a,!0);c=u,r={...r,...p}}catch{try{let{tx:p,solTxSendUpdatedParams:d}=await this.processJup(r,a,!1);c=p,r={...r,...d}}catch(p){throw p instanceof D?p:p instanceof Error&&p.message?new V(`Some error occurred during creation Jupiter swap transaction. ${p.message}`):new V("Some error occurred during creation Jupiter swap transaction")}}let m,l;switch(s.messenger){case 1:{let u=await this.prepareSwapAndBridgeData(r);m=await this.buildSwapAndBridgeAllbridgeTransaction(u);break}case 2:{let u=await this.prepareSwapAndBridgeData(r),{transaction:p,messageAccount:d}=await this.buildSwapAndBridgeWormholeTransaction(u);m=p,l=d;break}case 3:{let u=await this.prepareSwapAndBridgeCctpData(r),{transaction:p,messageSentEventDataKeypair:d}=await this.buildSwapAndBridgeCctpTransaction(a.destinationToken.chainSymbol,u);m=p,l=d;break}}if(o){if(!c)throw new V("Swap tx is absent");m=await this.jupiterService.amendJupiterWithSdkTx(c,m)}return await qn(m,a.txFeeParams,this.solanaRpcUrl),l&&m.sign([l]),m}async processJup(a,s,r){let{fee:o,extraGas:c,gasFeePaymentMethod:m}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(s.sourceToken.decimals,a),l=r?se(o):se(a.fee);c&&(l=l.plus(c)),r||(l=l.mul(ia));let{tx:u,amountIn:p}=await this.jupiterService.getJupiterSwapTx(s.fromAccountAddress,s.sourceToken.tokenAddress,l.toFixed(0),r),d;if(r){if(!p)throw new V("Cannot get inAmount");d=se(a.amount).minus(se(p).mul(ia)).toFixed(0)}else d=se(a.amount).minus(l).toFixed(0);if(se(d).lte(0))throw new Ge(`Amount not enough to pay fee, ${C(se(d).minus(1).neg(),s.sourceToken.decimals).toFixed()} stables is missing`);return{tx:u,solTxSendUpdatedParams:{amount:d,fee:o,extraGas:c,gasFeePaymentMethod:m}}}addPoolAddress(a,s){return{...s,poolAddress:a.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(a,s){if(s.gasFeePaymentMethod=="stablecoin"){let r=(await this.api.getReceiveTransactionCost({sourceChainId:s.fromChainId,destinationChainId:s.toChainId,messenger:s.messenger})).sourceNativeTokenPrice,o=se(s.fee).div(r).mul(se(10).pow(I.getChainDecimalsByType("SOLANA")-a)).toFixed(0),c;return s.extraGas&&(c=se(s.extraGas).div(r).mul(se(10).pow(I.getChainDecimalsByType("SOLANA")-a)).toFixed(0)),{fee:o,extraGas:c,gasFeePaymentMethod:"native"}}return{fee:s.fee,extraGas:s.extraGas,gasFeePaymentMethod:"native"}}getExtraGasInstruction(a,s,r){return Ie.SystemProgram.transfer({fromPubkey:s,toPubkey:r,lamports:+a})}async prepareSwapAndBridgeData(a){let{amount:s,contractAddress:r,fromChainId:o,fromAccountAddress:c,fromTokenAddress:m,toChainId:l,toAccountAddress:u,toTokenAddress:p,poolAddress:d,extraGas:g}=a,h=m,b=c,T=l,y=p,P=u,B=r,w=o,G=Ce(this.solanaRpcUrl,b),k=new un(et,B,G),R=Array.from(Ct()),J=new F(d),_=await Kn(s,k,J),Ae=await Fn(R,k.programId),ce=await _e(k.programId),ge=await ae(new F(b),new F(h)),q=await Ne(new F(h),k.programId),Y=await sn(T,k.programId),j=await Zn(T,Buffer.from(y),k.programId),$=await Be(k.programId),K=await k.account.config.fetch($),me=await ze(T,K.gasOracleProgramId),le=await ze(w,K.gasOracleProgramId),ee=Qn({amount:_,recipient:Buffer.from(P),nonce:Buffer.from(R),receiveToken:Buffer.from(y),destinationChainId:T,sourceChainId:w,chainBridge:(await _e(k.programId)).toBuffer()}),v={};return v.bridge=k,v.amount=new Ee(s),v.vusdAmount=new Ee(_),v.nonce=R,v.recipient=Array.from(P),v.receiveToken=Array.from(y),v.poolAccount=J,v.lockAccount=Ae,v.bridgeAuthority=ce,v.userToken=ge,v.bridgeTokenAccount=q,v.chainBridgeAccount=Y,v.otherBridgeTokenAccount=j,v.userAccount=new F(b),v.destinationChainId=T,v.mint=new F(h),v.config=$,v.configAccountInfo=K,v.gasPrice=me,v.thisGasPrice=le,v.message=ee,g&&(v.extraGasInstruction=this.getExtraGasInstruction(g,v.userAccount,$)),v}async buildSwapAndBridgeAllbridgeTransaction(a){let{bridge:s,vusdAmount:r,nonce:o,recipient:c,receiveToken:m,poolAccount:l,lockAccount:u,bridgeAuthority:p,userToken:d,bridgeTokenAccount:g,chainBridgeAccount:h,otherBridgeTokenAccount:b,userAccount:T,destinationChainId:y,mint:P,config:B,configAccountInfo:w,gasPrice:G,thisGasPrice:k,message:R,extraGasInstruction:J}=a,_=w.allbridgeMessengerProgramId,Ae=await rn(y,_),ce=await Be(_),ge=await Dn(R,_),q=[];J&&q.push(J);let Y=await s.methods.swapAndBridge({vusdAmount:r,nonce:o,destinationChainId:y,recipient:c,receiveToken:m}).accounts({mint:P,user:T,config:B,lock:u,pool:l,gasPrice:G,thisGasPrice:k,bridgeAuthority:p,userToken:d,bridgeToken:g,chainBridge:h,messenger:_,messengerGasUsage:Ae,messengerConfig:ce,sentMessageAccount:ge,otherBridgeToken:b}).preInstructions([Ie.ComputeBudgetProgram.setComputeUnitLimit({units:dn})]).postInstructions(q).transaction(),j=Ce(this.solanaRpcUrl,T.toString()).connection;return Y.recentBlockhash=(await j.getLatestBlockhash()).blockhash,Y.feePayer=T,await this.convertToVersionedTransaction(Y,j)}async convertToVersionedTransaction(a,s){let r=await s.getAddressLookupTable(new F(this.params.solanaLookUpTable)).then(c=>c.value);if(!r)throw new S("Cannot find allbridgeLookupTableAccount");let o=new Ie.TransactionMessage({payerKey:a.feePayer,recentBlockhash:a.recentBlockhash,instructions:a.instructions}).compileToV0Message([r]);return new Ie.VersionedTransaction(o)}async buildSwapAndBridgeWormholeTransaction(a){let{bridge:s,vusdAmount:r,nonce:o,recipient:c,receiveToken:m,poolAccount:l,lockAccount:u,bridgeAuthority:p,userToken:d,bridgeTokenAccount:g,chainBridgeAccount:h,otherBridgeTokenAccount:b,userAccount:T,destinationChainId:y,mint:P,config:B,configAccountInfo:w,gasPrice:G,thisGasPrice:k,message:R,extraGasInstruction:J}=a,_=this.params.wormholeMessengerProgramId,[Ae]=F.findProgramAddressSync([Buffer.from("Bridge")],new F(_)),[ce]=F.findProgramAddressSync([Buffer.from("fee_collector")],new F(_)),[ge]=F.findProgramAddressSync([Buffer.from("Sequence"),p.toBuffer()],new F(_)),q=await rn(y,w.wormholeMessengerProgramId),Y=await Be(w.wormholeMessengerProgramId),j=aa.generate(),$=Ce(this.solanaRpcUrl,T.toString()),K=await $.connection.getAccountInfo(Ae);if(K==null)throw new S("Cannot fetch wormhole bridge account info");let me=new Ee(K.data.slice(16,24),"le").toString(),le=ti.transfer({fromPubkey:T,toPubkey:ce,lamports:+me}),ee=[];J&&ee.push(J);let v={mint:P,user:T,config:B,lock:u,pool:l,gasPrice:G,thisGasPrice:k,bridgeAuthority:p,userToken:d,bridgeToken:g,chainBridge:h,otherBridgeToken:b,messengerGasUsage:q,wormholeProgram:_,bridge:Ae,message:j.publicKey,wormholeMessenger:w.wormholeMessengerProgramId,sequence:ge,feeCollector:ce,wormholeMessengerConfig:Y,clock:Ie.SYSVAR_CLOCK_PUBKEY},mt=await s.methods.swapAndBridgeWormhole({vusdAmount:r,nonce:o,destinationChainId:y,recipient:c,receiveToken:m}).accounts(v).preInstructions([Ie.ComputeBudgetProgram.setComputeUnitLimit({units:dn}),le]).postInstructions(ee).signers([j]).transaction();return mt.recentBlockhash=(await $.connection.getLatestBlockhash()).blockhash,mt.feePayer=T,{transaction:await this.convertToVersionedTransaction(mt,$.connection),messageAccount:j}}async prepareSwapAndBridgeCctpData(a){let{contractAddress:s,amount:r,fromAccountAddress:o,fromTokenAddress:c,toChainId:m,toAccountAddress:l,toTokenAddress:u,extraGas:p}=a,d=s;if(!d)throw new te("Such route does not support CCTP protocol");let g=4,h=o,b=u,T=l,y=Ce(this.solanaRpcUrl,h),P=new un(Jn,d,y),B=new F(c),w=await _n(B,P.programId),G=new F(h),k=await P.account.cctpBridge.fetch(w),R={};return R.cctpBridge=P,R.cctpBridgeAccount=w,R.cctpAddressAccount=new F(d),R.amount=new Ee(r),R.recipient=Array.from(T),R.receiveToken=Array.from(b),R.userToken=await ae(G,B),R.bridgeAuthority=await Gn(w,P.programId),R.bridgeTokenAccount=await Nn(B,P.programId),R.chainBridgeAccount=await sn(m,P.programId),R.userAccount=G,R.destinationChainId=m,R.mint=B,R.gasPrice=await ze(m,k.gasOracleProgramId),R.thisGasPrice=await ze(g,k.gasOracleProgramId),R.provider=y,p&&(R.extraGasInstruction=this.getExtraGasInstruction(p,R.userAccount,w)),R}async buildSwapAndBridgeCctpTransaction(a,s){let{cctpBridge:r,cctpBridgeAccount:o,amount:c,recipient:m,receiveToken:l,bridgeAuthority:u,userToken:p,bridgeTokenAccount:d,chainBridgeAccount:g,userAccount:h,destinationChainId:b,mint:T,gasPrice:y,thisGasPrice:P,extraGasInstruction:B,provider:w}=s,G=this.params.cctpParams.cctpDomains[a],k=this.params.cctpParams.cctpTransmitterProgramId,R=this.params.cctpParams.cctpTokenMessengerMinter;if(G==null||!k||!R)throw new S("CCTP is not configured");let J=new F(k),_=new F(R),{messageTransmitterAccount:Ae,tokenMessenger:ce,tokenMessengerEventAuthority:ge,tokenMinter:q,localToken:Y,remoteTokenMessengerKey:j,authorityPda:$}=Vn(G,T,J,_),K=[];B&&K.push(B);let me=aa.generate(),le=Un(r.programId,me.publicKey),ee=await r.methods.bridge({amount:c,destinationChainId:b,recipient:m,receiveToken:l}).accounts({mint:T,user:h,cctpBridge:o,messageSentEventData:me.publicKey,lock:le,cctpMessenger:_,messageTransmitterProgram:J,messageTransmitterAccount:Ae,tokenMessenger:ce,tokenMinter:q,localToken:Y,remoteTokenMessengerKey:j,authorityPda:$,eventAuthority:ge,bridgeToken:d,gasPrice:y,thisGasPrice:P,chainBridge:g,userToken:p,bridgeAuthority:u}).preInstructions([Ie.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(K).transaction(),v=w.connection;return ee.recentBlockhash=(await v.getLatestBlockhash()).blockhash,ee.feePayer=h,{transaction:await this.convertToVersionedTransaction(ee,v),messageSentEventDataKeypair:me}}send(a){throw new L}};import{Address as pn,contract as jd}from"@stellar/stellar-sdk";import{Big as ii}from"big.js";import{contract as n}from"@stellar/stellar-sdk";var ni=n.Spec,ai=n.Client;var tt=class extends ai{constructor(a){super(new ni(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),a);this.options=a}fromJSON={initialize:this.txFromJSON,swap_and_bridge:this.txFromJSON,receive_tokens:this.txFromJSON,swap:this.txFromJSON,stop_swap:this.txFromJSON,start_swap:this.txFromJSON,set_gas_oracle:this.txFromJSON,set_stop_authority:this.txFromJSON,set_rebalancer:this.txFromJSON,set_messenger:this.txFromJSON,set_gas_usage:this.txFromJSON,register_bridge:this.txFromJSON,add_bridge_token:this.txFromJSON,remove_bridge_token:this.txFromJSON,add_pool:this.txFromJSON,withdraw_gas_tokens:this.txFromJSON,withdraw_bridging_fee_in_tokens:this.txFromJSON,has_processed_message:this.txFromJSON,has_received_message:this.txFromJSON,get_pool_address:this.txFromJSON,get_config:this.txFromJSON,get_stop_authority:this.txFromJSON,get_transaction_cost:this.txFromJSON,get_gas_usage:this.txFromJSON,get_admin:this.txFromJSON,get_gas_oracle:this.txFromJSON,get_another_bridge:this.txFromJSON,set_admin:this.txFromJSON,upgrade:this.txFromJSON}};var Gt=class extends ie{constructor(a,s,r){super();this.nodeRpcUrlsConfig=a;this.params=s;this.api=r}chainType="SRB";async buildRawTransactionSend(a){let s=await Te(this.chainType,a,this.api);return await this.buildRawTransactionSendFromParams(s)}async buildRawTransactionSendFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toChainId:m,toAccountAddress:l,toTokenAddress:u,fee:p,gasFeePaymentMethod:d,extraGas:g}=a,h=p;g&&(h=ii(h).plus(g).toFixed());let b=this.getContract(tt,r,o),T;return d==="stablecoin"?T=await b.swap_and_bridge({sender:o,token:pn.contract(Buffer.from(c)).toString(),amount:BigInt(s),recipient:Buffer.from(l),destination_chain_id:+m,receive_token:Buffer.from(u),nonce:je(),gas_amount:BigInt(0),fee_token_amount:BigInt(h)}):T=await b.swap_and_bridge({sender:o,token:pn.contract(Buffer.from(c)).toString(),amount:BigInt(s),recipient:Buffer.from(l),destination_chain_id:+m,receive_token:Buffer.from(u),nonce:je(),gas_amount:BigInt(h),fee_token_amount:BigInt(0)}),T.toXDR()}async buildRawTransactionSwap(a){let s=Re(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s)}async buildRawTransactionSwapFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:l,minimumReceiveAmount:u}=a;return(await this.getContract(tt,r,o).swap({sender:o,amount:BigInt(s),token:pn.contract(Buffer.from(c)).toBuffer(),receive_token:Buffer.from(l),recipient:m,receive_amount_min:BigInt(u)})).toXDR()}send(a){throw new L}getContract(a,s,r){let o={publicKey:r,contractId:s,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(o)}};import{Big as oi}from"big.js";import si from"bn.js";function Zt(A){return"0x"+new si(A).toString("hex")}function sa(A){return new Promise(i=>setTimeout(()=>i(),A))}async function Dt(A,i){let a=await A.trx.sign(i);if(!a.signature)throw new Ze("Transaction was not signed properly");let r=(await A.trx.sendRawTransaction(a)).transaction.txID;return await ri(A,r),{txId:r}}async function ri(A,i,a=1e4){let s=Date.now();for(;;){if(Date.now()-s>a)throw new Je("Transaction not found");let r=await A.trx.getUnconfirmedTransactionInfo(i);if(!r?.receipt){await sa(2e3);continue}if(r.receipt.result==="SUCCESS")return r;throw new Je(`Transaction status is ${r.receipt.result}`)}}var nt=class extends ie{constructor(a,s){super();this.tronWeb=a;this.api=s}chainType="TRX";async send(a){let s=await Te(this.chainType,a,this.api),r=await this.buildRawTransactionSendFromParams(s);return await Dt(this.tronWeb,r)}async buildRawTransactionSwap(a){let s=Re(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s)}async buildRawTransactionSwapFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:l,minimumReceiveAmount:u}=a,p=[{type:"uint256",value:s},{type:"bytes32",value:c},{type:"bytes32",value:l},{type:"address",value:m},{type:"uint256",value:u}];return this.buildRawTransaction(r,"swap(uint256,bytes32,bytes32,address,uint256)",p,"0",o)}async buildRawTransactionSend(a){let s=await Te(this.chainType,a,this.api);return this.buildRawTransactionSendFromParams(s)}async buildRawTransactionSendFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toChainId:m,toAccountAddress:l,toTokenAddress:u,messenger:p,fee:d,gasFeePaymentMethod:g,extraGas:h}=a,b=d;h&&(b=oi(b).plus(h).toFixed());let T=je().toString(),y,P,B;return p==3?(g==="stablecoin"?(y=[{type:"uint256",value:s},{type:"bytes32",value:l},{type:"uint256",value:m},{type:"uint256",value:b}],P="0"):(y=[{type:"uint256",value:s},{type:"bytes32",value:l},{type:"uint256",value:m},{type:"uint256",value:0}],P=b),B="bridge(uint256,bytes32,uint256,uint256)"):(g==="stablecoin"?(y=[{type:"bytes32",value:c},{type:"uint256",value:s},{type:"bytes32",value:l},{type:"uint256",value:m},{type:"bytes32",value:u},{type:"uint256",value:T},{type:"uint8",value:p},{type:"uint256",value:b}],P="0"):(y=[{type:"bytes32",value:c},{type:"uint256",value:s},{type:"bytes32",value:l},{type:"uint256",value:m},{type:"bytes32",value:u},{type:"uint256",value:T},{type:"uint8",value:p},{type:"uint256",value:0}],P=b),B="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)"),this.buildRawTransaction(r,B,y,P,o)}async buildRawTransaction(a,s,r,o,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(a,s,{callValue:+o},r,c);if(!m?.result?.result)throw new S("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var _t=class{constructor(i,a,s,r){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=r;this.rawTxBuilder=new vt(i,a,s,r)}rawTxBuilder;async getAllowance(i,a){let s,r;a?(s=i,r=a):r=i;let o=$e(r.token,r.messenger);return await this.tokenService.getAllowance({...r,spender:o},s)}async checkAllowance(i,a){let s,r;a?(s=i,r=a):r=i;let o=$e(r.token,r.messenger);return this.tokenService.checkAllowance({...r,spender:o},s)}async approve(i,a){let s=$e(a.token,a.messenger);return this.tokenService.approve(i,{...a,spender:s})}async send(i,a){return x(a.amount),W("amount",a.amount,a.sourceToken.decimals),Mt(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).send(a)}};function $e(A,i){if(i&&i==3){if(A.cctpAddress)return A.cctpAddress;throw new te("Such route does not support CCTP protocol")}else return A.bridgeAddress}function Mt(A,i,a,s,r){switch(I.getChainProperty(A).chainType){case"EVM":{if(r)return new qe(r,i,a);{let o=a.getNodeRpcUrl(A);return new qe(new ci(o),i,a)}}case"TRX":{if(r)return new nt(r,i);{let o=a.getNodeRpcUrl(A);return new nt(new Ai({fullHost:o,solidityNode:o,eventServer:o}),i)}}case"SOLANA":return new Ft(a.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:s.wormholeMessengerProgramId,solanaLookUpTable:s.solanaLookUpTable,cctpParams:s.cctpParams,jupiterUrl:s.jupiterUrl,jupiterMaxAccounts:s.jupiterMaxAccounts},i);case"SRB":return new Gt(a,s,i)}}import{Big as hi}from"big.js";import bi from"timed-cache";import{TronWeb as Ti}from"tronweb";import{FMT_BYTES as Pi,FMT_NUMBER as Si,Web3 as wi}from"web3";import{Big as Pe}from"big.js";function ra(A,i,a,s,r){let o=M(A,3),c=Pe(o),m=Pe(a),l=Pe(s).plus(r),u,p;if(m.eq(0)||l.eq(0)){let g=c.div(2);u=Pe(s).plus(g),p=Pe(r).plus(g)}else u=Pe(s).plus(c.mul(s).div(l)),p=Pe(r).plus(c.mul(r).div(l));return Pe(wn(i,u.toFixed(),p.toFixed())).minus(m).toFixed()}function oa(A){let i=M(A,3);return Pe(i).round().toFixed()}import{Web3 as ve}from"web3";var mi={abi:[{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"}]},Xe=mi;var z=class{lpAmount;rewardDebt;constructor(i){this.lpAmount=i.lpAmount,this.rewardDebt=i.rewardDebt}get userLiquidity(){return C(this.lpAmount,3).toFixed()}earned(i,a){let s=Pn(this.lpAmount,this.rewardDebt,i.accRewardPerShareP,i.p);return a?C(s,a).toFixed():s}};var re=class{};var at=class extends re{constructor(a,s){super();this.web3=a;this.api=s}chainType="EVM";P=52;async getUserBalanceInfo(a,s){let r;try{r=await wt(this.getUserBalanceInfoByBatch(a,s),`Cannot get UserBalanceInfo for ${s.name} on ${s.chainSymbol}`,5e3)}catch{r=await an(()=>this.getUserBalanceInfoPerProperty(a,s),`Cannot get UserBalanceInfo for ${s.name} on ${s.chainSymbol}`,5,2e3)}return r}async getPoolInfoFromChain(a){let s;try{s=await wt(this.getPoolInfoByBatch(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5e3)}catch{s=await an(()=>this.getPoolInfoPerProperty(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5,2e3)}return s}async getUserBalanceInfoByBatch(a,s){let r=new this.web3.eth.BatchRequest,o=this.getPoolContract(s.poolAddress),c=o.methods.userRewardDebt(a).encodeABI(),m=o.methods.balanceOf(a).encodeABI();r.add({method:"eth_call",params:[{to:s.poolAddress,data:c},"latest"]}),r.add({method:"eth_call",params:[{to:s.poolAddress,data:m},"latest"]});let[l,u]=await r.execute();if(l&&u&&!l.error&&!u.error)return new z({lpAmount:ve.utils.toBigInt(u.result).toString(),rewardDebt:ve.utils.toBigInt(l.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(a,s){let r=(await this.getPoolContract(s.poolAddress).methods.userRewardDebt(a).call()).toString(),o=(await this.getPoolContract(s.poolAddress).methods.balanceOf(a).call()).toString();return new z({lpAmount:o,rewardDebt:r})}async getPoolInfoByBatch(a){let s=new this.web3.eth.BatchRequest,r=this.getPoolContract(a.poolAddress),o=r.methods.a().encodeABI(),c=r.methods.d().encodeABI(),m=r.methods.tokenBalance().encodeABI(),l=r.methods.vUsdBalance().encodeABI(),u=r.methods.totalSupply().encodeABI(),p=r.methods.accRewardPerShareP().encodeABI();s.add({method:"eth_call",params:[{to:a.poolAddress,data:o},"latest"]}),s.add({method:"eth_call",params:[{to:a.poolAddress,data:c},"latest"]}),s.add({method:"eth_call",params:[{to:a.poolAddress,data:m},"latest"]}),s.add({method:"eth_call",params:[{to:a.poolAddress,data:l},"latest"]}),s.add({method:"eth_call",params:[{to:a.poolAddress,data:u},"latest"]}),s.add({method:"eth_call",params:[{to:a.poolAddress,data:p},"latest"]});let[d,g,h,b,T,y]=await s.execute();if(d&&g&&h&&b&&T&&y&&!d.error&&!g.error&&!h.error&&!b.error&&!T.error&&!y.error){let P=ve.utils.toBigInt(h.result).toString(),B=ve.utils.toBigInt(b.result).toString(),w=H({tokenBalance:P,vUsdBalance:B});return{aValue:ve.utils.toBigInt(d.result).toString(),dValue:ve.utils.toBigInt(g.result).toString(),tokenBalance:P,vUsdBalance:B,totalLpAmount:ve.utils.toBigInt(T.result).toString(),accRewardPerShareP:ve.utils.toBigInt(y.result).toString(),p:this.P,imbalance:w}}throw new Error("Batched failed")}async getPoolInfoPerProperty(a){let s=this.getPoolContract(a.poolAddress),r=(await s.methods.a().call()).toString(),o=(await s.methods.d().call()).toString(),c=(await s.methods.tokenBalance().call()).toString(),m=(await s.methods.vUsdBalance().call()).toString(),l=(await s.methods.totalSupply().call()).toString(),u=(await s.methods.accRewardPerShareP().call()).toString(),p=H({tokenBalance:c,vUsdBalance:m});return{aValue:r,dValue:o,tokenBalance:c,vUsdBalance:m,totalLpAmount:l,accRewardPerShareP:u,p:this.P,imbalance:p}}async buildRawTransactionDeposit(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.deposit(a.amount).encodeABI()})}async buildRawTransactionWithdraw(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.withdraw(a.amount).encodeABI()})}async buildRawTransactionClaimRewards(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(a){return{from:a.accountAddress,to:a.token.poolAddress,value:"0"}}getPoolContract(a){return new this.web3.eth.Contract(Xe.abi,a)}};var Nt=class{constructor(i,a,s,r){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=r}async approve(i,a){if(a){let s=i,r=a;return this.tokenService.buildRawTransactionApprove({...r,spender:r.token.poolAddress},s)}else{let s=i;return this.tokenService.buildRawTransactionApprove({...s,spender:s.token.poolAddress})}}async deposit(i,a){return x(i.amount),W("amount",i.amount,i.token.decimals),i.amount=M(i.amount,i.token.decimals).toFixed(),Ye(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionDeposit(i)}async withdraw(i,a){return x(i.amount),W("amount",i.amount,i.token.decimals),i.amount=M(i.amount,3).toFixed(),Ye(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionWithdraw(i)}async claimRewards(i,a){return Ye(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionClaimRewards(i)}};import{AnchorProvider as li,BN as Aa,Program as ui,Spl as di,web3 as pi}from"@project-serum/anchor";import{Connection as gi,PublicKey as Me}from"@solana/web3.js";var Ut=class extends re{constructor(a,s){super();this.solanaRpcUrl=a;this.api=s}chainType="SOLANA";P=48;async getUserBalanceInfo(a,s){let r=this.buildAnchorProvider(a),o=this.getBridge(s.bridgeAddress,r),c=new Me(s.poolAddress),m=await o.account.pool.fetch(c);try{let l=await on(new Me(a),m.mint,o.programId),{lpAmount:u,rewardDebt:p}=await o.account.userDeposit.fetch(l);return new z({lpAmount:u.toString(),rewardDebt:p.toString()})}catch{return new z({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(a){let s=this.buildAnchorProvider(a.bridgeAddress),r=await this.getBridge(a.bridgeAddress,s).account.pool.fetch(a.poolAddress),o=r.vUsdBalance.toString(),c=r.tokenBalance.toString(),m=H({tokenBalance:c,vUsdBalance:o});return{dValue:r.d.toString(),aValue:r.a.toString(),totalLpAmount:r.totalLpAmount.toString(),vUsdBalance:o,tokenBalance:c,accRewardPerShareP:r.accRewardPerShareP.toString(),p:this.P,imbalance:m}}async buildRawTransactionDeposit(a){let{bridge:s,accounts:r,preInstructions:o}=await this.prepareDataForTransaction(a),c=await s.methods.deposit(new Aa(a.amount)).accounts(r).preInstructions(o).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new Me(a.accountAddress),await Oe(c,a.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionWithdraw(a){let{bridge:s,accounts:r,preInstructions:o}=await this.prepareDataForTransaction(a),c=await s.methods.withdraw(new Aa(a.amount)).accounts(r).preInstructions(o).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new Me(a.accountAddress),await Oe(c,a.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionClaimRewards(a){let{bridge:s,accounts:r,preInstructions:o}=await this.prepareDataForTransaction(a),c=await s.methods.claimRewards().accounts(r).preInstructions(o).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new Me(a.accountAddress),await Oe(c,a.txFeeParams,this.solanaRpcUrl),c}async prepareDataForTransaction(a){let s=this.buildAnchorProvider(a.accountAddress),r=this.getBridge(a.token.bridgeAddress,s),{accounts:o,preInstructions:c}=await this._getLPTransactionData(r,a.token.poolAddress,a.accountAddress,s);return{bridge:r,accounts:o,preInstructions:c}}getBridge(a,s){return new ui(et,a,s)}buildAnchorProvider(a){let s=new gi(this.solanaRpcUrl,"confirmed"),r=new Me(a);return new li(s,{publicKey:r},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(a,s,r,o){let c=new Me(r),m=await Be(a.programId),l=await _e(a.programId),u=new Me(s),d=(await a.account.pool.fetch(u)).mint,g=await ae(c,d),h=await Ne(d,a.programId),b=await on(c,d,a.programId),T=[pi.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await Ve(g,o)}catch{let w=await di.associatedToken(o).methods.create().accounts({mint:d,owner:c,associatedAccount:g}).instruction();T.push(w)}try{await a.account.userDeposit.fetch(b)}catch{let B=await a.methods.initDepositAccount().accounts({mint:d,user:c,userDeposit:b}).instruction();T.push(B)}return{accounts:{mint:d,user:c,config:m,pool:u,bridgeAuthority:l,userDeposit:b,userToken:g,bridgeToken:h},preInstructions:T}}};import{contract as qd}from"@stellar/stellar-sdk";import{contract as t}from"@stellar/stellar-sdk";var fi=t.Spec,yi=t.Client;var Vt=class extends yi{constructor(a){super(new fi(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),a);this.options=a}fromJSON={initialize:this.txFromJSON,deposit:this.txFromJSON,withdraw:this.txFromJSON,swap_to_v_usd:this.txFromJSON,swap_from_v_usd:this.txFromJSON,claim_rewards:this.txFromJSON,set_fee_share:this.txFromJSON,adjust_total_lp_amount:this.txFromJSON,set_balance_ratio_min_bp:this.txFromJSON,stop_deposit:this.txFromJSON,start_deposit:this.txFromJSON,stop_withdraw:this.txFromJSON,start_withdraw:this.txFromJSON,set_stop_authority:this.txFromJSON,set_bridge:this.txFromJSON,set_admin:this.txFromJSON,set_admin_fee_share:this.txFromJSON,claim_admin_fee:this.txFromJSON,pending_reward:this.txFromJSON,get_pool:this.txFromJSON,get_admin:this.txFromJSON,get_stop_authority:this.txFromJSON,get_bridge:this.txFromJSON,get_user_deposit:this.txFromJSON,upgrade:this.txFromJSON}};var Ot=class extends re{constructor(a,s,r){super();this.nodeRpcUrlsConfig=a;this.params=s;this.api=r}chainType="SRB";P=48;async getUserBalanceInfo(a,s){let o=(await this.getContract(s.poolAddress).get_user_deposit({user:a})).result;if(o.isErr())throw new S;let c=o.unwrap();return new z({lpAmount:c.lp_amount.toString(),rewardDebt:c.reward_debt.toString()})}async getPoolInfoFromChain(a){let r=(await this.getContract(a.poolAddress).get_pool()).result;if(r.isErr())throw new S;let o=r.unwrap();return{aValue:o.a.toString(),accRewardPerShareP:o.acc_reward_per_share_p.toString(),dValue:o.d.toString(),tokenBalance:o.token_balance.toString(),p:this.P,totalLpAmount:o.total_lp_amount.toString(),vUsdBalance:o.v_usd_balance.toString(),imbalance:H({tokenBalance:o.token_balance.toString(),vUsdBalance:o.v_usd_balance.toString()})}}async buildRawTransactionDeposit(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).deposit({sender:a.accountAddress,amount:BigInt(a.amount)})).toXDR()}async buildRawTransactionWithdraw(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).withdraw({sender:a.accountAddress,amount_lp:BigInt(a.amount)})).toXDR()}async buildRawTransactionClaimRewards(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).claim_rewards({sender:a.accountAddress})).toXDR()}getContract(a,s){let r={publicKey:s,contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new Vt(r)}};import{Web3 as Se}from"web3";var it=class extends re{constructor(a,s,r){super();this.tronWeb=a;this.api=s;r&&(this.web3=new Se(r))}chainType="TRX";P=52;web3;async getUserBalanceInfo(a,s){let r;if(this.web3)try{r=await this.getUserBalanceInfoByBatch(this.web3,a,s)}catch{r=await this.getUserBalanceInfoPerProperty(a,s)}else r=await this.getUserBalanceInfoPerProperty(a,s);return r}async getUserBalanceInfoByBatch(a,s,r){let o=new a.BatchRequest,c=new a.eth.Contract(Xe.abi,Bt(r.poolAddress)),m=c.methods.userRewardDebt(s).encodeABI(),l=c.methods.balanceOf(s).encodeABI();o.add({method:"eth_call",params:[{to:r.poolAddress,data:m},"latest"]}),o.add({method:"eth_call",params:[{to:r.poolAddress,data:l},"latest"]});let[u,p]=await o.execute();if(u&&p&&!u.error&&!p.error)return new z({lpAmount:Se.utils.toBigInt(p.result).toString(),rewardDebt:Se.utils.toBigInt(u.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(a,s){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a);let r=this.getContract(s.poolAddress),o=(await r.methods.userRewardDebt(a).call()).toString(),c=(await r.methods.balanceOf(a).call()).toString();return new z({lpAmount:c,rewardDebt:o})}async getPoolInfoFromChain(a){let s;if(this.web3)try{s=await this.getPoolInfoByBatch(this.web3,a)}catch{s=await this.getPoolInfoPerProperty(a)}else s=await this.getPoolInfoPerProperty(a);return s}async getPoolInfoByBatch(a,s){let r=new a.BatchRequest,o=new a.eth.Contract(Xe.abi,Bt(s.poolAddress),this.web3),c=o.methods.a().encodeABI(),m=o.methods.d().encodeABI(),l=o.methods.tokenBalance().encodeABI(),u=o.methods.vUsdBalance().encodeABI(),p=o.methods.totalSupply().encodeABI(),d=o.methods.accRewardPerShareP().encodeABI();r.add({method:"eth_call",params:[{to:s.poolAddress,data:c},"latest"]}),r.add({method:"eth_call",params:[{to:s.poolAddress,data:m},"latest"]}),r.add({method:"eth_call",params:[{to:s.poolAddress,data:l},"latest"]}),r.add({method:"eth_call",params:[{to:s.poolAddress,data:u},"latest"]}),r.add({method:"eth_call",params:[{to:s.poolAddress,data:p},"latest"]}),r.add({method:"eth_call",params:[{to:s.poolAddress,data:d},"latest"]});let[g,h,b,T,y,P]=await r.execute();if(g&&h&&b&&T&&y&&P&&!g.error&&!h.error&&!b.error&&!T.error&&!y.error&&!P.error){let B=Se.utils.toBigInt(b.result).toString(),w=Se.utils.toBigInt(T.result).toString(),G=H({tokenBalance:B,vUsdBalance:w});return{aValue:Se.utils.toBigInt(g.result).toString(),dValue:Se.utils.toBigInt(h.result).toString(),tokenBalance:B,vUsdBalance:w,totalLpAmount:Se.utils.toBigInt(y.result).toString(),accRewardPerShareP:Se.utils.toBigInt(P.result).toString(),p:this.P,imbalance:G}}throw new Error("Batched failed")}async getPoolInfoPerProperty(a){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a.poolAddress);let s=this.getContract(a.poolAddress),[r,o,c,m,l,u]=await Promise.all([s.methods.a().call(),s.methods.d().call(),s.methods.tokenBalance().call(),s.methods.vUsdBalance().call(),s.methods.totalSupply().call(),s.methods.accRewardPerShareP().call()]),p=c.toString(),d=m.toString(),g=H({tokenBalance:p,vUsdBalance:d});return{aValue:r.toString(),dValue:o.toString(),tokenBalance:p,vUsdBalance:d,totalLpAmount:l.toString(),accRewardPerShareP:u.toString(),p:this.P,imbalance:g}}buildRawTransactionDeposit(a){let{amount:s,accountAddress:r}=a,o=[{type:"uint256",value:s}];return this.buildRawTransaction(a.token.poolAddress,"deposit(uint256)",o,"0",r)}buildRawTransactionWithdraw(a){let{amount:s,accountAddress:r}=a,o=[{type:"uint256",value:s}];return this.buildRawTransaction(a.token.poolAddress,"withdraw(uint256)",o,"0",r)}buildRawTransactionClaimRewards(a){let{accountAddress:s}=a,r=[];return this.buildRawTransaction(a.token.poolAddress,"claimRewards()",r,"0",s)}async buildRawTransaction(a,s,r,o,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(a,s,{callValue:+o},r,c);if(!m?.result?.result)throw new S("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}getContract(a){return this.tronWeb.contract(Xe.abi,a)}};var Et=class{constructor(i,a,s,r){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=r;this.rawTxBuilder=new Nt(i,a,this.params,r);let o=s.cachePoolInfoChainSec>0?s.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new bi({defaultTtl:o})}rawTxBuilder;cache;async getAllowance(i,a){if(a){let s=i,r=a;return await this.tokenService.getAllowance({...r,spender:r.token.poolAddress},s)}else{let s=i;return await this.tokenService.getAllowance({...s,spender:s.token.poolAddress})}}async checkAllowance(i,a){if(a){let s=i,r=a;return this.tokenService.checkAllowance({...r,spender:r.token.poolAddress},s)}else{let s=i;return this.tokenService.checkAllowance({...s,spender:s.token.poolAddress})}}async approve(i,a){return this.tokenService.approve(i,{...a,spender:a.token.poolAddress})}async getAmountToBeDeposited(i,a,s){x(i),W("amount",i,a.decimals);let r=await this.getPoolInfoFromChain(a,s),{vUsdBalance:o,tokenBalance:c,aValue:m,dValue:l}=r,u=ra(i,m,l,c,o);return C(u,3).toFixed()}async getAmountToBeWithdrawn(i,a,s,r){x(i),W("amount",i,s.decimals);let o=await this.getPoolInfoFromChain(s,r),c=oa(i),m=Q(c,s.decimals),u=(await this.getUserBalanceInfo(a,s,r)).earned(o)||"0",p=hi(m).plus(u).toFixed();return C(p,s.decimals).toFixed()}async getUserBalanceInfo(i,a,s){return Ye(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,s).getUserBalanceInfo(i,a)}async getPoolInfoFromChain(i,a){let s={chainSymbol:i.chainSymbol,poolAddress:i.poolAddress},r=this.cache.get(s);if(r)return r;{let o=await Ye(i.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).getPoolInfoFromChain(i);return this.cache.put(s,o),this.api.cachePut({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress},o),o}}};function Ye(A,i,a,s,r){switch(I.getChainProperty(A).chainType){case"EVM":{if(r)return new at(r,i);{let o=a.getNodeRpcUrl(A),c=new wi(o);return c.defaultReturnFormat={number:Si.STR,bytes:Pi.HEX},new at(c,i)}}case"TRX":{let o=a.getNodeRpcUrl(A),c=s.tronJsonRpc;if(r)return new it(r,i,c);{let m=new Ti({fullHost:o});return new it(m,i,c)}}case"SOLANA":{let o=a.getNodeRpcUrl(A);return new Ut(o,i)}case"SRB":return new Ot(a,s,i)}}import{Big as Z}from"big.js";function la(A,i,a){let s=Bi(A,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo),r=Ci(s.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:s,swapFromVUsdCalcResult:r}}function ua(A,i,a){let s=Ri(A,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),r=Ii(s.amountIncludingCommissionInSystemPrecision,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo);return{swapToVUsdCalcResult:s,swapFromVUsdCalcResult:r}}function Bi(A,{feeShare:i,decimals:a},s){let r=Z(A),o=r.times(i),c=r.minus(o);return{bridgeFeeInTokenPrecision:o.round().toFixed(),amountIncludingCommissionInSystemPrecision:ca(xe(c,a),s),amountExcludingCommissionInSystemPrecision:ca(xe(r,a),s)}}function ca(A,i){if(A.eq(0))return"0";let a=Z(i.tokenBalance).plus(A),s=de(a.toFixed(),i.aValue,i.dValue);return Z(i.vUsdBalance).minus(s).round().toFixed()}function Ci(A,{feeShare:i,decimals:a},s){if(Z(A).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let o=Z(A).plus(s.vUsdBalance),c=de(o,s.aValue,s.dValue),m=Q(Z(s.tokenBalance).minus(c),a),l=Z(m).times(i),u=Z(m).minus(l).round();return{bridgeFeeInTokenPrecision:l.round().toFixed(),amountIncludingCommissionInTokenPrecision:u.toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}function Ri(A,{feeShare:i,decimals:a},s){let r=Z(i).div(Z(1).minus(i)),o=Z(A).times(r),c=Z(A).plus(o);return{bridgeFeeInTokenPrecision:o.round().toFixed(),amountIncludingCommissionInSystemPrecision:ma(xe(c,a),s),amountExcludingCommissionInSystemPrecision:ma(xe(A,a),s)}}function ma(A,i){let a=Z(i.tokenBalance).minus(A),s=de(a.toFixed(),i.aValue,i.dValue);return Z(s).minus(i.vUsdBalance).round().toFixed()}function Ii(A,{feeShare:i,decimals:a},s){if(Z(A).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let r=Z(s.vUsdBalance).minus(A),o=de(r.toFixed(),s.aValue,s.dValue),c=Z(o).minus(s.tokenBalance),m=Q(c.toFixed(),a),l=Z(i).div(Z(1).minus(i)),u=Z(m).times(l),p=Z(m).plus(u);return{bridgeFeeInTokenPrecision:u.round().toFixed(),amountIncludingCommissionInTokenPrecision:p.round().toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}import{Big as ke}from"big.js";function da(A,i,a,s,r){let o=ue(A,i,a),c=Q(o,i.decimals),m=He(o,s,r),l=ke(A).times(i.feeShare),u=ke(m).div(ke(1).minus(s.feeShare)).minus(m);return{sourceLPSwap:{fee:C(l,i.decimals).neg().round(i.decimals,ke.roundUp).toFixed(),swap:C(ke(A).minus(c).minus(l),i.decimals).neg().round(i.decimals,ke.roundUp).toFixed()},destLPSwap:{fee:C(u,s.decimals).neg().round(s.decimals,ke.roundUp).toFixed(),swap:C(Q(o,s.decimals).minus(m).minus(u),s.decimals).neg().round(s.decimals,ke.roundUp).toFixed()}}}import{Connection as vi,PublicKey as Mi,TransactionMessage as ki}from"@solana/web3.js";var Xt=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.params=a}async addMemoToTx(i,a){if(a.length>28)throw new S("InvalidArgumentException memo cannot be more than 28 characters");let s=new vi(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),r=await Fe(i,s),o=ki.decompile(i.message,{addressLookupTableAccounts:r}),c=o.instructions[o.instructions.length-1];if(!c?.keys)throw new S("Last instruction or its keys are invalid.");c.keys.push({pubkey:new Mi(Buffer.from(a)),isSigner:!1,isWritable:!1}),i.message=o.compileToV0Message(r)}};import{Asset as Fi,BASE_FEE as Gi,contract as $d,Horizon as pa,Operation as Zi,Operation as Di,rpc as rt,TimeoutInfinite as _i,TransactionBuilder as gn,TransactionBuilder as ga}from"@stellar/stellar-sdk";import{contract as e}from"@stellar/stellar-sdk";var xi=e.Spec,Wi=e.Client;var st=class extends Wi{constructor(a){super(new xi(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),a);this.options=a}fromJSON={allowance:this.txFromJSON,authorized:this.txFromJSON,approve:this.txFromJSON,balance:this.txFromJSON,burn:this.txFromJSON,burn_from:this.txFromJSON,clawback:this.txFromJSON,decimals:this.txFromJSON,mint:this.txFromJSON,name:this.txFromJSON,set_admin:this.txFromJSON,admin:this.txFromJSON,set_authorized:this.txFromJSON,symbol:this.txFromJSON,transfer:this.txFromJSON,transfer_from:this.txFromJSON}};var Ni=100,Ui=180,Yt=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.params=a}async buildChangeTrustLineXdrTx(i){let s=await new pa.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(i.sender),o=(await this.getContract(st,i.tokenAddress).name()).result,[c,m]=o.split(":");if(c===void 0||m===void 0)throw new S("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let l=new Fi(c,m),u=Di.changeTrust({asset:l,limit:i.limit});return new ga(s,{fee:Ni.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(u).setTimeout(Ui).build().toXDR()}async getBalanceLine(i,a){let r=(await this.getContract(st,a).name()).result,[o,c]=r.split(":"),m=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new pa.Server(m).loadAccount(i)).balances.find(d=>(d.asset_type==="credit_alphanum4"||d.asset_type==="credit_alphanum12")&&d.asset_code==o&&d.asset_issuer==c)}async submitTransactionStellar(i){let a=new pa.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),s=ga.fromXDR(i,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await a.submitTransaction(s)}async simulateAndCheckRestoreTxRequiredSoroban(i,a){let s=new rt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),r=await s.getAccount(a),o=gn.fromXDR(i,this.params.sorobanNetworkPassphrase),c=await s.simulateTransaction(o);if(rt.Api.isSimulationRestore(c))return new gn(r,{fee:(+Gi+ +c.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(c.restorePreamble.transactionData.build()).addOperation(Zi.restoreFootprint({})).setTimeout(_i).build().toXDR()}async sendTransactionSoroban(i){let a=new rt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),s=gn.fromXDR(i,this.params.sorobanNetworkPassphrase);return a.sendTransaction(s)}async confirmTx(i,a=15){let s=new rt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),r=await kn(()=>s.getTransaction(i),c=>c.status===rt.Api.GetTransactionStatus.NOT_FOUND,a);if(r.length===0)throw new S("No transaction responses found.");let o=r[r.length-1];if(!o)throw new S("Unexpected error: last response is undefined.");return o}getContract(i,a){let s={contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new i(s)}};var Lt=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.srb=new Yt(i,a),this.sol=new Xt(i,a)}srb;sol};var Ue=(a=>(a.WITH_NATIVE_CURRENCY="native",a.WITH_STABLECOIN="stablecoin",a))(Ue||{}),Rt=(a=>(a.INT="int",a.FLOAT="float",a))(Rt||{});import{Big as Qi}from"big.js";import{TronWeb as Hi}from"tronweb";import{Web3 as zi}from"web3";var Vi={abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}]},Jt=Vi;import{Big as fa}from"big.js";var oe=class{async checkAllowance(i){let a=await this.getAllowance(i);return fa(a).gte(fa(i.amount))}};var Oi="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Ei="0xdac17f958d2ee523a2206206994597c13d831ec7",Xi=1e5,ot=class extends oe{constructor(a,s){super();this.web3=a;this.api=s}chainType="EVM";getAllowance(a){let s=a.token.tokenAddress,r=a.owner,o=a.spender;return this.getAllowanceByTokenAddress(s,r,o)}getAllowanceByTokenAddress(a,s,r){return this.getERC20Contract(a).methods.allowance(s,r).call()}async getTokenBalance(a){return await this.getERC20Contract(a.token.tokenAddress).methods.balanceOf(a.account).call()}async getNativeTokenBalance(a){return(await this.web3.eth.getBalance(a.account)).toString()}async approve(a){if(this.isUsdt(a.tokenAddress)&&await this.getAllowanceByTokenAddress(a.tokenAddress,a.owner,a.spender)!=="0"){let o=await this.buildRawTransactionApprove({...a,amount:"0"});await this.sendRawTransaction(o,a.chainSymbol)}let s=await this.buildRawTransactionApprove(a);return await this.sendRawTransaction(s,a.chainSymbol)}isUsdt(a){return a.toLowerCase()===Ei}buildRawTransactionApprove(a){let{tokenAddress:s,spender:r,owner:o,amount:c}=a,l=this.getERC20Contract(s).methods.approve(r,c==null?Oi:Zt(c));return Promise.resolve({from:o,to:s,value:"0",data:l.encodeABI()})}async sendRawTransaction(a,s){let r=a,o={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};s==="POL"?r.gas=Xi:r.gas=await this.web3.eth.estimateGas(a);let{transactionHash:c}=await this.web3.eth.sendTransaction({...r,...o});return{txId:c.toString()}}getERC20Contract(a){return new this.web3.eth.Contract(Jt.abi,a)}};import{AnchorProvider as Yi}from"@project-serum/anchor";import{Connection as Li,PublicKey as Kt}from"@solana/web3.js";var Qt=class extends oe{constructor(a,s){super();this.solanaRpcUrl=a;this.api=s}chainType="SOLANA";approve(a){throw new L}buildRawTransactionApprove(a){throw new L}buildAnchorProvider(a){let s=new Li(this.solanaRpcUrl,"confirmed"),r=new Kt(a);return new Yi(s,{publicKey:r},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(a){throw new L}async getTokenBalance(a){let{account:s,token:r}=a;try{let o=await ae(new Kt(s),new Kt(r.tokenAddress));return(await Ve(o,this.buildAnchorProvider(s))).amount.toString()}catch(o){if(o instanceof Error)return o.message.startsWith("Account does not exist"),"0";throw o}}async getNativeTokenBalance(a){return(await this.buildAnchorProvider(a.account).connection.getBalance(new Kt(a.account))).toString()}};import{Horizon as Pu,NotFoundError as Ji}from"@stellar/stellar-sdk";var Ht=class extends oe{constructor(a,s,r){super();this.nodeRpcUrlsConfig=a;this.params=s;this.api=r}chainType="SRB";getAllowance(){throw new L}async getTokenBalance(a){if(!a.token.originTokenAddress)throw new S("OriginTokenAddress missing");let[s,r]=a.token.originTokenAddress.split(":"),o=new Pu.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),c;try{c=await o.loadAccount(a.account)}catch(u){if(u instanceof Ji)return"0";throw u}let l=c.balances.find(u=>(u.asset_type==="credit_alphanum4"||u.asset_type==="credit_alphanum12")&&u.asset_code==s&&u.asset_issuer==r);return l?.balance?M(l.balance,I.getChainDecimalsByType(I.getChainProperty(a.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(a){let c=(await new Pu.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.account)).balances.find(m=>m.asset_type==="native");return c?.balance?M(c.balance,I.getChainDecimalsByType(I.getChainProperty(a.chainSymbol).chainType)).toFixed():"0"}approve(){throw new L}buildRawTransactionApprove(){throw new L}};var Ki="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",At=class extends oe{constructor(a,s){super();this.tronWeb=a;this.api=s}chainType="TRX";async getAllowance(a){let{token:{tokenAddress:s},owner:r}=a;return(await(await this.getContract(s)).methods.allowance(r,a.spender).call()).toString()}async getTokenBalance(a){return(await(await this.getContract(a.token.tokenAddress)).balanceOf(a.account).call()).toString()}async getNativeTokenBalance(a){return(await this.tronWeb.trx.getBalance(a.account)).toString()}async approve(a){let s=await this.buildRawTransactionApprove(a);return await Dt(this.tronWeb,s)}async buildRawTransactionApprove(a){let{tokenAddress:s,spender:r,owner:o,amount:c}=a,m=c==null?Ki:Zt(c),l=[{type:"address",value:r},{type:"uint256",value:m}];return this.buildRawTransaction(s,"approve(address,uint256)",l,"0",o)}getContract(a){return this.tronWeb.contract(Jt.abi,a)}async buildRawTransaction(a,s,r,o,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(a,s,{callValue:+o},r,c);if(!m?.result?.result)throw new S("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var zt=class{constructor(i,a,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s}async getAllowance(i,a){let s=await this.getChainTokenService(i.token.chainSymbol,i.owner,a).getAllowance(i);return C(s,i.token.decimals).toFixed()}async checkAllowance(i,a){return x(i.amount),W("amount",i.amount,i.token.decimals),this.getChainTokenService(i.token.chainSymbol,i.owner,a).checkAllowance(this.prepareCheckAllowanceParams(i))}async approve(i,a){return a.amount&&(x(a.amount),W("amount",a.amount,a.token.decimals)),this.getChainTokenService(a.token.chainSymbol,a.owner,i).approve(this.prepareApproveParams(a))}async buildRawTransactionApprove(i,a){return i.amount&&(x(i.amount),W("amount",i.amount,i.token.decimals)),this.getChainTokenService(i.token.chainSymbol,i.owner,a).buildRawTransactionApprove(this.prepareApproveParams(i))}async getTokenBalance(i,a){let s=await this.getChainTokenService(i.token.chainSymbol,i.account,a).getTokenBalance(i);return i.token.decimals?C(s,i.token.decimals).toFixed():s}async getNativeTokenBalance(i,a){let s=await this.getChainTokenService(i.chainSymbol,i.account,a).getNativeTokenBalance(i);return{int:s,float:C(s,I.getChainDecimalsByType(I.getChainProperty(i.chainSymbol).chainType)).toFixed()}}getChainTokenService(i,a,s){switch(I.getChainProperty(i).chainType){case"EVM":{if(s)return new ot(s,this.api);{let r=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new ot(new zi(r),this.api)}}case"TRX":{if(s)return new At(s,this.api);{let r=this.nodeRpcUrlsConfig.getNodeRpcUrl(i),o=new Hi({fullHost:r});return o.setAddress(a),new At(o,this.api)}}case"SOLANA":{let r=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new Qt(r,this.api)}case"SRB":return new Ht(this.nodeRpcUrlsConfig,this.params,this.api)}}prepareCheckAllowanceParams(i){return{...i,amount:M(i.amount,i.token.decimals)}}prepareApproveParams(i){return{tokenAddress:i.token.tokenAddress,owner:i.owner,spender:i.spender,chainSymbol:i.token.chainSymbol,amount:i.amount==null?void 0:Qi(i.amount).toFixed()}}};var ct=class{constructor(i){this.nodeRpcUrls=i}getNodeRpcUrl(i){let a=this.nodeRpcUrls[i];if(a!==void 0)return a;throw new gt(i)}},jt=class{api;tokenService;params;bridge;pool;constructor(i,a=lt){I.addChainsProperties(a.additionalChainsProperties);let s=new yt(a),r=new bt(s),o=new Tt(r),c=new St(o);this.api=new Pt(c,a),this.tokenService=new zt(this.api,i,a),this.bridge=new _t(this.api,i,a,this.tokenService),this.pool=new Et(this.api,i,a,this.tokenService),this.params=a}async chainDetailsMap(i){return this.api.getChainDetailsMap(i)}async tokens(i){return this.api.tokens(i)}async tokensByChain(i,a){let r=(await this.api.getChainDetailsMap(a))[i];return r?r.tokens:[]}async getTransferStatus(i,a){return this.api.getTransferStatus(i,a)}async getGasBalance(i,a){return this.api.getGasBalance(i,a)}async checkAddress(){return new Promise(i=>{i({status:"OK",gasBalance:null})})}async getPendingStatusInfo(i,a,s,r){x(i);let o;a=="float"?(W("amount",i,s.decimals),o=M(i,s.decimals).toFixed()):o=i;let c=ue(o,s,await U(this.api,s)),m=await U(this.api,r),l=this.getAmountFromVUsdFormatted(c,r,m),u,p=await this.api.getPendingInfo();for(let d in p[r.chainSymbol]){let g=p[r.chainSymbol];if(!g)throw new S("Cannot find pending info for "+r.chainSymbol);u=g[d]}if(u){let d=hn(u.totalSentAmount,m),g=this.getAmountFromVUsdFormatted(c,r,d),h;return pe(g.int).gt(l.int)?h={min:l,max:g}:h={min:g,max:l},{pendingTxs:u.pendingTxs,pendingAmount:{int:we(u.totalSentAmount,3,r.decimals).toFixed(0),float:C(u.totalSentAmount,3).toFixed()},estimatedAmount:h}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:l,max:l}}}async getTokenBalance(i,a){return this.tokenService.getTokenBalance(i,a)}async getNativeTokenBalance(i,a){return this.tokenService.getNativeTokenBalance(i,a)}async calculateFeePercentOnSourceChain(i,a){x(i),W("amountFloat",i,a.decimals);let s=M(i,a.decimals);if(s.eq(0))return 0;let r=ue(s,a,await U(this.api,a)),o=Q(r,a.decimals);return $t(s,o)}async calculateFeePercentOnDestinationChain(i,a,s){x(i),W("amountFloat",i,a.decimals);let r=M(i,a.decimals);if(r.eq(0))return 0;let o=ue(r,a,await U(this.api,a)),c=He(o,s,await U(this.api,s)),m=Q(o,s.decimals);return $t(m,c)}async getAmountToBeReceivedAndGasFeeOptions(i,a,s,r){return x(i),W("amountToSendFloat",i,a.decimals),{amountToSendFloat:pe(i).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(i,a,s,r),gasFeeOptions:await this.getGasFeeOptions(a,s,r)}}async getAmountToSendAndGasFeeOptions(i,a,s,r){return x(i),W("amountToBeReceivedFloat",i,s.decimals),{amountToSendFloat:await this.getAmountToSend(i,a,s,r),amountToBeReceivedFloat:pe(i).toFixed(),gasFeeOptions:await this.getGasFeeOptions(a,s,r)}}async getAmountToBeReceived(i,a,s,r){let o=await U(this.api,a),c=await U(this.api,s);return this.getAmountToBeReceivedFromPools(i,a,s,o,c,r)}async getAmountToBeReceivedFromChain(i,a,s,r,o,c){let m=await this.pool.getPoolInfoFromChain(a,o),l=await this.pool.getPoolInfoFromChain(s,c);return this.getAmountToBeReceivedFromPools(i,a,s,m,l,r)}getAmountToBeReceivedFromPools(i,a,s,r,o,c){x(i),W("amountToSendFloat",i,a.decimals);let m=M(i,a.decimals);if(c&&c==3){if(!a.cctpAddress||!s.cctpAddress||!a.cctpFeeShare)throw new te("Such route does not support CCTP protocol");let u=m.mul(pe(1).minus(a.cctpFeeShare)).round(0,pe.roundUp),p=we(u,a.decimals,s.decimals).round(0);return C(p,s.decimals).toFixed()}let l=ue(m,a,r);return this.getAmountFromVUsdFormatted(l,s,o).float}async getAmountToSend(i,a,s,r){let o=await U(this.api,a),c=await U(this.api,s);return this.getAmountToSendFromPools(i,a,s,o,c,r)}async getAmountToSendFromChain(i,a,s,r,o,c){let m=await this.pool.getPoolInfoFromChain(a,o),l=await this.pool.getPoolInfoFromChain(s,c);return this.getAmountToSendFromPools(i,a,s,m,l,r)}getAmountToSendFromPools(i,a,s,r,o,c){x(i),W("amountToBeReceivedFloat",i,s.decimals);let m=M(i,s.decimals);if(c&&c==3){if(!a.cctpAddress||!s.cctpAddress||!a.cctpFeeShare)throw new te("Such route does not support CCTP protocol");let p=m.div(pe(1).minus(a.cctpFeeShare)).round(0,pe.roundDown),d=we(p,s.decimals,a.decimals).round(0);return C(d,a.decimals).toFixed()}let l=Tn(m,s,o),u=bn(l,a,r);if(pe(u).lte(0))throw new fe;return C(u,a.decimals).toFixed()}async getGasFeeOptions(i,a,s){return An(i.allbridgeChainId,i.chainType,a.allbridgeChainId,i.decimals,s,this.api)}getAverageTransferTime(i,a,s){return i.transferTime?.[a.chainSymbol]?.[s]??null}async getPoolInfoByToken(i){return await this.api.getPoolInfoByKey({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress})}async refreshPoolInfo(i){if(i){let s=(i instanceof Array?i:[i]).map(r=>({chainSymbol:r.chainSymbol,poolAddress:r.poolAddress}));return this.api.refreshPoolInfo(s)}return this.api.refreshPoolInfo()}aprInPercents(i){return Sn(i)}async getExtraGasMaxLimits(i,a){return await cn(i,a,this.api)}async getVUsdFromAmount(i,a,s){x(i);let r;a=="float"?(W("amount",i,s.decimals),r=M(i,s.decimals).toFixed()):r=i;let o=ue(r,s,await U(this.api,s));return{int:o,float:C(o,3).toFixed()}}async getAmountFromVUsd(i,a){return this.getAmountFromVUsdFormatted(i,a,await U(this.api,a))}getAmountFromVUsdFormatted(i,a,s){x(i);let r=He(i,a,s);if(pe(r).lt(0))throw new fe;return{int:r,float:C(r,a.decimals).toFixed()}}async swapAndBridgeFeeCalculation(i,a,s){return la(i,{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await U(this.api,a)},{decimals:s.decimals,feeShare:s.feeShare,poolInfo:await U(this.api,s)})}async swapAndBridgeFeeCalculationReverse(i,a,s){let r=ua(i,{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await U(this.api,a)},{decimals:s.decimals,feeShare:s.feeShare,poolInfo:await U(this.api,s)}),o=r.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(pe(o).lt(0))throw new fe;return r}async getSendAmountDetails(i,a,s,r){x(i);let o;return a=="float"?(W("amount",i,s.decimals),o=M(i,s.decimals).toFixed()):o=i,da(o,s,await U(this.api,s),r,await U(this.api,r))}};function ji(A){return"solanaRpcUrl"in A}var ya=class{params;bridge;pool;utils;service;constructor(i,a=lt){let s;ji(i)?s=new ct({SOL:i.solanaRpcUrl,TRX:i.tronRpcUrl}):s=new ct(i),this.service=new jt(s,a),this.bridge=this.service.bridge,this.pool=this.service.pool,this.utils=new Lt(s,a),this.params=a}async chainDetailsMap(i="swap"){return this.service.chainDetailsMap(i)}async tokens(i="swap"){return this.service.tokens(i)}async tokensByChain(i,a="swap"){return this.service.tokensByChain(i,a)}async getTransferStatus(i,a){return this.service.getTransferStatus(i,a)}async getGasBalance(i,a){return this.service.getGasBalance(i,a)}async checkAddress(i,a,s){return await this.service.checkAddress()}async getPendingStatusInfo(i,a,s,r){return this.service.getPendingStatusInfo(i,a,s,r)}async getTokenBalance(i,a){return this.service.getTokenBalance(i,a)}async getNativeTokenBalance(i,a){return this.service.getNativeTokenBalance(i,a)}async calculateFeePercentOnSourceChain(i,a){return this.service.calculateFeePercentOnSourceChain(i,a)}async calculateFeePercentOnDestinationChain(i,a,s){return this.service.calculateFeePercentOnDestinationChain(i,a,s)}async getAmountToBeReceivedAndGasFeeOptions(i,a,s,r){return this.service.getAmountToBeReceivedAndGasFeeOptions(i,a,s,r)}async getAmountToSendAndGasFeeOptions(i,a,s,r){return this.service.getAmountToSendAndGasFeeOptions(i,a,s,r)}async getAmountToBeReceived(i,a,s,r){return this.service.getAmountToBeReceived(i,a,s,r)}async getAmountToBeReceivedFromChain(i,a,s,r,o,c){return this.service.getAmountToBeReceivedFromChain(i,a,s,r,o,c)}getAmountToBeReceivedFromPools(i,a,s,r,o,c){return this.service.getAmountToBeReceivedFromPools(i,a,s,r,o,c)}async getAmountToSend(i,a,s,r){return this.service.getAmountToSend(i,a,s,r)}async getAmountToSendFromChain(i,a,s,r,o,c){return this.service.getAmountToSendFromChain(i,a,s,r,o,c)}getAmountToSendFromPools(i,a,s,r,o,c){return this.service.getAmountToSendFromPools(i,a,s,r,o,c)}async getGasFeeOptions(i,a,s){return this.service.getGasFeeOptions(i,a,s)}getAverageTransferTime(i,a,s){return this.service.getAverageTransferTime(i,a,s)}async getPoolInfoByToken(i){return this.service.getPoolInfoByToken(i)}async refreshPoolInfo(i){return this.service.refreshPoolInfo(i)}aprInPercents(i){return this.service.aprInPercents(i)}async getExtraGasMaxLimits(i,a){return this.service.getExtraGasMaxLimits(i,a)}async getVUsdFromAmount(i,a,s){return this.service.getVUsdFromAmount(i,a,s)}async getAmountFromVUsd(i,a){return this.service.getAmountFromVUsd(i,a)}async swapAndBridgeFeeCalculation(i,a,s){return this.service.swapAndBridgeFeeCalculation(i,a,s)}async swapAndBridgeFeeCalculationReverse(i,a,s){return this.service.swapAndBridgeFeeCalculationReverse(i,a,s)}async getSendAmountDetails(i,a,s,r){return this.service.getSendAmountDetails(i,a,s,r)}};export{en as AddressStatus,ya as AllbridgeCoreSdk,Rt as AmountFormat,Ge as AmountNotEnoughError,pt as ArgumentInvalidDecimalsError,te as CCTPDoesNotSupportedError,ne as ChainSymbol,N as ChainType,ba as ErrorCode,dt as ExtraGasMaxLimitExceededError,Ue as FeePaymentMethod,fe as InsufficientPoolLiquidityError,ut as InvalidAmountError,Le as InvalidGasFeePaymentOptionError,fn as InvalidMessengerOptionError,Ze as InvalidTxError,V as JupiterError,ye as Messenger,L as MethodNotSupportedError,gt as NodeRpcUrlNotInitializedError,S as SdkError,D as SdkRootError,mn as SolanaAutoTxFee,Ke as TimeoutError,ft as TxTooLargeError,Je as VerifyTxError,lt as mainnet,$i as nodeRpcUrlsDefault,qi as nodeUrlsDefault};
|
|
1
|
+
var lt={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://quote-api.jup.ag/v6",wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7}},cachePoolInfoChainSec:20},qi={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},$i={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org"};import{Big as pe}from"big.js";var D=class extends Error{errorCode;constructor(i,a){super(a),this.errorCode=i}},S=class extends D{constructor(i){super("SdkError",i)}},ut=class extends D{constructor(i){super("InvalidAmountError",i)}},Ge=class extends D{constructor(i){super("AmountNotEnoughError",i)}},fe=class extends D{constructor(i){super("InsufficientPoolLiquidityError",i)}},V=class extends D{constructor(i){super("JupiterError",i)}},Le=class extends D{constructor(i){super("InvalidGasFeePaymentOptionError",i)}},fn=class extends D{constructor(i){super("InvalidMessengerOptionError",i)}},L=class extends D{constructor(i){super("MethodNotSupportedError",i)}},Je=class extends D{constructor(i){super("VerifyTxError",i)}},Ze=class extends D{constructor(i){super("InvalidTxError",i)}},dt=class extends D{constructor(i){super("ExtraGasMaxLimitExceededError",i)}},pt=class extends D{constructor(i,a,s){super("ArgumentInvalidDecimalsError",`Argument '${i}' decimals '${a}' cannot be greater than '${s}'`)}},Ke=class extends D{constructor(i){super("TimeoutError",i)}},gt=class extends D{constructor(i){super("NodeRpcUrlNotInitializedError",`For chain '${i}' Node RPC URL not initialized`)}},te=class extends D{constructor(i){super("CCTPDoesNotSupportedError",i)}},ft=class extends D{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},ba=(y=>(y.SDK_ERROR="SdkError",y.INVALID_AMOUNT_ERROR="InvalidAmountError",y.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",y.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",y.JUPITER_ERROR="JupiterError",y.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",y.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",y.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",y.VERIFY_TX_ERROR="VerifyTxError",y.INVALID_TX_ERROR="InvalidTxError",y.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",y.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",y.TIMEOUT_ERROR="TimeoutError",y.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",y.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",y.TX_TOO_LARGE="TxTooLargeError",y))(ba||{});var ne=(g=>(g.BSC="BSC",g.ETH="ETH",g.BAS="BAS",g.SOL="SOL",g.TRX="TRX",g.POL="POL",g.ARB="ARB",g.CEL="CEL",g.AVA="AVA",g.SRB="SRB",g.STLR="STLR",g.OPT="OPT",g))(ne||{}),N=(r=>(r.EVM="EVM",r.SOLANA="SOLANA",r.TRX="TRX",r.SRB="SRB",r))(N||{});var Ta={EVM:18,SOLANA:9,TRX:6,SRB:7},Pa={BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"}},I=(()=>{let A={...Pa};return{addChainsProperties(i){A={...A,...i}},getChainProperty(i){let a=A[i];if(!a)throw new S(`Cannot find chain properties for ${i}`);return a},getChainsProperties(){return A},getChainDecimalsByType(i){return Ta[i]}}})();import Ia from"axios";var yn="3.20.0";import{Big as f}from"big.js";import qt from"bn.js";function $t(A,i){return f(100).minus(f(100).times(i).div(A)).toNumber()}function xe(A,i){return we(A,i,3).round(0,f.roundDown)}function Q(A,i){return we(A,3,i)}function we(A,i,a){let s=f(a).minus(i).toNumber();return f(A).times(Qe(s))}function Qe(A){return f(10).pow(A)}function M(A,i){return f(A).times(Qe(i))}function C(A,i){let a=f(A);return a.eq(0)?f(0):f(a).div(Qe(i))}function H(A){return C(f(A.tokenBalance).minus(A.vUsdBalance).toFixed(),3).div(2).toFixed()}function ue(A,{feeShare:i,decimals:a},s){let r=f(A);if(r.lte(0))return"0";let o=r.times(i),c=r.minus(o),m=xe(c,a),l=f(s.tokenBalance).plus(m),u=de(l,s.aValue,s.dValue);return f(s.vUsdBalance).minus(u).round(0,f.roundDown).toFixed()}function He(A,{feeShare:i,decimals:a},s){let r=f(A);if(r.lte(0))return f(0).toFixed();let o=r.plus(s.vUsdBalance),c=de(o,s.aValue,s.dValue),m=Q(f(s.tokenBalance).minus(c),a),l=f(m).times(i);return f(m).minus(l).round(0,f.roundDown).toFixed()}function hn(A,i){let a=f(A);if(a.lte(0))return i;let s=a.plus(i.vUsdBalance),r=de(s,i.aValue,i.dValue);return{aValue:i.aValue,dValue:i.dValue,tokenBalance:r.toFixed(0),vUsdBalance:s.toFixed(0)}}function bn(A,{feeShare:i,decimals:a},s){if(f(A).lte(0))return f(0);let r=f(s.vUsdBalance).minus(A);if(r.lte(0))throw new fe;let o=de(r,s.aValue,s.dValue),c=f(o).minus(s.tokenBalance),m=Q(c,a),l=f(i).div(f(1).minus(i)),u=f(m).times(l).round(0,f.roundUp);return f(m).plus(u).round(0,f.roundDown)}function Tn(A,{feeShare:i,decimals:a},s){if(f(A).lte(0))return f(0);let r=f(i).div(f(1).minus(i)),o=f(A).times(r).round(0,f.roundUp),c=f(A).plus(o),m=xe(c,a),l=f(s.tokenBalance).minus(m);if(l.lte(0))throw new fe;let u=de(l,s.aValue,s.dValue);return f(u).minus(s.vUsdBalance).round(0,f.roundDown)}function de(A,i,a){let s=f(4).times(i).times(f(a).minus(A)).minus(a),r=f(a).pow(3),o=s.pow(2),c=f(A).times(f(A).times(o).plus(f(4).times(i).times(r))).sqrt().round(0,f.roundDown),m=f(8).times(i).times(A),l=s.times(A).plus(c).div(m).round(0,f.roundDown);return l.eq(0)?f(0):l.plus(1)}function Pn(A,i,a,s){let r=new qt(A),o=new qt(a),c=new qt(i);return r.mul(o).shrn(s).sub(c).toString()}function Sn(A){return f(A).gt(0)?`${Number(f(A).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function wn(A,i,a){let s=f(i).times(a),r=f(i).plus(a),o=f(8).times(A).times(s).times(r),c=s.times(f(16).times(A).minus(4)).div(3),m=o.times(o),l=c.times(c).times(c),u=m.plus(l),p=f(u).sqrt(),d=f(Math.cbrt(+o.plus(p).toFixed())),g=f(Math.cbrt(+o.minus(p).toFixed()));return d.plus(g).toFixed()}var en=(c=>(c.OK="OK",c.INVALID="INVALID",c.FORBIDDEN="FORBIDDEN",c.UNINITIALIZED="UNINITIALIZED",c.CONTRACT_ADDRESS="CONTRACT_ADDRESS",c.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",c))(en||{});var ye=(s=>(s[s.ALLBRIDGE=1]="ALLBRIDGE",s[s.WORMHOLE=2]="WORMHOLE",s[s.CCTP=3]="CCTP",s))(ye||{});function Bn(A){return Object.entries(A).reduce((i,a)=>{let s=a[0],r=a[1],o=Ra(s,r);return o&&(i[s]=o),i},{})}function Cn(A){let i={};for(let[a,s]of Object.entries(A)){let r=a;for(let o of s.tokens){let c=De({chainSymbol:r,poolAddress:o.poolAddress}),m=H(o.poolInfo);i[c]={...o.poolInfo,imbalance:m}}}return i}function Sa(A,i){let{name:a,...s}=A,{poolInfo:r,...o}=i;return{...o,...s,chainName:a}}function wa(A){switch(A){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;default:return null}}function Ba(A){return Object.entries(A).reduce((i,[a,s])=>(i[a]=Ca(s),i),{})}function Ca(A){return Object.entries(A).reduce((i,[a,s])=>{let r=wa(a);return r&&(i[r]=s),i},{})}function Ra(A,i){let a=I.getChainsProperties()[A];if(!a)return null;let s={...a,allbridgeChainId:i.chainId,bridgeAddress:i.bridgeAddress,transferTime:Ba(i.transferTime),txCostAmount:i.txCostAmount,confirmations:i.confirmations};return{...s,tokens:i.tokens.map(r=>Sa(s,r))}}function De(A){return A.chainSymbol+"_"+A.poolAddress}function Rn(A){let i=[];for(let[a,s]of Object.entries(A)){let r=a;for(let o of s.tokens)i.push({chainSymbol:r,poolAddress:o.poolAddress})}return i}function In(A){let i={};for(let[a,s]of Object.entries(A)){let r=a;for(let[o,c]of Object.entries(s))c.imbalance=H(c),i[De({chainSymbol:r,poolAddress:o})]=c}return i}var yt=class{api;constructor(i){this.api=Ia.create({baseURL:i.coreApiUrl,headers:{Accept:"application/json",...i.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+yn},params:i.coreApiQueryParams})}async getTokenInfo(){let{data:i}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:Bn(i),poolInfoMap:Cn(i)}}async getPendingInfo(){let{data:i}=await this.api.get("/pending-info");return i}async getGasBalance(i,a){let{data:s}=await this.api.get(`/check/${i}/${a}`);return s}async getTransferStatus(i,a){let{data:s}=await this.api.get(`/chain/${i}/${a}`);return s}async getReceiveTransactionCost(i){let{data:a}=await this.api.post("/receive-fee",i,{headers:{"Content-Type":"application/json"}});return{exchangeRate:a.exchangeRate,fee:a.fee,sourceNativeTokenPrice:a.sourceNativeTokenPrice}}async getPoolInfoMap(i){let a=i instanceof Array?i:[i],{data:s}=await this.api.post("/pool-info",{pools:a},{headers:{"Content-Type":"application/json"}});return In(s)}};import ht from"timed-cache";var tn=20*1e3,va=55*1e3,bt=class{constructor(i){this.apiClient=i;this.tokenInfoCache=new ht({defaultTtl:va}),this.receivedTransactionCache=new ht({defaultTtl:tn}),this.pendingInfoCache=new ht({defaultTtl:tn}),this.gasBalanceCache=new ht({defaultTtl:tn})}tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let i="TOKEN_INFO_CACHE_KEY",a=this.tokenInfoCache.get(i);if(a)return a;let s=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(i,s),s}async getGasBalance(i,a){let s=`GAS_BALANCE_${i}_${a}`,r=this.gasBalanceCache.get(s);if(r)return r;let o=this.apiClient.getGasBalance(i,a);return this.gasBalanceCache.put(s,o),o}async getPendingInfo(){let i="PENDING_INFO_CACHE_KEY",a=this.pendingInfoCache.get(i);if(a)return a;let s=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(i,s),s}async getReceiveTransactionCost(i){let a=`RECEIVE_TX_COST_${i.sourceChainId}_${i.destinationChainId}_${i.messenger}`,s=this.receivedTransactionCache.get(a);if(s)return s;let r=await this.apiClient.getReceiveTransactionCost(i);return this.receivedTransactionCache.put(a,r),r}async getTransferStatus(i,a){return this.apiClient.getTransferStatus(i,a)}async getPoolInfoMap(i){return this.apiClient.getPoolInfoMap(i)}};var Tt=class{constructor(i){this.apiClient=i}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let i=await this.getChainDetailsMap();return Object.values(i).flatMap(a=>a.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(i,a){return this.apiClient.getGasBalance(i,a)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(i,a){return await this.apiClient.getTransferStatus(i,a)}async getReceiveTransactionCost(i){return await this.apiClient.getReceiveTransactionCost(i)}async getPoolInfoMap(i){return await this.apiClient.getPoolInfoMap(i)}};var Pt=class{constructor(i,a){this.client=i;this.isStaging=a.coreApiQueryParams?.staging==="true"}isStaging;async getChainDetailsMap(i){let a=await this.client.getChainDetailsMap(),s={};for(let r in a){let o=a[r];o&&(s[r]={...o,tokens:vn(o.tokens,i,this.isStaging)})}return s}async tokens(i){return vn(await this.client.tokens(),i,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(i,a){return this.client.getGasBalance(i,a)}async getTransferStatus(i,a){return await this.client.getTransferStatus(i,a)}async getReceiveTransactionCost(i){return await this.client.getReceiveTransactionCost(i)}cachePut(i,a){return this.client.cachePut(i,a)}getPoolInfoByKey(i){return this.client.getPoolInfoByKey(i)}refreshPoolInfo(i){return this.client.refreshPoolInfo(i)}};function vn(A,i,a){return A.filter(s=>a?!0:s.flags[i]).map(Ma)}function Ma(A){let{flags:i,...a}=A;return a}import ka from"timed-cache";var xa=55*1e3,St=class{constructor(i){this.client=i;this.poolInfoCache=new nn}poolInfoCache;async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(i,a){return this.client.getTransferStatus(i,a)}getReceiveTransactionCost(i){return this.client.getReceiveTransactionCost(i)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(i,a){return this.client.getGasBalance(i,a)}async getPoolInfoByKey(i){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let a=this.poolInfoCache.get(i);if(a)return a;{let s=await this.client.getPoolInfoMap(i);this.poolInfoCache.putAll(s);let r=s[De(i)];if(r)return r;throw new S("Cannot find pool info for "+i.poolAddress+" on chain "+i.chainSymbol)}}async refreshPoolInfo(i){let a;if(i)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),a=await this.client.getPoolInfoMap(i);else{let s=await this.client.getChainDetailsMapAndPoolInfoMap();a=await this.client.getPoolInfoMap(Rn(s.chainDetailsMap))}this.poolInfoCache.putAll(a)}cachePut(i,a){this.poolInfoCache.put(De(i),a)}},nn=class{cache;constructor(){this.cache=new ka({defaultTtl:xa})}putAll(i){for(let[a,s]of Object.entries(i))this.cache.put(a,s)}putAllIfNotExists(i){for(let[a,s]of Object.entries(i))this.cache.get(a)||this.cache.put(a,s)}put(i,a){this.cache.put(i,a)}get(i){let a=De(i);return this.cache.get(a)}};import{TronWeb as Ai}from"tronweb";import{Web3 as ci}from"web3";import{Big as Mn}from"big.js";async function U(A,i){return await A.getPoolInfoByKey({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress})}function x(A){if(Mn(A).lte(0))throw new ut("Amount must be greater than zero")}function W(A,i,a){let s=Mn(i).toFixed(),[r,o]=s.split(".");if(o&&o.length>a)throw new pt(A,o.length,a)}async function wt(A,i,a){return await Promise.race([A,new Promise((s,r)=>{setTimeout(()=>r(new Ke(i)),a)})])}async function an(A,i,a,s){if(a<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${a} was received.`);let r=0;for(;;)try{return await wt(A(),i,s)}catch{if(++r>=a)throw new Ke(i)}}async function kn(A,i,a,s=1.5,r=!1){let o=[],c=0,m=await A();if(o.push(m),!i(m))return o;let l=new Date(Date.now()+a*1e3).valueOf(),u=1e3,p=u;for(;Date.now()<l;){let d=o[o.length-1];if(d===void 0||!i(d))break;c++,r&&console.info(`Waiting ${u}ms before trying again (bringing the total wait time to ${p}ms so far, of total ${a*1e3}ms)`),await new Promise(h=>setTimeout(h,u)),u=u*s,new Date(Date.now()+u).valueOf()>l&&(u=l-Date.now(),r&&console.info(`was gonna wait too long; new waitTime: ${u}ms`)),p=u+p;let g=await A(d);o.push(g),r&&i(g)&&console.info(`${c}. Called ${A.name}; ${o.length} prev attempts. Most recent: ${JSON.stringify(o[o.length-1],null,2)}`)}return o}import*as It from"@project-serum/anchor";import{PublicKey as Ln}from"@solana/web3.js";import{Big as Ya}from"big.js";var Wa={abi:[{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"}]},xn=Wa;var Fa={abi:[{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"}]},Wn=Fa;import*as E from"@project-serum/anchor";import{PublicKey as X}from"@solana/web3.js";async function ae(A,i){return E.utils.token.associatedAddress({mint:i,owner:A})}async function Be(A){let[i]=await X.findProgramAddress([E.utils.bytes.utf8.encode("config")],A);return i}async function Fn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("lock"),Uint8Array.from(A)],i);return a}async function ze(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([A])],i);return a}async function _e(A){let i=await Be(A),[a]=await X.findProgramAddress([i.toBuffer()],A);return a}async function Gn(A,i){let[a]=await X.findProgramAddress([A.toBuffer()],i);return a}async function Ne(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("token"),A.toBytes()],i);return a}async function Zn(A,i,a){let[s]=await X.findProgramAddress([E.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([A]),i],a);return s}async function sn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([A])],i);return a}async function rn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([A])],i);return a}async function Dn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("sent_message"),A],i);return a}async function on(A,i,a){let[s]=await X.findProgramAddress([E.utils.bytes.utf8.encode("user_deposit"),i.toBytes(),A.toBytes()],a);return s}async function _n(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("cctp_bridge"),A.toBytes()],i);return a}async function Nn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("token"),A.toBytes()],i);return a}function Un(A,i){let[a]=X.findProgramAddressSync([E.utils.bytes.utf8.encode("lock"),i.toBuffer()],A);return a}function Vn(A,i,a,s){let r=We("message_transmitter",a),o=We("token_messenger",s),c=We("__event_authority",s),m=We("token_minter",s),l=We("local_token",s,[i]),u=We("remote_token_messenger",s,[A.toString()]),p=We("sender_authority",s);return{messageTransmitterAccount:r,tokenMessenger:o,tokenMessengerEventAuthority:c,tokenMinter:m,localToken:l,remoteTokenMessengerKey:u,authorityPda:p}}function We(A,i,a=[]){let s=[Buffer.from(E.utils.bytes.utf8.encode(A))];for(let o of a)typeof o=="string"?s.push(Buffer.from(E.utils.bytes.utf8.encode(o))):Array.isArray(o)||Buffer.isBuffer(o)?s.push(Buffer.from(Uint8Array.from(o))):s.push(Buffer.from(Uint8Array.from(o.toBuffer())));return X.findProgramAddressSync(s,i)[0]}import{AnchorProvider as Ga}from"@project-serum/anchor";import{Connection as Za,PublicKey as Da}from"@solana/web3.js";function Ce(A,i){let a=new Za(A,"confirmed"),s=new Da(i);return new Ga(a,{publicKey:s},{preflightCommitment:"confirmed",commitment:"confirmed"})}var ie=class{};import{PublicKey as _a}from"@solana/web3.js";import{Address as Na}from"@stellar/stellar-sdk";import{Big as he}from"big.js";import En from"randombytes";import{utils as On}from"tronweb";function be(A,i,a){let s;switch(i){case"EVM":{s=Ua(A);break}case"SOLANA":{s=new _a(A).toBuffer();break}case"TRX":{s=Va(A);break}case"SRB":{s=new Na(A).toBuffer();break}}switch(a){case"EVM":return"0x"+s.toString("hex");case"SOLANA":return Array.from(s);case"TRX":return s;case"SRB":return s.toJSON().data}}function Xn(A){return Buffer.from(A.replace(/^0x/i,""),"hex")}function Ua(A){let a=Xn(A);return Buffer.concat([Buffer.alloc(32-a.length,0),a],32)}function Va(A){let i=Bt(A),a=Xn(i);return Oa(a,32)}function Bt(A){let i=On.crypto.decodeBase58Address(A);return i?On.bytes.byteArray2hexStr(i).replace(/^41/,"0x"):""}function Oa(A,i){if(A.length>=i)return A;let a=Buffer.alloc(i,0);return A.copy(a,i-A.length),a}function Ct(){return En(32)}function je(){let A=En(32).readBigInt64BE();return A<0?A*-1n:A}function Re(A,i){let a={},s=i.sourceToken;return a.amount=M(i.amount,s.decimals).toFixed(),a.contractAddress=s.bridgeAddress,a.fromAccountAddress=i.fromAccountAddress,a.fromTokenAddress=be(s.tokenAddress,A,A),a.toAccountAddress=i.toAccountAddress,a.toTokenAddress=be(i.destinationToken.tokenAddress,A,A),a.minimumReceiveAmount=i.minimumReceiveAmount?M(i.minimumReceiveAmount,i.destinationToken.decimals).toFixed():"0",a}async function Te(A,i,a){let s={};s.fromChainId=i.sourceToken.allbridgeChainId,s.fromChainSymbol=i.sourceToken.chainSymbol;let r=I.getChainProperty(i.destinationToken.chainSymbol).chainType;s.fromTokenAddress=i.sourceToken.tokenAddress,s.toChainId=i.destinationToken.allbridgeChainId,s.toTokenAddress=i.destinationToken.tokenAddress,i.gasFeePaymentMethod==="stablecoin"?s.gasFeePaymentMethod="stablecoin":s.gasFeePaymentMethod="native";let o=i.sourceToken;if(i.messenger===3){if(!o.cctpAddress||!i.destinationToken.cctpAddress)throw new te("Such route does not support CCTP protocol");s.contractAddress=o.cctpAddress}else s.contractAddress=o.bridgeAddress;s.messenger=i.messenger,s.fromAccountAddress=i.fromAccountAddress,s.amount=M(i.amount,o.decimals).toFixed();let{fee:c,feeFormat:m}=i;if(!c){let d=(await An(s.fromChainId,i.sourceToken.chainType,s.toChainId,o.decimals,s.messenger,a))[s.gasFeePaymentMethod];if(!d)throw new Le;c=d.int,m="int"}if(m=="float")switch(s.gasFeePaymentMethod){case"native":s.fee=M(c,I.getChainDecimalsByType(o.chainType)).toFixed(0);break;case"stablecoin":s.fee=M(c,o.decimals).toFixed(0);break}else s.fee=c;let{extraGas:l,extraGasFormat:u}=i;if(l&&+l>0){if(u=="float")switch(s.gasFeePaymentMethod){case"native":s.extraGas=M(l,I.getChainDecimalsByType(o.chainType)).toFixed(0);break;case"stablecoin":s.extraGas=M(l,o.decimals).toFixed(0);break}else s.extraGas=l;await Xa(s.extraGas,s.gasFeePaymentMethod,o,i.destinationToken,a)}return s.fromTokenAddress=be(s.fromTokenAddress,A,A),s.toAccountAddress=be(i.toAccountAddress,r,A),s.toTokenAddress=be(s.toTokenAddress,r,A),s.gasFeePaymentMethod=="stablecoin"&&Ea(s.amount,o.decimals,s.fee,s.extraGas),s}function Ea(A,i,a,s){let r=he(A).minus(a).minus(s??0);if(r.lte(0))throw new Ge(`Amount not enough to pay fee, ${C(he(r).minus(1).neg(),i).toFixed()} stables is missing`)}async function An(A,i,a,s,r,o){let c=await o.getReceiveTransactionCost({sourceChainId:A,destinationChainId:a,messenger:r}),m={native:{int:c.fee,float:C(c.fee,I.getChainDecimalsByType(i)).toFixed()}};if(c.sourceNativeTokenPrice){let l=we(new he(c.fee).mul(c.sourceNativeTokenPrice),I.getChainDecimalsByType(i),s).toFixed(0,he.roundUp);m.stablecoin={int:l,float:C(l,s).toFixed()}}return m}async function Xa(A,i,a,s,r){let c=(await cn(a,s,r)).extraGasMax[i];if(!c)throw new Le(`Impossible to pay extra gas by '${i}' payment method`);let m=c.int;if(he(A).gt(m))throw new dt(`Extra gas ${A} in int format, exceeded limit ${m} for '${i}' payment method`)}async function cn(A,i,a){let s={},r=await a.getReceiveTransactionCost({sourceChainId:A.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:1}),o=i.txCostAmount.maxAmount,c=C(o,I.getChainDecimalsByType(i.chainType)).toFixed(),m=he(c).div(r.exchangeRate).toFixed(I.getChainDecimalsByType(A.chainType),he.roundDown),l=M(m,I.getChainDecimalsByType(A.chainType)).toFixed(0);if(s.native={int:l,float:m},r.sourceNativeTokenPrice){let u=he(m).mul(r.sourceNativeTokenPrice).toFixed(A.decimals,he.roundDown);s.stablecoin={int:M(u,A.decimals).toFixed(0),float:u}}return{extraGasMax:s,destinationChain:{gasAmountMax:{int:o,float:c},swap:{int:i.txCostAmount.swap,float:C(i.txCostAmount.swap,I.getChainDecimalsByType(i.chainType)).toFixed()},transfer:{int:i.txCostAmount.transfer,float:C(i.txCostAmount.transfer,I.getChainDecimalsByType(i.chainType)).toFixed()}},exchangeRate:r.exchangeRate,sourceNativeTokenPrice:r.sourceNativeTokenPrice}}function Yn(A){return A.sourceToken.chainSymbol!==A.destinationToken.chainSymbol}var qe=class extends ie{constructor(a,s,r){super();this.web3=a;this.api=s;this.nodeRpcUrlsConfig=r}chainType="EVM";async send(a){let s=await this.buildRawTransactionSend(a);return this.sendRawTransaction(s)}async buildRawTransactionSwap(a){let s=Re(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s)}async buildRawTransactionSwapFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:l,minimumReceiveAmount:u}=a,d=this.getBridgeContract(r).methods.swap(s,c,l,m,u);return Promise.resolve({from:o,to:r,data:d.encodeABI()})}async buildRawTransactionSend(a){let s=await Te(this.chainType,a,this.api),{amount:r,contractAddress:o,fromAccountAddress:c,fromTokenAddress:m,toChainId:l,toAccountAddress:u,toTokenAddress:p,messenger:d,fee:g,gasFeePaymentMethod:h,extraGas:b}=s,T="0x"+Ct().toString("hex"),y,P,B=g;if(b&&(B=Ya(B).plus(b).toFixed()),d===3){let w=await this.buildRawTransactionCctpSend(a,s,B);y=w.sendMethod,P=w.value}else{let w=this.getBridgeContract(o);h==="stablecoin"?(y=w.methods.swapAndBridge(m,r,u,l,p,T,d,B),P="0"):(y=w.methods.swapAndBridge(m,r,u,l,p,T,d,0),P=B)}return Promise.resolve({from:c,to:o,value:P,data:y.encodeABI()})}async buildRawTransactionCctpSend(a,s,r){let{amount:o,contractAddress:c,toChainId:m,toAccountAddress:l,gasFeePaymentMethod:u}=s,p=this.getCctpBridgeContract(c),d,g;if(a.destinationToken.chainType==="SOLANA"){let h,b=new Ln(a.toAccountAddress),T=new Ln(a.destinationToken.tokenAddress),y=await ae(b,T),P=Ce(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),a.toAccountAddress);It.setProvider(P);let B=await It.Spl.token(P).account.token.fetchNullable(y);if(B?.authority.equals(b))h=be(y.toBase58(),"SOLANA",this.chainType);else{let w=await P.connection.getTokenAccountsByOwner(b,{mint:T});if(w.value.length===0&&!B)h=be(y.toBase58(),"SOLANA",this.chainType);else if(w.value.length>0){let G=w.value[0];if(!G?.pubkey)throw new S("First token account or its public key is undefined");h=be(G.pubkey.toBase58(),"SOLANA",this.chainType)}else throw new S("Associated account has wrong owner")}u==="stablecoin"?(d=p.methods.bridgeWithWalletAddress(o,h,l,m,r),g="0"):(d=p.methods.bridgeWithWalletAddress(o,h,l,m,0),g=r)}else u==="stablecoin"?(d=p.methods.bridge(o,l,m,r),g="0"):(d=p.methods.bridge(o,l,m,0),g=r);return{sendMethod:d,value:g}}async sendRawTransaction(a){let s=await this.web3.eth.estimateGas(a),r={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:o}=await this.web3.eth.sendTransaction({...a,gas:s,...r});return{txId:o.toString()}}getBridgeContract(a){return new this.web3.eth.Contract(xn.abi,a)}getCctpBridgeContract(a){return new this.web3.eth.Contract(Wn.abi,a)}};var vt=class{constructor(i,a,s,r){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=r}async approve(i,a){let s,r;a?(s=i,r=a):r=i;let o=$e(r.token,r.messenger);return this.tokenService.buildRawTransactionApprove({...r,spender:o},s)}async send(i,a){return x(i.amount),W("amount",i.amount,i.sourceToken.decimals),Yn(i)?Mt(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSend(i):Mt(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSwap(i)}};import{BN as Ee,Program as un,Spl as ei,web3 as Ie}from"@project-serum/anchor";import{Keypair as aa,PublicKey as F,SystemProgram as ti}from"@solana/web3.js";import{Big as se}from"big.js";var et={version:"0.1.0",name:"bridge",instructions:[{name:"initialize",accounts:[{name:"admin",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"initializePool",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"token",isMut:!0,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializePoolArgs"}}]},{name:"initDepositAccount",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"deposit",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdraw",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amountLp",type:"u64"}]},{name:"swapAndBridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"messenger",isMut:!1,isSigner:!1},{name:"messengerConfig",isMut:!0,isSigner:!1},{name:"sentMessageAccount",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swapAndBridgeWormhole",accounts:[{name:"user",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"wormholeMessenger",isMut:!1,isSigner:!1},{name:"wormholeMessengerConfig",isMut:!0,isSigner:!1},{name:"wormholeProgram",isMut:!1,isSigner:!1},{name:"bridge",isMut:!0,isSigner:!1},{name:"message",isMut:!0,isSigner:!0},{name:"sequence",isMut:!0,isSigner:!1},{name:"feeCollector",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"clock",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swap",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"sendMint",isMut:!1,isSigner:!1},{name:"receiveMint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"sendPool",isMut:!0,isSigner:!1},{name:"receivePool",isMut:!0,isSigner:!1},{name:"sendBridgeToken",isMut:!0,isSigner:!1},{name:"receiveBridgeToken",isMut:!0,isSigner:!1},{name:"sendUserToken",isMut:!0,isSigner:!1},{name:"receiveUserToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"},{name:"receiveAmountMin",type:"u64"}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"receiveAndSwap",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"receiveAndSwapWormhole",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"claimRewards",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setAdmin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAdmin",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"startBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"stopBridge",accounts:[{name:"stopAuthority",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"setRebalancer",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"rebalancer",isMut:!1,isSigner:!1}],args:[]},{name:"setStopAuthority",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAuthority",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"setAllbridgeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setWormholeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setPoolFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setBalanceRatioMin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"balanceRatioMinBp",type:"u16"}]},{name:"setPoolAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"addOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"removeOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"adjustTotalLpAmount",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[]}],accounts:[{name:"chainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"config",type:{kind:"struct",fields:[{name:"admin",type:"publicKey"},{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"rebalancer",type:"publicKey"},{name:"stopAuthority",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"canSwap",type:"bool"},{name:"canDeposit",type:"bool"},{name:"canWithdraw",type:"bool"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"sentTokenAddress",type:"publicKey"},{name:"amount",type:"u64"},{name:"vusdAmount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:"Messenger"}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"otherBridgeToken",type:{kind:"struct",fields:[]}},{name:"pool",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"tokenBalance",type:"u64"},{name:"vUsdBalance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"totalLpAmount",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"accRewardPerShareP",type:"u128"},{name:"adminFeeAmount",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"vUsdAmount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"userDeposit",type:{kind:"struct",fields:[{name:"userAddress",type:"publicKey"},{name:"mint",type:"publicKey"},{name:"lpAmount",type:"u64"},{name:"rewardDebt",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"vusdAmount",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"publicKey"},{name:"sourceChainId",type:"u8"},{name:"receiveToken",type:"publicKey"},{name:"messenger",type:{defined:"Messenger"}},{name:"hash",type:{array:["u8",32]}},{name:"receiveAmountMin",type:"u64"}]}},{name:"RewardError",type:{kind:"enum",variants:[{name:"FeeTooHigh"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}}],errors:[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"PoolInfo overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"}]};var Jn={version:"0.1.0",name:"cctp_bridge",instructions:[{name:"initialize",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"bridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"messageSentEventData",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!0,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"cctpMessenger",isMut:!1,isSigner:!1},{name:"messageTransmitterProgram",isMut:!1,isSigner:!1},{name:"messageTransmitterAccount",isMut:!0,isSigner:!1},{name:"tokenMessenger",isMut:!1,isSigner:!1},{name:"tokenMinter",isMut:!1,isSigner:!1},{name:"localToken",isMut:!0,isSigner:!1},{name:"remoteTokenMessengerKey",isMut:!1,isSigner:!1},{name:"authorityPda",isMut:!1,isSigner:!1},{name:"eventAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"setAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setCctpTokenMessengerMinter",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]}],accounts:[{name:"cctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"admin",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"adminFeeShareBp",type:"u64"},{name:"adminFeeAmount",type:"u64"}]}},{name:"chainBridge",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"amount",type:"u64"},{name:"adminFee",type:"u64"},{name:"relayerFee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"slot",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gasOracleProgramId",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"}]}}],errors:[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}]};import{Spl as La}from"@project-serum/anchor";import Ja from"big.js";import{Web3 as kt}from"web3";async function Ve(A,i){return await La.token(i).account.token.fetch(A)}async function Kn(A,i,a){let s=await i.account.pool.fetch(a),r=s.decimals,o=Ja(s.feeShareBp.toString()).div(1e4).toFixed(),c={aValue:s.a.toString(),dValue:s.d.toString(),totalLpAmount:s.totalLpAmount.toString(),tokenBalance:s.tokenBalance.toString(),vUsdBalance:s.vUsdBalance.toString(),accRewardPerShareP:s.accRewardPerShareP.toString()};return ue(A,{decimals:r,feeShare:o},c)}function Qn(A){let i=A.amount,a="0x"+A.recipient.toString("hex"),s=A.sourceChainId,r=A.destinationChainId,o="0x"+A.receiveToken.toString("hex"),c="0x"+A.nonce.toString("hex"),m=1,l="0x"+A.chainBridge.toString("hex"),u=kt.utils.encodePacked({t:"uint256",v:i},{t:"bytes32",v:a},{t:"uint256",v:s},{t:"bytes32",v:o},{t:"uint256",v:c},{t:"uint8",v:m});if(!u)throw new S("message cannot be undefined");let p=kt.utils.keccak256(Buffer.from(u.replace("0x",""),"hex")),d=Buffer.from(p.replace("0x",""),"hex");d[0]=s,d[1]=r;let g=kt.utils.encodePacked({t:"bytes32",v:"0x"+d.toString("hex")},{t:"bytes32",v:l});if(!g)throw new Ze("messageWithSigner cannot be undefined");let h=kt.utils.keccak256(Buffer.from(g.replace("0x",""),"hex")),b=Buffer.from(h.replace("0x",""),"hex");return b[0]=d[0],b[1]=d[1],b}import{ComputeBudgetInstruction as zn,ComputeBudgetProgram as xt,Connection as jn,TransactionMessage as Ka}from"@solana/web3.js";import{Big as Qa}from"big.js";import{AddressLookupTableAccount as Hn}from"@solana/web3.js";async function Fe(A,i){return await Promise.all(A.message.addressTableLookups.map(async a=>new Hn({key:a.accountKey,state:Hn.deserialize(await i.getAccountInfo(a.accountKey).then(s=>{if(!s)throw new S("Cannot get AccountInfo");return s.data}))})))}var mn="AUTO";async function Oe(A,i,a){let s=new jn(a,"confirmed"),r=(await s.simulateTransaction(A)).value.unitsConsumed;await $n(A.instructions,r,i,s)}async function qn(A,i,a){let s=new jn(a,"confirmed"),r=await Fe(A,s),o=Ka.decompile(A.message,{addressLookupTableAccounts:r});if(A.serialize().length>1232)throw new ft;await $n(o.instructions,769230,i,s),A.message=o.compileToV0Message(r)}async function $n(A,i,a,s){if(i>0){let r=Ha(i,A);if(a?.solana){let o=a.solana;if(o===mn)await ln(A,s);else if("pricePerUnitInMicroLamports"in o)await ln(A,s,o.pricePerUnitInMicroLamports);else{let c=Qa(o.extraFeeInLamports).div(r).mul(Qe(6)).toFixed(0);await ln(A,s,c)}}}}function Ha(A,i){let a=i.findIndex(o=>o.programId.equals(xt.programId)&&zn.decodeInstructionType(o)==="SetComputeUnitLimit"),s=Number((A*1.3).toFixed(0)),r=xt.setComputeUnitLimit({units:s});return a>=0?i[a]=r:i.push(r),s.toString()}async function ln(A,i,a){let s=A.findIndex(c=>c.programId.equals(xt.programId)&&zn.decodeInstructionType(c)==="SetComputeUnitPrice"),r=BigInt(a||await za(i)),o=xt.setComputeUnitPrice({microLamports:r});return s>=0?A[s]=o:A.push(o),r.toString()}async function za(A){let i=await A.getRecentPrioritizationFees(),a=0;for(let s of i)a+=s.prioritizationFee;return(a/i.length).toFixed(0)}import{NATIVE_MINT as ja}from"@solana/spl-token";import{Connection as qa,TransactionMessage as ea,VersionedTransaction as $a}from"@solana/web3.js";import ta,{AxiosError as na}from"axios";var Wt=class{connection;jupiterUrl;maxAccounts;constructor(i,a,s){this.connection=new qa(i),this.jupiterUrl=a.replace(/\/$/,""),this.maxAccounts=s}async getJupiterSwapTx(i,a,s,r){let o;try{let d=r?"ExactOut":"ExactIn",g=`${this.jupiterUrl}/quote?inputMint=${a}&outputMint=${ja.toString()}&amount=${s}&swapMode=${d}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(g+=`&maxAccounts=${this.maxAccounts}`),o=await ta.get(g)}catch(d){throw d instanceof na&&d.response&&d.response.data&&d.response.data.error?new V(d.response.data.error):new V("Cannot get route")}let c;if(r&&o?.data?.inAmount)c=o.data.inAmount;else if(r)throw new V("Cannot get inAmount");let m;try{m=await ta.post(`${this.jupiterUrl}/swap`,{quoteResponse:o.data,userPublicKey:i,wrapAndUnwrapSol:!0})}catch(d){throw d instanceof na&&d.response&&d.response.data&&d.response.data.error?new V(d.response.data.error):new V("Cannot get swap transaction")}let l;if(m?.data?.swapTransaction)l=m.data.swapTransaction;else throw new V("Cannot get swap transaction");let u=Buffer.from(l,"base64"),p=$a.deserialize(u);return r?{tx:p,amountIn:c}:{tx:p}}async amendJupiterWithSdkTx(i,a){try{let s=await Fe(i,this.connection),r=await Fe(a,this.connection),o=ea.decompile(i.message,{addressLookupTableAccounts:s}),c=ea.decompile(a.message,{addressLookupTableAccounts:r});if(c.instructions.shift(),o.instructions.push(...c.instructions),s.push(...r),i.message=o.compileToV0Message(s),a.message.header.numRequiredSignatures===2&&i.signatures.length===1){let m=a.signatures[0];if(!m)throw new S("Signature is undefined");i.signatures.push(m)}return i}catch(s){throw s instanceof Error&&s.message?new V(`Some error occurred during creation final swap and bridge transaction. ${s.message}`):new V("Some error occurred during creation final swap and bridge transaction")}}};var dn=1e6,ia=1.1,Ft=class extends ie{constructor(a,s,r){super();this.solanaRpcUrl=a;this.params=s;this.api=r;this.jupiterService=new Wt(a,s.jupiterUrl,s.jupiterMaxAccounts)}chainType="SOLANA";jupiterService;async buildRawTransactionSwap(a){let s=Re(this.chainType,a);return await this.buildSwapTransaction(s,a.sourceToken.poolAddress,a.destinationToken.poolAddress,a.txFeeParams)}async buildSwapTransaction(a,s,r,o){let{fromAccountAddress:c,amount:m,contractAddress:l,fromTokenAddress:u,toTokenAddress:p,toAccountAddress:d,minimumReceiveAmount:g}=a,h=c,b=l,T=u,y=p,P=r,B=d,w=new F(h),G=Ce(this.solanaRpcUrl,w.toString()),k=new un(et,b,G),R=await _e(k.programId),J=await Be(k.programId),_=new F(T),Ae=await Ne(_,k.programId),ce=new F(s),ge=await ae(w,_),q=new F(B),Y=new F(y),j=await Ne(Y,k.programId),$=new F(P),K=await ae(q,Y),me=[Ie.ComputeBudgetProgram.setComputeUnitLimit({units:dn})];try{await Ve(K,G)}catch{let ha=await ei.associatedToken(G).methods.create().accounts({mint:Y,owner:q,associatedAccount:K}).instruction();me.push(ha)}let le=await k.methods.swap(new Ee(m),new Ee(g||0)).accounts({payer:w,config:J,bridgeAuthority:R,user:w,sendBridgeToken:Ae,sendMint:_,sendPool:ce,sendUserToken:ge,receiveBridgeToken:j,receiveMint:Y,receivePool:$,receiveUserToken:K}).preInstructions(me).transaction(),ee=G.connection;return le.recentBlockhash=(await ee.getLatestBlockhash()).blockhash,le.feePayer=w,await Oe(le,o,this.solanaRpcUrl),await this.convertToVersionedTransaction(le,ee)}async buildRawTransactionSend(a){let s=await Te(this.chainType,a,this.api),r=this.addPoolAddress(a,s),o=r.gasFeePaymentMethod=="stablecoin",c;if(o)try{let{tx:u,solTxSendUpdatedParams:p}=await this.processJup(r,a,!0);c=u,r={...r,...p}}catch{try{let{tx:p,solTxSendUpdatedParams:d}=await this.processJup(r,a,!1);c=p,r={...r,...d}}catch(p){throw p instanceof D?p:p instanceof Error&&p.message?new V(`Some error occurred during creation Jupiter swap transaction. ${p.message}`):new V("Some error occurred during creation Jupiter swap transaction")}}let m,l;switch(s.messenger){case 1:{let u=await this.prepareSwapAndBridgeData(r);m=await this.buildSwapAndBridgeAllbridgeTransaction(u);break}case 2:{let u=await this.prepareSwapAndBridgeData(r),{transaction:p,messageAccount:d}=await this.buildSwapAndBridgeWormholeTransaction(u);m=p,l=d;break}case 3:{let u=await this.prepareSwapAndBridgeCctpData(r),{transaction:p,messageSentEventDataKeypair:d}=await this.buildSwapAndBridgeCctpTransaction(a.destinationToken.chainSymbol,u);m=p,l=d;break}}if(o){if(!c)throw new V("Swap tx is absent");m=await this.jupiterService.amendJupiterWithSdkTx(c,m)}return await qn(m,a.txFeeParams,this.solanaRpcUrl),l&&m.sign([l]),m}async processJup(a,s,r){let{fee:o,extraGas:c,gasFeePaymentMethod:m}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(s.sourceToken.decimals,a),l=r?se(o):se(a.fee);c&&(l=l.plus(c)),r||(l=l.mul(ia));let{tx:u,amountIn:p}=await this.jupiterService.getJupiterSwapTx(s.fromAccountAddress,s.sourceToken.tokenAddress,l.toFixed(0),r),d;if(r){if(!p)throw new V("Cannot get inAmount");d=se(a.amount).minus(se(p).mul(ia)).toFixed(0)}else d=se(a.amount).minus(l).toFixed(0);if(se(d).lte(0))throw new Ge(`Amount not enough to pay fee, ${C(se(d).minus(1).neg(),s.sourceToken.decimals).toFixed()} stables is missing`);return{tx:u,solTxSendUpdatedParams:{amount:d,fee:o,extraGas:c,gasFeePaymentMethod:m}}}addPoolAddress(a,s){return{...s,poolAddress:a.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(a,s){if(s.gasFeePaymentMethod=="stablecoin"){let r=(await this.api.getReceiveTransactionCost({sourceChainId:s.fromChainId,destinationChainId:s.toChainId,messenger:s.messenger})).sourceNativeTokenPrice,o=se(s.fee).div(r).mul(se(10).pow(I.getChainDecimalsByType("SOLANA")-a)).toFixed(0),c;return s.extraGas&&(c=se(s.extraGas).div(r).mul(se(10).pow(I.getChainDecimalsByType("SOLANA")-a)).toFixed(0)),{fee:o,extraGas:c,gasFeePaymentMethod:"native"}}return{fee:s.fee,extraGas:s.extraGas,gasFeePaymentMethod:"native"}}getExtraGasInstruction(a,s,r){return Ie.SystemProgram.transfer({fromPubkey:s,toPubkey:r,lamports:+a})}async prepareSwapAndBridgeData(a){let{amount:s,contractAddress:r,fromChainId:o,fromAccountAddress:c,fromTokenAddress:m,toChainId:l,toAccountAddress:u,toTokenAddress:p,poolAddress:d,extraGas:g}=a,h=m,b=c,T=l,y=p,P=u,B=r,w=o,G=Ce(this.solanaRpcUrl,b),k=new un(et,B,G),R=Array.from(Ct()),J=new F(d),_=await Kn(s,k,J),Ae=await Fn(R,k.programId),ce=await _e(k.programId),ge=await ae(new F(b),new F(h)),q=await Ne(new F(h),k.programId),Y=await sn(T,k.programId),j=await Zn(T,Buffer.from(y),k.programId),$=await Be(k.programId),K=await k.account.config.fetch($),me=await ze(T,K.gasOracleProgramId),le=await ze(w,K.gasOracleProgramId),ee=Qn({amount:_,recipient:Buffer.from(P),nonce:Buffer.from(R),receiveToken:Buffer.from(y),destinationChainId:T,sourceChainId:w,chainBridge:(await _e(k.programId)).toBuffer()}),v={};return v.bridge=k,v.amount=new Ee(s),v.vusdAmount=new Ee(_),v.nonce=R,v.recipient=Array.from(P),v.receiveToken=Array.from(y),v.poolAccount=J,v.lockAccount=Ae,v.bridgeAuthority=ce,v.userToken=ge,v.bridgeTokenAccount=q,v.chainBridgeAccount=Y,v.otherBridgeTokenAccount=j,v.userAccount=new F(b),v.destinationChainId=T,v.mint=new F(h),v.config=$,v.configAccountInfo=K,v.gasPrice=me,v.thisGasPrice=le,v.message=ee,g&&(v.extraGasInstruction=this.getExtraGasInstruction(g,v.userAccount,$)),v}async buildSwapAndBridgeAllbridgeTransaction(a){let{bridge:s,vusdAmount:r,nonce:o,recipient:c,receiveToken:m,poolAccount:l,lockAccount:u,bridgeAuthority:p,userToken:d,bridgeTokenAccount:g,chainBridgeAccount:h,otherBridgeTokenAccount:b,userAccount:T,destinationChainId:y,mint:P,config:B,configAccountInfo:w,gasPrice:G,thisGasPrice:k,message:R,extraGasInstruction:J}=a,_=w.allbridgeMessengerProgramId,Ae=await rn(y,_),ce=await Be(_),ge=await Dn(R,_),q=[];J&&q.push(J);let Y=await s.methods.swapAndBridge({vusdAmount:r,nonce:o,destinationChainId:y,recipient:c,receiveToken:m}).accounts({mint:P,user:T,config:B,lock:u,pool:l,gasPrice:G,thisGasPrice:k,bridgeAuthority:p,userToken:d,bridgeToken:g,chainBridge:h,messenger:_,messengerGasUsage:Ae,messengerConfig:ce,sentMessageAccount:ge,otherBridgeToken:b}).preInstructions([Ie.ComputeBudgetProgram.setComputeUnitLimit({units:dn})]).postInstructions(q).transaction(),j=Ce(this.solanaRpcUrl,T.toString()).connection;return Y.recentBlockhash=(await j.getLatestBlockhash()).blockhash,Y.feePayer=T,await this.convertToVersionedTransaction(Y,j)}async convertToVersionedTransaction(a,s){let r=await s.getAddressLookupTable(new F(this.params.solanaLookUpTable)).then(c=>c.value);if(!r)throw new S("Cannot find allbridgeLookupTableAccount");let o=new Ie.TransactionMessage({payerKey:a.feePayer,recentBlockhash:a.recentBlockhash,instructions:a.instructions}).compileToV0Message([r]);return new Ie.VersionedTransaction(o)}async buildSwapAndBridgeWormholeTransaction(a){let{bridge:s,vusdAmount:r,nonce:o,recipient:c,receiveToken:m,poolAccount:l,lockAccount:u,bridgeAuthority:p,userToken:d,bridgeTokenAccount:g,chainBridgeAccount:h,otherBridgeTokenAccount:b,userAccount:T,destinationChainId:y,mint:P,config:B,configAccountInfo:w,gasPrice:G,thisGasPrice:k,message:R,extraGasInstruction:J}=a,_=this.params.wormholeMessengerProgramId,[Ae]=F.findProgramAddressSync([Buffer.from("Bridge")],new F(_)),[ce]=F.findProgramAddressSync([Buffer.from("fee_collector")],new F(_)),[ge]=F.findProgramAddressSync([Buffer.from("Sequence"),p.toBuffer()],new F(_)),q=await rn(y,w.wormholeMessengerProgramId),Y=await Be(w.wormholeMessengerProgramId),j=aa.generate(),$=Ce(this.solanaRpcUrl,T.toString()),K=await $.connection.getAccountInfo(Ae);if(K==null)throw new S("Cannot fetch wormhole bridge account info");let me=new Ee(K.data.slice(16,24),"le").toString(),le=ti.transfer({fromPubkey:T,toPubkey:ce,lamports:+me}),ee=[];J&&ee.push(J);let v={mint:P,user:T,config:B,lock:u,pool:l,gasPrice:G,thisGasPrice:k,bridgeAuthority:p,userToken:d,bridgeToken:g,chainBridge:h,otherBridgeToken:b,messengerGasUsage:q,wormholeProgram:_,bridge:Ae,message:j.publicKey,wormholeMessenger:w.wormholeMessengerProgramId,sequence:ge,feeCollector:ce,wormholeMessengerConfig:Y,clock:Ie.SYSVAR_CLOCK_PUBKEY},mt=await s.methods.swapAndBridgeWormhole({vusdAmount:r,nonce:o,destinationChainId:y,recipient:c,receiveToken:m}).accounts(v).preInstructions([Ie.ComputeBudgetProgram.setComputeUnitLimit({units:dn}),le]).postInstructions(ee).signers([j]).transaction();return mt.recentBlockhash=(await $.connection.getLatestBlockhash()).blockhash,mt.feePayer=T,{transaction:await this.convertToVersionedTransaction(mt,$.connection),messageAccount:j}}async prepareSwapAndBridgeCctpData(a){let{contractAddress:s,amount:r,fromAccountAddress:o,fromTokenAddress:c,toChainId:m,toAccountAddress:l,toTokenAddress:u,extraGas:p}=a,d=s;if(!d)throw new te("Such route does not support CCTP protocol");let g=4,h=o,b=u,T=l,y=Ce(this.solanaRpcUrl,h),P=new un(Jn,d,y),B=new F(c),w=await _n(B,P.programId),G=new F(h),k=await P.account.cctpBridge.fetch(w),R={};return R.cctpBridge=P,R.cctpBridgeAccount=w,R.cctpAddressAccount=new F(d),R.amount=new Ee(r),R.recipient=Array.from(T),R.receiveToken=Array.from(b),R.userToken=await ae(G,B),R.bridgeAuthority=await Gn(w,P.programId),R.bridgeTokenAccount=await Nn(B,P.programId),R.chainBridgeAccount=await sn(m,P.programId),R.userAccount=G,R.destinationChainId=m,R.mint=B,R.gasPrice=await ze(m,k.gasOracleProgramId),R.thisGasPrice=await ze(g,k.gasOracleProgramId),R.provider=y,p&&(R.extraGasInstruction=this.getExtraGasInstruction(p,R.userAccount,w)),R}async buildSwapAndBridgeCctpTransaction(a,s){let{cctpBridge:r,cctpBridgeAccount:o,amount:c,recipient:m,receiveToken:l,bridgeAuthority:u,userToken:p,bridgeTokenAccount:d,chainBridgeAccount:g,userAccount:h,destinationChainId:b,mint:T,gasPrice:y,thisGasPrice:P,extraGasInstruction:B,provider:w}=s,G=this.params.cctpParams.cctpDomains[a],k=this.params.cctpParams.cctpTransmitterProgramId,R=this.params.cctpParams.cctpTokenMessengerMinter;if(G==null||!k||!R)throw new S("CCTP is not configured");let J=new F(k),_=new F(R),{messageTransmitterAccount:Ae,tokenMessenger:ce,tokenMessengerEventAuthority:ge,tokenMinter:q,localToken:Y,remoteTokenMessengerKey:j,authorityPda:$}=Vn(G,T,J,_),K=[];B&&K.push(B);let me=aa.generate(),le=Un(r.programId,me.publicKey),ee=await r.methods.bridge({amount:c,destinationChainId:b,recipient:m,receiveToken:l}).accounts({mint:T,user:h,cctpBridge:o,messageSentEventData:me.publicKey,lock:le,cctpMessenger:_,messageTransmitterProgram:J,messageTransmitterAccount:Ae,tokenMessenger:ce,tokenMinter:q,localToken:Y,remoteTokenMessengerKey:j,authorityPda:$,eventAuthority:ge,bridgeToken:d,gasPrice:y,thisGasPrice:P,chainBridge:g,userToken:p,bridgeAuthority:u}).preInstructions([Ie.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(K).transaction(),v=w.connection;return ee.recentBlockhash=(await v.getLatestBlockhash()).blockhash,ee.feePayer=h,{transaction:await this.convertToVersionedTransaction(ee,v),messageSentEventDataKeypair:me}}send(a){throw new L}};import{Address as pn,contract as jd}from"@stellar/stellar-sdk";import{Big as ii}from"big.js";import{contract as n}from"@stellar/stellar-sdk";var ni=n.Spec,ai=n.Client;var tt=class extends ai{constructor(a){super(new ni(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),a);this.options=a}fromJSON={initialize:this.txFromJSON,swap_and_bridge:this.txFromJSON,receive_tokens:this.txFromJSON,swap:this.txFromJSON,stop_swap:this.txFromJSON,start_swap:this.txFromJSON,set_gas_oracle:this.txFromJSON,set_stop_authority:this.txFromJSON,set_rebalancer:this.txFromJSON,set_messenger:this.txFromJSON,set_gas_usage:this.txFromJSON,register_bridge:this.txFromJSON,add_bridge_token:this.txFromJSON,remove_bridge_token:this.txFromJSON,add_pool:this.txFromJSON,withdraw_gas_tokens:this.txFromJSON,withdraw_bridging_fee_in_tokens:this.txFromJSON,has_processed_message:this.txFromJSON,has_received_message:this.txFromJSON,get_pool_address:this.txFromJSON,get_config:this.txFromJSON,get_stop_authority:this.txFromJSON,get_transaction_cost:this.txFromJSON,get_gas_usage:this.txFromJSON,get_admin:this.txFromJSON,get_gas_oracle:this.txFromJSON,get_another_bridge:this.txFromJSON,set_admin:this.txFromJSON,upgrade:this.txFromJSON}};var Gt=class extends ie{constructor(a,s,r){super();this.nodeRpcUrlsConfig=a;this.params=s;this.api=r}chainType="SRB";async buildRawTransactionSend(a){let s=await Te(this.chainType,a,this.api);return await this.buildRawTransactionSendFromParams(s)}async buildRawTransactionSendFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toChainId:m,toAccountAddress:l,toTokenAddress:u,fee:p,gasFeePaymentMethod:d,extraGas:g}=a,h=p;g&&(h=ii(h).plus(g).toFixed());let b=this.getContract(tt,r,o),T;return d==="stablecoin"?T=await b.swap_and_bridge({sender:o,token:pn.contract(Buffer.from(c)).toString(),amount:BigInt(s),recipient:Buffer.from(l),destination_chain_id:+m,receive_token:Buffer.from(u),nonce:je(),gas_amount:BigInt(0),fee_token_amount:BigInt(h)}):T=await b.swap_and_bridge({sender:o,token:pn.contract(Buffer.from(c)).toString(),amount:BigInt(s),recipient:Buffer.from(l),destination_chain_id:+m,receive_token:Buffer.from(u),nonce:je(),gas_amount:BigInt(h),fee_token_amount:BigInt(0)}),T.toXDR()}async buildRawTransactionSwap(a){let s=Re(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s)}async buildRawTransactionSwapFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:l,minimumReceiveAmount:u}=a;return(await this.getContract(tt,r,o).swap({sender:o,amount:BigInt(s),token:pn.contract(Buffer.from(c)).toBuffer(),receive_token:Buffer.from(l),recipient:m,receive_amount_min:BigInt(u)})).toXDR()}send(a){throw new L}getContract(a,s,r){let o={publicKey:r,contractId:s,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(o)}};import{Big as oi}from"big.js";import si from"bn.js";function Zt(A){return"0x"+new si(A).toString("hex")}function sa(A){return new Promise(i=>setTimeout(()=>i(),A))}async function Dt(A,i){let a=await A.trx.sign(i);if(!a.signature)throw new Ze("Transaction was not signed properly");let r=(await A.trx.sendRawTransaction(a)).transaction.txID;return await ri(A,r),{txId:r}}async function ri(A,i,a=1e4){let s=Date.now();for(;;){if(Date.now()-s>a)throw new Je("Transaction not found");let r=await A.trx.getUnconfirmedTransactionInfo(i);if(!r?.receipt){await sa(2e3);continue}if(r.receipt.result==="SUCCESS")return r;throw new Je(`Transaction status is ${r.receipt.result}`)}}var nt=class extends ie{constructor(a,s){super();this.tronWeb=a;this.api=s}chainType="TRX";async send(a){let s=await Te(this.chainType,a,this.api),r=await this.buildRawTransactionSendFromParams(s);return await Dt(this.tronWeb,r)}async buildRawTransactionSwap(a){let s=Re(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s)}async buildRawTransactionSwapFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:l,minimumReceiveAmount:u}=a,p=[{type:"uint256",value:s},{type:"bytes32",value:c},{type:"bytes32",value:l},{type:"address",value:m},{type:"uint256",value:u}];return this.buildRawTransaction(r,"swap(uint256,bytes32,bytes32,address,uint256)",p,"0",o)}async buildRawTransactionSend(a){let s=await Te(this.chainType,a,this.api);return this.buildRawTransactionSendFromParams(s)}async buildRawTransactionSendFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toChainId:m,toAccountAddress:l,toTokenAddress:u,messenger:p,fee:d,gasFeePaymentMethod:g,extraGas:h}=a,b=d;h&&(b=oi(b).plus(h).toFixed());let T=je().toString(),y,P,B;return p==3?(g==="stablecoin"?(y=[{type:"uint256",value:s},{type:"bytes32",value:l},{type:"uint256",value:m},{type:"uint256",value:b}],P="0"):(y=[{type:"uint256",value:s},{type:"bytes32",value:l},{type:"uint256",value:m},{type:"uint256",value:0}],P=b),B="bridge(uint256,bytes32,uint256,uint256)"):(g==="stablecoin"?(y=[{type:"bytes32",value:c},{type:"uint256",value:s},{type:"bytes32",value:l},{type:"uint256",value:m},{type:"bytes32",value:u},{type:"uint256",value:T},{type:"uint8",value:p},{type:"uint256",value:b}],P="0"):(y=[{type:"bytes32",value:c},{type:"uint256",value:s},{type:"bytes32",value:l},{type:"uint256",value:m},{type:"bytes32",value:u},{type:"uint256",value:T},{type:"uint8",value:p},{type:"uint256",value:0}],P=b),B="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)"),this.buildRawTransaction(r,B,y,P,o)}async buildRawTransaction(a,s,r,o,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(a,s,{callValue:+o},r,c);if(!m?.result?.result)throw new S("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var _t=class{constructor(i,a,s,r){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=r;this.rawTxBuilder=new vt(i,a,s,r)}rawTxBuilder;async getAllowance(i,a){let s,r;a?(s=i,r=a):r=i;let o=$e(r.token,r.messenger);return await this.tokenService.getAllowance({...r,spender:o},s)}async checkAllowance(i,a){let s,r;a?(s=i,r=a):r=i;let o=$e(r.token,r.messenger);return this.tokenService.checkAllowance({...r,spender:o},s)}async approve(i,a){let s=$e(a.token,a.messenger);return this.tokenService.approve(i,{...a,spender:s})}async send(i,a){return x(a.amount),W("amount",a.amount,a.sourceToken.decimals),Mt(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).send(a)}};function $e(A,i){if(i&&i==3){if(A.cctpAddress)return A.cctpAddress;throw new te("Such route does not support CCTP protocol")}else return A.bridgeAddress}function Mt(A,i,a,s,r){switch(I.getChainProperty(A).chainType){case"EVM":{if(r)return new qe(r,i,a);{let o=a.getNodeRpcUrl(A);return new qe(new ci(o),i,a)}}case"TRX":{if(r)return new nt(r,i);{let o=a.getNodeRpcUrl(A);return new nt(new Ai({fullHost:o,solidityNode:o,eventServer:o}),i)}}case"SOLANA":return new Ft(a.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:s.wormholeMessengerProgramId,solanaLookUpTable:s.solanaLookUpTable,cctpParams:s.cctpParams,jupiterUrl:s.jupiterUrl,jupiterMaxAccounts:s.jupiterMaxAccounts},i);case"SRB":return new Gt(a,s,i)}}import{Big as hi}from"big.js";import bi from"timed-cache";import{TronWeb as Ti}from"tronweb";import{FMT_BYTES as Pi,FMT_NUMBER as Si,Web3 as wi}from"web3";import{Big as Pe}from"big.js";function ra(A,i,a,s,r){let o=M(A,3),c=Pe(o),m=Pe(a),l=Pe(s).plus(r),u,p;if(m.eq(0)||l.eq(0)){let g=c.div(2);u=Pe(s).plus(g),p=Pe(r).plus(g)}else u=Pe(s).plus(c.mul(s).div(l)),p=Pe(r).plus(c.mul(r).div(l));return Pe(wn(i,u.toFixed(),p.toFixed())).minus(m).toFixed()}function oa(A){let i=M(A,3);return Pe(i).round().toFixed()}import{Web3 as ve}from"web3";var mi={abi:[{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"}]},Xe=mi;var z=class{lpAmount;rewardDebt;constructor(i){this.lpAmount=i.lpAmount,this.rewardDebt=i.rewardDebt}get userLiquidity(){return C(this.lpAmount,3).toFixed()}earned(i,a){let s=Pn(this.lpAmount,this.rewardDebt,i.accRewardPerShareP,i.p);return a?C(s,a).toFixed():s}};var re=class{};var at=class extends re{constructor(a,s){super();this.web3=a;this.api=s}chainType="EVM";P=52;async getUserBalanceInfo(a,s){let r;try{r=await wt(this.getUserBalanceInfoByBatch(a,s),`Cannot get UserBalanceInfo for ${s.name} on ${s.chainSymbol}`,5e3)}catch{r=await an(()=>this.getUserBalanceInfoPerProperty(a,s),`Cannot get UserBalanceInfo for ${s.name} on ${s.chainSymbol}`,5,2e3)}return r}async getPoolInfoFromChain(a){let s;try{s=await wt(this.getPoolInfoByBatch(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5e3)}catch{s=await an(()=>this.getPoolInfoPerProperty(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5,2e3)}return s}async getUserBalanceInfoByBatch(a,s){let r=new this.web3.eth.BatchRequest,o=this.getPoolContract(s.poolAddress),c=o.methods.userRewardDebt(a).encodeABI(),m=o.methods.balanceOf(a).encodeABI();r.add({method:"eth_call",params:[{to:s.poolAddress,data:c},"latest"]}),r.add({method:"eth_call",params:[{to:s.poolAddress,data:m},"latest"]});let[l,u]=await r.execute();if(l&&u&&!l.error&&!u.error)return new z({lpAmount:ve.utils.toBigInt(u.result).toString(),rewardDebt:ve.utils.toBigInt(l.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(a,s){let r=(await this.getPoolContract(s.poolAddress).methods.userRewardDebt(a).call()).toString(),o=(await this.getPoolContract(s.poolAddress).methods.balanceOf(a).call()).toString();return new z({lpAmount:o,rewardDebt:r})}async getPoolInfoByBatch(a){let s=new this.web3.eth.BatchRequest,r=this.getPoolContract(a.poolAddress),o=r.methods.a().encodeABI(),c=r.methods.d().encodeABI(),m=r.methods.tokenBalance().encodeABI(),l=r.methods.vUsdBalance().encodeABI(),u=r.methods.totalSupply().encodeABI(),p=r.methods.accRewardPerShareP().encodeABI();s.add({method:"eth_call",params:[{to:a.poolAddress,data:o},"latest"]}),s.add({method:"eth_call",params:[{to:a.poolAddress,data:c},"latest"]}),s.add({method:"eth_call",params:[{to:a.poolAddress,data:m},"latest"]}),s.add({method:"eth_call",params:[{to:a.poolAddress,data:l},"latest"]}),s.add({method:"eth_call",params:[{to:a.poolAddress,data:u},"latest"]}),s.add({method:"eth_call",params:[{to:a.poolAddress,data:p},"latest"]});let[d,g,h,b,T,y]=await s.execute();if(d&&g&&h&&b&&T&&y&&!d.error&&!g.error&&!h.error&&!b.error&&!T.error&&!y.error){let P=ve.utils.toBigInt(h.result).toString(),B=ve.utils.toBigInt(b.result).toString(),w=H({tokenBalance:P,vUsdBalance:B});return{aValue:ve.utils.toBigInt(d.result).toString(),dValue:ve.utils.toBigInt(g.result).toString(),tokenBalance:P,vUsdBalance:B,totalLpAmount:ve.utils.toBigInt(T.result).toString(),accRewardPerShareP:ve.utils.toBigInt(y.result).toString(),p:this.P,imbalance:w}}throw new Error("Batched failed")}async getPoolInfoPerProperty(a){let s=this.getPoolContract(a.poolAddress),r=(await s.methods.a().call()).toString(),o=(await s.methods.d().call()).toString(),c=(await s.methods.tokenBalance().call()).toString(),m=(await s.methods.vUsdBalance().call()).toString(),l=(await s.methods.totalSupply().call()).toString(),u=(await s.methods.accRewardPerShareP().call()).toString(),p=H({tokenBalance:c,vUsdBalance:m});return{aValue:r,dValue:o,tokenBalance:c,vUsdBalance:m,totalLpAmount:l,accRewardPerShareP:u,p:this.P,imbalance:p}}async buildRawTransactionDeposit(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.deposit(a.amount).encodeABI()})}async buildRawTransactionWithdraw(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.withdraw(a.amount).encodeABI()})}async buildRawTransactionClaimRewards(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(a){return{from:a.accountAddress,to:a.token.poolAddress,value:"0"}}getPoolContract(a){return new this.web3.eth.Contract(Xe.abi,a)}};var Nt=class{constructor(i,a,s,r){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=r}async approve(i,a){if(a){let s=i,r=a;return this.tokenService.buildRawTransactionApprove({...r,spender:r.token.poolAddress},s)}else{let s=i;return this.tokenService.buildRawTransactionApprove({...s,spender:s.token.poolAddress})}}async deposit(i,a){return x(i.amount),W("amount",i.amount,i.token.decimals),i.amount=M(i.amount,i.token.decimals).toFixed(),Ye(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionDeposit(i)}async withdraw(i,a){return x(i.amount),W("amount",i.amount,i.token.decimals),i.amount=M(i.amount,3).toFixed(),Ye(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionWithdraw(i)}async claimRewards(i,a){return Ye(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionClaimRewards(i)}};import{AnchorProvider as li,BN as Aa,Program as ui,Spl as di,web3 as pi}from"@project-serum/anchor";import{Connection as gi,PublicKey as Me}from"@solana/web3.js";var Ut=class extends re{constructor(a,s){super();this.solanaRpcUrl=a;this.api=s}chainType="SOLANA";P=48;async getUserBalanceInfo(a,s){let r=this.buildAnchorProvider(a),o=this.getBridge(s.bridgeAddress,r),c=new Me(s.poolAddress),m=await o.account.pool.fetch(c);try{let l=await on(new Me(a),m.mint,o.programId),{lpAmount:u,rewardDebt:p}=await o.account.userDeposit.fetch(l);return new z({lpAmount:u.toString(),rewardDebt:p.toString()})}catch{return new z({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(a){let s=this.buildAnchorProvider(a.bridgeAddress),r=await this.getBridge(a.bridgeAddress,s).account.pool.fetch(a.poolAddress),o=r.vUsdBalance.toString(),c=r.tokenBalance.toString(),m=H({tokenBalance:c,vUsdBalance:o});return{dValue:r.d.toString(),aValue:r.a.toString(),totalLpAmount:r.totalLpAmount.toString(),vUsdBalance:o,tokenBalance:c,accRewardPerShareP:r.accRewardPerShareP.toString(),p:this.P,imbalance:m}}async buildRawTransactionDeposit(a){let{bridge:s,accounts:r,preInstructions:o}=await this.prepareDataForTransaction(a),c=await s.methods.deposit(new Aa(a.amount)).accounts(r).preInstructions(o).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new Me(a.accountAddress),await Oe(c,a.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionWithdraw(a){let{bridge:s,accounts:r,preInstructions:o}=await this.prepareDataForTransaction(a),c=await s.methods.withdraw(new Aa(a.amount)).accounts(r).preInstructions(o).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new Me(a.accountAddress),await Oe(c,a.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionClaimRewards(a){let{bridge:s,accounts:r,preInstructions:o}=await this.prepareDataForTransaction(a),c=await s.methods.claimRewards().accounts(r).preInstructions(o).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new Me(a.accountAddress),await Oe(c,a.txFeeParams,this.solanaRpcUrl),c}async prepareDataForTransaction(a){let s=this.buildAnchorProvider(a.accountAddress),r=this.getBridge(a.token.bridgeAddress,s),{accounts:o,preInstructions:c}=await this._getLPTransactionData(r,a.token.poolAddress,a.accountAddress,s);return{bridge:r,accounts:o,preInstructions:c}}getBridge(a,s){return new ui(et,a,s)}buildAnchorProvider(a){let s=new gi(this.solanaRpcUrl,"confirmed"),r=new Me(a);return new li(s,{publicKey:r},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(a,s,r,o){let c=new Me(r),m=await Be(a.programId),l=await _e(a.programId),u=new Me(s),d=(await a.account.pool.fetch(u)).mint,g=await ae(c,d),h=await Ne(d,a.programId),b=await on(c,d,a.programId),T=[pi.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await Ve(g,o)}catch{let w=await di.associatedToken(o).methods.create().accounts({mint:d,owner:c,associatedAccount:g}).instruction();T.push(w)}try{await a.account.userDeposit.fetch(b)}catch{let B=await a.methods.initDepositAccount().accounts({mint:d,user:c,userDeposit:b}).instruction();T.push(B)}return{accounts:{mint:d,user:c,config:m,pool:u,bridgeAuthority:l,userDeposit:b,userToken:g,bridgeToken:h},preInstructions:T}}};import{contract as qd}from"@stellar/stellar-sdk";import{contract as t}from"@stellar/stellar-sdk";var fi=t.Spec,yi=t.Client;var Vt=class extends yi{constructor(a){super(new fi(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),a);this.options=a}fromJSON={initialize:this.txFromJSON,deposit:this.txFromJSON,withdraw:this.txFromJSON,swap_to_v_usd:this.txFromJSON,swap_from_v_usd:this.txFromJSON,claim_rewards:this.txFromJSON,set_fee_share:this.txFromJSON,adjust_total_lp_amount:this.txFromJSON,set_balance_ratio_min_bp:this.txFromJSON,stop_deposit:this.txFromJSON,start_deposit:this.txFromJSON,stop_withdraw:this.txFromJSON,start_withdraw:this.txFromJSON,set_stop_authority:this.txFromJSON,set_bridge:this.txFromJSON,set_admin:this.txFromJSON,set_admin_fee_share:this.txFromJSON,claim_admin_fee:this.txFromJSON,pending_reward:this.txFromJSON,get_pool:this.txFromJSON,get_admin:this.txFromJSON,get_stop_authority:this.txFromJSON,get_bridge:this.txFromJSON,get_user_deposit:this.txFromJSON,upgrade:this.txFromJSON}};var Ot=class extends re{constructor(a,s,r){super();this.nodeRpcUrlsConfig=a;this.params=s;this.api=r}chainType="SRB";P=48;async getUserBalanceInfo(a,s){let o=(await this.getContract(s.poolAddress).get_user_deposit({user:a})).result;if(o.isErr())throw new S;let c=o.unwrap();return new z({lpAmount:c.lp_amount.toString(),rewardDebt:c.reward_debt.toString()})}async getPoolInfoFromChain(a){let r=(await this.getContract(a.poolAddress).get_pool()).result;if(r.isErr())throw new S;let o=r.unwrap();return{aValue:o.a.toString(),accRewardPerShareP:o.acc_reward_per_share_p.toString(),dValue:o.d.toString(),tokenBalance:o.token_balance.toString(),p:this.P,totalLpAmount:o.total_lp_amount.toString(),vUsdBalance:o.v_usd_balance.toString(),imbalance:H({tokenBalance:o.token_balance.toString(),vUsdBalance:o.v_usd_balance.toString()})}}async buildRawTransactionDeposit(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).deposit({sender:a.accountAddress,amount:BigInt(a.amount)})).toXDR()}async buildRawTransactionWithdraw(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).withdraw({sender:a.accountAddress,amount_lp:BigInt(a.amount)})).toXDR()}async buildRawTransactionClaimRewards(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).claim_rewards({sender:a.accountAddress})).toXDR()}getContract(a,s){let r={publicKey:s,contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new Vt(r)}};import{Web3 as Se}from"web3";var it=class extends re{constructor(a,s,r){super();this.tronWeb=a;this.api=s;r&&(this.web3=new Se(r))}chainType="TRX";P=52;web3;async getUserBalanceInfo(a,s){let r;if(this.web3)try{r=await this.getUserBalanceInfoByBatch(this.web3,a,s)}catch{r=await this.getUserBalanceInfoPerProperty(a,s)}else r=await this.getUserBalanceInfoPerProperty(a,s);return r}async getUserBalanceInfoByBatch(a,s,r){let o=new a.BatchRequest,c=new a.eth.Contract(Xe.abi,Bt(r.poolAddress)),m=c.methods.userRewardDebt(s).encodeABI(),l=c.methods.balanceOf(s).encodeABI();o.add({method:"eth_call",params:[{to:r.poolAddress,data:m},"latest"]}),o.add({method:"eth_call",params:[{to:r.poolAddress,data:l},"latest"]});let[u,p]=await o.execute();if(u&&p&&!u.error&&!p.error)return new z({lpAmount:Se.utils.toBigInt(p.result).toString(),rewardDebt:Se.utils.toBigInt(u.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(a,s){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a);let r=this.getContract(s.poolAddress),o=(await r.methods.userRewardDebt(a).call()).toString(),c=(await r.methods.balanceOf(a).call()).toString();return new z({lpAmount:c,rewardDebt:o})}async getPoolInfoFromChain(a){let s;if(this.web3)try{s=await this.getPoolInfoByBatch(this.web3,a)}catch{s=await this.getPoolInfoPerProperty(a)}else s=await this.getPoolInfoPerProperty(a);return s}async getPoolInfoByBatch(a,s){let r=new a.BatchRequest,o=new a.eth.Contract(Xe.abi,Bt(s.poolAddress),this.web3),c=o.methods.a().encodeABI(),m=o.methods.d().encodeABI(),l=o.methods.tokenBalance().encodeABI(),u=o.methods.vUsdBalance().encodeABI(),p=o.methods.totalSupply().encodeABI(),d=o.methods.accRewardPerShareP().encodeABI();r.add({method:"eth_call",params:[{to:s.poolAddress,data:c},"latest"]}),r.add({method:"eth_call",params:[{to:s.poolAddress,data:m},"latest"]}),r.add({method:"eth_call",params:[{to:s.poolAddress,data:l},"latest"]}),r.add({method:"eth_call",params:[{to:s.poolAddress,data:u},"latest"]}),r.add({method:"eth_call",params:[{to:s.poolAddress,data:p},"latest"]}),r.add({method:"eth_call",params:[{to:s.poolAddress,data:d},"latest"]});let[g,h,b,T,y,P]=await r.execute();if(g&&h&&b&&T&&y&&P&&!g.error&&!h.error&&!b.error&&!T.error&&!y.error&&!P.error){let B=Se.utils.toBigInt(b.result).toString(),w=Se.utils.toBigInt(T.result).toString(),G=H({tokenBalance:B,vUsdBalance:w});return{aValue:Se.utils.toBigInt(g.result).toString(),dValue:Se.utils.toBigInt(h.result).toString(),tokenBalance:B,vUsdBalance:w,totalLpAmount:Se.utils.toBigInt(y.result).toString(),accRewardPerShareP:Se.utils.toBigInt(P.result).toString(),p:this.P,imbalance:G}}throw new Error("Batched failed")}async getPoolInfoPerProperty(a){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a.poolAddress);let s=this.getContract(a.poolAddress),[r,o,c,m,l,u]=await Promise.all([s.methods.a().call(),s.methods.d().call(),s.methods.tokenBalance().call(),s.methods.vUsdBalance().call(),s.methods.totalSupply().call(),s.methods.accRewardPerShareP().call()]),p=c.toString(),d=m.toString(),g=H({tokenBalance:p,vUsdBalance:d});return{aValue:r.toString(),dValue:o.toString(),tokenBalance:p,vUsdBalance:d,totalLpAmount:l.toString(),accRewardPerShareP:u.toString(),p:this.P,imbalance:g}}buildRawTransactionDeposit(a){let{amount:s,accountAddress:r}=a,o=[{type:"uint256",value:s}];return this.buildRawTransaction(a.token.poolAddress,"deposit(uint256)",o,"0",r)}buildRawTransactionWithdraw(a){let{amount:s,accountAddress:r}=a,o=[{type:"uint256",value:s}];return this.buildRawTransaction(a.token.poolAddress,"withdraw(uint256)",o,"0",r)}buildRawTransactionClaimRewards(a){let{accountAddress:s}=a,r=[];return this.buildRawTransaction(a.token.poolAddress,"claimRewards()",r,"0",s)}async buildRawTransaction(a,s,r,o,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(a,s,{callValue:+o},r,c);if(!m?.result?.result)throw new S("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}getContract(a){return this.tronWeb.contract(Xe.abi,a)}};var Et=class{constructor(i,a,s,r){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=r;this.rawTxBuilder=new Nt(i,a,this.params,r);let o=s.cachePoolInfoChainSec>0?s.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new bi({defaultTtl:o})}rawTxBuilder;cache;async getAllowance(i,a){if(a){let s=i,r=a;return await this.tokenService.getAllowance({...r,spender:r.token.poolAddress},s)}else{let s=i;return await this.tokenService.getAllowance({...s,spender:s.token.poolAddress})}}async checkAllowance(i,a){if(a){let s=i,r=a;return this.tokenService.checkAllowance({...r,spender:r.token.poolAddress},s)}else{let s=i;return this.tokenService.checkAllowance({...s,spender:s.token.poolAddress})}}async approve(i,a){return this.tokenService.approve(i,{...a,spender:a.token.poolAddress})}async getAmountToBeDeposited(i,a,s){x(i),W("amount",i,a.decimals);let r=await this.getPoolInfoFromChain(a,s),{vUsdBalance:o,tokenBalance:c,aValue:m,dValue:l}=r,u=ra(i,m,l,c,o);return C(u,3).toFixed()}async getAmountToBeWithdrawn(i,a,s,r){x(i),W("amount",i,s.decimals);let o=await this.getPoolInfoFromChain(s,r),c=oa(i),m=Q(c,s.decimals),u=(await this.getUserBalanceInfo(a,s,r)).earned(o)||"0",p=hi(m).plus(u).toFixed();return C(p,s.decimals).toFixed()}async getUserBalanceInfo(i,a,s){return Ye(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,s).getUserBalanceInfo(i,a)}async getPoolInfoFromChain(i,a){let s={chainSymbol:i.chainSymbol,poolAddress:i.poolAddress},r=this.cache.get(s);if(r)return r;{let o=await Ye(i.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).getPoolInfoFromChain(i);return this.cache.put(s,o),this.api.cachePut({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress},o),o}}};function Ye(A,i,a,s,r){switch(I.getChainProperty(A).chainType){case"EVM":{if(r)return new at(r,i);{let o=a.getNodeRpcUrl(A),c=new wi(o);return c.defaultReturnFormat={number:Si.STR,bytes:Pi.HEX},new at(c,i)}}case"TRX":{let o=a.getNodeRpcUrl(A),c=s.tronJsonRpc;if(r)return new it(r,i,c);{let m=new Ti({fullHost:o});return new it(m,i,c)}}case"SOLANA":{let o=a.getNodeRpcUrl(A);return new Ut(o,i)}case"SRB":return new Ot(a,s,i)}}import{Big as Z}from"big.js";function la(A,i,a){let s=Bi(A,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo),r=Ci(s.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:s,swapFromVUsdCalcResult:r}}function ua(A,i,a){let s=Ri(A,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),r=Ii(s.amountIncludingCommissionInSystemPrecision,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo);return{swapToVUsdCalcResult:s,swapFromVUsdCalcResult:r}}function Bi(A,{feeShare:i,decimals:a},s){let r=Z(A),o=r.times(i),c=r.minus(o);return{bridgeFeeInTokenPrecision:o.round().toFixed(),amountIncludingCommissionInSystemPrecision:ca(xe(c,a),s),amountExcludingCommissionInSystemPrecision:ca(xe(r,a),s)}}function ca(A,i){if(A.eq(0))return"0";let a=Z(i.tokenBalance).plus(A),s=de(a.toFixed(),i.aValue,i.dValue);return Z(i.vUsdBalance).minus(s).round().toFixed()}function Ci(A,{feeShare:i,decimals:a},s){if(Z(A).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let o=Z(A).plus(s.vUsdBalance),c=de(o,s.aValue,s.dValue),m=Q(Z(s.tokenBalance).minus(c),a),l=Z(m).times(i),u=Z(m).minus(l).round();return{bridgeFeeInTokenPrecision:l.round().toFixed(),amountIncludingCommissionInTokenPrecision:u.toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}function Ri(A,{feeShare:i,decimals:a},s){let r=Z(i).div(Z(1).minus(i)),o=Z(A).times(r),c=Z(A).plus(o);return{bridgeFeeInTokenPrecision:o.round().toFixed(),amountIncludingCommissionInSystemPrecision:ma(xe(c,a),s),amountExcludingCommissionInSystemPrecision:ma(xe(A,a),s)}}function ma(A,i){let a=Z(i.tokenBalance).minus(A),s=de(a.toFixed(),i.aValue,i.dValue);return Z(s).minus(i.vUsdBalance).round().toFixed()}function Ii(A,{feeShare:i,decimals:a},s){if(Z(A).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let r=Z(s.vUsdBalance).minus(A),o=de(r.toFixed(),s.aValue,s.dValue),c=Z(o).minus(s.tokenBalance),m=Q(c.toFixed(),a),l=Z(i).div(Z(1).minus(i)),u=Z(m).times(l),p=Z(m).plus(u);return{bridgeFeeInTokenPrecision:u.round().toFixed(),amountIncludingCommissionInTokenPrecision:p.round().toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}import{Big as ke}from"big.js";function da(A,i,a,s,r){let o=ue(A,i,a),c=Q(o,i.decimals),m=He(o,s,r),l=ke(A).times(i.feeShare),u=ke(m).div(ke(1).minus(s.feeShare)).minus(m);return{sourceLPSwap:{fee:C(l,i.decimals).neg().round(i.decimals,ke.roundUp).toFixed(),swap:C(ke(A).minus(c).minus(l),i.decimals).neg().round(i.decimals,ke.roundUp).toFixed()},destLPSwap:{fee:C(u,s.decimals).neg().round(s.decimals,ke.roundUp).toFixed(),swap:C(Q(o,s.decimals).minus(m).minus(u),s.decimals).neg().round(s.decimals,ke.roundUp).toFixed()}}}import{Connection as vi,PublicKey as Mi,TransactionMessage as ki}from"@solana/web3.js";var Xt=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.params=a}async addMemoToTx(i,a){if(a.length>28)throw new S("InvalidArgumentException memo cannot be more than 28 characters");let s=new vi(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),r=await Fe(i,s),o=ki.decompile(i.message,{addressLookupTableAccounts:r}),c=o.instructions[o.instructions.length-1];if(!c?.keys)throw new S("Last instruction or its keys are invalid.");c.keys.push({pubkey:new Mi(Buffer.from(a)),isSigner:!1,isWritable:!1}),i.message=o.compileToV0Message(r)}};import{Asset as Fi,BASE_FEE as Gi,contract as $d,Horizon as pa,Operation as Zi,Operation as Di,rpc as rt,TimeoutInfinite as _i,TransactionBuilder as gn,TransactionBuilder as ga}from"@stellar/stellar-sdk";import{contract as e}from"@stellar/stellar-sdk";var xi=e.Spec,Wi=e.Client;var st=class extends Wi{constructor(a){super(new xi(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),a);this.options=a}fromJSON={allowance:this.txFromJSON,authorized:this.txFromJSON,approve:this.txFromJSON,balance:this.txFromJSON,burn:this.txFromJSON,burn_from:this.txFromJSON,clawback:this.txFromJSON,decimals:this.txFromJSON,mint:this.txFromJSON,name:this.txFromJSON,set_admin:this.txFromJSON,admin:this.txFromJSON,set_authorized:this.txFromJSON,symbol:this.txFromJSON,transfer:this.txFromJSON,transfer_from:this.txFromJSON}};var Ni=100,Ui=180,Yt=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.params=a}async buildChangeTrustLineXdrTx(i){let s=await new pa.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(i.sender),o=(await this.getContract(st,i.tokenAddress).name()).result,[c,m]=o.split(":");if(c===void 0||m===void 0)throw new S("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let l=new Fi(c,m),u=Di.changeTrust({asset:l,limit:i.limit});return new ga(s,{fee:Ni.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(u).setTimeout(Ui).build().toXDR()}async getBalanceLine(i,a){let r=(await this.getContract(st,a).name()).result,[o,c]=r.split(":"),m=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new pa.Server(m).loadAccount(i)).balances.find(d=>(d.asset_type==="credit_alphanum4"||d.asset_type==="credit_alphanum12")&&d.asset_code==o&&d.asset_issuer==c)}async submitTransactionStellar(i){let a=new pa.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),s=ga.fromXDR(i,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await a.submitTransaction(s)}async simulateAndCheckRestoreTxRequiredSoroban(i,a){let s=new rt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),r=await s.getAccount(a),o=gn.fromXDR(i,this.params.sorobanNetworkPassphrase),c=await s.simulateTransaction(o);if(rt.Api.isSimulationRestore(c))return new gn(r,{fee:(+Gi+ +c.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(c.restorePreamble.transactionData.build()).addOperation(Zi.restoreFootprint({})).setTimeout(_i).build().toXDR()}async sendTransactionSoroban(i){let a=new rt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),s=gn.fromXDR(i,this.params.sorobanNetworkPassphrase);return a.sendTransaction(s)}async confirmTx(i,a=15){let s=new rt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),r=await kn(()=>s.getTransaction(i),c=>c.status===rt.Api.GetTransactionStatus.NOT_FOUND,a);if(r.length===0)throw new S("No transaction responses found.");let o=r[r.length-1];if(!o)throw new S("Unexpected error: last response is undefined.");return o}getContract(i,a){let s={contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new i(s)}};var Lt=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.srb=new Yt(i,a),this.sol=new Xt(i,a)}srb;sol};var Ue=(a=>(a.WITH_NATIVE_CURRENCY="native",a.WITH_STABLECOIN="stablecoin",a))(Ue||{}),Rt=(a=>(a.INT="int",a.FLOAT="float",a))(Rt||{});import{Big as Qi}from"big.js";import{TronWeb as Hi}from"tronweb";import{Web3 as zi}from"web3";var Vi={abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}]},Jt=Vi;import{Big as fa}from"big.js";var oe=class{async checkAllowance(i){let a=await this.getAllowance(i);return fa(a).gte(fa(i.amount))}};var Oi="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Ei="0xdac17f958d2ee523a2206206994597c13d831ec7",Xi=1e5,ot=class extends oe{constructor(a,s){super();this.web3=a;this.api=s}chainType="EVM";getAllowance(a){let s=a.token.tokenAddress,r=a.owner,o=a.spender;return this.getAllowanceByTokenAddress(s,r,o)}getAllowanceByTokenAddress(a,s,r){return this.getERC20Contract(a).methods.allowance(s,r).call()}async getTokenBalance(a){return await this.getERC20Contract(a.token.tokenAddress).methods.balanceOf(a.account).call()}async getNativeTokenBalance(a){return(await this.web3.eth.getBalance(a.account)).toString()}async approve(a){if(this.isUsdt(a.tokenAddress)&&await this.getAllowanceByTokenAddress(a.tokenAddress,a.owner,a.spender)!=="0"){let o=await this.buildRawTransactionApprove({...a,amount:"0"});await this.sendRawTransaction(o,a.chainSymbol)}let s=await this.buildRawTransactionApprove(a);return await this.sendRawTransaction(s,a.chainSymbol)}isUsdt(a){return a.toLowerCase()===Ei}buildRawTransactionApprove(a){let{tokenAddress:s,spender:r,owner:o,amount:c}=a,l=this.getERC20Contract(s).methods.approve(r,c==null?Oi:Zt(c));return Promise.resolve({from:o,to:s,value:"0",data:l.encodeABI()})}async sendRawTransaction(a,s){let r=a,o={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};s==="POL"?r.gas=Xi:r.gas=await this.web3.eth.estimateGas(a);let{transactionHash:c}=await this.web3.eth.sendTransaction({...r,...o});return{txId:c.toString()}}getERC20Contract(a){return new this.web3.eth.Contract(Jt.abi,a)}};import{AnchorProvider as Yi}from"@project-serum/anchor";import{Connection as Li,PublicKey as Kt}from"@solana/web3.js";var Qt=class extends oe{constructor(a,s){super();this.solanaRpcUrl=a;this.api=s}chainType="SOLANA";approve(a){throw new L}buildRawTransactionApprove(a){throw new L}buildAnchorProvider(a){let s=new Li(this.solanaRpcUrl,"confirmed"),r=new Kt(a);return new Yi(s,{publicKey:r},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(a){throw new L}async getTokenBalance(a){let{account:s,token:r}=a;try{let o=await ae(new Kt(s),new Kt(r.tokenAddress));return(await Ve(o,this.buildAnchorProvider(s))).amount.toString()}catch(o){if(o instanceof Error)return o.message.startsWith("Account does not exist"),"0";throw o}}async getNativeTokenBalance(a){return(await this.buildAnchorProvider(a.account).connection.getBalance(new Kt(a.account))).toString()}};import{Horizon as Pu,NotFoundError as Ji}from"@stellar/stellar-sdk";var Ht=class extends oe{constructor(a,s,r){super();this.nodeRpcUrlsConfig=a;this.params=s;this.api=r}chainType="SRB";getAllowance(){throw new L}async getTokenBalance(a){if(!a.token.originTokenAddress)throw new S("OriginTokenAddress missing");let[s,r]=a.token.originTokenAddress.split(":"),o=new Pu.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),c;try{c=await o.loadAccount(a.account)}catch(u){if(u instanceof Ji)return"0";throw u}let l=c.balances.find(u=>(u.asset_type==="credit_alphanum4"||u.asset_type==="credit_alphanum12")&&u.asset_code==s&&u.asset_issuer==r);return l?.balance?M(l.balance,I.getChainDecimalsByType(I.getChainProperty(a.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(a){let c=(await new Pu.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.account)).balances.find(m=>m.asset_type==="native");return c?.balance?M(c.balance,I.getChainDecimalsByType(I.getChainProperty(a.chainSymbol).chainType)).toFixed():"0"}approve(){throw new L}buildRawTransactionApprove(){throw new L}};var Ki="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",At=class extends oe{constructor(a,s){super();this.tronWeb=a;this.api=s}chainType="TRX";async getAllowance(a){let{token:{tokenAddress:s},owner:r}=a;return(await(await this.getContract(s)).methods.allowance(r,a.spender).call()).toString()}async getTokenBalance(a){return(await(await this.getContract(a.token.tokenAddress)).balanceOf(a.account).call()).toString()}async getNativeTokenBalance(a){return(await this.tronWeb.trx.getBalance(a.account)).toString()}async approve(a){let s=await this.buildRawTransactionApprove(a);return await Dt(this.tronWeb,s)}async buildRawTransactionApprove(a){let{tokenAddress:s,spender:r,owner:o,amount:c}=a,m=c==null?Ki:Zt(c),l=[{type:"address",value:r},{type:"uint256",value:m}];return this.buildRawTransaction(s,"approve(address,uint256)",l,"0",o)}getContract(a){return this.tronWeb.contract(Jt.abi,a)}async buildRawTransaction(a,s,r,o,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(a,s,{callValue:+o},r,c);if(!m?.result?.result)throw new S("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var zt=class{constructor(i,a,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s}async getAllowance(i,a){let s=await this.getChainTokenService(i.token.chainSymbol,i.owner,a).getAllowance(i);return C(s,i.token.decimals).toFixed()}async checkAllowance(i,a){return x(i.amount),W("amount",i.amount,i.token.decimals),this.getChainTokenService(i.token.chainSymbol,i.owner,a).checkAllowance(this.prepareCheckAllowanceParams(i))}async approve(i,a){return a.amount&&(x(a.amount),W("amount",a.amount,a.token.decimals)),this.getChainTokenService(a.token.chainSymbol,a.owner,i).approve(this.prepareApproveParams(a))}async buildRawTransactionApprove(i,a){return i.amount&&(x(i.amount),W("amount",i.amount,i.token.decimals)),this.getChainTokenService(i.token.chainSymbol,i.owner,a).buildRawTransactionApprove(this.prepareApproveParams(i))}async getTokenBalance(i,a){let s=await this.getChainTokenService(i.token.chainSymbol,i.account,a).getTokenBalance(i);return i.token.decimals?C(s,i.token.decimals).toFixed():s}async getNativeTokenBalance(i,a){let s=await this.getChainTokenService(i.chainSymbol,i.account,a).getNativeTokenBalance(i);return{int:s,float:C(s,I.getChainDecimalsByType(I.getChainProperty(i.chainSymbol).chainType)).toFixed()}}getChainTokenService(i,a,s){switch(I.getChainProperty(i).chainType){case"EVM":{if(s)return new ot(s,this.api);{let r=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new ot(new zi(r),this.api)}}case"TRX":{if(s)return new At(s,this.api);{let r=this.nodeRpcUrlsConfig.getNodeRpcUrl(i),o=new Hi({fullHost:r});return o.setAddress(a),new At(o,this.api)}}case"SOLANA":{let r=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new Qt(r,this.api)}case"SRB":return new Ht(this.nodeRpcUrlsConfig,this.params,this.api)}}prepareCheckAllowanceParams(i){return{...i,amount:M(i.amount,i.token.decimals)}}prepareApproveParams(i){return{tokenAddress:i.token.tokenAddress,owner:i.owner,spender:i.spender,chainSymbol:i.token.chainSymbol,amount:i.amount==null?void 0:Qi(i.amount).toFixed()}}};var ct=class{constructor(i){this.nodeRpcUrls=i}getNodeRpcUrl(i){let a=this.nodeRpcUrls[i];if(a!==void 0)return a;throw new gt(i)}},jt=class{api;tokenService;params;bridge;pool;constructor(i,a=lt){I.addChainsProperties(a.additionalChainsProperties);let s=new yt(a),r=new bt(s),o=new Tt(r),c=new St(o);this.api=new Pt(c,a),this.tokenService=new zt(this.api,i,a),this.bridge=new _t(this.api,i,a,this.tokenService),this.pool=new Et(this.api,i,a,this.tokenService),this.params=a}async chainDetailsMap(i){return this.api.getChainDetailsMap(i)}async tokens(i){return this.api.tokens(i)}async tokensByChain(i,a){let r=(await this.api.getChainDetailsMap(a))[i];return r?r.tokens:[]}async getTransferStatus(i,a){return this.api.getTransferStatus(i,a)}async getGasBalance(i,a){return this.api.getGasBalance(i,a)}async checkAddress(){return new Promise(i=>{i({status:"OK",gasBalance:null})})}async getPendingStatusInfo(i,a,s,r){x(i);let o;a=="float"?(W("amount",i,s.decimals),o=M(i,s.decimals).toFixed()):o=i;let c=ue(o,s,await U(this.api,s)),m=await U(this.api,r),l=this.getAmountFromVUsdFormatted(c,r,m),u,p=await this.api.getPendingInfo();for(let d in p[r.chainSymbol]){let g=p[r.chainSymbol];if(!g)throw new S("Cannot find pending info for "+r.chainSymbol);u=g[d]}if(u){let d=hn(u.totalSentAmount,m),g=this.getAmountFromVUsdFormatted(c,r,d),h;return pe(g.int).gt(l.int)?h={min:l,max:g}:h={min:g,max:l},{pendingTxs:u.pendingTxs,pendingAmount:{int:we(u.totalSentAmount,3,r.decimals).toFixed(0),float:C(u.totalSentAmount,3).toFixed()},estimatedAmount:h}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:l,max:l}}}async getTokenBalance(i,a){return this.tokenService.getTokenBalance(i,a)}async getNativeTokenBalance(i,a){return this.tokenService.getNativeTokenBalance(i,a)}async calculateFeePercentOnSourceChain(i,a){x(i),W("amountFloat",i,a.decimals);let s=M(i,a.decimals);if(s.eq(0))return 0;let r=ue(s,a,await U(this.api,a)),o=Q(r,a.decimals);return $t(s,o)}async calculateFeePercentOnDestinationChain(i,a,s){x(i),W("amountFloat",i,a.decimals);let r=M(i,a.decimals);if(r.eq(0))return 0;let o=ue(r,a,await U(this.api,a)),c=He(o,s,await U(this.api,s)),m=Q(o,s.decimals);return $t(m,c)}async getAmountToBeReceivedAndGasFeeOptions(i,a,s,r){return x(i),W("amountToSendFloat",i,a.decimals),{amountToSendFloat:pe(i).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(i,a,s,r),gasFeeOptions:await this.getGasFeeOptions(a,s,r)}}async getAmountToSendAndGasFeeOptions(i,a,s,r){return x(i),W("amountToBeReceivedFloat",i,s.decimals),{amountToSendFloat:await this.getAmountToSend(i,a,s,r),amountToBeReceivedFloat:pe(i).toFixed(),gasFeeOptions:await this.getGasFeeOptions(a,s,r)}}async getAmountToBeReceived(i,a,s,r){let o=await U(this.api,a),c=await U(this.api,s);return this.getAmountToBeReceivedFromPools(i,a,s,o,c,r)}async getAmountToBeReceivedFromChain(i,a,s,r,o,c){let m=await this.pool.getPoolInfoFromChain(a,o),l=await this.pool.getPoolInfoFromChain(s,c);return this.getAmountToBeReceivedFromPools(i,a,s,m,l,r)}getAmountToBeReceivedFromPools(i,a,s,r,o,c){x(i),W("amountToSendFloat",i,a.decimals);let m=M(i,a.decimals);if(c&&c==3){if(!a.cctpAddress||!s.cctpAddress||!a.cctpFeeShare)throw new te("Such route does not support CCTP protocol");let u=m.mul(pe(1).minus(a.cctpFeeShare)).round(0,pe.roundUp),p=we(u,a.decimals,s.decimals).round(0);return C(p,s.decimals).toFixed()}let l=ue(m,a,r);return this.getAmountFromVUsdFormatted(l,s,o).float}async getAmountToSend(i,a,s,r){let o=await U(this.api,a),c=await U(this.api,s);return this.getAmountToSendFromPools(i,a,s,o,c,r)}async getAmountToSendFromChain(i,a,s,r,o,c){let m=await this.pool.getPoolInfoFromChain(a,o),l=await this.pool.getPoolInfoFromChain(s,c);return this.getAmountToSendFromPools(i,a,s,m,l,r)}getAmountToSendFromPools(i,a,s,r,o,c){x(i),W("amountToBeReceivedFloat",i,s.decimals);let m=M(i,s.decimals);if(c&&c==3){if(!a.cctpAddress||!s.cctpAddress||!a.cctpFeeShare)throw new te("Such route does not support CCTP protocol");let p=m.div(pe(1).minus(a.cctpFeeShare)).round(0,pe.roundDown),d=we(p,s.decimals,a.decimals).round(0);return C(d,a.decimals).toFixed()}let l=Tn(m,s,o),u=bn(l,a,r);if(pe(u).lte(0))throw new fe;return C(u,a.decimals).toFixed()}async getGasFeeOptions(i,a,s){return An(i.allbridgeChainId,i.chainType,a.allbridgeChainId,i.decimals,s,this.api)}getAverageTransferTime(i,a,s){return i.transferTime?.[a.chainSymbol]?.[s]??null}async getPoolInfoByToken(i){return await this.api.getPoolInfoByKey({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress})}async refreshPoolInfo(i){if(i){let s=(i instanceof Array?i:[i]).map(r=>({chainSymbol:r.chainSymbol,poolAddress:r.poolAddress}));return this.api.refreshPoolInfo(s)}return this.api.refreshPoolInfo()}aprInPercents(i){return Sn(i)}async getExtraGasMaxLimits(i,a){return await cn(i,a,this.api)}async getVUsdFromAmount(i,a,s){x(i);let r;a=="float"?(W("amount",i,s.decimals),r=M(i,s.decimals).toFixed()):r=i;let o=ue(r,s,await U(this.api,s));return{int:o,float:C(o,3).toFixed()}}async getAmountFromVUsd(i,a){return this.getAmountFromVUsdFormatted(i,a,await U(this.api,a))}getAmountFromVUsdFormatted(i,a,s){x(i);let r=He(i,a,s);if(pe(r).lt(0))throw new fe;return{int:r,float:C(r,a.decimals).toFixed()}}async swapAndBridgeFeeCalculation(i,a,s){return la(i,{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await U(this.api,a)},{decimals:s.decimals,feeShare:s.feeShare,poolInfo:await U(this.api,s)})}async swapAndBridgeFeeCalculationReverse(i,a,s){let r=ua(i,{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await U(this.api,a)},{decimals:s.decimals,feeShare:s.feeShare,poolInfo:await U(this.api,s)}),o=r.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(pe(o).lt(0))throw new fe;return r}async getSendAmountDetails(i,a,s,r){x(i);let o;return a=="float"?(W("amount",i,s.decimals),o=M(i,s.decimals).toFixed()):o=i,da(o,s,await U(this.api,s),r,await U(this.api,r))}};function ji(A){return"solanaRpcUrl"in A}var ya=class{params;bridge;pool;utils;service;constructor(i,a=lt){let s;ji(i)?s=new ct({SOL:i.solanaRpcUrl,TRX:i.tronRpcUrl}):s=new ct(i),this.service=new jt(s,a),this.bridge=this.service.bridge,this.pool=this.service.pool,this.utils=new Lt(s,a),this.params=a}async chainDetailsMap(i="swap"){return this.service.chainDetailsMap(i)}async tokens(i="swap"){return this.service.tokens(i)}async tokensByChain(i,a="swap"){return this.service.tokensByChain(i,a)}async getTransferStatus(i,a){return this.service.getTransferStatus(i,a)}async getGasBalance(i,a){return this.service.getGasBalance(i,a)}async checkAddress(i,a,s){return await this.service.checkAddress()}async getPendingStatusInfo(i,a,s,r){return this.service.getPendingStatusInfo(i,a,s,r)}async getTokenBalance(i,a){return this.service.getTokenBalance(i,a)}async getNativeTokenBalance(i,a){return this.service.getNativeTokenBalance(i,a)}async calculateFeePercentOnSourceChain(i,a){return this.service.calculateFeePercentOnSourceChain(i,a)}async calculateFeePercentOnDestinationChain(i,a,s){return this.service.calculateFeePercentOnDestinationChain(i,a,s)}async getAmountToBeReceivedAndGasFeeOptions(i,a,s,r){return this.service.getAmountToBeReceivedAndGasFeeOptions(i,a,s,r)}async getAmountToSendAndGasFeeOptions(i,a,s,r){return this.service.getAmountToSendAndGasFeeOptions(i,a,s,r)}async getAmountToBeReceived(i,a,s,r){return this.service.getAmountToBeReceived(i,a,s,r)}async getAmountToBeReceivedFromChain(i,a,s,r,o,c){return this.service.getAmountToBeReceivedFromChain(i,a,s,r,o,c)}getAmountToBeReceivedFromPools(i,a,s,r,o,c){return this.service.getAmountToBeReceivedFromPools(i,a,s,r,o,c)}async getAmountToSend(i,a,s,r){return this.service.getAmountToSend(i,a,s,r)}async getAmountToSendFromChain(i,a,s,r,o,c){return this.service.getAmountToSendFromChain(i,a,s,r,o,c)}getAmountToSendFromPools(i,a,s,r,o,c){return this.service.getAmountToSendFromPools(i,a,s,r,o,c)}async getGasFeeOptions(i,a,s){return this.service.getGasFeeOptions(i,a,s)}getAverageTransferTime(i,a,s){return this.service.getAverageTransferTime(i,a,s)}async getPoolInfoByToken(i){return this.service.getPoolInfoByToken(i)}async refreshPoolInfo(i){return this.service.refreshPoolInfo(i)}aprInPercents(i){return this.service.aprInPercents(i)}async getExtraGasMaxLimits(i,a){return this.service.getExtraGasMaxLimits(i,a)}async getVUsdFromAmount(i,a,s){return this.service.getVUsdFromAmount(i,a,s)}async getAmountFromVUsd(i,a){return this.service.getAmountFromVUsd(i,a)}async swapAndBridgeFeeCalculation(i,a,s){return this.service.swapAndBridgeFeeCalculation(i,a,s)}async swapAndBridgeFeeCalculationReverse(i,a,s){return this.service.swapAndBridgeFeeCalculationReverse(i,a,s)}async getSendAmountDetails(i,a,s,r){return this.service.getSendAmountDetails(i,a,s,r)}};export{en as AddressStatus,ya as AllbridgeCoreSdk,Rt as AmountFormat,Ge as AmountNotEnoughError,pt as ArgumentInvalidDecimalsError,te as CCTPDoesNotSupportedError,ne as ChainSymbol,N as ChainType,ba as ErrorCode,dt as ExtraGasMaxLimitExceededError,Ue as FeePaymentMethod,fe as InsufficientPoolLiquidityError,ut as InvalidAmountError,Le as InvalidGasFeePaymentOptionError,fn as InvalidMessengerOptionError,Ze as InvalidTxError,V as JupiterError,ye as Messenger,L as MethodNotSupportedError,gt as NodeRpcUrlNotInitializedError,S as SdkError,D as SdkRootError,mn as SolanaAutoTxFee,Ke as TimeoutError,ft as TxTooLargeError,Je as VerifyTxError,lt as mainnet,$i as nodeRpcUrlsDefault,qi as nodeUrlsDefault};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|