@allbridge/bridge-core-sdk 3.18.0-alpha.2 → 3.18.0-alpha.3
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 +2 -2
- package/dist/browser/index.js.map +2 -2
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/index.js.map +2 -2
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +2 -2
- package/dist/src/chains/index.d.ts +0 -4
- package/dist/src/chains/index.js +0 -10
- package/dist/src/chains/index.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/package.json +1 -1
package/dist/esm/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
var zi={coreApiUrl:"https://core-dev.a11bd.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"",wormholeMessengerProgramId:"3u8hJUVTA4jH1wYAyUur7FFZVQ8H635K3tSHHF4ssjQ5",solanaLookUpTable:"C3jAxHRTZjM2Bs7EqPir4nvrT8zKtpcW7RvGR9R2qKtN",sorobanNetworkPassphrase:"Test SDF Network ; September 2015",tronJsonRpc:"https://nile.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{SPL:0,ARB:3,AMO:7}},cachePoolInfoChainSec:20},ji={solanaRpcUrl:"https://api.devnet.solana.com",tronRpcUrl:"https://nile.trongrid.io"},qi={SOL:"https://api.devnet.solana.com",TRX:"https://nile.trongrid.io",SRB:"https://soroban-testnet.stellar.org",STLR:"https://horizon-testnet.stellar.org"};var ut={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},es={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},ts={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 ge}from"big.js";import Ba from"axios";var fn="3.18.0-alpha.2";var le=(h=>(h.GRL="GRL",h.SPL="SPL",h.HOL="HOL",h.BSC="BSC",h.ETH="ETH",h.BAS="BAS",h.SOL="SOL",h.TRX="TRX",h.POL="POL",h.MUM="MUM",h.AMO="AMO",h.ARB="ARB",h.CEL="CEL",h.AVA="AVA",h.BIT="BIT",h.SRB="SRB",h.STLR="STLR",h.OPT="OPT",h))(le||{}),D=(o=>(o.EVM="EVM",o.SOLANA="SOLANA",o.TRX="TRX",o.SRB="SRB",o))(D||{}),N={EVM:18,SOLANA:9,TRX:6,SRB:7},L={GRL:{chainSymbol:"GRL",chainId:"0x5",name:"Goerli",chainType:"EVM"},SPL:{chainSymbol:"SPL",chainId:"0xaa36a7",name:"Sepolia",chainType:"EVM"},HOL:{chainSymbol:"HOL",chainId:"0x4268",name:"Hole\u0161ky",chainType:"EVM"},BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},MUM:{chainSymbol:"MUM",chainId:"0x13881",name:"Mumbai",chainType:"EVM"},AMO:{chainSymbol:"AMO",chainId:"0x13882",name:"Amoy",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},BIT:{chainSymbol:"BIT",chainId:"0x56b29",name:"Bitfinity",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"}};import{Big as g}from"big.js";import zt from"bn.js";var G=class extends Error{constructor(i,a){super(a),this.errorCode=i}},M=class extends G{constructor(i){super("SdkError",i)}},dt=class extends G{constructor(i){super("InvalidAmountError",i)}},Ge=class extends G{constructor(i){super("AmountNotEnoughError",i)}},ye=class extends G{constructor(i){super("InsufficientPoolLiquidityError",i)}},V=class extends G{constructor(i){super("JupiterError",i)}},Je=class extends G{constructor(i){super("InvalidGasFeePaymentOptionError",i)}},yn=class extends G{constructor(i){super("InvalidMessengerOptionError",i)}},J=class extends G{constructor(i){super("MethodNotSupportedError",i)}},Ke=class extends G{constructor(i){super("VerifyTxError",i)}},Ze=class extends G{constructor(i){super("InvalidTxError",i)}},pt=class extends G{constructor(i){super("ExtraGasMaxLimitExceededError",i)}},gt=class extends G{constructor(i,a,s){super("ArgumentInvalidDecimalsError",`Argument '${i}' decimals '${a}' cannot be greater than '${s}'`)}},Qe=class extends G{constructor(i){super("TimeoutError",i)}},ft=class extends G{constructor(i){super("NodeRpcUrlNotInitializedError",`For chain '${i}' Node RPC URL not initialized`)}},ne=class extends G{constructor(i){super("CCTPDoesNotSupportedError",i)}},yt=class extends G{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},ba=(f=>(f.SDK_ERROR="SdkError",f.INVALID_AMOUNT_ERROR="InvalidAmountError",f.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",f.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",f.JUPITER_ERROR="JupiterError",f.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",f.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",f.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",f.VERIFY_TX_ERROR="VerifyTxError",f.INVALID_TX_ERROR="InvalidTxError",f.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",f.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",f.TIMEOUT_ERROR="TimeoutError",f.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",f.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",f.TX_TOO_LARGE="TxTooLargeError",f))(ba||{});function jt(A,i){return g(100).minus(g(100).times(i).div(A)).toNumber()}function xe(A,i){return we(A,i,3).round(0,g.roundDown)}function H(A,i){return we(A,3,i)}function we(A,i,a){let s=g(a).minus(i).toNumber();return g(A).times(He(s))}function He(A){return g(10).pow(A)}function R(A,i){return g(A).times(He(i))}function C(A,i){let a=g(A);return a.eq(0)?g(0):g(a).div(He(i))}function z(A){return C(g(A.tokenBalance).minus(A.vUsdBalance).toFixed(),3).div(2).toFixed()}function ue(A,{feeShare:i,decimals:a},s){let o=g(A);if(o.lte(0))return"0";let r=o.times(i),c=o.minus(r),m=xe(c,a),l=g(s.tokenBalance).plus(m),u=de(l,s.aValue,s.dValue);return g(s.vUsdBalance).minus(u).round(0,g.roundDown).toFixed()}function ze(A,{feeShare:i,decimals:a},s){let o=g(A);if(o.lte(0))return g(0).toFixed();let r=o.plus(s.vUsdBalance),c=de(r,s.aValue,s.dValue),m=H(g(s.tokenBalance).minus(c),a),l=g(m).times(i);return g(m).minus(l).round(0,g.roundDown).toFixed()}function hn(A,i){let a=g(A);if(a.lte(0))return i;let s=a.plus(i.vUsdBalance),o=de(s,i.aValue,i.dValue);return{aValue:i.aValue,dValue:i.dValue,tokenBalance:o.toFixed(0),vUsdBalance:s.toFixed(0)}}function bn(A,{feeShare:i,decimals:a},s){if(g(A).lte(0))return g(0);let o=g(s.vUsdBalance).minus(A);if(o.lte(0))throw new ye;let r=de(o,s.aValue,s.dValue),c=g(r).minus(s.tokenBalance),m=H(c,a),l=g(i).div(g(1).minus(i)),u=g(m).times(l).round(0,g.roundUp);return g(m).plus(u).round(0,g.roundDown)}function Tn(A,{feeShare:i,decimals:a},s){if(g(A).lte(0))return g(0);let o=g(i).div(g(1).minus(i)),r=g(A).times(o).round(0,g.roundUp),c=g(A).plus(r),m=xe(c,a),l=g(s.tokenBalance).minus(m);if(l.lte(0))throw new ye;let u=de(l,s.aValue,s.dValue);return g(u).minus(s.vUsdBalance).round(0,g.roundDown)}function de(A,i,a){let s=g(4).times(i).times(g(a).minus(A)).minus(a),o=g(a).pow(3),r=s.pow(2),c=g(A).times(g(A).times(r).plus(g(4).times(i).times(o))).sqrt().round(0,g.roundDown),m=g(8).times(i).times(A),l=s.times(A).plus(c).div(m).round(0,g.roundDown);return l.eq(0)?g(0):l.plus(1)}function Pn(A,i,a,s){let o=new zt(A),r=new zt(a),c=new zt(i);return o.mul(r).shrn(s).sub(c).toString()}function Sn(A){return g(A).gt(0)?`${Number(g(A).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function wn(A,i,a){let s=g(i).times(a),o=g(i).plus(a),r=g(8).times(A).times(s).times(o),c=s.times(g(16).times(A).minus(4)).div(3),m=r.times(r),l=c.times(c).times(c),u=m.plus(l),d=g(u).sqrt(),p=g(Math.cbrt(+r.plus(d).toFixed())),y=g(Math.cbrt(+r.minus(d).toFixed()));return p.plus(y).toFixed()}var qt=(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))(qt||{});var he=(s=>(s[s.ALLBRIDGE=1]="ALLBRIDGE",s[s.WORMHOLE=2]="WORMHOLE",s[s.CCTP=3]="CCTP",s))(he||{});function Cn(A){return Object.entries(A).reduce((i,a)=>{let s=a[0],o=a[1],r=Ca(s,o);return r&&(i[s]=r),i},{})}function Bn(A){let i={};for(let[a,s]of Object.entries(A)){let o=a;for(let r of s.tokens){let c=De({chainSymbol:o,poolAddress:r.poolAddress}),m=z(r.poolInfo);i[c]={...r.poolInfo,imbalance:m}}}return i}function Ta(A,i){let{name:a,...s}=A,{poolInfo:o,...r}=i;return{...r,...s,chainName:a}}function Pa(A){switch(A){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;default:return null}}function Sa(A){return Object.entries(A).reduce((i,[a,s])=>(i[a]=wa(s),i),{})}function wa(A){return Object.entries(A).reduce((i,[a,s])=>{let o=Pa(a);return o&&(i[o]=s),i},{})}function Ca(A,i){let a=L[A];if(!a)return null;let s={...a,allbridgeChainId:i.chainId,bridgeAddress:i.bridgeAddress,transferTime:Sa(i.transferTime),txCostAmount:i.txCostAmount,confirmations:i.confirmations};return{...s,tokens:i.tokens.map(o=>Ta(s,o))}}function De(A){return A.chainSymbol+"_"+A.poolAddress}function In(A){let i=[];for(let[a,s]of Object.entries(A)){let o=a;for(let r of s.tokens)i.push({chainSymbol:o,poolAddress:r.poolAddress})}return i}function Rn(A){let i={};for(let[a,s]of Object.entries(A)){let o=a;for(let[r,c]of Object.entries(s))c.imbalance=z(c),i[De({chainSymbol:o,poolAddress:r})]=c}return i}var ht=class{constructor(i){this.api=Ba.create({baseURL:i.coreApiUrl,headers:{Accept:"application/json",...i.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+fn},params:i.coreApiQueryParams})}async getTokenInfo(){let{data:i}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:Cn(i),poolInfoMap:Bn(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 Rn(s)}};import bt from"timed-cache";var $t=20*1e3,Ia=55*1e3,Tt=class{constructor(i){this.apiClient=i;this.tokenInfoCache=new bt({defaultTtl:Ia}),this.receivedTransactionCache=new bt({defaultTtl:$t}),this.pendingInfoCache=new bt({defaultTtl:$t}),this.gasBalanceCache=new bt({defaultTtl:$t})}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}`,o=this.gasBalanceCache.get(s);if(o)return o;let r=this.apiClient.getGasBalance(i,a);return this.gasBalanceCache.put(s,r),r}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 o=await this.apiClient.getReceiveTransactionCost(i);return this.receivedTransactionCache.put(a,o),o}async getTransferStatus(i,a){return this.apiClient.getTransferStatus(i,a)}async getPoolInfoMap(i){return this.apiClient.getPoolInfoMap(i)}};var Pt=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 St=class{constructor(i,a){this.client=i;this.isStaging=a.coreApiQueryParams?.staging==="true"}async getChainDetailsMap(i){let a=await this.client.getChainDetailsMap(),s={};for(let o in a){let r=a[o];s[o]={...r,tokens:vn(r.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(Ra)}function Ra(A){let{flags:i,...a}=A;return a}import va from"timed-cache";var Ma=55*1e3,wt=class{constructor(i){this.client=i;this.poolInfoCache=new en}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);return this.poolInfoCache.putAll(s),s[De(i)]}}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(In(s.chainDetailsMap))}this.poolInfoCache.putAll(a)}cachePut(i,a){this.poolInfoCache.put(De(i),a)}},en=class{constructor(){this.cache=new va({defaultTtl:Ma})}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 ri from"tronweb";import Ai 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 k(A){if(Mn(A).lte(0))throw new dt("Amount must be greater than zero")}function x(A,i,a){let s=Mn(i).toFixed();if(s.split(".").length==2&&s.split(".")[1].length>a)throw new gt(A,s.split(".")[1].length,a)}async function Ct(A,i,a){return await Promise.race([A,new Promise((s,o)=>{setTimeout(()=>o(new Qe(i)),a)})])}async function tn(A,i,a,s){if(a<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${a} was received.`);let o=0;for(;;)try{return await Ct(A(),i,s)}catch{if(++o>=a)throw new Qe(i)}}async function kn(A,i,a,s=1.5,o=!1){let r=[],c=0;if(r.push(await A()),!i(r[r.length-1]))return r;let m=new Date(Date.now()+a*1e3).valueOf(),l=1e3,u=l;for(;Date.now()<m&&i(r[r.length-1]);)c++,o&&console.info(`Waiting ${l}ms before trying again (bringing the total wait time to ${u}ms so far, of total ${a*1e3}ms)`),await new Promise(d=>setTimeout(d,l)),l=l*s,new Date(Date.now()+l).valueOf()>m&&(l=m-Date.now(),o&&console.info(`was gonna wait too long; new waitTime: ${l}ms`)),u=l+u,r.push(await A(r[r.length-1])),o&&i(r[r.length-1])&&console.info(`${c}. Called ${A.name}; ${r.length} prev attempts. Most recent: ${JSON.stringify(r[r.length-1],null,2)}`);return r}import*as It from"@project-serum/anchor";import{PublicKey as Ln}from"@solana/web3.js";import{Big as Ea}from"big.js";var xn=[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];var Wn=[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];import*as 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 Ce(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 je(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([A])],i);return a}async function Ne(A){let i=await Ce(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 Ue(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 nn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([A])],i);return a}async function an(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 sn(A,i,a){let[s]=await X.findProgramAddress([E.utils.bytes.utf8.encode("user_deposit"),i.toBytes(),A.toBytes()],a);return s}async function Nn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("cctp_bridge"),A.toBytes()],i);return a}async function Un(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("token"),A.toBytes()],i);return a}function _n(A,i){let[a]=X.findProgramAddressSync([E.utils.bytes.utf8.encode("lock"),i.toBuffer()],A);return a}function Vn(A,i,a,s){let o=We("message_transmitter",a),r=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()]),d=We("sender_authority",s);return{messageTransmitterAccount:o,tokenMessenger:r,tokenMessengerEventAuthority:c,tokenMinter:m,localToken:l,remoteTokenMessengerKey:u,authorityPda:d}}function We(A,i,a=[]){let s=[Buffer.from(E.utils.bytes.utf8.encode(A))];for(let r of a)typeof r=="string"?s.push(Buffer.from(E.utils.bytes.utf8.encode(r))):Array.isArray(r)?s.push(Buffer.from(r)):Buffer.isBuffer(r)?s.push(r):s.push(r.toBuffer());return X.findProgramAddressSync(s,i)[0]}import{AnchorProvider as Wa}from"@project-serum/anchor";import{Connection as Fa,PublicKey as Ga}from"@solana/web3.js";function Be(A,i){let a=new Fa(A,"confirmed"),s=new Ga(i);return new Wa(a,{publicKey:s},{preflightCommitment:"confirmed",commitment:"confirmed"})}var ie=class{};import{PublicKey as Za}from"@solana/web3.js";import{Address as Da}from"@stellar/stellar-sdk";import{Big as be}from"big.js";import On from"randombytes";import*as En from"tronweb";function Te(A,i,a){let s;switch(i){case"EVM":{s=Na(A);break}case"SOLANA":{s=new Za(A).toBuffer();break}case"TRX":{s=Ua(A);break}case"SRB":{s=new Da(A).toBuffer();break}}switch(a){case"EVM":return"0x"+s.toString("hex");case"SOLANA":return Array.from(s);case"TRX":return s.toJSON().data;case"SRB":return s.toJSON().data}}function Xn(A){return Buffer.from(A.replace(/^0x/i,""),"hex")}function Na(A){let a=Xn(A);return Buffer.concat([Buffer.alloc(32-a.length,0),a],32)}function Ua(A){let i=qe(A),a=Xn(i);return _a(a,32)}function qe(A){return Buffer.from(En.utils.crypto.decodeBase58Address(A)).toString("hex").replace(/^41/,"0x")}function _a(A,i){if(A.length>=i)return A;let a=Buffer.alloc(i,0);return A.copy(a,i-A.length),a}function _e(){return On(32)}function on(){let A=On(32).readBigInt64BE();return A<0?A*-1n:A}function Ie(A,i){let a={},s=i.sourceToken;return a.amount=R(i.amount,s.decimals).toFixed(),a.contractAddress=s.bridgeAddress,a.fromAccountAddress=i.fromAccountAddress,a.fromTokenAddress=Te(s.tokenAddress,A,A),a.toAccountAddress=i.toAccountAddress,a.toTokenAddress=Te(i.destinationToken.tokenAddress,A,A),a.minimumReceiveAmount=i.minimumReceiveAmount?R(i.minimumReceiveAmount,i.destinationToken.decimals).toFixed():"0",a}async function Pe(A,i,a){let s={};s.fromChainId=i.sourceToken.allbridgeChainId,s.fromChainSymbol=i.sourceToken.chainSymbol;let o=L[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 r=i.sourceToken;if(i.messenger===3){if(!r.cctpAddress||!i.destinationToken.cctpAddress)throw new ne("Such route does not support CCTP protocol");s.contractAddress=r.cctpAddress}else s.contractAddress=r.bridgeAddress;s.messenger=i.messenger,s.fromAccountAddress=i.fromAccountAddress,s.amount=R(i.amount,r.decimals).toFixed();let{fee:c,feeFormat:m}=i;if(!c){let d=await rn(s.fromChainId,i.sourceToken.chainType,s.toChainId,r.decimals,s.messenger,a),p=d[s.gasFeePaymentMethod];if(!p)throw new Je;c=p.int,console.log("fee $",c),console.log("fee s",d.native.int),m="int"}if(m=="float")switch(s.gasFeePaymentMethod){case"native":s.fee=R(c,N[r.chainType]).toFixed(0);break;case"stablecoin":s.fee=R(c,r.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=R(l,N[r.chainType]).toFixed(0);break;case"stablecoin":s.extraGas=R(l,r.decimals).toFixed(0);break}else s.extraGas=l;await Oa(s.extraGas,s.gasFeePaymentMethod,r,i.destinationToken,a)}return s.fromTokenAddress=Te(s.fromTokenAddress,A,A),s.toAccountAddress=Te(i.toAccountAddress,o,A),s.toTokenAddress=Te(s.toTokenAddress,o,A),s.gasFeePaymentMethod=="stablecoin"&&Va(s.amount,r.decimals,s.fee,s.extraGas),s}function Va(A,i,a,s){let o=be(A).minus(a).minus(s??0);if(o.lte(0))throw new Ge(`Amount not enough to pay fee, ${C(be(o).minus(1).neg(),i).toFixed()} stables is missing`)}async function rn(A,i,a,s,o,r){let c=await r.getReceiveTransactionCost({sourceChainId:A,destinationChainId:a,messenger:o}),m={native:{int:c.fee,float:C(c.fee,N[i]).toFixed()}};if(c.sourceNativeTokenPrice){let l=we(new be(c.fee).mul(c.sourceNativeTokenPrice),N[i],s).toFixed(0,be.roundUp);m.stablecoin={int:l,float:C(l,s).toFixed()}}return m}async function Oa(A,i,a,s,o){let c=(await An(a,s,o)).extraGasMax[i];if(!c)throw new Je(`Impossible to pay extra gas by '${i}' payment method`);let m=c.int;if(be(A).gt(m))throw new pt(`Extra gas ${A} in int format, exceeded limit ${m} for '${i}' payment method`)}async function An(A,i,a){let s={},o=await a.getReceiveTransactionCost({sourceChainId:A.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:1}),r=i.txCostAmount.maxAmount,c=C(r,N[i.chainType]).toFixed(),m=be(c).div(o.exchangeRate).toFixed(N[A.chainType],be.roundDown),l=R(m,N[A.chainType]).toFixed(0);if(s.native={int:l,float:m},o.sourceNativeTokenPrice){let u=be(m).mul(o.sourceNativeTokenPrice).toFixed(A.decimals,be.roundDown);s.stablecoin={int:R(u,A.decimals).toFixed(0),float:u}}return{extraGasMax:s,destinationChain:{gasAmountMax:{int:r,float:c},swap:{int:i.txCostAmount.swap,float:C(i.txCostAmount.swap,N[i.chainType]).toFixed()},transfer:{int:i.txCostAmount.transfer,float:C(i.txCostAmount.transfer,N[i.chainType]).toFixed()}},exchangeRate:o.exchangeRate,sourceNativeTokenPrice:o.sourceNativeTokenPrice}}function Yn(A){return A.sourceToken.chainSymbol!==A.destinationToken.chainSymbol}var $e=class extends ie{constructor(a,s,o){super();this.web3=a;this.api=s;this.nodeRpcUrlsConfig=o;this.chainType="EVM"}async send(a){let s=await this.buildRawTransactionSend(a);return this.sendRawTransaction(s)}async buildRawTransactionSwap(a){let s=Ie(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s)}async buildRawTransactionSwapFromParams(a){let{amount:s,contractAddress:o,fromAccountAddress:r,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:l,minimumReceiveAmount:u}=a,p=this.getBridgeContract(o).methods.swap(s,c,l,m,u);return Promise.resolve({from:r,to:o,data:p.encodeABI()})}async buildRawTransactionSend(a){let s=await Pe(this.chainType,a,this.api),{amount:o,contractAddress:r,fromAccountAddress:c,fromTokenAddress:m,toChainId:l,toAccountAddress:u,toTokenAddress:d,messenger:p,fee:y,gasFeePaymentMethod:b,extraGas:T}=s,P="0x"+_e().toString("hex"),f,S,h=y;if(T&&(h=Ea(h).plus(T).toFixed()),p===3){let w=await this.buildRawTransactionCctpSend(a,s,h);f=w.sendMethod,S=w.value}else{let w=this.getBridgeContract(r);b==="stablecoin"?(f=w.methods.swapAndBridge(m,o,u,l,d,P,p,h),S="0"):(f=w.methods.swapAndBridge(m,o,u,l,d,P,p,0),S=h)}return Promise.resolve({from:c,to:r,value:S,data:f.encodeABI()})}async buildRawTransactionCctpSend(a,s,o){let{amount:r,contractAddress:c,toChainId:m,toAccountAddress:l,gasFeePaymentMethod:u}=s,d=this.getContract(Wn,c),p,y;if(a.destinationToken.chainType==="SOLANA"){let b,T=new Ln(a.toAccountAddress),P=new Ln(a.destinationToken.tokenAddress),f=await ae(T,P),S=Be(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),a.toAccountAddress);It.setProvider(S);let h=await It.Spl.token(S).account.token.fetchNullable(f);if(h?.authority.equals(T))b=Te(f.toBase58(),"SOLANA",this.chainType);else{let w=await S.connection.getTokenAccountsByOwner(T,{mint:P});if(w.value.length===0&&!h)b=Te(f.toBase58(),"SOLANA",this.chainType);else if(w.value.length>0)b=Te(w.value[0].pubkey.toBase58(),"SOLANA",this.chainType);else throw new M("Associated account has wrong owner")}u==="stablecoin"?(p=d.methods.bridgeWithWalletAddress(r,b,l,m,o),y="0"):(p=d.methods.bridgeWithWalletAddress(r,b,l,m,0),y=o)}else u==="stablecoin"?(p=d.methods.bridge(r,l,m,o),y="0"):(p=d.methods.bridge(r,l,m,0),y=o);return{sendMethod:p,value:y}}async sendRawTransaction(a){let s=await this.web3.eth.estimateGas(a),o={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:r}=await this.web3.eth.sendTransaction({...a,gas:s,...o});return{txId:r}}getContract(a,s){return new this.web3.eth.Contract(a,s)}getBridgeContract(a){return this.getContract(xn,a)}};var Rt=class{constructor(i,a,s,o){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=o}async approve(i,a){let s,o;a?(s=i,o=a):o=i;let r=et(o.token,o.messenger);return this.tokenService.buildRawTransactionApprove({...o,spender:r},s)}async send(i,a){return k(i.amount),x("amount",i.amount,i.sourceToken.decimals),Yn(i)?vt(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSend(i):vt(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSwap(i)}};import{BN as Xe,Program as ln,Spl as qa,web3 as Re}from"@project-serum/anchor";import{Keypair as aa,PublicKey as W,SystemProgram as $a}from"@solana/web3.js";import{Big as pe}from"big.js";var tt={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 Xa}from"@project-serum/anchor";import Ya from"big.js";import Mt from"web3";async function Oe(A,i){return await Xa.token(i).account.token.fetch(A)}async function Kn(A,i,a){let s=await i.account.pool.fetch(a),o=s.decimals,r=Ya(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:o,feeShare:r},c)}function Qn(A){let i=A.amount,a="0x"+A.recipient.toString("hex"),s=A.sourceChainId,o=A.destinationChainId,r="0x"+A.receiveToken.toString("hex"),c="0x"+A.nonce.toString("hex"),m=1,l="0x"+A.chainBridge.toString("hex"),u=Mt.utils.encodePacked({t:"uint256",v:i},{t:"bytes32",v:a},{t:"uint256",v:s},{t:"bytes32",v:r},{t:"uint256",v:c},{t:"uint8",v:m});if(!u)throw new M("message cannot be undefined");let d=Mt.utils.keccak256(Buffer.from(u.replace("0x",""),"hex")),p=Buffer.from(d.replace("0x",""),"hex");p[0]=s,p[1]=o;let y=Mt.utils.encodePacked({t:"bytes32",v:"0x"+p.toString("hex")},{t:"bytes32",v:l});if(!y)throw new Ze("messageWithSigner cannot be undefined");let b=Mt.utils.keccak256(Buffer.from(y.replace("0x",""),"hex")),T=Buffer.from(b.replace("0x",""),"hex");return T[0]=p[0],T[1]=p[1],T}import{ComputeBudgetInstruction as zn,ComputeBudgetProgram as kt,Connection as jn,TransactionMessage as La}from"@solana/web3.js";import{Big as Ja}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 M("Cannot get AccountInfo");return s.data}))})))}var cn="AUTO";async function Ee(A,i,a){let s=new jn(a,"confirmed"),o=(await s.simulateTransaction(A)).value.unitsConsumed;await $n(A.instructions,o,i,s)}async function qn(A,i,a){let s=new jn(a,"confirmed"),o=await Fe(A,s),r=La.decompile(A.message,{addressLookupTableAccounts:o});if(A.serialize().length>1232)throw new yt;await $n(r.instructions,769230,i,s),A.message=r.compileToV0Message(o)}async function $n(A,i,a,s){if(i>0){let o=Ka(i,A);if(a?.solana){let r=a.solana;if(r===cn)await mn(A,s);else if("pricePerUnitInMicroLamports"in r)await mn(A,s,r.pricePerUnitInMicroLamports);else{let c=Ja(r.extraFeeInLamports).div(o).mul(He(6)).toFixed(0);await mn(A,s,c)}}}}function Ka(A,i){let a=i.findIndex(r=>r.programId.equals(kt.programId)&&zn.decodeInstructionType(r)==="SetComputeUnitLimit"),s=Number((A*1.3).toFixed(0)),o=kt.setComputeUnitLimit({units:s});return a>=0?i[a]=o:i.push(o),s.toString()}async function mn(A,i,a){let s=A.findIndex(c=>c.programId.equals(kt.programId)&&zn.decodeInstructionType(c)==="SetComputeUnitPrice"),o=BigInt(a||await Qa(i)),r=kt.setComputeUnitPrice({microLamports:o});return s>=0?A[s]=r:A.push(r),o.toString()}async function Qa(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 Ha}from"@solana/spl-token";import{Connection as za,TransactionMessage as ea,VersionedTransaction as ja}from"@solana/web3.js";import ta,{AxiosError as na}from"axios";var xt=class{constructor(i,a){this.connection=new za(i),this.jupiterUrl=a.replace(/\/$/,"")}async getJupiterSwapTx(i,a,s,o){let r;console.log("J amount",s);try{let p=o?"ExactOut":"ExactIn";r=await ta.get(`${this.jupiterUrl}/quote?inputMint=${a}
|
|
1
|
+
var zi={coreApiUrl:"https://core-dev.a11bd.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"",wormholeMessengerProgramId:"3u8hJUVTA4jH1wYAyUur7FFZVQ8H635K3tSHHF4ssjQ5",solanaLookUpTable:"C3jAxHRTZjM2Bs7EqPir4nvrT8zKtpcW7RvGR9R2qKtN",sorobanNetworkPassphrase:"Test SDF Network ; September 2015",tronJsonRpc:"https://nile.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{SPL:0,ARB:3,AMO:7}},cachePoolInfoChainSec:20},ji={solanaRpcUrl:"https://api.devnet.solana.com",tronRpcUrl:"https://nile.trongrid.io"},qi={SOL:"https://api.devnet.solana.com",TRX:"https://nile.trongrid.io",SRB:"https://soroban-testnet.stellar.org",STLR:"https://horizon-testnet.stellar.org"};var ut={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},es={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},ts={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 ge}from"big.js";import Ba from"axios";var fn="3.18.0-alpha.3";var le=(f=>(f.GRL="GRL",f.SPL="SPL",f.HOL="HOL",f.BSC="BSC",f.ETH="ETH",f.BAS="BAS",f.SOL="SOL",f.TRX="TRX",f.POL="POL",f.MUM="MUM",f.AMO="AMO",f.ARB="ARB",f.CEL="CEL",f.AVA="AVA",f.SRB="SRB",f.STLR="STLR",f.OPT="OPT",f))(le||{}),D=(o=>(o.EVM="EVM",o.SOLANA="SOLANA",o.TRX="TRX",o.SRB="SRB",o))(D||{}),N={EVM:18,SOLANA:9,TRX:6,SRB:7},L={GRL:{chainSymbol:"GRL",chainId:"0x5",name:"Goerli",chainType:"EVM"},SPL:{chainSymbol:"SPL",chainId:"0xaa36a7",name:"Sepolia",chainType:"EVM"},HOL:{chainSymbol:"HOL",chainId:"0x4268",name:"Hole\u0161ky",chainType:"EVM"},BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},MUM:{chainSymbol:"MUM",chainId:"0x13881",name:"Mumbai",chainType:"EVM"},AMO:{chainSymbol:"AMO",chainId:"0x13882",name:"Amoy",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"}};import{Big as g}from"big.js";import zt from"bn.js";var G=class extends Error{constructor(i,a){super(a),this.errorCode=i}},M=class extends G{constructor(i){super("SdkError",i)}},dt=class extends G{constructor(i){super("InvalidAmountError",i)}},Ge=class extends G{constructor(i){super("AmountNotEnoughError",i)}},ye=class extends G{constructor(i){super("InsufficientPoolLiquidityError",i)}},V=class extends G{constructor(i){super("JupiterError",i)}},Je=class extends G{constructor(i){super("InvalidGasFeePaymentOptionError",i)}},yn=class extends G{constructor(i){super("InvalidMessengerOptionError",i)}},J=class extends G{constructor(i){super("MethodNotSupportedError",i)}},Ke=class extends G{constructor(i){super("VerifyTxError",i)}},Ze=class extends G{constructor(i){super("InvalidTxError",i)}},pt=class extends G{constructor(i){super("ExtraGasMaxLimitExceededError",i)}},gt=class extends G{constructor(i,a,s){super("ArgumentInvalidDecimalsError",`Argument '${i}' decimals '${a}' cannot be greater than '${s}'`)}},Qe=class extends G{constructor(i){super("TimeoutError",i)}},ft=class extends G{constructor(i){super("NodeRpcUrlNotInitializedError",`For chain '${i}' Node RPC URL not initialized`)}},ne=class extends G{constructor(i){super("CCTPDoesNotSupportedError",i)}},yt=class extends G{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||{});function jt(A,i){return g(100).minus(g(100).times(i).div(A)).toNumber()}function xe(A,i){return we(A,i,3).round(0,g.roundDown)}function H(A,i){return we(A,3,i)}function we(A,i,a){let s=g(a).minus(i).toNumber();return g(A).times(He(s))}function He(A){return g(10).pow(A)}function R(A,i){return g(A).times(He(i))}function w(A,i){let a=g(A);return a.eq(0)?g(0):g(a).div(He(i))}function z(A){return w(g(A.tokenBalance).minus(A.vUsdBalance).toFixed(),3).div(2).toFixed()}function ue(A,{feeShare:i,decimals:a},s){let o=g(A);if(o.lte(0))return"0";let r=o.times(i),c=o.minus(r),m=xe(c,a),l=g(s.tokenBalance).plus(m),u=de(l,s.aValue,s.dValue);return g(s.vUsdBalance).minus(u).round(0,g.roundDown).toFixed()}function ze(A,{feeShare:i,decimals:a},s){let o=g(A);if(o.lte(0))return g(0).toFixed();let r=o.plus(s.vUsdBalance),c=de(r,s.aValue,s.dValue),m=H(g(s.tokenBalance).minus(c),a),l=g(m).times(i);return g(m).minus(l).round(0,g.roundDown).toFixed()}function hn(A,i){let a=g(A);if(a.lte(0))return i;let s=a.plus(i.vUsdBalance),o=de(s,i.aValue,i.dValue);return{aValue:i.aValue,dValue:i.dValue,tokenBalance:o.toFixed(0),vUsdBalance:s.toFixed(0)}}function bn(A,{feeShare:i,decimals:a},s){if(g(A).lte(0))return g(0);let o=g(s.vUsdBalance).minus(A);if(o.lte(0))throw new ye;let r=de(o,s.aValue,s.dValue),c=g(r).minus(s.tokenBalance),m=H(c,a),l=g(i).div(g(1).minus(i)),u=g(m).times(l).round(0,g.roundUp);return g(m).plus(u).round(0,g.roundDown)}function Tn(A,{feeShare:i,decimals:a},s){if(g(A).lte(0))return g(0);let o=g(i).div(g(1).minus(i)),r=g(A).times(o).round(0,g.roundUp),c=g(A).plus(r),m=xe(c,a),l=g(s.tokenBalance).minus(m);if(l.lte(0))throw new ye;let u=de(l,s.aValue,s.dValue);return g(u).minus(s.vUsdBalance).round(0,g.roundDown)}function de(A,i,a){let s=g(4).times(i).times(g(a).minus(A)).minus(a),o=g(a).pow(3),r=s.pow(2),c=g(A).times(g(A).times(r).plus(g(4).times(i).times(o))).sqrt().round(0,g.roundDown),m=g(8).times(i).times(A),l=s.times(A).plus(c).div(m).round(0,g.roundDown);return l.eq(0)?g(0):l.plus(1)}function Pn(A,i,a,s){let o=new zt(A),r=new zt(a),c=new zt(i);return o.mul(r).shrn(s).sub(c).toString()}function Sn(A){return g(A).gt(0)?`${Number(g(A).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function wn(A,i,a){let s=g(i).times(a),o=g(i).plus(a),r=g(8).times(A).times(s).times(o),c=s.times(g(16).times(A).minus(4)).div(3),m=r.times(r),l=c.times(c).times(c),u=m.plus(l),d=g(u).sqrt(),p=g(Math.cbrt(+r.plus(d).toFixed())),h=g(Math.cbrt(+r.minus(d).toFixed()));return p.plus(h).toFixed()}var qt=(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))(qt||{});var he=(s=>(s[s.ALLBRIDGE=1]="ALLBRIDGE",s[s.WORMHOLE=2]="WORMHOLE",s[s.CCTP=3]="CCTP",s))(he||{});function Cn(A){return Object.entries(A).reduce((i,a)=>{let s=a[0],o=a[1],r=Ca(s,o);return r&&(i[s]=r),i},{})}function Bn(A){let i={};for(let[a,s]of Object.entries(A)){let o=a;for(let r of s.tokens){let c=De({chainSymbol:o,poolAddress:r.poolAddress}),m=z(r.poolInfo);i[c]={...r.poolInfo,imbalance:m}}}return i}function Ta(A,i){let{name:a,...s}=A,{poolInfo:o,...r}=i;return{...r,...s,chainName:a}}function Pa(A){switch(A){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;default:return null}}function Sa(A){return Object.entries(A).reduce((i,[a,s])=>(i[a]=wa(s),i),{})}function wa(A){return Object.entries(A).reduce((i,[a,s])=>{let o=Pa(a);return o&&(i[o]=s),i},{})}function Ca(A,i){let a=L[A];if(!a)return null;let s={...a,allbridgeChainId:i.chainId,bridgeAddress:i.bridgeAddress,transferTime:Sa(i.transferTime),txCostAmount:i.txCostAmount,confirmations:i.confirmations};return{...s,tokens:i.tokens.map(o=>Ta(s,o))}}function De(A){return A.chainSymbol+"_"+A.poolAddress}function In(A){let i=[];for(let[a,s]of Object.entries(A)){let o=a;for(let r of s.tokens)i.push({chainSymbol:o,poolAddress:r.poolAddress})}return i}function Rn(A){let i={};for(let[a,s]of Object.entries(A)){let o=a;for(let[r,c]of Object.entries(s))c.imbalance=z(c),i[De({chainSymbol:o,poolAddress:r})]=c}return i}var ht=class{constructor(i){this.api=Ba.create({baseURL:i.coreApiUrl,headers:{Accept:"application/json",...i.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+fn},params:i.coreApiQueryParams})}async getTokenInfo(){let{data:i}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:Cn(i),poolInfoMap:Bn(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 Rn(s)}};import bt from"timed-cache";var $t=20*1e3,Ia=55*1e3,Tt=class{constructor(i){this.apiClient=i;this.tokenInfoCache=new bt({defaultTtl:Ia}),this.receivedTransactionCache=new bt({defaultTtl:$t}),this.pendingInfoCache=new bt({defaultTtl:$t}),this.gasBalanceCache=new bt({defaultTtl:$t})}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}`,o=this.gasBalanceCache.get(s);if(o)return o;let r=this.apiClient.getGasBalance(i,a);return this.gasBalanceCache.put(s,r),r}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 o=await this.apiClient.getReceiveTransactionCost(i);return this.receivedTransactionCache.put(a,o),o}async getTransferStatus(i,a){return this.apiClient.getTransferStatus(i,a)}async getPoolInfoMap(i){return this.apiClient.getPoolInfoMap(i)}};var Pt=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 St=class{constructor(i,a){this.client=i;this.isStaging=a.coreApiQueryParams?.staging==="true"}async getChainDetailsMap(i){let a=await this.client.getChainDetailsMap(),s={};for(let o in a){let r=a[o];s[o]={...r,tokens:vn(r.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(Ra)}function Ra(A){let{flags:i,...a}=A;return a}import va from"timed-cache";var Ma=55*1e3,wt=class{constructor(i){this.client=i;this.poolInfoCache=new en}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);return this.poolInfoCache.putAll(s),s[De(i)]}}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(In(s.chainDetailsMap))}this.poolInfoCache.putAll(a)}cachePut(i,a){this.poolInfoCache.put(De(i),a)}},en=class{constructor(){this.cache=new va({defaultTtl:Ma})}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 ri from"tronweb";import Ai 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 k(A){if(Mn(A).lte(0))throw new dt("Amount must be greater than zero")}function x(A,i,a){let s=Mn(i).toFixed();if(s.split(".").length==2&&s.split(".")[1].length>a)throw new gt(A,s.split(".")[1].length,a)}async function Ct(A,i,a){return await Promise.race([A,new Promise((s,o)=>{setTimeout(()=>o(new Qe(i)),a)})])}async function tn(A,i,a,s){if(a<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${a} was received.`);let o=0;for(;;)try{return await Ct(A(),i,s)}catch{if(++o>=a)throw new Qe(i)}}async function kn(A,i,a,s=1.5,o=!1){let r=[],c=0;if(r.push(await A()),!i(r[r.length-1]))return r;let m=new Date(Date.now()+a*1e3).valueOf(),l=1e3,u=l;for(;Date.now()<m&&i(r[r.length-1]);)c++,o&&console.info(`Waiting ${l}ms before trying again (bringing the total wait time to ${u}ms so far, of total ${a*1e3}ms)`),await new Promise(d=>setTimeout(d,l)),l=l*s,new Date(Date.now()+l).valueOf()>m&&(l=m-Date.now(),o&&console.info(`was gonna wait too long; new waitTime: ${l}ms`)),u=l+u,r.push(await A(r[r.length-1])),o&&i(r[r.length-1])&&console.info(`${c}. Called ${A.name}; ${r.length} prev attempts. Most recent: ${JSON.stringify(r[r.length-1],null,2)}`);return r}import*as It from"@project-serum/anchor";import{PublicKey as Ln}from"@solana/web3.js";import{Big as Ea}from"big.js";var xn=[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];var Wn=[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];import*as 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 Ce(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 je(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([A])],i);return a}async function Ne(A){let i=await Ce(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 Ue(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 nn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([A])],i);return a}async function an(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 sn(A,i,a){let[s]=await X.findProgramAddress([E.utils.bytes.utf8.encode("user_deposit"),i.toBytes(),A.toBytes()],a);return s}async function Nn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("cctp_bridge"),A.toBytes()],i);return a}async function Un(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("token"),A.toBytes()],i);return a}function _n(A,i){let[a]=X.findProgramAddressSync([E.utils.bytes.utf8.encode("lock"),i.toBuffer()],A);return a}function Vn(A,i,a,s){let o=We("message_transmitter",a),r=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()]),d=We("sender_authority",s);return{messageTransmitterAccount:o,tokenMessenger:r,tokenMessengerEventAuthority:c,tokenMinter:m,localToken:l,remoteTokenMessengerKey:u,authorityPda:d}}function We(A,i,a=[]){let s=[Buffer.from(E.utils.bytes.utf8.encode(A))];for(let r of a)typeof r=="string"?s.push(Buffer.from(E.utils.bytes.utf8.encode(r))):Array.isArray(r)?s.push(Buffer.from(r)):Buffer.isBuffer(r)?s.push(r):s.push(r.toBuffer());return X.findProgramAddressSync(s,i)[0]}import{AnchorProvider as Wa}from"@project-serum/anchor";import{Connection as Fa,PublicKey as Ga}from"@solana/web3.js";function Be(A,i){let a=new Fa(A,"confirmed"),s=new Ga(i);return new Wa(a,{publicKey:s},{preflightCommitment:"confirmed",commitment:"confirmed"})}var ie=class{};import{PublicKey as Za}from"@solana/web3.js";import{Address as Da}from"@stellar/stellar-sdk";import{Big as be}from"big.js";import On from"randombytes";import*as En from"tronweb";function Te(A,i,a){let s;switch(i){case"EVM":{s=Na(A);break}case"SOLANA":{s=new Za(A).toBuffer();break}case"TRX":{s=Ua(A);break}case"SRB":{s=new Da(A).toBuffer();break}}switch(a){case"EVM":return"0x"+s.toString("hex");case"SOLANA":return Array.from(s);case"TRX":return s.toJSON().data;case"SRB":return s.toJSON().data}}function Xn(A){return Buffer.from(A.replace(/^0x/i,""),"hex")}function Na(A){let a=Xn(A);return Buffer.concat([Buffer.alloc(32-a.length,0),a],32)}function Ua(A){let i=qe(A),a=Xn(i);return _a(a,32)}function qe(A){return Buffer.from(En.utils.crypto.decodeBase58Address(A)).toString("hex").replace(/^41/,"0x")}function _a(A,i){if(A.length>=i)return A;let a=Buffer.alloc(i,0);return A.copy(a,i-A.length),a}function _e(){return On(32)}function on(){let A=On(32).readBigInt64BE();return A<0?A*-1n:A}function Ie(A,i){let a={},s=i.sourceToken;return a.amount=R(i.amount,s.decimals).toFixed(),a.contractAddress=s.bridgeAddress,a.fromAccountAddress=i.fromAccountAddress,a.fromTokenAddress=Te(s.tokenAddress,A,A),a.toAccountAddress=i.toAccountAddress,a.toTokenAddress=Te(i.destinationToken.tokenAddress,A,A),a.minimumReceiveAmount=i.minimumReceiveAmount?R(i.minimumReceiveAmount,i.destinationToken.decimals).toFixed():"0",a}async function Pe(A,i,a){let s={};s.fromChainId=i.sourceToken.allbridgeChainId,s.fromChainSymbol=i.sourceToken.chainSymbol;let o=L[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 r=i.sourceToken;if(i.messenger===3){if(!r.cctpAddress||!i.destinationToken.cctpAddress)throw new ne("Such route does not support CCTP protocol");s.contractAddress=r.cctpAddress}else s.contractAddress=r.bridgeAddress;s.messenger=i.messenger,s.fromAccountAddress=i.fromAccountAddress,s.amount=R(i.amount,r.decimals).toFixed();let{fee:c,feeFormat:m}=i;if(!c){let d=await rn(s.fromChainId,i.sourceToken.chainType,s.toChainId,r.decimals,s.messenger,a),p=d[s.gasFeePaymentMethod];if(!p)throw new Je;c=p.int,console.log("fee $",c),console.log("fee s",d.native.int),m="int"}if(m=="float")switch(s.gasFeePaymentMethod){case"native":s.fee=R(c,N[r.chainType]).toFixed(0);break;case"stablecoin":s.fee=R(c,r.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=R(l,N[r.chainType]).toFixed(0);break;case"stablecoin":s.extraGas=R(l,r.decimals).toFixed(0);break}else s.extraGas=l;await Oa(s.extraGas,s.gasFeePaymentMethod,r,i.destinationToken,a)}return s.fromTokenAddress=Te(s.fromTokenAddress,A,A),s.toAccountAddress=Te(i.toAccountAddress,o,A),s.toTokenAddress=Te(s.toTokenAddress,o,A),s.gasFeePaymentMethod=="stablecoin"&&Va(s.amount,r.decimals,s.fee,s.extraGas),s}function Va(A,i,a,s){let o=be(A).minus(a).minus(s??0);if(o.lte(0))throw new Ge(`Amount not enough to pay fee, ${w(be(o).minus(1).neg(),i).toFixed()} stables is missing`)}async function rn(A,i,a,s,o,r){let c=await r.getReceiveTransactionCost({sourceChainId:A,destinationChainId:a,messenger:o}),m={native:{int:c.fee,float:w(c.fee,N[i]).toFixed()}};if(c.sourceNativeTokenPrice){let l=we(new be(c.fee).mul(c.sourceNativeTokenPrice),N[i],s).toFixed(0,be.roundUp);m.stablecoin={int:l,float:w(l,s).toFixed()}}return m}async function Oa(A,i,a,s,o){let c=(await An(a,s,o)).extraGasMax[i];if(!c)throw new Je(`Impossible to pay extra gas by '${i}' payment method`);let m=c.int;if(be(A).gt(m))throw new pt(`Extra gas ${A} in int format, exceeded limit ${m} for '${i}' payment method`)}async function An(A,i,a){let s={},o=await a.getReceiveTransactionCost({sourceChainId:A.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:1}),r=i.txCostAmount.maxAmount,c=w(r,N[i.chainType]).toFixed(),m=be(c).div(o.exchangeRate).toFixed(N[A.chainType],be.roundDown),l=R(m,N[A.chainType]).toFixed(0);if(s.native={int:l,float:m},o.sourceNativeTokenPrice){let u=be(m).mul(o.sourceNativeTokenPrice).toFixed(A.decimals,be.roundDown);s.stablecoin={int:R(u,A.decimals).toFixed(0),float:u}}return{extraGasMax:s,destinationChain:{gasAmountMax:{int:r,float:c},swap:{int:i.txCostAmount.swap,float:w(i.txCostAmount.swap,N[i.chainType]).toFixed()},transfer:{int:i.txCostAmount.transfer,float:w(i.txCostAmount.transfer,N[i.chainType]).toFixed()}},exchangeRate:o.exchangeRate,sourceNativeTokenPrice:o.sourceNativeTokenPrice}}function Yn(A){return A.sourceToken.chainSymbol!==A.destinationToken.chainSymbol}var $e=class extends ie{constructor(a,s,o){super();this.web3=a;this.api=s;this.nodeRpcUrlsConfig=o;this.chainType="EVM"}async send(a){let s=await this.buildRawTransactionSend(a);return this.sendRawTransaction(s)}async buildRawTransactionSwap(a){let s=Ie(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s)}async buildRawTransactionSwapFromParams(a){let{amount:s,contractAddress:o,fromAccountAddress:r,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:l,minimumReceiveAmount:u}=a,p=this.getBridgeContract(o).methods.swap(s,c,l,m,u);return Promise.resolve({from:r,to:o,data:p.encodeABI()})}async buildRawTransactionSend(a){let s=await Pe(this.chainType,a,this.api),{amount:o,contractAddress:r,fromAccountAddress:c,fromTokenAddress:m,toChainId:l,toAccountAddress:u,toTokenAddress:d,messenger:p,fee:h,gasFeePaymentMethod:b,extraGas:T}=s,P="0x"+_e().toString("hex"),y,f,C=h;if(T&&(C=Ea(C).plus(T).toFixed()),p===3){let S=await this.buildRawTransactionCctpSend(a,s,C);y=S.sendMethod,f=S.value}else{let S=this.getBridgeContract(r);b==="stablecoin"?(y=S.methods.swapAndBridge(m,o,u,l,d,P,p,C),f="0"):(y=S.methods.swapAndBridge(m,o,u,l,d,P,p,0),f=C)}return Promise.resolve({from:c,to:r,value:f,data:y.encodeABI()})}async buildRawTransactionCctpSend(a,s,o){let{amount:r,contractAddress:c,toChainId:m,toAccountAddress:l,gasFeePaymentMethod:u}=s,d=this.getContract(Wn,c),p,h;if(a.destinationToken.chainType==="SOLANA"){let b,T=new Ln(a.toAccountAddress),P=new Ln(a.destinationToken.tokenAddress),y=await ae(T,P),f=Be(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),a.toAccountAddress);It.setProvider(f);let C=await It.Spl.token(f).account.token.fetchNullable(y);if(C?.authority.equals(T))b=Te(y.toBase58(),"SOLANA",this.chainType);else{let S=await f.connection.getTokenAccountsByOwner(T,{mint:P});if(S.value.length===0&&!C)b=Te(y.toBase58(),"SOLANA",this.chainType);else if(S.value.length>0)b=Te(S.value[0].pubkey.toBase58(),"SOLANA",this.chainType);else throw new M("Associated account has wrong owner")}u==="stablecoin"?(p=d.methods.bridgeWithWalletAddress(r,b,l,m,o),h="0"):(p=d.methods.bridgeWithWalletAddress(r,b,l,m,0),h=o)}else u==="stablecoin"?(p=d.methods.bridge(r,l,m,o),h="0"):(p=d.methods.bridge(r,l,m,0),h=o);return{sendMethod:p,value:h}}async sendRawTransaction(a){let s=await this.web3.eth.estimateGas(a),o={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:r}=await this.web3.eth.sendTransaction({...a,gas:s,...o});return{txId:r}}getContract(a,s){return new this.web3.eth.Contract(a,s)}getBridgeContract(a){return this.getContract(xn,a)}};var Rt=class{constructor(i,a,s,o){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=o}async approve(i,a){let s,o;a?(s=i,o=a):o=i;let r=et(o.token,o.messenger);return this.tokenService.buildRawTransactionApprove({...o,spender:r},s)}async send(i,a){return k(i.amount),x("amount",i.amount,i.sourceToken.decimals),Yn(i)?vt(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSend(i):vt(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSwap(i)}};import{BN as Xe,Program as ln,Spl as qa,web3 as Re}from"@project-serum/anchor";import{Keypair as aa,PublicKey as W,SystemProgram as $a}from"@solana/web3.js";import{Big as pe}from"big.js";var tt={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 Xa}from"@project-serum/anchor";import Ya from"big.js";import Mt from"web3";async function Oe(A,i){return await Xa.token(i).account.token.fetch(A)}async function Kn(A,i,a){let s=await i.account.pool.fetch(a),o=s.decimals,r=Ya(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:o,feeShare:r},c)}function Qn(A){let i=A.amount,a="0x"+A.recipient.toString("hex"),s=A.sourceChainId,o=A.destinationChainId,r="0x"+A.receiveToken.toString("hex"),c="0x"+A.nonce.toString("hex"),m=1,l="0x"+A.chainBridge.toString("hex"),u=Mt.utils.encodePacked({t:"uint256",v:i},{t:"bytes32",v:a},{t:"uint256",v:s},{t:"bytes32",v:r},{t:"uint256",v:c},{t:"uint8",v:m});if(!u)throw new M("message cannot be undefined");let d=Mt.utils.keccak256(Buffer.from(u.replace("0x",""),"hex")),p=Buffer.from(d.replace("0x",""),"hex");p[0]=s,p[1]=o;let h=Mt.utils.encodePacked({t:"bytes32",v:"0x"+p.toString("hex")},{t:"bytes32",v:l});if(!h)throw new Ze("messageWithSigner cannot be undefined");let b=Mt.utils.keccak256(Buffer.from(h.replace("0x",""),"hex")),T=Buffer.from(b.replace("0x",""),"hex");return T[0]=p[0],T[1]=p[1],T}import{ComputeBudgetInstruction as zn,ComputeBudgetProgram as kt,Connection as jn,TransactionMessage as La}from"@solana/web3.js";import{Big as Ja}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 M("Cannot get AccountInfo");return s.data}))})))}var cn="AUTO";async function Ee(A,i,a){let s=new jn(a,"confirmed"),o=(await s.simulateTransaction(A)).value.unitsConsumed;await $n(A.instructions,o,i,s)}async function qn(A,i,a){let s=new jn(a,"confirmed"),o=await Fe(A,s),r=La.decompile(A.message,{addressLookupTableAccounts:o});if(A.serialize().length>1232)throw new yt;await $n(r.instructions,769230,i,s),A.message=r.compileToV0Message(o)}async function $n(A,i,a,s){if(i>0){let o=Ka(i,A);if(a?.solana){let r=a.solana;if(r===cn)await mn(A,s);else if("pricePerUnitInMicroLamports"in r)await mn(A,s,r.pricePerUnitInMicroLamports);else{let c=Ja(r.extraFeeInLamports).div(o).mul(He(6)).toFixed(0);await mn(A,s,c)}}}}function Ka(A,i){let a=i.findIndex(r=>r.programId.equals(kt.programId)&&zn.decodeInstructionType(r)==="SetComputeUnitLimit"),s=Number((A*1.3).toFixed(0)),o=kt.setComputeUnitLimit({units:s});return a>=0?i[a]=o:i.push(o),s.toString()}async function mn(A,i,a){let s=A.findIndex(c=>c.programId.equals(kt.programId)&&zn.decodeInstructionType(c)==="SetComputeUnitPrice"),o=BigInt(a||await Qa(i)),r=kt.setComputeUnitPrice({microLamports:o});return s>=0?A[s]=r:A.push(r),o.toString()}async function Qa(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 Ha}from"@solana/spl-token";import{Connection as za,TransactionMessage as ea,VersionedTransaction as ja}from"@solana/web3.js";import ta,{AxiosError as na}from"axios";var xt=class{constructor(i,a){this.connection=new za(i),this.jupiterUrl=a.replace(/\/$/,"")}async getJupiterSwapTx(i,a,s,o){let r;console.log("J amount",s);try{let p=o?"ExactOut":"ExactIn";r=await ta.get(`${this.jupiterUrl}/quote?inputMint=${a}
|
|
2
2
|
&outputMint=${Ha.toString()}
|
|
3
3
|
&amount=${s}
|
|
4
4
|
&swapMode=${p}
|
|
5
5
|
&slippageBps=100
|
|
6
|
-
&onlyDirectRoutes=true`)}catch(p){throw p instanceof na&&p.response&&p.response.data&&p.response.data.error?new V(p.response.data.error):new V("Cannot get route")}let c;if(o&&r?.data?.inAmount)c=r.data.inAmount;else if(o)throw new V("Cannot get inAmount");let m;try{m=await ta.post(`${this.jupiterUrl}/swap`,{quoteResponse:r.data,userPublicKey:i,wrapAndUnwrapSol:!0})}catch(p){throw p instanceof na&&p.response&&p.response.data&&p.response.data.error?new V(p.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"),d=ja.deserialize(u);return o?{tx:d,amountIn:c}:{tx:d}}async amendJupiterWithSdkTx(i,a){try{let s=await Fe(i,this.connection),o=await Fe(a,this.connection),r=ea.decompile(i.message,{addressLookupTableAccounts:s}),c=ea.decompile(a.message,{addressLookupTableAccounts:o});return c.instructions.shift(),r.instructions.push(...c.instructions),s.push(...o),i.message=r.compileToV0Message(s),a.message.header.numRequiredSignatures===2&&i.signatures.length===1&&i.signatures.push(a.signatures[0]),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 un=1e6,ei=1.1,Wt=class extends ie{constructor(a,s,o){super();this.solanaRpcUrl=a;this.params=s;this.api=o;this.chainType="SOLANA";this.jupiterService=new xt(a,s.jupiterUrl)}async buildRawTransactionSwap(a){let s=Ie(this.chainType,a);return await this.buildSwapTransaction(s,a.sourceToken.poolAddress,a.destinationToken.poolAddress,a.txFeeParams)}async buildSwapTransaction(a,s,o,r){let{fromAccountAddress:c,amount:m,contractAddress:l,fromTokenAddress:u,toTokenAddress:d,toAccountAddress:p,minimumReceiveAmount:y}=a,b=c,T=l,P=u,f=d,S=o,h=p,w=new W(b),_=Be(this.solanaRpcUrl,w.toString()),v=new ln(tt,T,_),B=await Ne(v.programId),K=await Ce(v.programId),Z=new W(P),re=await Ue(Z,v.programId),Ae=new W(s),fe=await ae(w,Z),$=new W(h),Y=new W(f),q=await Ue(Y,v.programId),ee=new W(S),Q=await ae($,Y),ce=[Re.ComputeBudgetProgram.setComputeUnitLimit({units:un})];try{await Oe(Q,_)}catch{let ha=await qa.associatedToken(_).methods.create().accounts({mint:Y,owner:$,associatedAccount:Q}).instruction();ce.push(ha)}let me=await v.methods.swap(new Xe(m),new Xe(y||0)).accounts({payer:w,config:K,bridgeAuthority:B,user:w,sendBridgeToken:re,sendMint:Z,sendPool:Ae,sendUserToken:fe,receiveBridgeToken:q,receiveMint:Y,receivePool:ee,receiveUserToken:Q}).preInstructions(ce).transaction(),te=_.connection;return me.recentBlockhash=(await te.getLatestBlockhash()).blockhash,me.feePayer=w,await Ee(me,r,this.solanaRpcUrl),await this.convertToVersionedTransaction(me,te)}async buildRawTransactionSend(a){let s=await Pe(this.chainType,a,this.api),o=this.addPoolAddress(a,s),r=o.gasFeePaymentMethod=="stablecoin",c;if(r)try{let{tx:u,solTxSendUpdatedParams:d}=await this.processJup(o,a,!0);c=u,o={...o,...d}}catch{try{let{tx:d,solTxSendUpdatedParams:p}=await this.processJup(o,a,!1);c=d,o={...o,...p}}catch(d){throw d instanceof G?d:d instanceof Error&&d.message?new V(`Some error occurred during creation Jupiter swap transaction. ${d.message}`):new V("Some error occurred during creation Jupiter swap transaction")}}let m,l;switch(s.messenger){case 1:{let u=await this.prepareSwapAndBridgeData(o);m=await this.buildSwapAndBridgeAllbridgeTransaction(u);break}case 2:{let u=await this.prepareSwapAndBridgeData(o),{transaction:d,messageAccount:p}=await this.buildSwapAndBridgeWormholeTransaction(u);m=d,l=p;break}case 3:{let u=await this.prepareSwapAndBridgeCctpData(o),{transaction:d,messageSentEventDataKeypair:p}=await this.buildSwapAndBridgeCctpTransaction(a.destinationToken.chainSymbol,u);m=d,l=p;break}}if(r){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,o){let{fee:r,extraGas:c,gasFeePaymentMethod:m}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(s.sourceToken.decimals,a),l=o?pe(r):pe(a.fee);c&&(l=l.plus(c)),o||(l=l.mul(ei));let{tx:u,amountIn:d}=await this.jupiterService.getJupiterSwapTx(s.fromAccountAddress,s.sourceToken.tokenAddress,l.toFixed(0),o),p;if(o){if(!d)throw new V("Cannot get inAmount");p=pe(a.amount).minus(d).toFixed(0)}else p=pe(a.amount).minus(l).toFixed(0);if(pe(p).lte(0))throw new Ge(`Amount not enough to pay fee, ${C(pe(p).minus(1).neg(),s.sourceToken.decimals).toFixed()} stables is missing`);return{tx:u,solTxSendUpdatedParams:{amount:p,fee:r,extraGas:c,gasFeePaymentMethod:m}}}addPoolAddress(a,s){return{...s,poolAddress:a.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(a,s){if(s.gasFeePaymentMethod=="stablecoin"){let o=(await this.api.getReceiveTransactionCost({sourceChainId:s.fromChainId,destinationChainId:s.toChainId,messenger:s.messenger})).sourceNativeTokenPrice,r=pe(s.fee).div(o).mul(pe(10).pow(N.SOLANA-a)).toFixed(0),c;return s.extraGas&&(c=pe(s.extraGas).div(o).mul(pe(10).pow(N.SOLANA-a)).toFixed(0)),{fee:r,extraGas:c,gasFeePaymentMethod:"native"}}return{fee:s.fee,extraGas:s.extraGas,gasFeePaymentMethod:"native"}}getExtraGasInstruction(a,s,o){return Re.SystemProgram.transfer({fromPubkey:s,toPubkey:o,lamports:+a})}async prepareSwapAndBridgeData(a){let{amount:s,contractAddress:o,fromChainId:r,fromAccountAddress:c,fromTokenAddress:m,toChainId:l,toAccountAddress:u,toTokenAddress:d,poolAddress:p,extraGas:y}=a,b=m,T=c,P=l,f=d,S=u,h=o,w=r,_=Be(this.solanaRpcUrl,T),v=new ln(tt,h,_),B=Array.from(_e()),K=new W(p),Z=await Kn(s,v,K),re=await Fn(B,v.programId),Ae=await Ne(v.programId),fe=await ae(new W(T),new W(b)),$=await Ue(new W(b),v.programId),Y=await nn(P,v.programId),q=await Zn(P,Buffer.from(f),v.programId),ee=await Ce(v.programId),Q=await v.account.config.fetch(ee),ce=await je(P,Q.gasOracleProgramId),me=await je(w,Q.gasOracleProgramId),te=Qn({amount:Z,recipient:Buffer.from(S),nonce:Buffer.from(B),receiveToken:Buffer.from(f),destinationChainId:P,sourceChainId:w,chainBridge:(await Ne(v.programId)).toBuffer()}),I={};return I.bridge=v,I.amount=new Xe(s),I.vusdAmount=new Xe(Z),I.nonce=B,I.recipient=Array.from(S),I.receiveToken=Array.from(f),I.poolAccount=K,I.lockAccount=re,I.bridgeAuthority=Ae,I.userToken=fe,I.bridgeTokenAccount=$,I.chainBridgeAccount=Y,I.otherBridgeTokenAccount=q,I.userAccount=new W(T),I.destinationChainId=P,I.mint=new W(b),I.config=ee,I.configAccountInfo=Q,I.gasPrice=ce,I.thisGasPrice=me,I.message=te,y&&(I.extraGasInstruction=this.getExtraGasInstruction(y,I.userAccount,ee)),I}async buildSwapAndBridgeAllbridgeTransaction(a){let{bridge:s,vusdAmount:o,nonce:r,recipient:c,receiveToken:m,poolAccount:l,lockAccount:u,bridgeAuthority:d,userToken:p,bridgeTokenAccount:y,chainBridgeAccount:b,otherBridgeTokenAccount:T,userAccount:P,destinationChainId:f,mint:S,config:h,configAccountInfo:w,gasPrice:_,thisGasPrice:v,message:B,extraGasInstruction:K}=a,Z=w.allbridgeMessengerProgramId,re=await an(f,Z),Ae=await Ce(Z),fe=await Dn(B,Z),$=[];K&&$.push(K);let Y=await s.methods.swapAndBridge({vusdAmount:o,nonce:r,destinationChainId:f,recipient:c,receiveToken:m}).accounts({mint:S,user:P,config:h,lock:u,pool:l,gasPrice:_,thisGasPrice:v,bridgeAuthority:d,userToken:p,bridgeToken:y,chainBridge:b,messenger:Z,messengerGasUsage:re,messengerConfig:Ae,sentMessageAccount:fe,otherBridgeToken:T}).preInstructions([Re.ComputeBudgetProgram.setComputeUnitLimit({units:un})]).postInstructions($).transaction(),q=Be(this.solanaRpcUrl,P.toString()).connection;return Y.recentBlockhash=(await q.getLatestBlockhash()).blockhash,Y.feePayer=P,await this.convertToVersionedTransaction(Y,q)}async convertToVersionedTransaction(a,s){let o=await s.getAddressLookupTable(new W(this.params.solanaLookUpTable)).then(c=>c.value);if(!o)throw new M("Cannot find allbridgeLookupTableAccount");let r=new Re.TransactionMessage({payerKey:a.feePayer,recentBlockhash:a.recentBlockhash,instructions:a.instructions}).compileToV0Message([o]);return new Re.VersionedTransaction(r)}async buildSwapAndBridgeWormholeTransaction(a){let{bridge:s,vusdAmount:o,nonce:r,recipient:c,receiveToken:m,poolAccount:l,lockAccount:u,bridgeAuthority:d,userToken:p,bridgeTokenAccount:y,chainBridgeAccount:b,otherBridgeTokenAccount:T,userAccount:P,destinationChainId:f,mint:S,config:h,configAccountInfo:w,gasPrice:_,thisGasPrice:v,message:B,extraGasInstruction:K}=a,Z=this.params.wormholeMessengerProgramId,[re]=W.findProgramAddressSync([Buffer.from("Bridge")],new W(Z)),[Ae]=W.findProgramAddressSync([Buffer.from("fee_collector")],new W(Z)),[fe]=W.findProgramAddressSync([Buffer.from("Sequence"),d.toBuffer()],new W(Z)),$=await an(f,w.wormholeMessengerProgramId),Y=await Ce(w.wormholeMessengerProgramId),q=aa.generate(),ee=Be(this.solanaRpcUrl,P.toString()),Q=await ee.connection.getAccountInfo(re);if(Q==null)throw new M("Cannot fetch wormhole bridge account info");let ce=new Xe(Q.data.slice(16,24),"le").toString(),me=$a.transfer({fromPubkey:P,toPubkey:Ae,lamports:+ce}),te=[];K&&te.push(K);let I={mint:S,user:P,config:h,lock:u,pool:l,gasPrice:_,thisGasPrice:v,bridgeAuthority:d,userToken:p,bridgeToken:y,chainBridge:b,otherBridgeToken:T,messengerGasUsage:$,wormholeProgram:Z,bridge:re,message:q.publicKey,wormholeMessenger:w.wormholeMessengerProgramId,sequence:fe,feeCollector:Ae,wormholeMessengerConfig:Y,clock:Re.SYSVAR_CLOCK_PUBKEY},lt=await s.methods.swapAndBridgeWormhole({vusdAmount:o,nonce:r,destinationChainId:f,recipient:c,receiveToken:m}).accounts(I).preInstructions([Re.ComputeBudgetProgram.setComputeUnitLimit({units:un}),me]).postInstructions(te).signers([q]).transaction();return lt.recentBlockhash=(await ee.connection.getLatestBlockhash()).blockhash,lt.feePayer=P,{transaction:await this.convertToVersionedTransaction(lt,ee.connection),messageAccount:q}}async prepareSwapAndBridgeCctpData(a){let{contractAddress:s,amount:o,fromAccountAddress:r,fromTokenAddress:c,toChainId:m,toAccountAddress:l,toTokenAddress:u,extraGas:d}=a,p=s;if(!p)throw new ne("Such route does not support CCTP protocol");let y=4,b=r,T=u,P=l,f=Be(this.solanaRpcUrl,b),S=new ln(Jn,p,f),h=new W(c),w=await Nn(h,S.programId),_=new W(b),v=await S.account.cctpBridge.fetch(w),B={};return B.cctpBridge=S,B.cctpBridgeAccount=w,B.cctpAddressAccount=new W(p),B.amount=new Xe(o),B.recipient=Array.from(P),B.receiveToken=Array.from(T),B.userToken=await ae(_,h),B.bridgeAuthority=await Gn(w,S.programId),B.bridgeTokenAccount=await Un(h,S.programId),B.chainBridgeAccount=await nn(m,S.programId),B.userAccount=_,B.destinationChainId=m,B.mint=h,B.gasPrice=await je(m,v.gasOracleProgramId),B.thisGasPrice=await je(y,v.gasOracleProgramId),B.provider=f,d&&(B.extraGasInstruction=this.getExtraGasInstruction(d,B.userAccount,w)),B}async buildSwapAndBridgeCctpTransaction(a,s){let{cctpBridge:o,cctpBridgeAccount:r,amount:c,recipient:m,receiveToken:l,bridgeAuthority:u,userToken:d,bridgeTokenAccount:p,chainBridgeAccount:y,userAccount:b,destinationChainId:T,mint:P,gasPrice:f,thisGasPrice:S,extraGasInstruction:h,provider:w}=s,_=this.params.cctpParams.cctpDomains[a],v=this.params.cctpParams.cctpTransmitterProgramId,B=this.params.cctpParams.cctpTokenMessengerMinter;if(_==null||!v||!B)throw new M("CCTP is not configured");let K=new W(v),Z=new W(B),{messageTransmitterAccount:re,tokenMessenger:Ae,tokenMessengerEventAuthority:fe,tokenMinter:$,localToken:Y,remoteTokenMessengerKey:q,authorityPda:ee}=Vn(_,P,K,Z),Q=[];h&&Q.push(h);let ce=aa.generate(),me=_n(o.programId,ce.publicKey),te=await o.methods.bridge({amount:c,destinationChainId:T,recipient:m,receiveToken:l}).accounts({mint:P,user:b,cctpBridge:r,messageSentEventData:ce.publicKey,lock:me,cctpMessenger:Z,messageTransmitterProgram:K,messageTransmitterAccount:re,tokenMessenger:Ae,tokenMinter:$,localToken:Y,remoteTokenMessengerKey:q,authorityPda:ee,eventAuthority:fe,bridgeToken:p,gasPrice:f,thisGasPrice:S,chainBridge:y,userToken:d,bridgeAuthority:u}).preInstructions([Re.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(Q).transaction(),I=w.connection;return te.recentBlockhash=(await I.getLatestBlockhash()).blockhash,te.feePayer=b,{transaction:await this.convertToVersionedTransaction(te,I),messageSentEventDataKeypair:ce}}send(a){throw new J}};import{Address as dn,contract as vd}from"@stellar/stellar-sdk";import{Big as ai}from"big.js";import{contract as n}from"@stellar/stellar-sdk";var ti=n.Spec,ni=n.Client;var nt=class extends ni{constructor(a){super(new ti(["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;this.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 Ft=class extends ie{constructor(a,s,o){super();this.nodeRpcUrlsConfig=a;this.params=s;this.api=o;this.chainType="SRB"}async buildRawTransactionSend(a){let s=await Pe(this.chainType,a,this.api);return await this.buildRawTransactionSendFromParams(s)}async buildRawTransactionSendFromParams(a){let{amount:s,contractAddress:o,fromAccountAddress:r,fromTokenAddress:c,toChainId:m,toAccountAddress:l,toTokenAddress:u,fee:d,gasFeePaymentMethod:p,extraGas:y}=a,b=d;y&&(b=ai(b).plus(y).toFixed());let T=this.getContract(nt,o,r),P;return p==="stablecoin"?P=await T.swap_and_bridge({sender:r,token:dn.contract(Buffer.from(c)).toString(),amount:BigInt(s),recipient:Buffer.from(l),destination_chain_id:+m,receive_token:Buffer.from(u),nonce:on(),gas_amount:BigInt(0),fee_token_amount:BigInt(b)}):P=await T.swap_and_bridge({sender:r,token:dn.contract(Buffer.from(c)).toString(),amount:BigInt(s),recipient:Buffer.from(l),destination_chain_id:+m,receive_token:Buffer.from(u),nonce:on(),gas_amount:BigInt(b),fee_token_amount:BigInt(0)}),P.toXDR()}async buildRawTransactionSwap(a){let s=Ie(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s)}async buildRawTransactionSwapFromParams(a){let{amount:s,contractAddress:o,fromAccountAddress:r,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:l,minimumReceiveAmount:u}=a;return(await this.getContract(nt,o,r).swap({sender:r,amount:BigInt(s),token:dn.contract(Buffer.from(c)).toBuffer(),receive_token:Buffer.from(l),recipient:m,receive_amount_min:BigInt(u)})).toXDR()}send(a){throw new J}getContract(a,s,o){let r={publicKey:o,contractId:s,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(r)}};import{Big as oi}from"big.js";import ii from"bn.js";function Gt(A){return"0x"+new ii(A).toString("hex")}function ia(A){return new Promise(i=>setTimeout(()=>i(),A))}var Ye=A=>(...i)=>new Promise((a,s)=>A(...i,(o,r)=>o?s(o):a(r)));async function Zt(A,i){let a=await A.trx.sign(i);if(!a.signature)throw new Ze("Transaction was not signed properly");let o=(await A.trx.sendRawTransaction(a)).txid;return await si(A,o),{txId:o}}async function si(A,i,a=1e4){let s=Date.now();for(;;){if(Date.now()-s>a)throw new Ke("Transaction not found");let o=await A.trx.getUnconfirmedTransactionInfo(i);if(!o?.receipt){await ia(2e3);continue}if(o.receipt.result==="SUCCESS")return o;throw new Ke(`Transaction status is ${o.receipt.result}`)}}var at=class extends ie{constructor(a,s){super();this.tronWeb=a;this.api=s;this.chainType="TRX"}async send(a){let s=await Pe(this.chainType,a,this.api),o=await this.buildRawTransactionSendFromParams(s);return await Zt(this.tronWeb,o)}async buildRawTransactionSwap(a){let s=Ie(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s)}async buildRawTransactionSwapFromParams(a){let{amount:s,contractAddress:o,fromAccountAddress:r,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:l,minimumReceiveAmount:u}=a,d=[{type:"uint256",value:s},{type:"bytes32",value:c},{type:"bytes32",value:l},{type:"address",value:m},{type:"uint256",value:u}];return this.buildRawTransaction(o,"swap(uint256,bytes32,bytes32,address,uint256)",d,"0",r)}async buildRawTransactionSend(a){let s=await Pe(this.chainType,a,this.api);return this.buildRawTransactionSendFromParams(s)}async buildRawTransactionSendFromParams(a){let{amount:s,contractAddress:o,fromAccountAddress:r,fromTokenAddress:c,toChainId:m,toAccountAddress:l,toTokenAddress:u,messenger:d,fee:p,gasFeePaymentMethod:y,extraGas:b}=a,T=p;b&&(T=oi(T).plus(b).toFixed());let P=_e().toJSON().data,f,S,h;return d==3?(y==="stablecoin"?(f=[{type:"uint256",value:s},{type:"bytes32",value:l},{type:"uint256",value:m},{type:"uint256",value:T}],S="0"):(f=[{type:"uint256",value:s},{type:"bytes32",value:l},{type:"uint256",value:m},{type:"uint256",value:0}],S=T),h="bridge(uint256,bytes32,uint256,uint256)"):(y==="stablecoin"?(f=[{type:"bytes32",value:c},{type:"uint256",value:s},{type:"bytes32",value:l},{type:"uint256",value:m},{type:"bytes32",value:u},{type:"uint256",value:P},{type:"uint8",value:d},{type:"uint256",value:T}],S="0"):(f=[{type:"bytes32",value:c},{type:"uint256",value:s},{type:"bytes32",value:l},{type:"uint256",value:m},{type:"bytes32",value:u},{type:"uint256",value:P},{type:"uint8",value:d},{type:"uint256",value:0}],S=T),h="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)"),this.buildRawTransaction(o,h,f,S,r)}async buildRawTransaction(a,s,o,r,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(a,s,{callValue:r},o,c);if(!m?.result?.result)throw new M("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var Dt=class{constructor(i,a,s,o){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=o;this.rawTxBuilder=new Rt(i,a,s,o)}async getAllowance(i,a){let s,o;a?(s=i,o=a):o=i;let r=et(o.token,o.messenger);return await this.tokenService.getAllowance({...o,spender:r},s)}async checkAllowance(i,a){let s,o;a?(s=i,o=a):o=i;let r=et(o.token,o.messenger);return this.tokenService.checkAllowance({...o,spender:r},s)}async approve(i,a){let s=et(a.token,a.messenger);return this.tokenService.approve(i,{...a,spender:s})}async send(i,a){return k(a.amount),x("amount",a.amount,a.sourceToken.decimals),vt(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).send(a)}};function et(A,i){if(i&&i==3){if(A.cctpAddress)return A.cctpAddress;throw new ne("Such route does not support CCTP protocol")}else return A.bridgeAddress}function vt(A,i,a,s,o){switch(L[A].chainType){case"EVM":{if(o)return new $e(o,i,a);{let r=a.getNodeRpcUrl(A);return new $e(new Ai(r),i,a)}}case"TRX":{if(o)return new at(o,i);{let r=a.getNodeRpcUrl(A);return new at(new ri({fullHost:r}),i)}}case"SOLANA":return new Wt(a.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:s.wormholeMessengerProgramId,solanaLookUpTable:s.solanaLookUpTable,cctpParams:s.cctpParams,jupiterUrl:s.jupiterUrl},i);case"SRB":return new Ft(a,s,i)}}import{Big as hi}from"big.js";import bi from"timed-cache";import Ti from"tronweb";import Pi from"web3";import{Big as Se}from"big.js";function sa(A,i,a,s,o){let r=R(A,3),c=Se(r),m=Se(a),l=Se(s).plus(o),u,d;if(m.eq(0)||l.eq(0)){let y=c.div(2);u=Se(s).plus(y),d=Se(o).plus(y)}else u=Se(s).plus(c.mul(s).div(l)),d=Se(o).plus(c.mul(o).div(l));return Se(wn(i,u.toFixed(),d.toFixed())).minus(m).toFixed()}function oa(A){let i=R(A,3);return Se(i).round().toFixed()}var ve=[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];var j=class{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 se=class{};var it=class extends se{constructor(a,s){super();this.web3=a;this.api=s;this.chainType="EVM";this.P=52}async getUserBalanceInfo(a,s){let o;try{o=await Ct(this.getUserBalanceInfoByBatch(a,s),`Cannot get UserBalanceInfo for ${s.name} on ${s.chainSymbol}`,5e3)}catch{o=await tn(()=>this.getUserBalanceInfoPerProperty(a,s),`Cannot get UserBalanceInfo for ${s.name} on ${s.chainSymbol}`,5,2e3)}return o}async getUserBalanceInfoByBatch(a,s){let o=new this.web3.BatchRequest,r=new this.web3.eth.Contract(ve,s.poolAddress),c=["userRewardDebt","balanceOf"].map(u=>Ye(d=>o.add(r.methods[u](a).call.request({},d)))());o.execute();let[m,l]=await Promise.all(c);return new j({lpAmount:l,rewardDebt:m})}async getUserBalanceInfoPerProperty(a,s){let o=await this.getPoolContract(s.poolAddress).methods.userRewardDebt(a).call(),r=await this.getPoolContract(s.poolAddress).methods.balanceOf(a).call();return new j({lpAmount:r,rewardDebt:o})}async getPoolInfoFromChain(a){let s;try{s=await Ct(this.getPoolInfoByBatch(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5e3)}catch{s=await tn(()=>this.getPoolInfoPerProperty(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5,2e3)}return s}async getPoolInfoByBatch(a){let s=new this.web3.BatchRequest,o=new this.web3.eth.Contract(ve,a.poolAddress),r=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(P=>Ye(f=>s.add(o.methods[P]().call.request({},f)))());s.execute();let[c,m,l,u,d,p]=await Promise.all(r),y=l.toString(),b=u.toString(),T=z({tokenBalance:y,vUsdBalance:b});return{aValue:c.toString(),dValue:m.toString(),tokenBalance:y,vUsdBalance:b,totalLpAmount:d.toString(),accRewardPerShareP:p.toString(),p:this.P,imbalance:T}}async getPoolInfoPerProperty(a){let s=this.getPoolContract(a.poolAddress),o=await s.methods.a().call(),r=await s.methods.d().call(),c=await s.methods.tokenBalance().call(),m=await s.methods.vUsdBalance().call(),l=await s.methods.totalSupply().call(),u=await s.methods.accRewardPerShareP().call(),d=z({tokenBalance:c,vUsdBalance:m});return{aValue:o,dValue:r,tokenBalance:c,vUsdBalance:m,totalLpAmount:l,accRewardPerShareP:u,p:this.P,imbalance:d}}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"}}getContract(a,s){return new this.web3.eth.Contract(a,s)}getPoolContract(a){return this.getContract(ve,a)}};var Nt=class{constructor(i,a,s,o){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=o}async approve(i,a){if(a){let s=i,o=a;return this.tokenService.buildRawTransactionApprove({...o,spender:o.token.poolAddress},s)}else{let s=i;return this.tokenService.buildRawTransactionApprove({...s,spender:s.token.poolAddress})}}async deposit(i,a){return k(i.amount),x("amount",i.amount,i.token.decimals),i.amount=R(i.amount,i.token.decimals).toFixed(),Le(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionDeposit(i)}async withdraw(i,a){return k(i.amount),x("amount",i.amount,i.token.decimals),i.amount=R(i.amount,3).toFixed(),Le(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionWithdraw(i)}async claimRewards(i,a){return Le(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionClaimRewards(i)}};import{AnchorProvider as mi,BN as ra,Program as li,Spl as ui,web3 as di}from"@project-serum/anchor";import{Connection as pi,PublicKey as Me}from"@solana/web3.js";var Ut=class extends se{constructor(a,s){super();this.solanaRpcUrl=a;this.api=s;this.chainType="SOLANA";this.P=48}async getUserBalanceInfo(a,s){let o=this.buildAnchorProvider(a),r=this.getBridge(s.bridgeAddress,o),c=new Me(s.poolAddress),m=await r.account.pool.fetch(c);try{let l=await sn(new Me(a),m.mint,r.programId),{lpAmount:u,rewardDebt:d}=await r.account.userDeposit.fetch(l);return new j({lpAmount:u.toString(),rewardDebt:d.toString()})}catch{return new j({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(a){let s=this.buildAnchorProvider(a.bridgeAddress),o=await this.getBridge(a.bridgeAddress,s).account.pool.fetch(a.poolAddress),r=o.vUsdBalance.toString(),c=o.tokenBalance.toString(),m=z({tokenBalance:c,vUsdBalance:r});return{dValue:o.d.toString(),aValue:o.a.toString(),totalLpAmount:o.totalLpAmount.toString(),vUsdBalance:r,tokenBalance:c,accRewardPerShareP:o.accRewardPerShareP.toString(),p:this.P,imbalance:m}}async buildRawTransactionDeposit(a){let{bridge:s,accounts:o,preInstructions:r}=await this.prepareDataForTransaction(a),c=await s.methods.deposit(new ra(a.amount)).accounts(o).preInstructions(r).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new Me(a.accountAddress),await Ee(c,a.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionWithdraw(a){let{bridge:s,accounts:o,preInstructions:r}=await this.prepareDataForTransaction(a),c=await s.methods.withdraw(new ra(a.amount)).accounts(o).preInstructions(r).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new Me(a.accountAddress),await Ee(c,a.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionClaimRewards(a){let{bridge:s,accounts:o,preInstructions:r}=await this.prepareDataForTransaction(a),c=await s.methods.claimRewards().accounts(o).preInstructions(r).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new Me(a.accountAddress),await Ee(c,a.txFeeParams,this.solanaRpcUrl),c}async prepareDataForTransaction(a){let s=this.buildAnchorProvider(a.accountAddress),o=this.getBridge(a.token.bridgeAddress,s),{accounts:r,preInstructions:c}=await this._getLPTransactionData(o,a.token.poolAddress,a.accountAddress,s);return{bridge:o,accounts:r,preInstructions:c}}getBridge(a,s){return new li(tt,a,s)}buildAnchorProvider(a){let s=new pi(this.solanaRpcUrl,"confirmed"),o=new Me(a);return new mi(s,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(a,s,o,r){let c=new Me(o),m=await Ce(a.programId),l=await Ne(a.programId),u=new Me(s),p=(await a.account.pool.fetch(u)).mint,y=await ae(c,p),b=await Ue(p,a.programId),T=await sn(c,p,a.programId),P=[di.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await Oe(y,r)}catch{let w=await ui.associatedToken(r).methods.create().accounts({mint:p,owner:c,associatedAccount:y}).instruction();P.push(w)}try{await a.account.userDeposit.fetch(T)}catch{let h=await a.methods.initDepositAccount().accounts({mint:p,user:c,userDeposit:T}).instruction();P.push(h)}return{accounts:{mint:p,user:c,config:m,pool:u,bridgeAuthority:l,userDeposit:T,userToken:y,bridgeToken:b},preInstructions:P}}};import{contract as Md}from"@stellar/stellar-sdk";import{contract as t}from"@stellar/stellar-sdk";var gi=t.Spec,fi=t.Client;var _t=class extends fi{constructor(a){super(new gi(["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;this.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 Vt=class extends se{constructor(a,s,o){super();this.nodeRpcUrlsConfig=a;this.params=s;this.api=o;this.chainType="SRB";this.P=48}async getUserBalanceInfo(a,s){let r=(await this.getContract(s.poolAddress).get_user_deposit({user:a})).result;if(r.isErr())throw new M;let c=r.unwrap();return new j({lpAmount:c.lp_amount.toString(),rewardDebt:c.reward_debt.toString()})}async getPoolInfoFromChain(a){let o=(await this.getContract(a.poolAddress).get_pool()).result;if(o.isErr())throw new M;let r=o.unwrap();return{aValue:r.a.toString(),accRewardPerShareP:r.acc_reward_per_share_p.toString(),dValue:r.d.toString(),tokenBalance:r.token_balance.toString(),p:this.P,totalLpAmount:r.total_lp_amount.toString(),vUsdBalance:r.v_usd_balance.toString(),imbalance:z({tokenBalance:r.token_balance.toString(),vUsdBalance:r.v_usd_balance.toString()})}}async buildRawTransactionDeposit(a){let s=this.getContract(a.token.poolAddress,a.accountAddress);return console.log("sender",a.accountAddress),console.log("poolAddress",a.token.poolAddress),(await s.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 o={publicKey:s,contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new _t(o)}};import yi from"web3";var st=class extends se{constructor(a,s,o){super();this.tronWeb=a;this.api=s;this.chainType="TRX";this.P=52;o&&(this.web3=new yi(o))}async getUserBalanceInfo(a,s){let o;if(this.web3)try{o=await this.getUserBalanceInfoByBatch(this.web3,a,s)}catch{o=await this.getUserBalanceInfoPerProperty(a,s)}else o=await this.getUserBalanceInfoPerProperty(a,s);return o}async getUserBalanceInfoByBatch(a,s,o){let r=new a.BatchRequest,c=new a.eth.Contract(ve,qe(o.poolAddress)),m=qe(s),l=["userRewardDebt","balanceOf"].map(p=>Ye(y=>r.add(c.methods[p](m).call.request({},y)))());r.execute();let[u,d]=await Promise.all(l);return new j({lpAmount:d,rewardDebt:u})}async getUserBalanceInfoPerProperty(a,s){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a);let o=await this.getContract(s.poolAddress),r=(await o.methods.userRewardDebt(a).call()).toString(),c=(await o.methods.balanceOf(a).call()).toString();return new j({lpAmount:c,rewardDebt:r})}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 o=new a.BatchRequest,r=new a.eth.Contract(ve,qe(s.poolAddress)),c=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(f=>Ye(S=>o.add(r.methods[f]().call.request({},S)))());o.execute();let[m,l,u,d,p,y]=await Promise.all(c),b=u.toString(),T=d.toString(),P=z({tokenBalance:b,vUsdBalance:T});return{aValue:m.toString(),dValue:l.toString(),tokenBalance:b,vUsdBalance:T,totalLpAmount:p.toString(),accRewardPerShareP:y.toString(),p:this.P,imbalance:P}}async getPoolInfoPerProperty(a){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a.poolAddress);let s=await this.getContract(a.poolAddress),[o,r,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()]),d=c.toString(),p=m.toString(),y=z({tokenBalance:d,vUsdBalance:p});return{aValue:o.toString(),dValue:r.toString(),tokenBalance:d,vUsdBalance:p,totalLpAmount:l.toString(),accRewardPerShareP:u.toString(),p:this.P,imbalance:y}}buildRawTransactionDeposit(a){let{amount:s,accountAddress:o}=a,r=[{type:"uint256",value:s}];return this.buildRawTransaction(a.token.poolAddress,"deposit(uint256)",r,"0",o)}buildRawTransactionWithdraw(a){let{amount:s,accountAddress:o}=a,r=[{type:"uint256",value:s}];return this.buildRawTransaction(a.token.poolAddress,"withdraw(uint256)",r,"0",o)}buildRawTransactionClaimRewards(a){let{accountAddress:s}=a,o=[];return this.buildRawTransaction(a.token.poolAddress,"claimRewards()",o,"0",s)}async buildRawTransaction(a,s,o,r,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(a,s,{callValue:r},o,c);if(!m?.result?.result)throw new M("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}async getContract(a){return await this.tronWeb.contract(ve,a)}};var Ot=class{constructor(i,a,s,o){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=o;this.rawTxBuilder=new Nt(i,a,this.params,o);let r=s.cachePoolInfoChainSec>0?s.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new bi({defaultTtl:r})}async getAllowance(i,a){if(a){let s=i,o=a;return await this.tokenService.getAllowance({...o,spender:o.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,o=a;return this.tokenService.checkAllowance({...o,spender:o.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){k(i),x("amount",i,a.decimals);let o=await this.getPoolInfoFromChain(a,s),{vUsdBalance:r,tokenBalance:c,aValue:m,dValue:l}=o,u=sa(i,m,l,c,r);return C(u,3).toFixed()}async getAmountToBeWithdrawn(i,a,s,o){k(i),x("amount",i,s.decimals);let r=await this.getPoolInfoFromChain(s,o),c=oa(i),m=H(c,s.decimals),u=(await this.getUserBalanceInfo(a,s,o)).earned(r)||"0",d=hi(m).plus(u).toFixed();return C(d,s.decimals).toFixed()}async getUserBalanceInfo(i,a,s){return Le(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,s).getUserBalanceInfo(i,a)}async getPoolInfoFromChain(i,a){let s={chainSymbol:i.chainSymbol,poolAddress:i.poolAddress},o=this.cache.get(s);if(o)return o;{let r=await Le(i.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).getPoolInfoFromChain(i);return this.cache.put(s,r),this.api.cachePut({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress},r),r}}};function Le(A,i,a,s,o){switch(L[A].chainType){case"EVM":{if(o)return new it(o,i);{let r=a.getNodeRpcUrl(A);return new it(new Pi(r),i)}}case"TRX":{let r=a.getNodeRpcUrl(A),c=s.tronJsonRpc;if(o)return new st(o,i,c);{let m=new Ti({fullHost:r});return new st(m,i,c)}}case"SOLANA":{let r=a.getNodeRpcUrl(A);return new Ut(r,i)}case"SRB":return new Vt(a,s,i)}}import{Big as F}from"big.js";function ma(A,i,a){let s=Si(A,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo),o=wi(s.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:s,swapFromVUsdCalcResult:o}}function la(A,i,a){let s=Ci(A,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),o=Bi(s.amountIncludingCommissionInSystemPrecision,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo);return{swapToVUsdCalcResult:s,swapFromVUsdCalcResult:o}}function Si(A,{feeShare:i,decimals:a},s){let o=F(A),r=o.times(i),c=o.minus(r);return{bridgeFeeInTokenPrecision:r.round().toFixed(),amountIncludingCommissionInSystemPrecision:Aa(xe(c,a),s),amountExcludingCommissionInSystemPrecision:Aa(xe(o,a),s)}}function Aa(A,i){if(A.eq(0))return"0";let a=F(i.tokenBalance).plus(A),s=de(a.toFixed(),i.aValue,i.dValue);return F(i.vUsdBalance).minus(s).round().toFixed()}function wi(A,{feeShare:i,decimals:a},s){if(F(A).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let r=F(A).plus(s.vUsdBalance),c=de(r,s.aValue,s.dValue),m=H(F(s.tokenBalance).minus(c),a),l=F(m).times(i),u=F(m).minus(l).round();return{bridgeFeeInTokenPrecision:l.round().toFixed(),amountIncludingCommissionInTokenPrecision:u.toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}function Ci(A,{feeShare:i,decimals:a},s){let o=F(i).div(F(1).minus(i)),r=F(A).times(o),c=F(A).plus(r);return{bridgeFeeInTokenPrecision:r.round().toFixed(),amountIncludingCommissionInSystemPrecision:ca(xe(c,a),s),amountExcludingCommissionInSystemPrecision:ca(xe(A,a),s)}}function ca(A,i){let a=F(i.tokenBalance).minus(A),s=de(a.toFixed(),i.aValue,i.dValue);return F(s).minus(i.vUsdBalance).round().toFixed()}function Bi(A,{feeShare:i,decimals:a},s){if(F(A).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let o=F(s.vUsdBalance).minus(A),r=de(o.toFixed(),s.aValue,s.dValue),c=F(r).minus(s.tokenBalance),m=H(c.toFixed(),a),l=F(i).div(F(1).minus(i)),u=F(m).times(l),d=F(m).plus(u);return{bridgeFeeInTokenPrecision:u.round().toFixed(),amountIncludingCommissionInTokenPrecision:d.round().toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}import{Big as ke}from"big.js";function ua(A,i,a,s,o){let r=ue(A,i,a),c=H(r,i.decimals),m=ze(r,s,o),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(H(r,s.decimals).minus(m).minus(u),s.decimals).neg().round(s.decimals,ke.roundUp).toFixed()}}}import{Connection as Ii,PublicKey as Ri,TransactionMessage as vi}from"@solana/web3.js";var Et=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.params=a}async addMemoToTx(i,a){if(a.length>28)throw new M("InvalidArgumentException memo cannot be more than 28 characters");let s=new Ii(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),o=await Fe(i,s),r=vi.decompile(i.message,{addressLookupTableAccounts:o});r.instructions[r.instructions.length-1].keys.push({pubkey:new Ri(Buffer.from(a)),isSigner:!1,isWritable:!1}),i.message=r.compileToV0Message(o)}};import{Asset as xi,BASE_FEE as Wi,Horizon as da,Operation as Fi,Operation as Gi,SorobanRpc as rt,TimeoutInfinite as Zi,TransactionBuilder as pn,TransactionBuilder as pa,contract as kd}from"@stellar/stellar-sdk";import{contract as e}from"@stellar/stellar-sdk";var Mi=e.Spec,ki=e.Client;var ot=class extends ki{constructor(a){super(new Mi(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),a);this.options=a;this.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 Di=100,Ni=180,Xt=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.params=a}async buildChangeTrustLineXdrTx(i){let s=await new da.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(i.sender),r=(await this.getContract(ot,i.tokenAddress).name()).result,[c,m]=r.split(":"),l=new xi(c,m),u=Gi.changeTrust({asset:l,limit:i.limit});return new pa(s,{fee:Di.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(u).setTimeout(Ni).build().toXDR()}async getBalanceLine(i,a){let o=(await this.getContract(ot,a).name()).result,[r,c]=o.split(":"),m=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new da.Server(m).loadAccount(i)).balances.find(p=>(p.asset_type==="credit_alphanum4"||p.asset_type==="credit_alphanum12")&&p.asset_code==r&&p.asset_issuer==c)}async submitTransactionStellar(i){let a=new da.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),s=pa.fromXDR(i,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await a.submitTransaction(s)}async simulateAndCheckRestoreTxRequiredSoroban(i,a){let s=new rt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await s.getAccount(a),r=pn.fromXDR(i,this.params.sorobanNetworkPassphrase),c=await s.simulateTransaction(r);if(rt.Api.isSimulationRestore(c))return new pn(o,{fee:(+Wi+ +c.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(c.restorePreamble.transactionData.build()).addOperation(Fi.restoreFootprint({})).setTimeout(Zi).build().toXDR()}async sendTransactionSoroban(i){let a=new rt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),s=pn.fromXDR(i,this.params.sorobanNetworkPassphrase);return a.sendTransaction(s)}async confirmTx(i,a=15){let s=new rt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await kn(()=>s.getTransaction(i),r=>r.status===rt.Api.GetTransactionStatus.NOT_FOUND,a);return o[o.length-1]}getContract(i,a){let s={contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new i(s)}};var Yt=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.srb=new Xt(i,a),this.sol=new Et(i,a)}};var Ve=(a=>(a.WITH_NATIVE_CURRENCY="native",a.WITH_STABLECOIN="stablecoin",a))(Ve||{}),Bt=(a=>(a.INT="int",a.FLOAT="float",a))(Bt||{});import{Big as Ji}from"big.js";import Ki from"tronweb";import Qi from"web3";import gn from"erc-20-abi";import{Big as ga}from"big.js";var oe=class{async checkAllowance(i){let a=await this.getAllowance(i);return ga(a).gte(ga(i.amount))}};var Ui="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",_i="0xdac17f958d2ee523a2206206994597c13d831ec7",Vi=1e5,At=class extends oe{constructor(a,s){super();this.web3=a;this.api=s;this.chainType="EVM"}getAllowance(a){let s=a.token.tokenAddress,o=a.owner,r=a.spender;return this.getAllowanceByTokenAddress(s,o,r)}getAllowanceByTokenAddress(a,s,o){return this.getContract(gn,a).methods.allowance(s,o).call()}async getTokenBalance(a){return await this.getContract(gn,a.token.tokenAddress).methods.balanceOf(a.account).call()}async getNativeTokenBalance(a){return await this.web3.eth.getBalance(a.account)}async approve(a){if(this.isUsdt(a.tokenAddress)&&await this.getAllowanceByTokenAddress(a.tokenAddress,a.owner,a.spender)!=="0"){let r=await this.buildRawTransactionApprove({...a,amount:"0"});await this.sendRawTransaction(r,a.chainSymbol)}let s=await this.buildRawTransactionApprove(a);return await this.sendRawTransaction(s,a.chainSymbol)}isUsdt(a){return a.toLowerCase()===_i}async buildRawTransactionApprove(a){let{tokenAddress:s,spender:o,owner:r,amount:c}=a,l=await this.getContract(gn,s).methods.approve(o,c==null?Ui:Gt(c));return{from:r,to:s,value:"0",data:l.encodeABI()}}async sendRawTransaction(a,s){let o=a,r={maxPriorityFeePerGas:null,maxFeePerGas:null};s=="POL"?o.gas=Vi:o.gas=await this.web3.eth.estimateGas(a);let{transactionHash:c}=await this.web3.eth.sendTransaction({...o,...r});return{txId:c}}getContract(a,s){return new this.web3.eth.Contract(a,s)}};import{AnchorProvider as Oi}from"@project-serum/anchor";import{Connection as Ei,PublicKey as Lt}from"@solana/web3.js";var Jt=class extends oe{constructor(a,s){super();this.solanaRpcUrl=a;this.api=s;this.chainType="SOLANA"}approve(a){throw new J}buildRawTransactionApprove(a){throw new J}buildAnchorProvider(a){let s=new Ei(this.solanaRpcUrl,"confirmed"),o=new Lt(a);return new Oi(s,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(a){throw new J}async getTokenBalance(a){let{account:s,token:o}=a;try{let r=await ae(new Lt(s),new Lt(o.tokenAddress));return(await Oe(r,this.buildAnchorProvider(s))).amount.toString()}catch(r){if(r instanceof Error)return r.message.startsWith("Account does not exist"),"0";throw r}}async getNativeTokenBalance(a){return(await this.buildAnchorProvider(a.account).connection.getBalance(new Lt(a.account))).toString()}};import{Horizon as ru,NotFoundError as Xi}from"@stellar/stellar-sdk";var Kt=class extends oe{constructor(a,s,o){super();this.nodeRpcUrlsConfig=a;this.params=s;this.api=o;this.chainType="SRB"}getAllowance(){throw new J}async getTokenBalance(a){if(!a.token.originTokenAddress)throw new M("OriginTokenAddress missing");let[s,o]=a.token.originTokenAddress.split(":"),r=new ru.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),c;try{c=await r.loadAccount(a.account)}catch(u){if(u instanceof Xi)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==o);return l?.balance?R(l.balance,N[L[a.token.chainSymbol].chainType]).toFixed():"0"}async getNativeTokenBalance(a){let c=(await new ru.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.account)).balances.find(m=>m.asset_type==="native");return c?.balance?R(c.balance,N[L[a.chainSymbol].chainType]).toFixed():"0"}approve(){throw new J}buildRawTransactionApprove(){throw new J}};var fa=[{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"}];var Li="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",ct=class extends oe{constructor(a,s){super();this.tronWeb=a;this.api=s;this.chainType="TRX"}async getAllowance(a){let{token:{tokenAddress:s},owner:o}=a;return(await(await this.getContract(s)).methods.allowance(o,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 Zt(this.tronWeb,s)}async buildRawTransactionApprove(a){let{tokenAddress:s,spender:o,owner:r,amount:c}=a,m=c==null?Li:Gt(c),l=[{type:"address",value:o},{type:"uint256",value:m}];return this.buildRawTransaction(s,"approve(address,uint256)",l,"0",r)}async getContract(a){return await this.tronWeb.contract(fa,a)}async buildRawTransaction(a,s,o,r,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(a,s,{callValue:r},o,c);if(!m?.result?.result)throw new M("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var Qt=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 k(i.amount),x("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&&(k(a.amount),x("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&&(k(i.amount),x("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,N[L[i.chainSymbol].chainType]).toFixed()}}getChainTokenService(i,a,s){switch(L[i].chainType){case"EVM":{if(s)return new At(s,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new At(new Qi(o),this.api)}}case"TRX":{if(s)return new ct(s,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(i),r=new Ki({fullHost:o});return r.setAddress(a),new ct(r,this.api)}}case"SOLANA":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new Jt(o,this.api)}case"SRB":return new Kt(this.nodeRpcUrlsConfig,this.params,this.api)}}prepareCheckAllowanceParams(i){return{...i,amount:R(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:Ji(i.amount).toFixed()}}};var mt=class{constructor(i){this.nodeRpcUrls=i}getNodeRpcUrl(i){let a=this.nodeRpcUrls[i];if(a!==void 0)return a;throw new ft(i)}},Ht=class{constructor(i,a=ut){let s=new ht(a),o=new Tt(s),r=new Pt(o),c=new wt(r);this.api=new St(c,a),this.tokenService=new Qt(this.api,i,a),this.bridge=new Dt(this.api,i,a,this.tokenService),this.pool=new Ot(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){return(await this.api.getChainDetailsMap(a))[i].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,o){k(i);let r;a=="float"?(x("amount",i,s.decimals),r=R(i,s.decimals).toFixed()):r=i;let c=ue(r,s,await U(this.api,s)),m=await U(this.api,o),l=this.getAmountFromVUsdFormatted(c,o,m),u,d=await this.api.getPendingInfo();for(let p in d[o.chainSymbol])p.toLowerCase()===o.tokenAddress.toLowerCase()&&(u=d[o.chainSymbol][p]);if(u){let p=hn(u.totalSentAmount,m),y=this.getAmountFromVUsdFormatted(c,o,p),b;return ge(y.int).gt(l.int)?b={min:l,max:y}:b={min:y,max:l},{pendingTxs:u.pendingTxs,pendingAmount:{int:we(u.totalSentAmount,3,o.decimals).toFixed(0),float:C(u.totalSentAmount,3).toFixed()},estimatedAmount:b}}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){k(i),x("amountFloat",i,a.decimals);let s=R(i,a.decimals);if(s.eq(0))return 0;let o=ue(s,a,await U(this.api,a)),r=H(o,a.decimals);return jt(s,r)}async calculateFeePercentOnDestinationChain(i,a,s){k(i),x("amountFloat",i,a.decimals);let o=R(i,a.decimals);if(o.eq(0))return 0;let r=ue(o,a,await U(this.api,a)),c=ze(r,s,await U(this.api,s)),m=H(r,s.decimals);return jt(m,c)}async getAmountToBeReceivedAndGasFeeOptions(i,a,s,o){return k(i),x("amountToSendFloat",i,a.decimals),{amountToSendFloat:ge(i).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(i,a,s,o),gasFeeOptions:await this.getGasFeeOptions(a,s,o)}}async getAmountToSendAndGasFeeOptions(i,a,s,o){return k(i),x("amountToBeReceivedFloat",i,s.decimals),{amountToSendFloat:await this.getAmountToSend(i,a,s,o),amountToBeReceivedFloat:ge(i).toFixed(),gasFeeOptions:await this.getGasFeeOptions(a,s,o)}}async getAmountToBeReceived(i,a,s,o){let r=await U(this.api,a),c=await U(this.api,s);return this.getAmountToBeReceivedFromPools(i,a,s,r,c,o)}async getAmountToBeReceivedFromChain(i,a,s,o,r,c){let m=await this.pool.getPoolInfoFromChain(a,r),l=await this.pool.getPoolInfoFromChain(s,c);return this.getAmountToBeReceivedFromPools(i,a,s,m,l,o)}getAmountToBeReceivedFromPools(i,a,s,o,r,c){k(i),x("amountToSendFloat",i,a.decimals);let m=R(i,a.decimals);if(c&&c==3){if(!a.cctpAddress||!s.cctpAddress||!a.cctpFeeShare)throw new ne("Such route does not support CCTP protocol");let u=m.mul(ge(1).minus(a.cctpFeeShare)).round(0,ge.roundUp),d=we(u,a.decimals,s.decimals).round(0);return C(d,s.decimals).toFixed()}let l=ue(m,a,o);return this.getAmountFromVUsdFormatted(l,s,r).float}async getAmountToSend(i,a,s,o){let r=await U(this.api,a),c=await U(this.api,s);return this.getAmountToSendFromPools(i,a,s,r,c,o)}async getAmountToSendFromChain(i,a,s,o,r,c){let m=await this.pool.getPoolInfoFromChain(a,r),l=await this.pool.getPoolInfoFromChain(s,c);return this.getAmountToSendFromPools(i,a,s,m,l,o)}getAmountToSendFromPools(i,a,s,o,r,c){k(i),x("amountToBeReceivedFloat",i,s.decimals);let m=R(i,s.decimals);if(c&&c==3){if(!a.cctpAddress||!s.cctpAddress||!a.cctpFeeShare)throw new ne("Such route does not support CCTP protocol");let d=m.div(ge(1).minus(a.cctpFeeShare)).round(0,ge.roundDown),p=we(d,s.decimals,a.decimals).round(0);return C(p,a.decimals).toFixed()}let l=Tn(m,s,r),u=bn(l,a,o);if(ge(u).lte(0))throw new ye;return C(u,a.decimals).toFixed()}async getGasFeeOptions(i,a,s){return rn(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(o=>({chainSymbol:o.chainSymbol,poolAddress:o.poolAddress}));return this.api.refreshPoolInfo(s)}return this.api.refreshPoolInfo()}aprInPercents(i){return Sn(i)}async getExtraGasMaxLimits(i,a){return await An(i,a,this.api)}async getVUsdFromAmount(i,a,s){k(i);let o;a=="float"?(x("amount",i,s.decimals),o=R(i,s.decimals).toFixed()):o=i;let r=ue(o,s,await U(this.api,s));return{int:r,float:C(r,3).toFixed()}}async getAmountFromVUsd(i,a){return this.getAmountFromVUsdFormatted(i,a,await U(this.api,a))}getAmountFromVUsdFormatted(i,a,s){k(i);let o=ze(i,a,s);if(ge(o).lt(0))throw new ye;return{int:o,float:C(o,a.decimals).toFixed()}}async swapAndBridgeFeeCalculation(i,a,s){return ma(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 o=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)}),r=o.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(ge(r).lt(0))throw new ye;return o}async getSendAmountDetails(i,a,s,o){k(i);let r;return a=="float"?(x("amount",i,s.decimals),r=R(i,s.decimals).toFixed()):r=i,ua(r,s,await U(this.api,s),o,await U(this.api,o))}};function Hi(A){return"solanaRpcUrl"in A}var ya=class{constructor(i,a=ut){let s;Hi(i)?s=new mt({SOL:i.solanaRpcUrl,TRX:i.tronRpcUrl}):s=new mt(i),this.service=new Ht(s,a),this.bridge=this.service.bridge,this.pool=this.service.pool,this.utils=new Yt(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,o){return this.service.getPendingStatusInfo(i,a,s,o)}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,o){return this.service.getAmountToBeReceivedAndGasFeeOptions(i,a,s,o)}async getAmountToSendAndGasFeeOptions(i,a,s,o){return this.service.getAmountToSendAndGasFeeOptions(i,a,s,o)}async getAmountToBeReceived(i,a,s,o){return this.service.getAmountToBeReceived(i,a,s,o)}async getAmountToBeReceivedFromChain(i,a,s,o,r,c){return this.service.getAmountToBeReceivedFromChain(i,a,s,o,r,c)}getAmountToBeReceivedFromPools(i,a,s,o,r,c){return this.service.getAmountToBeReceivedFromPools(i,a,s,o,r,c)}async getAmountToSend(i,a,s,o){return this.service.getAmountToSend(i,a,s,o)}async getAmountToSendFromChain(i,a,s,o,r,c){return this.service.getAmountToSendFromChain(i,a,s,o,r,c)}getAmountToSendFromPools(i,a,s,o,r,c){return this.service.getAmountToSendFromPools(i,a,s,o,r,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,o){return this.service.getSendAmountDetails(i,a,s,o)}};export{qt as AddressStatus,ya as AllbridgeCoreSdk,Bt as AmountFormat,Ge as AmountNotEnoughError,gt as ArgumentInvalidDecimalsError,ne as CCTPDoesNotSupportedError,le as ChainSymbol,D as ChainType,ba as ErrorCode,pt as ExtraGasMaxLimitExceededError,Ve as FeePaymentMethod,ye as InsufficientPoolLiquidityError,dt as InvalidAmountError,Je as InvalidGasFeePaymentOptionError,yn as InvalidMessengerOptionError,Ze as InvalidTxError,V as JupiterError,he as Messenger,J as MethodNotSupportedError,ft as NodeRpcUrlNotInitializedError,M as SdkError,G as SdkRootError,cn as SolanaAutoTxFee,Qe as TimeoutError,yt as TxTooLargeError,Ke as VerifyTxError,ut as mainnet,ts as nodeRpcUrlsDefault,es as nodeUrlsDefault,zi as testnet,qi as testnetNodeRpcUrlsDefault,ji as testnetNodeUrlsDefault};
|
|
6
|
+
&onlyDirectRoutes=true`)}catch(p){throw p instanceof na&&p.response&&p.response.data&&p.response.data.error?new V(p.response.data.error):new V("Cannot get route")}let c;if(o&&r?.data?.inAmount)c=r.data.inAmount;else if(o)throw new V("Cannot get inAmount");let m;try{m=await ta.post(`${this.jupiterUrl}/swap`,{quoteResponse:r.data,userPublicKey:i,wrapAndUnwrapSol:!0})}catch(p){throw p instanceof na&&p.response&&p.response.data&&p.response.data.error?new V(p.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"),d=ja.deserialize(u);return o?{tx:d,amountIn:c}:{tx:d}}async amendJupiterWithSdkTx(i,a){try{let s=await Fe(i,this.connection),o=await Fe(a,this.connection),r=ea.decompile(i.message,{addressLookupTableAccounts:s}),c=ea.decompile(a.message,{addressLookupTableAccounts:o});return c.instructions.shift(),r.instructions.push(...c.instructions),s.push(...o),i.message=r.compileToV0Message(s),a.message.header.numRequiredSignatures===2&&i.signatures.length===1&&i.signatures.push(a.signatures[0]),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 un=1e6,ei=1.1,Wt=class extends ie{constructor(a,s,o){super();this.solanaRpcUrl=a;this.params=s;this.api=o;this.chainType="SOLANA";this.jupiterService=new xt(a,s.jupiterUrl)}async buildRawTransactionSwap(a){let s=Ie(this.chainType,a);return await this.buildSwapTransaction(s,a.sourceToken.poolAddress,a.destinationToken.poolAddress,a.txFeeParams)}async buildSwapTransaction(a,s,o,r){let{fromAccountAddress:c,amount:m,contractAddress:l,fromTokenAddress:u,toTokenAddress:d,toAccountAddress:p,minimumReceiveAmount:h}=a,b=c,T=l,P=u,y=d,f=o,C=p,S=new W(b),_=Be(this.solanaRpcUrl,S.toString()),v=new ln(tt,T,_),B=await Ne(v.programId),K=await Ce(v.programId),Z=new W(P),re=await Ue(Z,v.programId),Ae=new W(s),fe=await ae(S,Z),$=new W(C),Y=new W(y),q=await Ue(Y,v.programId),ee=new W(f),Q=await ae($,Y),ce=[Re.ComputeBudgetProgram.setComputeUnitLimit({units:un})];try{await Oe(Q,_)}catch{let ha=await qa.associatedToken(_).methods.create().accounts({mint:Y,owner:$,associatedAccount:Q}).instruction();ce.push(ha)}let me=await v.methods.swap(new Xe(m),new Xe(h||0)).accounts({payer:S,config:K,bridgeAuthority:B,user:S,sendBridgeToken:re,sendMint:Z,sendPool:Ae,sendUserToken:fe,receiveBridgeToken:q,receiveMint:Y,receivePool:ee,receiveUserToken:Q}).preInstructions(ce).transaction(),te=_.connection;return me.recentBlockhash=(await te.getLatestBlockhash()).blockhash,me.feePayer=S,await Ee(me,r,this.solanaRpcUrl),await this.convertToVersionedTransaction(me,te)}async buildRawTransactionSend(a){let s=await Pe(this.chainType,a,this.api),o=this.addPoolAddress(a,s),r=o.gasFeePaymentMethod=="stablecoin",c;if(r)try{let{tx:u,solTxSendUpdatedParams:d}=await this.processJup(o,a,!0);c=u,o={...o,...d}}catch{try{let{tx:d,solTxSendUpdatedParams:p}=await this.processJup(o,a,!1);c=d,o={...o,...p}}catch(d){throw d instanceof G?d:d instanceof Error&&d.message?new V(`Some error occurred during creation Jupiter swap transaction. ${d.message}`):new V("Some error occurred during creation Jupiter swap transaction")}}let m,l;switch(s.messenger){case 1:{let u=await this.prepareSwapAndBridgeData(o);m=await this.buildSwapAndBridgeAllbridgeTransaction(u);break}case 2:{let u=await this.prepareSwapAndBridgeData(o),{transaction:d,messageAccount:p}=await this.buildSwapAndBridgeWormholeTransaction(u);m=d,l=p;break}case 3:{let u=await this.prepareSwapAndBridgeCctpData(o),{transaction:d,messageSentEventDataKeypair:p}=await this.buildSwapAndBridgeCctpTransaction(a.destinationToken.chainSymbol,u);m=d,l=p;break}}if(r){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,o){let{fee:r,extraGas:c,gasFeePaymentMethod:m}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(s.sourceToken.decimals,a),l=o?pe(r):pe(a.fee);c&&(l=l.plus(c)),o||(l=l.mul(ei));let{tx:u,amountIn:d}=await this.jupiterService.getJupiterSwapTx(s.fromAccountAddress,s.sourceToken.tokenAddress,l.toFixed(0),o),p;if(o){if(!d)throw new V("Cannot get inAmount");p=pe(a.amount).minus(d).toFixed(0)}else p=pe(a.amount).minus(l).toFixed(0);if(pe(p).lte(0))throw new Ge(`Amount not enough to pay fee, ${w(pe(p).minus(1).neg(),s.sourceToken.decimals).toFixed()} stables is missing`);return{tx:u,solTxSendUpdatedParams:{amount:p,fee:r,extraGas:c,gasFeePaymentMethod:m}}}addPoolAddress(a,s){return{...s,poolAddress:a.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(a,s){if(s.gasFeePaymentMethod=="stablecoin"){let o=(await this.api.getReceiveTransactionCost({sourceChainId:s.fromChainId,destinationChainId:s.toChainId,messenger:s.messenger})).sourceNativeTokenPrice,r=pe(s.fee).div(o).mul(pe(10).pow(N.SOLANA-a)).toFixed(0),c;return s.extraGas&&(c=pe(s.extraGas).div(o).mul(pe(10).pow(N.SOLANA-a)).toFixed(0)),{fee:r,extraGas:c,gasFeePaymentMethod:"native"}}return{fee:s.fee,extraGas:s.extraGas,gasFeePaymentMethod:"native"}}getExtraGasInstruction(a,s,o){return Re.SystemProgram.transfer({fromPubkey:s,toPubkey:o,lamports:+a})}async prepareSwapAndBridgeData(a){let{amount:s,contractAddress:o,fromChainId:r,fromAccountAddress:c,fromTokenAddress:m,toChainId:l,toAccountAddress:u,toTokenAddress:d,poolAddress:p,extraGas:h}=a,b=m,T=c,P=l,y=d,f=u,C=o,S=r,_=Be(this.solanaRpcUrl,T),v=new ln(tt,C,_),B=Array.from(_e()),K=new W(p),Z=await Kn(s,v,K),re=await Fn(B,v.programId),Ae=await Ne(v.programId),fe=await ae(new W(T),new W(b)),$=await Ue(new W(b),v.programId),Y=await nn(P,v.programId),q=await Zn(P,Buffer.from(y),v.programId),ee=await Ce(v.programId),Q=await v.account.config.fetch(ee),ce=await je(P,Q.gasOracleProgramId),me=await je(S,Q.gasOracleProgramId),te=Qn({amount:Z,recipient:Buffer.from(f),nonce:Buffer.from(B),receiveToken:Buffer.from(y),destinationChainId:P,sourceChainId:S,chainBridge:(await Ne(v.programId)).toBuffer()}),I={};return I.bridge=v,I.amount=new Xe(s),I.vusdAmount=new Xe(Z),I.nonce=B,I.recipient=Array.from(f),I.receiveToken=Array.from(y),I.poolAccount=K,I.lockAccount=re,I.bridgeAuthority=Ae,I.userToken=fe,I.bridgeTokenAccount=$,I.chainBridgeAccount=Y,I.otherBridgeTokenAccount=q,I.userAccount=new W(T),I.destinationChainId=P,I.mint=new W(b),I.config=ee,I.configAccountInfo=Q,I.gasPrice=ce,I.thisGasPrice=me,I.message=te,h&&(I.extraGasInstruction=this.getExtraGasInstruction(h,I.userAccount,ee)),I}async buildSwapAndBridgeAllbridgeTransaction(a){let{bridge:s,vusdAmount:o,nonce:r,recipient:c,receiveToken:m,poolAccount:l,lockAccount:u,bridgeAuthority:d,userToken:p,bridgeTokenAccount:h,chainBridgeAccount:b,otherBridgeTokenAccount:T,userAccount:P,destinationChainId:y,mint:f,config:C,configAccountInfo:S,gasPrice:_,thisGasPrice:v,message:B,extraGasInstruction:K}=a,Z=S.allbridgeMessengerProgramId,re=await an(y,Z),Ae=await Ce(Z),fe=await Dn(B,Z),$=[];K&&$.push(K);let Y=await s.methods.swapAndBridge({vusdAmount:o,nonce:r,destinationChainId:y,recipient:c,receiveToken:m}).accounts({mint:f,user:P,config:C,lock:u,pool:l,gasPrice:_,thisGasPrice:v,bridgeAuthority:d,userToken:p,bridgeToken:h,chainBridge:b,messenger:Z,messengerGasUsage:re,messengerConfig:Ae,sentMessageAccount:fe,otherBridgeToken:T}).preInstructions([Re.ComputeBudgetProgram.setComputeUnitLimit({units:un})]).postInstructions($).transaction(),q=Be(this.solanaRpcUrl,P.toString()).connection;return Y.recentBlockhash=(await q.getLatestBlockhash()).blockhash,Y.feePayer=P,await this.convertToVersionedTransaction(Y,q)}async convertToVersionedTransaction(a,s){let o=await s.getAddressLookupTable(new W(this.params.solanaLookUpTable)).then(c=>c.value);if(!o)throw new M("Cannot find allbridgeLookupTableAccount");let r=new Re.TransactionMessage({payerKey:a.feePayer,recentBlockhash:a.recentBlockhash,instructions:a.instructions}).compileToV0Message([o]);return new Re.VersionedTransaction(r)}async buildSwapAndBridgeWormholeTransaction(a){let{bridge:s,vusdAmount:o,nonce:r,recipient:c,receiveToken:m,poolAccount:l,lockAccount:u,bridgeAuthority:d,userToken:p,bridgeTokenAccount:h,chainBridgeAccount:b,otherBridgeTokenAccount:T,userAccount:P,destinationChainId:y,mint:f,config:C,configAccountInfo:S,gasPrice:_,thisGasPrice:v,message:B,extraGasInstruction:K}=a,Z=this.params.wormholeMessengerProgramId,[re]=W.findProgramAddressSync([Buffer.from("Bridge")],new W(Z)),[Ae]=W.findProgramAddressSync([Buffer.from("fee_collector")],new W(Z)),[fe]=W.findProgramAddressSync([Buffer.from("Sequence"),d.toBuffer()],new W(Z)),$=await an(y,S.wormholeMessengerProgramId),Y=await Ce(S.wormholeMessengerProgramId),q=aa.generate(),ee=Be(this.solanaRpcUrl,P.toString()),Q=await ee.connection.getAccountInfo(re);if(Q==null)throw new M("Cannot fetch wormhole bridge account info");let ce=new Xe(Q.data.slice(16,24),"le").toString(),me=$a.transfer({fromPubkey:P,toPubkey:Ae,lamports:+ce}),te=[];K&&te.push(K);let I={mint:f,user:P,config:C,lock:u,pool:l,gasPrice:_,thisGasPrice:v,bridgeAuthority:d,userToken:p,bridgeToken:h,chainBridge:b,otherBridgeToken:T,messengerGasUsage:$,wormholeProgram:Z,bridge:re,message:q.publicKey,wormholeMessenger:S.wormholeMessengerProgramId,sequence:fe,feeCollector:Ae,wormholeMessengerConfig:Y,clock:Re.SYSVAR_CLOCK_PUBKEY},lt=await s.methods.swapAndBridgeWormhole({vusdAmount:o,nonce:r,destinationChainId:y,recipient:c,receiveToken:m}).accounts(I).preInstructions([Re.ComputeBudgetProgram.setComputeUnitLimit({units:un}),me]).postInstructions(te).signers([q]).transaction();return lt.recentBlockhash=(await ee.connection.getLatestBlockhash()).blockhash,lt.feePayer=P,{transaction:await this.convertToVersionedTransaction(lt,ee.connection),messageAccount:q}}async prepareSwapAndBridgeCctpData(a){let{contractAddress:s,amount:o,fromAccountAddress:r,fromTokenAddress:c,toChainId:m,toAccountAddress:l,toTokenAddress:u,extraGas:d}=a,p=s;if(!p)throw new ne("Such route does not support CCTP protocol");let h=4,b=r,T=u,P=l,y=Be(this.solanaRpcUrl,b),f=new ln(Jn,p,y),C=new W(c),S=await Nn(C,f.programId),_=new W(b),v=await f.account.cctpBridge.fetch(S),B={};return B.cctpBridge=f,B.cctpBridgeAccount=S,B.cctpAddressAccount=new W(p),B.amount=new Xe(o),B.recipient=Array.from(P),B.receiveToken=Array.from(T),B.userToken=await ae(_,C),B.bridgeAuthority=await Gn(S,f.programId),B.bridgeTokenAccount=await Un(C,f.programId),B.chainBridgeAccount=await nn(m,f.programId),B.userAccount=_,B.destinationChainId=m,B.mint=C,B.gasPrice=await je(m,v.gasOracleProgramId),B.thisGasPrice=await je(h,v.gasOracleProgramId),B.provider=y,d&&(B.extraGasInstruction=this.getExtraGasInstruction(d,B.userAccount,S)),B}async buildSwapAndBridgeCctpTransaction(a,s){let{cctpBridge:o,cctpBridgeAccount:r,amount:c,recipient:m,receiveToken:l,bridgeAuthority:u,userToken:d,bridgeTokenAccount:p,chainBridgeAccount:h,userAccount:b,destinationChainId:T,mint:P,gasPrice:y,thisGasPrice:f,extraGasInstruction:C,provider:S}=s,_=this.params.cctpParams.cctpDomains[a],v=this.params.cctpParams.cctpTransmitterProgramId,B=this.params.cctpParams.cctpTokenMessengerMinter;if(_==null||!v||!B)throw new M("CCTP is not configured");let K=new W(v),Z=new W(B),{messageTransmitterAccount:re,tokenMessenger:Ae,tokenMessengerEventAuthority:fe,tokenMinter:$,localToken:Y,remoteTokenMessengerKey:q,authorityPda:ee}=Vn(_,P,K,Z),Q=[];C&&Q.push(C);let ce=aa.generate(),me=_n(o.programId,ce.publicKey),te=await o.methods.bridge({amount:c,destinationChainId:T,recipient:m,receiveToken:l}).accounts({mint:P,user:b,cctpBridge:r,messageSentEventData:ce.publicKey,lock:me,cctpMessenger:Z,messageTransmitterProgram:K,messageTransmitterAccount:re,tokenMessenger:Ae,tokenMinter:$,localToken:Y,remoteTokenMessengerKey:q,authorityPda:ee,eventAuthority:fe,bridgeToken:p,gasPrice:y,thisGasPrice:f,chainBridge:h,userToken:d,bridgeAuthority:u}).preInstructions([Re.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(Q).transaction(),I=S.connection;return te.recentBlockhash=(await I.getLatestBlockhash()).blockhash,te.feePayer=b,{transaction:await this.convertToVersionedTransaction(te,I),messageSentEventDataKeypair:ce}}send(a){throw new J}};import{Address as dn,contract as vd}from"@stellar/stellar-sdk";import{Big as ai}from"big.js";import{contract as n}from"@stellar/stellar-sdk";var ti=n.Spec,ni=n.Client;var nt=class extends ni{constructor(a){super(new ti(["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;this.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 Ft=class extends ie{constructor(a,s,o){super();this.nodeRpcUrlsConfig=a;this.params=s;this.api=o;this.chainType="SRB"}async buildRawTransactionSend(a){let s=await Pe(this.chainType,a,this.api);return await this.buildRawTransactionSendFromParams(s)}async buildRawTransactionSendFromParams(a){let{amount:s,contractAddress:o,fromAccountAddress:r,fromTokenAddress:c,toChainId:m,toAccountAddress:l,toTokenAddress:u,fee:d,gasFeePaymentMethod:p,extraGas:h}=a,b=d;h&&(b=ai(b).plus(h).toFixed());let T=this.getContract(nt,o,r),P;return p==="stablecoin"?P=await T.swap_and_bridge({sender:r,token:dn.contract(Buffer.from(c)).toString(),amount:BigInt(s),recipient:Buffer.from(l),destination_chain_id:+m,receive_token:Buffer.from(u),nonce:on(),gas_amount:BigInt(0),fee_token_amount:BigInt(b)}):P=await T.swap_and_bridge({sender:r,token:dn.contract(Buffer.from(c)).toString(),amount:BigInt(s),recipient:Buffer.from(l),destination_chain_id:+m,receive_token:Buffer.from(u),nonce:on(),gas_amount:BigInt(b),fee_token_amount:BigInt(0)}),P.toXDR()}async buildRawTransactionSwap(a){let s=Ie(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s)}async buildRawTransactionSwapFromParams(a){let{amount:s,contractAddress:o,fromAccountAddress:r,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:l,minimumReceiveAmount:u}=a;return(await this.getContract(nt,o,r).swap({sender:r,amount:BigInt(s),token:dn.contract(Buffer.from(c)).toBuffer(),receive_token:Buffer.from(l),recipient:m,receive_amount_min:BigInt(u)})).toXDR()}send(a){throw new J}getContract(a,s,o){let r={publicKey:o,contractId:s,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(r)}};import{Big as oi}from"big.js";import ii from"bn.js";function Gt(A){return"0x"+new ii(A).toString("hex")}function ia(A){return new Promise(i=>setTimeout(()=>i(),A))}var Ye=A=>(...i)=>new Promise((a,s)=>A(...i,(o,r)=>o?s(o):a(r)));async function Zt(A,i){let a=await A.trx.sign(i);if(!a.signature)throw new Ze("Transaction was not signed properly");let o=(await A.trx.sendRawTransaction(a)).txid;return await si(A,o),{txId:o}}async function si(A,i,a=1e4){let s=Date.now();for(;;){if(Date.now()-s>a)throw new Ke("Transaction not found");let o=await A.trx.getUnconfirmedTransactionInfo(i);if(!o?.receipt){await ia(2e3);continue}if(o.receipt.result==="SUCCESS")return o;throw new Ke(`Transaction status is ${o.receipt.result}`)}}var at=class extends ie{constructor(a,s){super();this.tronWeb=a;this.api=s;this.chainType="TRX"}async send(a){let s=await Pe(this.chainType,a,this.api),o=await this.buildRawTransactionSendFromParams(s);return await Zt(this.tronWeb,o)}async buildRawTransactionSwap(a){let s=Ie(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s)}async buildRawTransactionSwapFromParams(a){let{amount:s,contractAddress:o,fromAccountAddress:r,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:l,minimumReceiveAmount:u}=a,d=[{type:"uint256",value:s},{type:"bytes32",value:c},{type:"bytes32",value:l},{type:"address",value:m},{type:"uint256",value:u}];return this.buildRawTransaction(o,"swap(uint256,bytes32,bytes32,address,uint256)",d,"0",r)}async buildRawTransactionSend(a){let s=await Pe(this.chainType,a,this.api);return this.buildRawTransactionSendFromParams(s)}async buildRawTransactionSendFromParams(a){let{amount:s,contractAddress:o,fromAccountAddress:r,fromTokenAddress:c,toChainId:m,toAccountAddress:l,toTokenAddress:u,messenger:d,fee:p,gasFeePaymentMethod:h,extraGas:b}=a,T=p;b&&(T=oi(T).plus(b).toFixed());let P=_e().toJSON().data,y,f,C;return d==3?(h==="stablecoin"?(y=[{type:"uint256",value:s},{type:"bytes32",value:l},{type:"uint256",value:m},{type:"uint256",value:T}],f="0"):(y=[{type:"uint256",value:s},{type:"bytes32",value:l},{type:"uint256",value:m},{type:"uint256",value:0}],f=T),C="bridge(uint256,bytes32,uint256,uint256)"):(h==="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:P},{type:"uint8",value:d},{type:"uint256",value:T}],f="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:P},{type:"uint8",value:d},{type:"uint256",value:0}],f=T),C="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)"),this.buildRawTransaction(o,C,y,f,r)}async buildRawTransaction(a,s,o,r,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(a,s,{callValue:r},o,c);if(!m?.result?.result)throw new M("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var Dt=class{constructor(i,a,s,o){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=o;this.rawTxBuilder=new Rt(i,a,s,o)}async getAllowance(i,a){let s,o;a?(s=i,o=a):o=i;let r=et(o.token,o.messenger);return await this.tokenService.getAllowance({...o,spender:r},s)}async checkAllowance(i,a){let s,o;a?(s=i,o=a):o=i;let r=et(o.token,o.messenger);return this.tokenService.checkAllowance({...o,spender:r},s)}async approve(i,a){let s=et(a.token,a.messenger);return this.tokenService.approve(i,{...a,spender:s})}async send(i,a){return k(a.amount),x("amount",a.amount,a.sourceToken.decimals),vt(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).send(a)}};function et(A,i){if(i&&i==3){if(A.cctpAddress)return A.cctpAddress;throw new ne("Such route does not support CCTP protocol")}else return A.bridgeAddress}function vt(A,i,a,s,o){switch(L[A].chainType){case"EVM":{if(o)return new $e(o,i,a);{let r=a.getNodeRpcUrl(A);return new $e(new Ai(r),i,a)}}case"TRX":{if(o)return new at(o,i);{let r=a.getNodeRpcUrl(A);return new at(new ri({fullHost:r}),i)}}case"SOLANA":return new Wt(a.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:s.wormholeMessengerProgramId,solanaLookUpTable:s.solanaLookUpTable,cctpParams:s.cctpParams,jupiterUrl:s.jupiterUrl},i);case"SRB":return new Ft(a,s,i)}}import{Big as hi}from"big.js";import bi from"timed-cache";import Ti from"tronweb";import Pi from"web3";import{Big as Se}from"big.js";function sa(A,i,a,s,o){let r=R(A,3),c=Se(r),m=Se(a),l=Se(s).plus(o),u,d;if(m.eq(0)||l.eq(0)){let h=c.div(2);u=Se(s).plus(h),d=Se(o).plus(h)}else u=Se(s).plus(c.mul(s).div(l)),d=Se(o).plus(c.mul(o).div(l));return Se(wn(i,u.toFixed(),d.toFixed())).minus(m).toFixed()}function oa(A){let i=R(A,3);return Se(i).round().toFixed()}var ve=[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];var j=class{constructor(i){this.lpAmount=i.lpAmount,this.rewardDebt=i.rewardDebt}get userLiquidity(){return w(this.lpAmount,3).toFixed()}earned(i,a){let s=Pn(this.lpAmount,this.rewardDebt,i.accRewardPerShareP,i.p);return a?w(s,a).toFixed():s}};var se=class{};var it=class extends se{constructor(a,s){super();this.web3=a;this.api=s;this.chainType="EVM";this.P=52}async getUserBalanceInfo(a,s){let o;try{o=await Ct(this.getUserBalanceInfoByBatch(a,s),`Cannot get UserBalanceInfo for ${s.name} on ${s.chainSymbol}`,5e3)}catch{o=await tn(()=>this.getUserBalanceInfoPerProperty(a,s),`Cannot get UserBalanceInfo for ${s.name} on ${s.chainSymbol}`,5,2e3)}return o}async getUserBalanceInfoByBatch(a,s){let o=new this.web3.BatchRequest,r=new this.web3.eth.Contract(ve,s.poolAddress),c=["userRewardDebt","balanceOf"].map(u=>Ye(d=>o.add(r.methods[u](a).call.request({},d)))());o.execute();let[m,l]=await Promise.all(c);return new j({lpAmount:l,rewardDebt:m})}async getUserBalanceInfoPerProperty(a,s){let o=await this.getPoolContract(s.poolAddress).methods.userRewardDebt(a).call(),r=await this.getPoolContract(s.poolAddress).methods.balanceOf(a).call();return new j({lpAmount:r,rewardDebt:o})}async getPoolInfoFromChain(a){let s;try{s=await Ct(this.getPoolInfoByBatch(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5e3)}catch{s=await tn(()=>this.getPoolInfoPerProperty(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5,2e3)}return s}async getPoolInfoByBatch(a){let s=new this.web3.BatchRequest,o=new this.web3.eth.Contract(ve,a.poolAddress),r=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(P=>Ye(y=>s.add(o.methods[P]().call.request({},y)))());s.execute();let[c,m,l,u,d,p]=await Promise.all(r),h=l.toString(),b=u.toString(),T=z({tokenBalance:h,vUsdBalance:b});return{aValue:c.toString(),dValue:m.toString(),tokenBalance:h,vUsdBalance:b,totalLpAmount:d.toString(),accRewardPerShareP:p.toString(),p:this.P,imbalance:T}}async getPoolInfoPerProperty(a){let s=this.getPoolContract(a.poolAddress),o=await s.methods.a().call(),r=await s.methods.d().call(),c=await s.methods.tokenBalance().call(),m=await s.methods.vUsdBalance().call(),l=await s.methods.totalSupply().call(),u=await s.methods.accRewardPerShareP().call(),d=z({tokenBalance:c,vUsdBalance:m});return{aValue:o,dValue:r,tokenBalance:c,vUsdBalance:m,totalLpAmount:l,accRewardPerShareP:u,p:this.P,imbalance:d}}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"}}getContract(a,s){return new this.web3.eth.Contract(a,s)}getPoolContract(a){return this.getContract(ve,a)}};var Nt=class{constructor(i,a,s,o){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=o}async approve(i,a){if(a){let s=i,o=a;return this.tokenService.buildRawTransactionApprove({...o,spender:o.token.poolAddress},s)}else{let s=i;return this.tokenService.buildRawTransactionApprove({...s,spender:s.token.poolAddress})}}async deposit(i,a){return k(i.amount),x("amount",i.amount,i.token.decimals),i.amount=R(i.amount,i.token.decimals).toFixed(),Le(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionDeposit(i)}async withdraw(i,a){return k(i.amount),x("amount",i.amount,i.token.decimals),i.amount=R(i.amount,3).toFixed(),Le(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionWithdraw(i)}async claimRewards(i,a){return Le(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionClaimRewards(i)}};import{AnchorProvider as mi,BN as ra,Program as li,Spl as ui,web3 as di}from"@project-serum/anchor";import{Connection as pi,PublicKey as Me}from"@solana/web3.js";var Ut=class extends se{constructor(a,s){super();this.solanaRpcUrl=a;this.api=s;this.chainType="SOLANA";this.P=48}async getUserBalanceInfo(a,s){let o=this.buildAnchorProvider(a),r=this.getBridge(s.bridgeAddress,o),c=new Me(s.poolAddress),m=await r.account.pool.fetch(c);try{let l=await sn(new Me(a),m.mint,r.programId),{lpAmount:u,rewardDebt:d}=await r.account.userDeposit.fetch(l);return new j({lpAmount:u.toString(),rewardDebt:d.toString()})}catch{return new j({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(a){let s=this.buildAnchorProvider(a.bridgeAddress),o=await this.getBridge(a.bridgeAddress,s).account.pool.fetch(a.poolAddress),r=o.vUsdBalance.toString(),c=o.tokenBalance.toString(),m=z({tokenBalance:c,vUsdBalance:r});return{dValue:o.d.toString(),aValue:o.a.toString(),totalLpAmount:o.totalLpAmount.toString(),vUsdBalance:r,tokenBalance:c,accRewardPerShareP:o.accRewardPerShareP.toString(),p:this.P,imbalance:m}}async buildRawTransactionDeposit(a){let{bridge:s,accounts:o,preInstructions:r}=await this.prepareDataForTransaction(a),c=await s.methods.deposit(new ra(a.amount)).accounts(o).preInstructions(r).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new Me(a.accountAddress),await Ee(c,a.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionWithdraw(a){let{bridge:s,accounts:o,preInstructions:r}=await this.prepareDataForTransaction(a),c=await s.methods.withdraw(new ra(a.amount)).accounts(o).preInstructions(r).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new Me(a.accountAddress),await Ee(c,a.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionClaimRewards(a){let{bridge:s,accounts:o,preInstructions:r}=await this.prepareDataForTransaction(a),c=await s.methods.claimRewards().accounts(o).preInstructions(r).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new Me(a.accountAddress),await Ee(c,a.txFeeParams,this.solanaRpcUrl),c}async prepareDataForTransaction(a){let s=this.buildAnchorProvider(a.accountAddress),o=this.getBridge(a.token.bridgeAddress,s),{accounts:r,preInstructions:c}=await this._getLPTransactionData(o,a.token.poolAddress,a.accountAddress,s);return{bridge:o,accounts:r,preInstructions:c}}getBridge(a,s){return new li(tt,a,s)}buildAnchorProvider(a){let s=new pi(this.solanaRpcUrl,"confirmed"),o=new Me(a);return new mi(s,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(a,s,o,r){let c=new Me(o),m=await Ce(a.programId),l=await Ne(a.programId),u=new Me(s),p=(await a.account.pool.fetch(u)).mint,h=await ae(c,p),b=await Ue(p,a.programId),T=await sn(c,p,a.programId),P=[di.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await Oe(h,r)}catch{let S=await ui.associatedToken(r).methods.create().accounts({mint:p,owner:c,associatedAccount:h}).instruction();P.push(S)}try{await a.account.userDeposit.fetch(T)}catch{let C=await a.methods.initDepositAccount().accounts({mint:p,user:c,userDeposit:T}).instruction();P.push(C)}return{accounts:{mint:p,user:c,config:m,pool:u,bridgeAuthority:l,userDeposit:T,userToken:h,bridgeToken:b},preInstructions:P}}};import{contract as Md}from"@stellar/stellar-sdk";import{contract as t}from"@stellar/stellar-sdk";var gi=t.Spec,fi=t.Client;var _t=class extends fi{constructor(a){super(new gi(["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;this.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 Vt=class extends se{constructor(a,s,o){super();this.nodeRpcUrlsConfig=a;this.params=s;this.api=o;this.chainType="SRB";this.P=48}async getUserBalanceInfo(a,s){let r=(await this.getContract(s.poolAddress).get_user_deposit({user:a})).result;if(r.isErr())throw new M;let c=r.unwrap();return new j({lpAmount:c.lp_amount.toString(),rewardDebt:c.reward_debt.toString()})}async getPoolInfoFromChain(a){let o=(await this.getContract(a.poolAddress).get_pool()).result;if(o.isErr())throw new M;let r=o.unwrap();return{aValue:r.a.toString(),accRewardPerShareP:r.acc_reward_per_share_p.toString(),dValue:r.d.toString(),tokenBalance:r.token_balance.toString(),p:this.P,totalLpAmount:r.total_lp_amount.toString(),vUsdBalance:r.v_usd_balance.toString(),imbalance:z({tokenBalance:r.token_balance.toString(),vUsdBalance:r.v_usd_balance.toString()})}}async buildRawTransactionDeposit(a){let s=this.getContract(a.token.poolAddress,a.accountAddress);return console.log("sender",a.accountAddress),console.log("poolAddress",a.token.poolAddress),(await s.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 o={publicKey:s,contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new _t(o)}};import yi from"web3";var st=class extends se{constructor(a,s,o){super();this.tronWeb=a;this.api=s;this.chainType="TRX";this.P=52;o&&(this.web3=new yi(o))}async getUserBalanceInfo(a,s){let o;if(this.web3)try{o=await this.getUserBalanceInfoByBatch(this.web3,a,s)}catch{o=await this.getUserBalanceInfoPerProperty(a,s)}else o=await this.getUserBalanceInfoPerProperty(a,s);return o}async getUserBalanceInfoByBatch(a,s,o){let r=new a.BatchRequest,c=new a.eth.Contract(ve,qe(o.poolAddress)),m=qe(s),l=["userRewardDebt","balanceOf"].map(p=>Ye(h=>r.add(c.methods[p](m).call.request({},h)))());r.execute();let[u,d]=await Promise.all(l);return new j({lpAmount:d,rewardDebt:u})}async getUserBalanceInfoPerProperty(a,s){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a);let o=await this.getContract(s.poolAddress),r=(await o.methods.userRewardDebt(a).call()).toString(),c=(await o.methods.balanceOf(a).call()).toString();return new j({lpAmount:c,rewardDebt:r})}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 o=new a.BatchRequest,r=new a.eth.Contract(ve,qe(s.poolAddress)),c=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(y=>Ye(f=>o.add(r.methods[y]().call.request({},f)))());o.execute();let[m,l,u,d,p,h]=await Promise.all(c),b=u.toString(),T=d.toString(),P=z({tokenBalance:b,vUsdBalance:T});return{aValue:m.toString(),dValue:l.toString(),tokenBalance:b,vUsdBalance:T,totalLpAmount:p.toString(),accRewardPerShareP:h.toString(),p:this.P,imbalance:P}}async getPoolInfoPerProperty(a){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a.poolAddress);let s=await this.getContract(a.poolAddress),[o,r,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()]),d=c.toString(),p=m.toString(),h=z({tokenBalance:d,vUsdBalance:p});return{aValue:o.toString(),dValue:r.toString(),tokenBalance:d,vUsdBalance:p,totalLpAmount:l.toString(),accRewardPerShareP:u.toString(),p:this.P,imbalance:h}}buildRawTransactionDeposit(a){let{amount:s,accountAddress:o}=a,r=[{type:"uint256",value:s}];return this.buildRawTransaction(a.token.poolAddress,"deposit(uint256)",r,"0",o)}buildRawTransactionWithdraw(a){let{amount:s,accountAddress:o}=a,r=[{type:"uint256",value:s}];return this.buildRawTransaction(a.token.poolAddress,"withdraw(uint256)",r,"0",o)}buildRawTransactionClaimRewards(a){let{accountAddress:s}=a,o=[];return this.buildRawTransaction(a.token.poolAddress,"claimRewards()",o,"0",s)}async buildRawTransaction(a,s,o,r,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(a,s,{callValue:r},o,c);if(!m?.result?.result)throw new M("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}async getContract(a){return await this.tronWeb.contract(ve,a)}};var Ot=class{constructor(i,a,s,o){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=o;this.rawTxBuilder=new Nt(i,a,this.params,o);let r=s.cachePoolInfoChainSec>0?s.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new bi({defaultTtl:r})}async getAllowance(i,a){if(a){let s=i,o=a;return await this.tokenService.getAllowance({...o,spender:o.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,o=a;return this.tokenService.checkAllowance({...o,spender:o.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){k(i),x("amount",i,a.decimals);let o=await this.getPoolInfoFromChain(a,s),{vUsdBalance:r,tokenBalance:c,aValue:m,dValue:l}=o,u=sa(i,m,l,c,r);return w(u,3).toFixed()}async getAmountToBeWithdrawn(i,a,s,o){k(i),x("amount",i,s.decimals);let r=await this.getPoolInfoFromChain(s,o),c=oa(i),m=H(c,s.decimals),u=(await this.getUserBalanceInfo(a,s,o)).earned(r)||"0",d=hi(m).plus(u).toFixed();return w(d,s.decimals).toFixed()}async getUserBalanceInfo(i,a,s){return Le(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,s).getUserBalanceInfo(i,a)}async getPoolInfoFromChain(i,a){let s={chainSymbol:i.chainSymbol,poolAddress:i.poolAddress},o=this.cache.get(s);if(o)return o;{let r=await Le(i.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).getPoolInfoFromChain(i);return this.cache.put(s,r),this.api.cachePut({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress},r),r}}};function Le(A,i,a,s,o){switch(L[A].chainType){case"EVM":{if(o)return new it(o,i);{let r=a.getNodeRpcUrl(A);return new it(new Pi(r),i)}}case"TRX":{let r=a.getNodeRpcUrl(A),c=s.tronJsonRpc;if(o)return new st(o,i,c);{let m=new Ti({fullHost:r});return new st(m,i,c)}}case"SOLANA":{let r=a.getNodeRpcUrl(A);return new Ut(r,i)}case"SRB":return new Vt(a,s,i)}}import{Big as F}from"big.js";function ma(A,i,a){let s=Si(A,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo),o=wi(s.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:s,swapFromVUsdCalcResult:o}}function la(A,i,a){let s=Ci(A,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),o=Bi(s.amountIncludingCommissionInSystemPrecision,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo);return{swapToVUsdCalcResult:s,swapFromVUsdCalcResult:o}}function Si(A,{feeShare:i,decimals:a},s){let o=F(A),r=o.times(i),c=o.minus(r);return{bridgeFeeInTokenPrecision:r.round().toFixed(),amountIncludingCommissionInSystemPrecision:Aa(xe(c,a),s),amountExcludingCommissionInSystemPrecision:Aa(xe(o,a),s)}}function Aa(A,i){if(A.eq(0))return"0";let a=F(i.tokenBalance).plus(A),s=de(a.toFixed(),i.aValue,i.dValue);return F(i.vUsdBalance).minus(s).round().toFixed()}function wi(A,{feeShare:i,decimals:a},s){if(F(A).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let r=F(A).plus(s.vUsdBalance),c=de(r,s.aValue,s.dValue),m=H(F(s.tokenBalance).minus(c),a),l=F(m).times(i),u=F(m).minus(l).round();return{bridgeFeeInTokenPrecision:l.round().toFixed(),amountIncludingCommissionInTokenPrecision:u.toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}function Ci(A,{feeShare:i,decimals:a},s){let o=F(i).div(F(1).minus(i)),r=F(A).times(o),c=F(A).plus(r);return{bridgeFeeInTokenPrecision:r.round().toFixed(),amountIncludingCommissionInSystemPrecision:ca(xe(c,a),s),amountExcludingCommissionInSystemPrecision:ca(xe(A,a),s)}}function ca(A,i){let a=F(i.tokenBalance).minus(A),s=de(a.toFixed(),i.aValue,i.dValue);return F(s).minus(i.vUsdBalance).round().toFixed()}function Bi(A,{feeShare:i,decimals:a},s){if(F(A).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let o=F(s.vUsdBalance).minus(A),r=de(o.toFixed(),s.aValue,s.dValue),c=F(r).minus(s.tokenBalance),m=H(c.toFixed(),a),l=F(i).div(F(1).minus(i)),u=F(m).times(l),d=F(m).plus(u);return{bridgeFeeInTokenPrecision:u.round().toFixed(),amountIncludingCommissionInTokenPrecision:d.round().toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}import{Big as ke}from"big.js";function ua(A,i,a,s,o){let r=ue(A,i,a),c=H(r,i.decimals),m=ze(r,s,o),l=ke(A).times(i.feeShare),u=ke(m).div(ke(1).minus(s.feeShare)).minus(m);return{sourceLPSwap:{fee:w(l,i.decimals).neg().round(i.decimals,ke.roundUp).toFixed(),swap:w(ke(A).minus(c).minus(l),i.decimals).neg().round(i.decimals,ke.roundUp).toFixed()},destLPSwap:{fee:w(u,s.decimals).neg().round(s.decimals,ke.roundUp).toFixed(),swap:w(H(r,s.decimals).minus(m).minus(u),s.decimals).neg().round(s.decimals,ke.roundUp).toFixed()}}}import{Connection as Ii,PublicKey as Ri,TransactionMessage as vi}from"@solana/web3.js";var Et=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.params=a}async addMemoToTx(i,a){if(a.length>28)throw new M("InvalidArgumentException memo cannot be more than 28 characters");let s=new Ii(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),o=await Fe(i,s),r=vi.decompile(i.message,{addressLookupTableAccounts:o});r.instructions[r.instructions.length-1].keys.push({pubkey:new Ri(Buffer.from(a)),isSigner:!1,isWritable:!1}),i.message=r.compileToV0Message(o)}};import{Asset as xi,BASE_FEE as Wi,Horizon as da,Operation as Fi,Operation as Gi,SorobanRpc as rt,TimeoutInfinite as Zi,TransactionBuilder as pn,TransactionBuilder as pa,contract as kd}from"@stellar/stellar-sdk";import{contract as e}from"@stellar/stellar-sdk";var Mi=e.Spec,ki=e.Client;var ot=class extends ki{constructor(a){super(new Mi(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),a);this.options=a;this.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 Di=100,Ni=180,Xt=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.params=a}async buildChangeTrustLineXdrTx(i){let s=await new da.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(i.sender),r=(await this.getContract(ot,i.tokenAddress).name()).result,[c,m]=r.split(":"),l=new xi(c,m),u=Gi.changeTrust({asset:l,limit:i.limit});return new pa(s,{fee:Di.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(u).setTimeout(Ni).build().toXDR()}async getBalanceLine(i,a){let o=(await this.getContract(ot,a).name()).result,[r,c]=o.split(":"),m=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new da.Server(m).loadAccount(i)).balances.find(p=>(p.asset_type==="credit_alphanum4"||p.asset_type==="credit_alphanum12")&&p.asset_code==r&&p.asset_issuer==c)}async submitTransactionStellar(i){let a=new da.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),s=pa.fromXDR(i,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await a.submitTransaction(s)}async simulateAndCheckRestoreTxRequiredSoroban(i,a){let s=new rt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await s.getAccount(a),r=pn.fromXDR(i,this.params.sorobanNetworkPassphrase),c=await s.simulateTransaction(r);if(rt.Api.isSimulationRestore(c))return new pn(o,{fee:(+Wi+ +c.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(c.restorePreamble.transactionData.build()).addOperation(Fi.restoreFootprint({})).setTimeout(Zi).build().toXDR()}async sendTransactionSoroban(i){let a=new rt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),s=pn.fromXDR(i,this.params.sorobanNetworkPassphrase);return a.sendTransaction(s)}async confirmTx(i,a=15){let s=new rt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await kn(()=>s.getTransaction(i),r=>r.status===rt.Api.GetTransactionStatus.NOT_FOUND,a);return o[o.length-1]}getContract(i,a){let s={contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new i(s)}};var Yt=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.srb=new Xt(i,a),this.sol=new Et(i,a)}};var Ve=(a=>(a.WITH_NATIVE_CURRENCY="native",a.WITH_STABLECOIN="stablecoin",a))(Ve||{}),Bt=(a=>(a.INT="int",a.FLOAT="float",a))(Bt||{});import{Big as Ji}from"big.js";import Ki from"tronweb";import Qi from"web3";import gn from"erc-20-abi";import{Big as ga}from"big.js";var oe=class{async checkAllowance(i){let a=await this.getAllowance(i);return ga(a).gte(ga(i.amount))}};var Ui="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",_i="0xdac17f958d2ee523a2206206994597c13d831ec7",Vi=1e5,At=class extends oe{constructor(a,s){super();this.web3=a;this.api=s;this.chainType="EVM"}getAllowance(a){let s=a.token.tokenAddress,o=a.owner,r=a.spender;return this.getAllowanceByTokenAddress(s,o,r)}getAllowanceByTokenAddress(a,s,o){return this.getContract(gn,a).methods.allowance(s,o).call()}async getTokenBalance(a){return await this.getContract(gn,a.token.tokenAddress).methods.balanceOf(a.account).call()}async getNativeTokenBalance(a){return await this.web3.eth.getBalance(a.account)}async approve(a){if(this.isUsdt(a.tokenAddress)&&await this.getAllowanceByTokenAddress(a.tokenAddress,a.owner,a.spender)!=="0"){let r=await this.buildRawTransactionApprove({...a,amount:"0"});await this.sendRawTransaction(r,a.chainSymbol)}let s=await this.buildRawTransactionApprove(a);return await this.sendRawTransaction(s,a.chainSymbol)}isUsdt(a){return a.toLowerCase()===_i}async buildRawTransactionApprove(a){let{tokenAddress:s,spender:o,owner:r,amount:c}=a,l=await this.getContract(gn,s).methods.approve(o,c==null?Ui:Gt(c));return{from:r,to:s,value:"0",data:l.encodeABI()}}async sendRawTransaction(a,s){let o=a,r={maxPriorityFeePerGas:null,maxFeePerGas:null};s=="POL"?o.gas=Vi:o.gas=await this.web3.eth.estimateGas(a);let{transactionHash:c}=await this.web3.eth.sendTransaction({...o,...r});return{txId:c}}getContract(a,s){return new this.web3.eth.Contract(a,s)}};import{AnchorProvider as Oi}from"@project-serum/anchor";import{Connection as Ei,PublicKey as Lt}from"@solana/web3.js";var Jt=class extends oe{constructor(a,s){super();this.solanaRpcUrl=a;this.api=s;this.chainType="SOLANA"}approve(a){throw new J}buildRawTransactionApprove(a){throw new J}buildAnchorProvider(a){let s=new Ei(this.solanaRpcUrl,"confirmed"),o=new Lt(a);return new Oi(s,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(a){throw new J}async getTokenBalance(a){let{account:s,token:o}=a;try{let r=await ae(new Lt(s),new Lt(o.tokenAddress));return(await Oe(r,this.buildAnchorProvider(s))).amount.toString()}catch(r){if(r instanceof Error)return r.message.startsWith("Account does not exist"),"0";throw r}}async getNativeTokenBalance(a){return(await this.buildAnchorProvider(a.account).connection.getBalance(new Lt(a.account))).toString()}};import{Horizon as ru,NotFoundError as Xi}from"@stellar/stellar-sdk";var Kt=class extends oe{constructor(a,s,o){super();this.nodeRpcUrlsConfig=a;this.params=s;this.api=o;this.chainType="SRB"}getAllowance(){throw new J}async getTokenBalance(a){if(!a.token.originTokenAddress)throw new M("OriginTokenAddress missing");let[s,o]=a.token.originTokenAddress.split(":"),r=new ru.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),c;try{c=await r.loadAccount(a.account)}catch(u){if(u instanceof Xi)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==o);return l?.balance?R(l.balance,N[L[a.token.chainSymbol].chainType]).toFixed():"0"}async getNativeTokenBalance(a){let c=(await new ru.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.account)).balances.find(m=>m.asset_type==="native");return c?.balance?R(c.balance,N[L[a.chainSymbol].chainType]).toFixed():"0"}approve(){throw new J}buildRawTransactionApprove(){throw new J}};var fa=[{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"}];var Li="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",ct=class extends oe{constructor(a,s){super();this.tronWeb=a;this.api=s;this.chainType="TRX"}async getAllowance(a){let{token:{tokenAddress:s},owner:o}=a;return(await(await this.getContract(s)).methods.allowance(o,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 Zt(this.tronWeb,s)}async buildRawTransactionApprove(a){let{tokenAddress:s,spender:o,owner:r,amount:c}=a,m=c==null?Li:Gt(c),l=[{type:"address",value:o},{type:"uint256",value:m}];return this.buildRawTransaction(s,"approve(address,uint256)",l,"0",r)}async getContract(a){return await this.tronWeb.contract(fa,a)}async buildRawTransaction(a,s,o,r,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(a,s,{callValue:r},o,c);if(!m?.result?.result)throw new M("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var Qt=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 w(s,i.token.decimals).toFixed()}async checkAllowance(i,a){return k(i.amount),x("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&&(k(a.amount),x("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&&(k(i.amount),x("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?w(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:w(s,N[L[i.chainSymbol].chainType]).toFixed()}}getChainTokenService(i,a,s){switch(L[i].chainType){case"EVM":{if(s)return new At(s,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new At(new Qi(o),this.api)}}case"TRX":{if(s)return new ct(s,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(i),r=new Ki({fullHost:o});return r.setAddress(a),new ct(r,this.api)}}case"SOLANA":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new Jt(o,this.api)}case"SRB":return new Kt(this.nodeRpcUrlsConfig,this.params,this.api)}}prepareCheckAllowanceParams(i){return{...i,amount:R(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:Ji(i.amount).toFixed()}}};var mt=class{constructor(i){this.nodeRpcUrls=i}getNodeRpcUrl(i){let a=this.nodeRpcUrls[i];if(a!==void 0)return a;throw new ft(i)}},Ht=class{constructor(i,a=ut){let s=new ht(a),o=new Tt(s),r=new Pt(o),c=new wt(r);this.api=new St(c,a),this.tokenService=new Qt(this.api,i,a),this.bridge=new Dt(this.api,i,a,this.tokenService),this.pool=new Ot(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){return(await this.api.getChainDetailsMap(a))[i].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,o){k(i);let r;a=="float"?(x("amount",i,s.decimals),r=R(i,s.decimals).toFixed()):r=i;let c=ue(r,s,await U(this.api,s)),m=await U(this.api,o),l=this.getAmountFromVUsdFormatted(c,o,m),u,d=await this.api.getPendingInfo();for(let p in d[o.chainSymbol])p.toLowerCase()===o.tokenAddress.toLowerCase()&&(u=d[o.chainSymbol][p]);if(u){let p=hn(u.totalSentAmount,m),h=this.getAmountFromVUsdFormatted(c,o,p),b;return ge(h.int).gt(l.int)?b={min:l,max:h}:b={min:h,max:l},{pendingTxs:u.pendingTxs,pendingAmount:{int:we(u.totalSentAmount,3,o.decimals).toFixed(0),float:w(u.totalSentAmount,3).toFixed()},estimatedAmount:b}}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){k(i),x("amountFloat",i,a.decimals);let s=R(i,a.decimals);if(s.eq(0))return 0;let o=ue(s,a,await U(this.api,a)),r=H(o,a.decimals);return jt(s,r)}async calculateFeePercentOnDestinationChain(i,a,s){k(i),x("amountFloat",i,a.decimals);let o=R(i,a.decimals);if(o.eq(0))return 0;let r=ue(o,a,await U(this.api,a)),c=ze(r,s,await U(this.api,s)),m=H(r,s.decimals);return jt(m,c)}async getAmountToBeReceivedAndGasFeeOptions(i,a,s,o){return k(i),x("amountToSendFloat",i,a.decimals),{amountToSendFloat:ge(i).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(i,a,s,o),gasFeeOptions:await this.getGasFeeOptions(a,s,o)}}async getAmountToSendAndGasFeeOptions(i,a,s,o){return k(i),x("amountToBeReceivedFloat",i,s.decimals),{amountToSendFloat:await this.getAmountToSend(i,a,s,o),amountToBeReceivedFloat:ge(i).toFixed(),gasFeeOptions:await this.getGasFeeOptions(a,s,o)}}async getAmountToBeReceived(i,a,s,o){let r=await U(this.api,a),c=await U(this.api,s);return this.getAmountToBeReceivedFromPools(i,a,s,r,c,o)}async getAmountToBeReceivedFromChain(i,a,s,o,r,c){let m=await this.pool.getPoolInfoFromChain(a,r),l=await this.pool.getPoolInfoFromChain(s,c);return this.getAmountToBeReceivedFromPools(i,a,s,m,l,o)}getAmountToBeReceivedFromPools(i,a,s,o,r,c){k(i),x("amountToSendFloat",i,a.decimals);let m=R(i,a.decimals);if(c&&c==3){if(!a.cctpAddress||!s.cctpAddress||!a.cctpFeeShare)throw new ne("Such route does not support CCTP protocol");let u=m.mul(ge(1).minus(a.cctpFeeShare)).round(0,ge.roundUp),d=we(u,a.decimals,s.decimals).round(0);return w(d,s.decimals).toFixed()}let l=ue(m,a,o);return this.getAmountFromVUsdFormatted(l,s,r).float}async getAmountToSend(i,a,s,o){let r=await U(this.api,a),c=await U(this.api,s);return this.getAmountToSendFromPools(i,a,s,r,c,o)}async getAmountToSendFromChain(i,a,s,o,r,c){let m=await this.pool.getPoolInfoFromChain(a,r),l=await this.pool.getPoolInfoFromChain(s,c);return this.getAmountToSendFromPools(i,a,s,m,l,o)}getAmountToSendFromPools(i,a,s,o,r,c){k(i),x("amountToBeReceivedFloat",i,s.decimals);let m=R(i,s.decimals);if(c&&c==3){if(!a.cctpAddress||!s.cctpAddress||!a.cctpFeeShare)throw new ne("Such route does not support CCTP protocol");let d=m.div(ge(1).minus(a.cctpFeeShare)).round(0,ge.roundDown),p=we(d,s.decimals,a.decimals).round(0);return w(p,a.decimals).toFixed()}let l=Tn(m,s,r),u=bn(l,a,o);if(ge(u).lte(0))throw new ye;return w(u,a.decimals).toFixed()}async getGasFeeOptions(i,a,s){return rn(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(o=>({chainSymbol:o.chainSymbol,poolAddress:o.poolAddress}));return this.api.refreshPoolInfo(s)}return this.api.refreshPoolInfo()}aprInPercents(i){return Sn(i)}async getExtraGasMaxLimits(i,a){return await An(i,a,this.api)}async getVUsdFromAmount(i,a,s){k(i);let o;a=="float"?(x("amount",i,s.decimals),o=R(i,s.decimals).toFixed()):o=i;let r=ue(o,s,await U(this.api,s));return{int:r,float:w(r,3).toFixed()}}async getAmountFromVUsd(i,a){return this.getAmountFromVUsdFormatted(i,a,await U(this.api,a))}getAmountFromVUsdFormatted(i,a,s){k(i);let o=ze(i,a,s);if(ge(o).lt(0))throw new ye;return{int:o,float:w(o,a.decimals).toFixed()}}async swapAndBridgeFeeCalculation(i,a,s){return ma(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 o=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)}),r=o.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(ge(r).lt(0))throw new ye;return o}async getSendAmountDetails(i,a,s,o){k(i);let r;return a=="float"?(x("amount",i,s.decimals),r=R(i,s.decimals).toFixed()):r=i,ua(r,s,await U(this.api,s),o,await U(this.api,o))}};function Hi(A){return"solanaRpcUrl"in A}var ya=class{constructor(i,a=ut){let s;Hi(i)?s=new mt({SOL:i.solanaRpcUrl,TRX:i.tronRpcUrl}):s=new mt(i),this.service=new Ht(s,a),this.bridge=this.service.bridge,this.pool=this.service.pool,this.utils=new Yt(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,o){return this.service.getPendingStatusInfo(i,a,s,o)}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,o){return this.service.getAmountToBeReceivedAndGasFeeOptions(i,a,s,o)}async getAmountToSendAndGasFeeOptions(i,a,s,o){return this.service.getAmountToSendAndGasFeeOptions(i,a,s,o)}async getAmountToBeReceived(i,a,s,o){return this.service.getAmountToBeReceived(i,a,s,o)}async getAmountToBeReceivedFromChain(i,a,s,o,r,c){return this.service.getAmountToBeReceivedFromChain(i,a,s,o,r,c)}getAmountToBeReceivedFromPools(i,a,s,o,r,c){return this.service.getAmountToBeReceivedFromPools(i,a,s,o,r,c)}async getAmountToSend(i,a,s,o){return this.service.getAmountToSend(i,a,s,o)}async getAmountToSendFromChain(i,a,s,o,r,c){return this.service.getAmountToSendFromChain(i,a,s,o,r,c)}getAmountToSendFromPools(i,a,s,o,r,c){return this.service.getAmountToSendFromPools(i,a,s,o,r,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,o){return this.service.getSendAmountDetails(i,a,s,o)}};export{qt as AddressStatus,ya as AllbridgeCoreSdk,Bt as AmountFormat,Ge as AmountNotEnoughError,gt as ArgumentInvalidDecimalsError,ne as CCTPDoesNotSupportedError,le as ChainSymbol,D as ChainType,ba as ErrorCode,pt as ExtraGasMaxLimitExceededError,Ve as FeePaymentMethod,ye as InsufficientPoolLiquidityError,dt as InvalidAmountError,Je as InvalidGasFeePaymentOptionError,yn as InvalidMessengerOptionError,Ze as InvalidTxError,V as JupiterError,he as Messenger,J as MethodNotSupportedError,ft as NodeRpcUrlNotInitializedError,M as SdkError,G as SdkRootError,cn as SolanaAutoTxFee,Qe as TimeoutError,yt as TxTooLargeError,Ke as VerifyTxError,ut as mainnet,ts as nodeRpcUrlsDefault,es as nodeUrlsDefault,zi as testnet,qi as testnetNodeRpcUrlsDefault,ji as testnetNodeUrlsDefault};
|
|
7
7
|
//# sourceMappingURL=index.js.map
|