@allbridge/bridge-core-sdk 3.15.4 → 3.16.0-beta.1
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 +3 -3
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/index.js.map +3 -3
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +3 -3
- package/dist/src/configs/mainnet.js +1 -0
- package/dist/src/configs/mainnet.js.map +1 -1
- package/dist/src/configs/testnet.js +1 -0
- package/dist/src/configs/testnet.js.map +1 -1
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/services/bridge/index.js +1 -0
- package/dist/src/services/bridge/index.js.map +1 -1
- package/dist/src/services/bridge/sol/index.d.ts +1 -0
- package/dist/src/services/bridge/sol/index.js +1 -1
- package/dist/src/services/bridge/sol/index.js.map +1 -1
- package/dist/src/services/bridge/sol/jupiter.d.ts +2 -1
- package/dist/src/services/bridge/sol/jupiter.js +4 -3
- package/dist/src/services/bridge/sol/jupiter.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/package.json +1 -1
package/dist/esm/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
var ur={coreApiUrl:"https://core-dev.a11bd.net",coreApiQueryParams:{},coreApiHeaders:{},wormholeMessengerProgramId:"3u8hJUVTA4jH1wYAyUur7FFZVQ8H635K3tSHHF4ssjQ5",solanaLookUpTable:"C3jAxHRTZjM2Bs7EqPir4nvrT8zKtpcW7RvGR9R2qKtN",sorobanNetworkPassphrase:"Test SDF Network ; September 2015",tronJsonRpc:"https://nile.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{SPL:0,ARB:3,AMO:7}}},lr={solanaRpcUrl:"https://api.devnet.solana.com",tronRpcUrl:"https://nile.trongrid.io"},pr={SOL:"https://api.devnet.solana.com",TRX:"https://nile.trongrid.io",SRB:"https://soroban-testnet.stellar.org",STLR:"https://horizon-testnet.stellar.org"};var yt={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7}}},gr={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},fr={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org"};import{Big as ye}from"big.js";var ht=class{constructor(n){this.apiClient=n}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let n=await this.getChainDetailsMap();return Object.values(n).flatMap(t=>t.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(n,t){return this.apiClient.getGasBalance(n,t)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(n,t){return await this.apiClient.getTransferStatus(n,t)}async getReceiveTransactionCost(n){return await this.apiClient.getReceiveTransactionCost(n)}async getPoolInfoMap(n){return await this.apiClient.getPoolInfoMap(n)}};import Ua from"axios";var Bn="3.15.4";var de=(d=>(d.GRL="GRL",d.SPL="SPL",d.HOL="HOL",d.BSC="BSC",d.ETH="ETH",d.BAS="BAS",d.SOL="SOL",d.TRX="TRX",d.POL="POL",d.MUM="MUM",d.AMO="AMO",d.ARB="ARB",d.CEL="CEL",d.AVA="AVA",d.SRB="SRB",d.STLR="STLR",d.OPT="OPT",d))(de||{}),E=(i=>(i.EVM="EVM",i.SOLANA="SOLANA",i.TRX="TRX",i.SRB="SRB",i))(E||{}),U={EVM:18,SOLANA:9,TRX:6,SRB:7},X={GRL:{chainSymbol:"GRL",chainId:"0x5",name:"Goerli",chainType:"EVM"},SPL:{chainSymbol:"SPL",chainId:"0xaa36a7",name:"Sepolia",chainType:"EVM"},HOL:{chainSymbol:"HOL",chainId:"0x4268",name:"Hole\u0161ky",chainType:"EVM"},BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},MUM:{chainSymbol:"MUM",chainId:"0x13881",name:"Mumbai",chainType:"EVM"},AMO:{chainSymbol:"AMO",chainId:"0x13882",name:"Amoy",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"}};import{Big as p}from"big.js";import an from"bn.js";var D=class extends Error{constructor(n,t){super(t),this.errorCode=n}},k=class extends D{constructor(n){super("SdkError",n)}},Tt=class extends D{constructor(n){super("InvalidAmountError",n)}},Oe=class extends D{constructor(n){super("AmountNotEnoughError",n)}},Te=class extends D{constructor(n){super("InsufficientPoolLiquidityError",n)}},K=class extends D{constructor(n){super("JupiterError",n)}},ze=class extends D{constructor(n){super("InvalidGasFeePaymentOptionError",n)}},Mn=class extends D{constructor(n){super("InvalidMessengerOptionError",n)}},Q=class extends D{constructor(n){super("MethodNotSupportedError",n)}},je=class extends D{constructor(n){super("VerifyTxError",n)}},Ve=class extends D{constructor(n){super("InvalidTxError",n)}},bt=class extends D{constructor(n){super("ExtraGasMaxLimitExceededError",n)}},Pt=class extends D{constructor(n,t,a){super("ArgumentInvalidDecimalsError",`Argument '${n}' decimals '${t}' cannot be greater than '${a}'`)}},qe=class extends D{constructor(n){super("TimeoutError",n)}},St=class extends D{constructor(n){super("NodeRpcUrlNotInitializedError",`For chain '${n}' Node RPC URL not initialized`)}},ie=class extends D{constructor(n){super("CCTPDoesNotSupportedError",n)}},wt=class extends D{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},Ia=(g=>(g.SDK_ERROR="SdkError",g.INVALID_AMOUNT_ERROR="InvalidAmountError",g.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",g.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",g.JUPITER_ERROR="JupiterError",g.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",g.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",g.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",g.VERIFY_TX_ERROR="VerifyTxError",g.INVALID_TX_ERROR="InvalidTxError",g.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",g.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",g.TIMEOUT_ERROR="TimeoutError",g.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",g.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",g.TX_TOO_LARGE="TxTooLargeError",g))(Ia||{});function rn(s,n){return p(100).minus(p(100).times(n).div(s)).toNumber()}function Ee(s,n){return Me(s,n,3).round(0,p.roundDown)}function z(s,n){return Me(s,3,n)}function Me(s,n,t){let a=p(t).minus(n).toNumber();return p(s).times($e(a))}function $e(s){return p(10).pow(s)}function B(s,n){return p(s).times($e(n))}function P(s,n){let t=p(s);return t.eq(0)?p(0):p(t).div($e(n))}function j(s){return P(p(s.tokenBalance).minus(s.vUsdBalance).toFixed(),3).div(2).toFixed()}function ge(s,{feeShare:n,decimals:t},a){let i=p(s);if(i.lte(0))return"0";let r=i.times(n),o=i.minus(r),A=Ee(o,t),c=p(a.tokenBalance).plus(A),m=fe(c,a.aValue,a.dValue);return p(a.vUsdBalance).minus(m).round(0,p.roundDown).toFixed()}function et(s,{feeShare:n,decimals:t},a){let i=p(s);if(i.lte(0))return p(0).toFixed();let r=i.plus(a.vUsdBalance),o=fe(r,a.aValue,a.dValue),A=z(p(a.tokenBalance).minus(o),t),c=p(A).times(n);return p(A).minus(c).round(0,p.roundDown).toFixed()}function kn(s,n){let t=p(s);if(t.lte(0))return n;let a=t.plus(n.vUsdBalance),i=fe(a,n.aValue,n.dValue);return{aValue:n.aValue,dValue:n.dValue,tokenBalance:i.toFixed(0),vUsdBalance:a.toFixed(0)}}function vn(s,{feeShare:n,decimals:t},a){if(p(s).lte(0))return p(0);let i=p(a.vUsdBalance).minus(s);if(i.lte(0))throw new Te;let r=fe(i,a.aValue,a.dValue),o=p(r).minus(a.tokenBalance),A=z(o,t),c=p(n).div(p(1).minus(n)),m=p(A).times(c).round(0,p.roundUp);return p(A).plus(m).round(0,p.roundDown)}function Rn(s,{feeShare:n,decimals:t},a){if(p(s).lte(0))return p(0);let i=p(n).div(p(1).minus(n)),r=p(s).times(i).round(0,p.roundUp),o=p(s).plus(r),A=Ee(o,t),c=p(a.tokenBalance).minus(A);if(c.lte(0))throw new Te;let m=fe(c,a.aValue,a.dValue);return p(m).minus(a.vUsdBalance).round(0,p.roundDown)}function fe(s,n,t){let a=p(4).times(n).times(p(t).minus(s)).minus(t),i=p(t).pow(3),r=a.pow(2),o=p(s).times(p(s).times(r).plus(p(4).times(n).times(i))).sqrt().round(0,p.roundDown),A=p(8).times(n).times(s),c=a.times(s).plus(o).div(A).round(0,p.roundDown);return c.eq(0)?p(0):c.plus(1)}function In(s,n,t,a){let i=new an(s),r=new an(t),o=new an(n);return i.mul(r).shrn(a).sub(o).toString()}function xn(s){return p(s).gt(0)?`${Number(p(s).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function Dn(s,n,t){let a=p(n).times(t),i=p(n).plus(t),r=p(8).times(s).times(a).times(i),o=a.times(p(16).times(s).minus(4)).div(3),A=r.times(r),c=o.times(o).times(o),m=A.plus(c),u=p(m).sqrt(),l=p(Math.cbrt(+r.plus(u).toFixed())),f=p(Math.cbrt(+r.minus(u).toFixed()));return l.plus(f).toFixed()}var sn=(o=>(o.OK="OK",o.INVALID="INVALID",o.FORBIDDEN="FORBIDDEN",o.UNINITIALIZED="UNINITIALIZED",o.CONTRACT_ADDRESS="CONTRACT_ADDRESS",o.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",o))(sn||{});var be=(a=>(a[a.ALLBRIDGE=1]="ALLBRIDGE",a[a.WORMHOLE=2]="WORMHOLE",a[a.CCTP=3]="CCTP",a))(be||{});function Fn(s){return Object.entries(s).reduce((n,t)=>{let a=t[0],i=t[1],r=Ea(a,i);return r&&(n[a]=r),n},{})}function Wn(s){let n={};for(let[t,a]of Object.entries(s)){let i=t;for(let r of a.tokens){let o=Ge({chainSymbol:i,poolAddress:r.poolAddress}),A=j(r.poolInfo);n[o]={...r.poolInfo,imbalance:A}}}return n}function xa(s,n){let{name:t,...a}=s,{poolInfo:i,...r}=n;return{...r,...a,chainName:t}}function Da(s){switch(s){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;default:return null}}function Fa(s){return Object.entries(s).reduce((n,[t,a])=>(n[t]=Wa(a),n),{})}function Wa(s){return Object.entries(s).reduce((n,[t,a])=>{let i=Da(t);return i&&(n[i]=a),n},{})}function Ea(s,n){let t=X[s];if(!t)return null;let a={...t,allbridgeChainId:n.chainId,bridgeAddress:n.bridgeAddress,transferTime:Fa(n.transferTime),txCostAmount:n.txCostAmount,confirmations:n.confirmations};return{...a,tokens:n.tokens.map(i=>xa(a,i))}}function Ge(s){return s.chainSymbol+"_"+s.poolAddress}function En(s){let n=[];for(let[t,a]of Object.entries(s)){let i=t;for(let r of a.tokens)n.push({chainSymbol:i,poolAddress:r.poolAddress})}return n}function Un(s){let n={};for(let[t,a]of Object.entries(s)){let i=t;for(let[r,o]of Object.entries(a))o.imbalance=j(o),n[Ge({chainSymbol:i,poolAddress:r})]=o}return n}var Ct=class{constructor(n){this.api=Ua.create({baseURL:n.coreApiUrl,headers:{Accept:"application/json",...n.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+Bn},params:n.coreApiQueryParams})}async getTokenInfo(){let{data:n}=await this.api.get("/token-info");return{chainDetailsMap:Fn(n),poolInfoMap:Wn(n)}}async getPendingInfo(){let{data:n}=await this.api.get("/pending-info");return n}async getGasBalance(n,t){let{data:a}=await this.api.get(`/check/${n}/${t}`);return a}async getTransferStatus(n,t){let{data:a}=await this.api.get(`/chain/${n}/${t}`);return a}async getReceiveTransactionCost(n){let{data:t}=await this.api.post("/receive-fee",n,{headers:{"Content-Type":"application/json"}});return{exchangeRate:t.exchangeRate,fee:t.fee,sourceNativeTokenPrice:t.sourceNativeTokenPrice}}async getPoolInfoMap(n){let t=n instanceof Array?n:[n],{data:a}=await this.api.post("/pool-info",{pools:t},{headers:{"Content-Type":"application/json"}});return Un(a)}};import Bt from"timed-cache";var on=20*1e3,Na=55*1e3,Mt=class{constructor(n){this.apiClient=n;this.tokenInfoCache=new Bt({defaultTtl:Na}),this.receivedTransactionCache=new Bt({defaultTtl:on}),this.pendingInfoCache=new Bt({defaultTtl:on}),this.gasBalanceCache=new Bt({defaultTtl:on})}getTokenInfo(){let n="TOKEN_INFO_CACHE_KEY",t=this.tokenInfoCache.get(n);if(t)return t;let a=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(n,a),a}async getGasBalance(n,t){let a=`GAS_BALANCE_${n}_${t}`,i=this.gasBalanceCache.get(a);if(i)return i;let r=this.apiClient.getGasBalance(n,t);return this.gasBalanceCache.put(a,r),r}async getPendingInfo(){let n="PENDING_INFO_CACHE_KEY",t=this.pendingInfoCache.get(n);if(t)return t;let a=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(n,a),a}async getReceiveTransactionCost(n){let t=`RECEIVE_TX_COST_${n.sourceChainId}_${n.destinationChainId}_${n.messenger}`,a=this.receivedTransactionCache.get(t);if(a)return a;let i=await this.apiClient.getReceiveTransactionCost(n);return this.receivedTransactionCache.put(t,i),i}async getTransferStatus(n,t){return this.apiClient.getTransferStatus(n,t)}async getPoolInfoMap(n){return this.apiClient.getPoolInfoMap(n)}};import Oa from"timed-cache";var Va=55*1e3,kt=class{constructor(n){this.client=n;this.poolInfoCache=new An}async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(n,t){return this.client.getTransferStatus(n,t)}getReceiveTransactionCost(n){return this.client.getReceiveTransactionCost(n)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(n,t){return this.client.getGasBalance(n,t)}async getPoolInfoByKey(n){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let t=this.poolInfoCache.get(n);if(t)return t;{let a=await this.client.getPoolInfoMap(n);return this.poolInfoCache.putAll(a),a[Ge(n)]}}async refreshPoolInfo(n){let t;if(n)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),t=await this.client.getPoolInfoMap(n);else{let a=await this.client.getChainDetailsMapAndPoolInfoMap();t=await this.client.getPoolInfoMap(En(a.chainDetailsMap))}this.poolInfoCache.putAll(t)}cachePut(n,t){this.poolInfoCache.put(Ge(n),t)}},An=class{constructor(){this.cache=new Oa({defaultTtl:Va})}putAll(n){for(let[t,a]of Object.entries(n))this.cache.put(t,a)}putAllIfNotExists(n){for(let[t,a]of Object.entries(n))this.cache.get(t)||this.cache.put(t,a)}put(n,t){this.cache.put(n,t)}get(n){let t=Ge(n);return this.cache.get(t)}};import Bi from"tronweb";import Mi from"web3";import{Big as Nn}from"big.js";async function N(s,n){return await s.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}function v(s){if(Nn(s).lte(0))throw new Tt("Amount must be greater than zero")}function R(s,n,t){let a=Nn(n).toFixed();if(a.split(".").length==2&&a.split(".")[1].length>t)throw new Pt(s,a.split(".")[1].length,t)}async function vt(s,n,t){return await Promise.race([s,new Promise((a,i)=>{setTimeout(()=>i(new qe(n)),t)})])}async function cn(s,n,t,a){if(t<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${t} was received.`);let i=0;for(;;)try{return await vt(s(),n,a)}catch{if(++i>=t)throw new qe(n)}}async function On(s,n,t,a=1.5,i=!1){let r=[],o=0;if(r.push(await s()),!n(r[r.length-1]))return r;let A=new Date(Date.now()+t*1e3).valueOf(),c=1e3,m=c;for(;Date.now()<A&&n(r[r.length-1]);)o++,i&&console.info(`Waiting ${c}ms before trying again (bringing the total wait time to ${m}ms so far, of total ${t*1e3}ms)`),await new Promise(u=>setTimeout(u,c)),c=c*a,new Date(Date.now()+c).valueOf()>A&&(c=A-Date.now(),i&&console.info(`was gonna wait too long; new waitTime: ${c}ms`)),m=c+m,r.push(await s(r[r.length-1])),i&&n(r[r.length-1])&&console.info(`${o}. Called ${s.name}; ${r.length} prev attempts. Most recent: ${JSON.stringify(r[r.length-1],null,2)}`);return r}import*as It from"@project-serum/anchor";import{PublicKey as $n}from"@solana/web3.js";import{Big as qa}from"big.js";var Vn=[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];var Gn=[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];import*as Z from"@project-serum/anchor";import{PublicKey as _}from"@solana/web3.js";async function re(s,n){return Z.utils.token.associatedAddress({mint:n,owner:s})}async function ke(s){let[n]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("config")],s);return n}async function Zn(s,n){let[t]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("lock"),Uint8Array.from(s)],n);return t}async function tt(s,n){let[t]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([s])],n);return t}async function Ze(s){let n=await ke(s),[t]=await _.findProgramAddress([n.toBuffer()],s);return t}async function _n(s,n){let[t]=await _.findProgramAddress([s.toBuffer()],n);return t}async function _e(s,n){let[t]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("token"),s.toBytes()],n);return t}async function Ln(s,n,t){let[a]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([s]),n],t);return a}async function mn(s,n){let[t]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([s])],n);return t}async function un(s,n){let[t]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([s])],n);return t}async function Xn(s,n){let[t]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("sent_message"),s],n);return t}async function ln(s,n,t){let[a]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("user_deposit"),n.toBytes(),s.toBytes()],t);return a}async function Kn(s,n){let[t]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("cctp_bridge"),s.toBytes()],n);return t}async function Qn(s,n){let[t]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("token"),s.toBytes()],n);return t}function Yn(s,n){let[t]=_.findProgramAddressSync([Z.utils.bytes.utf8.encode("lock"),n.toBuffer()],s);return t}function Jn(s,n,t,a){let i=Ue("message_transmitter",t),r=Ue("token_messenger",a),o=Ue("__event_authority",a),A=Ue("token_minter",a),c=Ue("local_token",a,[n]),m=Ue("remote_token_messenger",a,[s.toString()]),u=Ue("sender_authority",a);return{messageTransmitterAccount:i,tokenMessenger:r,tokenMessengerEventAuthority:o,tokenMinter:A,localToken:c,remoteTokenMessengerKey:m,authorityPda:u}}function Ue(s,n,t=[]){let a=[Buffer.from(Z.utils.bytes.utf8.encode(s))];for(let r of t)typeof r=="string"?a.push(Buffer.from(Z.utils.bytes.utf8.encode(r))):Array.isArray(r)?a.push(Buffer.from(r)):Buffer.isBuffer(r)?a.push(r):a.push(r.toBuffer());return _.findProgramAddressSync(a,n)[0]}import{AnchorProvider as _a}from"@project-serum/anchor";import{Connection as La,PublicKey as Xa}from"@solana/web3.js";function ve(s,n){let t=new La(s,"confirmed"),a=new Xa(n);return new _a(t,{publicKey:a},{preflightCommitment:"confirmed",commitment:"confirmed"})}var se=class{};import{PublicKey as Ka}from"@solana/web3.js";import{Big as Pe}from"big.js";import Hn from"randombytes";import{Address as Qa}from"stellar-sdk";import*as zn from"tronweb";function Se(s,n,t){let a;switch(n){case"EVM":{a=Ya(s);break}case"SOLANA":{a=new Ka(s).toBuffer();break}case"TRX":{a=Ja(s);break}case"SRB":{a=new Qa(s).toBuffer();break}}switch(t){case"EVM":return"0x"+a.toString("hex");case"SOLANA":return Array.from(a);case"TRX":return a.toJSON().data;case"SRB":return a.toJSON().data}}function jn(s){return Buffer.from(s.replace(/^0x/i,""),"hex")}function Ya(s){let t=jn(s);return Buffer.concat([Buffer.alloc(32-t.length,0),t],32)}function Ja(s){let n=nt(s),t=jn(n);return Ha(t,32)}function nt(s){return Buffer.from(zn.utils.crypto.decodeBase58Address(s)).toString("hex").replace(/^41/,"0x")}function Ha(s,n){if(s.length>=n)return s;let t=Buffer.alloc(n,0);return s.copy(t,n-s.length),t}function Le(){return Hn(32)}function pn(){let s=Hn(32).readBigInt64BE();return s<0?s*-1n:s}function Re(s,n){let t={},a=n.sourceToken;return t.amount=B(n.amount,a.decimals).toFixed(),t.contractAddress=a.bridgeAddress,t.fromAccountAddress=n.fromAccountAddress,t.fromTokenAddress=Se(a.tokenAddress,s,s),t.toAccountAddress=n.toAccountAddress,t.toTokenAddress=Se(n.destinationToken.tokenAddress,s,s),t.minimumReceiveAmount=n.minimumReceiveAmount?B(n.minimumReceiveAmount,n.destinationToken.decimals).toFixed():"0",t}async function we(s,n,t){let a={};a.fromChainId=n.sourceToken.allbridgeChainId,a.fromChainSymbol=n.sourceToken.chainSymbol;let i=X[n.destinationToken.chainSymbol].chainType;a.fromTokenAddress=n.sourceToken.tokenAddress,a.toChainId=n.destinationToken.allbridgeChainId,a.toTokenAddress=n.destinationToken.tokenAddress,n.gasFeePaymentMethod==="stablecoin"?a.gasFeePaymentMethod="stablecoin":a.gasFeePaymentMethod="native";let r=n.sourceToken;if(n.messenger===3){if(!r.cctpAddress||!n.destinationToken.cctpAddress)throw new ie("Such route does not support CCTP protocol");a.contractAddress=r.cctpAddress}else a.contractAddress=r.bridgeAddress;a.messenger=n.messenger,a.fromAccountAddress=n.fromAccountAddress,a.amount=B(n.amount,r.decimals).toFixed();let{fee:o,feeFormat:A}=n;if(!o){let l=(await dn(a.fromChainId,n.sourceToken.chainType,a.toChainId,r.decimals,a.messenger,t))[a.gasFeePaymentMethod];if(!l)throw new ze;o=l.int,A="int"}if(A=="float")switch(a.gasFeePaymentMethod){case"native":a.fee=B(o,U[r.chainType]).toFixed(0);break;case"stablecoin":a.fee=B(o,r.decimals).toFixed(0);break}else a.fee=o;let{extraGas:c,extraGasFormat:m}=n;if(c&&+c>0){if(m=="float")switch(a.gasFeePaymentMethod){case"native":a.extraGas=B(c,U[r.chainType]).toFixed(0);break;case"stablecoin":a.extraGas=B(c,r.decimals).toFixed(0);break}else a.extraGas=c;await ja(a.extraGas,a.gasFeePaymentMethod,r,n.destinationToken,t)}return a.fromTokenAddress=Se(a.fromTokenAddress,s,s),a.toAccountAddress=Se(n.toAccountAddress,i,s),a.toTokenAddress=Se(a.toTokenAddress,i,s),a.gasFeePaymentMethod=="stablecoin"&&za(a.amount,r.decimals,a.fee,a.extraGas),a}function za(s,n,t,a){let i=Pe(s).minus(t).minus(a??0);if(i.lte(0))throw new Oe(`Amount not enough to pay fee, ${P(Pe(i).minus(1).neg(),n).toFixed()} stables is missing`)}async function dn(s,n,t,a,i,r){let o=await r.getReceiveTransactionCost({sourceChainId:s,destinationChainId:t,messenger:i}),A={native:{int:o.fee,float:P(o.fee,U[n]).toFixed()}};if(o.sourceNativeTokenPrice){let c=Me(new Pe(o.fee).mul(o.sourceNativeTokenPrice),U[n],a).toFixed(0,Pe.roundUp);A.stablecoin={int:c,float:P(c,a).toFixed()}}return A}async function ja(s,n,t,a,i){let o=(await gn(t,a,i)).extraGasMax[n];if(!o)throw new ze(`Impossible to pay extra gas by '${n}' payment method`);let A=o.int;if(Pe(s).gt(A))throw new bt(`Extra gas ${s} in int format, exceeded limit ${A} for '${n}' payment method`)}async function gn(s,n,t){let a={},i=await t.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:n.allbridgeChainId,messenger:1}),r=n.txCostAmount.maxAmount,o=P(r,U[n.chainType]).toFixed(),A=Pe(o).div(i.exchangeRate).toFixed(U[s.chainType],Pe.roundDown),c=B(A,U[s.chainType]).toFixed(0);if(a.native={int:c,float:A},i.sourceNativeTokenPrice){let m=Pe(A).mul(i.sourceNativeTokenPrice).toFixed(s.decimals,Pe.roundDown);a.stablecoin={int:B(m,s.decimals).toFixed(0),float:m}}return{extraGasMax:a,destinationChain:{gasAmountMax:{int:r,float:o},swap:{int:n.txCostAmount.swap,float:P(n.txCostAmount.swap,U[n.chainType]).toFixed()},transfer:{int:n.txCostAmount.transfer,float:P(n.txCostAmount.transfer,U[n.chainType]).toFixed()}},exchangeRate:i.exchangeRate,sourceNativeTokenPrice:i.sourceNativeTokenPrice}}function qn(s){return s.sourceToken.chainSymbol!==s.destinationToken.chainSymbol}var at=class extends se{constructor(t,a,i){super();this.web3=t;this.api=a;this.nodeRpcUrlsConfig=i;this.chainType="EVM"}async send(t){let a=await this.buildRawTransactionSend(t);return this.sendRawTransaction(a)}async buildRawTransactionSwap(t){let a=Re(this.chainType,t);return await this.buildRawTransactionSwapFromParams(a)}async buildRawTransactionSwapFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toAccountAddress:A,toTokenAddress:c,minimumReceiveAmount:m}=t,l=this.getBridgeContract(i).methods.swap(a,o,c,A,m);return Promise.resolve({from:r,to:i,data:l.encodeABI()})}async buildRawTransactionSend(t){let a=await we(this.chainType,t,this.api),{amount:i,contractAddress:r,fromAccountAddress:o,fromTokenAddress:A,toChainId:c,toAccountAddress:m,toTokenAddress:u,messenger:l,fee:f,gasFeePaymentMethod:y,extraGas:h}=a,T="0x"+Le().toString("hex"),g,d,S=f;if(h&&(S=qa(S).plus(h).toFixed()),l===3){let b=await this.buildRawTransactionCctpSend(t,a,S);g=b.sendMethod,d=b.value}else{let b=this.getBridgeContract(r);y==="stablecoin"?(g=b.methods.swapAndBridge(A,i,m,c,u,T,l,S),d="0"):(g=b.methods.swapAndBridge(A,i,m,c,u,T,l,0),d=S)}return Promise.resolve({from:o,to:r,value:d,data:g.encodeABI()})}async buildRawTransactionCctpSend(t,a,i){let{amount:r,contractAddress:o,toChainId:A,toAccountAddress:c,gasFeePaymentMethod:m}=a,u=this.getContract(Gn,o),l,f;if(t.destinationToken.chainType==="SOLANA"){let y,h=new $n(t.toAccountAddress),T=new $n(t.destinationToken.tokenAddress),g=await re(h,T),d=ve(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),t.toAccountAddress);It.setProvider(d);let S=await It.Spl.token(d).account.token.fetchNullable(g);if(S?.authority.equals(h))y=Se(g.toBase58(),"SOLANA",this.chainType);else{let b=await d.connection.getTokenAccountsByOwner(h,{mint:T});if(b.value.length===0&&!S)y=Se(g.toBase58(),"SOLANA",this.chainType);else if(b.value.length>0)y=Se(b.value[0].pubkey.toBase58(),"SOLANA",this.chainType);else throw new k("Associated account has wrong owner")}m==="stablecoin"?(l=u.methods.bridgeWithWalletAddress(r,y,c,A,i),f="0"):(l=u.methods.bridgeWithWalletAddress(r,y,c,A,0),f=i)}else m==="stablecoin"?(l=u.methods.bridge(r,c,A,i),f="0"):(l=u.methods.bridge(r,c,A,0),f=i);return{sendMethod:l,value:f}}async sendRawTransaction(t){let a=await this.web3.eth.estimateGas(t),i={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:r}=await this.web3.eth.sendTransaction({...t,gas:a,...i});return{txId:r}}getContract(t,a){return new this.web3.eth.Contract(t,a)}getBridgeContract(t){return this.getContract(Vn,t)}};var xt=class{constructor(n,t,a,i){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a;this.tokenService=i}async approve(n,t){let a,i;t?(a=n,i=t):i=n;let r=it(i.token,i.messenger);return this.tokenService.buildRawTransactionApprove({...i,spender:r},a)}async send(n,t){return v(n.amount),R("amount",n.amount,n.sourceToken.decimals),qn(n)?Dt(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionSend(n):Dt(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionSwap(n)}};import{BN as Ye,Program as hn,Spl as Ai,web3 as Ie}from"@project-serum/anchor";import{Keypair as ua,PublicKey as I,SystemProgram as ci}from"@solana/web3.js";import{Big as xe}from"big.js";var rt={version:"0.1.0",name:"bridge",instructions:[{name:"initialize",accounts:[{name:"admin",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"initializePool",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"token",isMut:!0,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializePoolArgs"}}]},{name:"initDepositAccount",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"deposit",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdraw",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amountLp",type:"u64"}]},{name:"swapAndBridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"messenger",isMut:!1,isSigner:!1},{name:"messengerConfig",isMut:!0,isSigner:!1},{name:"sentMessageAccount",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swapAndBridgeWormhole",accounts:[{name:"user",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"wormholeMessenger",isMut:!1,isSigner:!1},{name:"wormholeMessengerConfig",isMut:!0,isSigner:!1},{name:"wormholeProgram",isMut:!1,isSigner:!1},{name:"bridge",isMut:!0,isSigner:!1},{name:"message",isMut:!0,isSigner:!0},{name:"sequence",isMut:!0,isSigner:!1},{name:"feeCollector",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"clock",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swap",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"sendMint",isMut:!1,isSigner:!1},{name:"receiveMint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"sendPool",isMut:!0,isSigner:!1},{name:"receivePool",isMut:!0,isSigner:!1},{name:"sendBridgeToken",isMut:!0,isSigner:!1},{name:"receiveBridgeToken",isMut:!0,isSigner:!1},{name:"sendUserToken",isMut:!0,isSigner:!1},{name:"receiveUserToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"},{name:"receiveAmountMin",type:"u64"}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"receiveAndSwap",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"receiveAndSwapWormhole",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"claimRewards",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setAdmin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAdmin",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"startBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"stopBridge",accounts:[{name:"stopAuthority",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"setRebalancer",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"rebalancer",isMut:!1,isSigner:!1}],args:[]},{name:"setStopAuthority",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAuthority",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"setAllbridgeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setWormholeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setPoolFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setBalanceRatioMin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"balanceRatioMinBp",type:"u16"}]},{name:"setPoolAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"addOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"removeOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"adjustTotalLpAmount",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[]}],accounts:[{name:"chainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"config",type:{kind:"struct",fields:[{name:"admin",type:"publicKey"},{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"rebalancer",type:"publicKey"},{name:"stopAuthority",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"canSwap",type:"bool"},{name:"canDeposit",type:"bool"},{name:"canWithdraw",type:"bool"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"sentTokenAddress",type:"publicKey"},{name:"amount",type:"u64"},{name:"vusdAmount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:"Messenger"}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"otherBridgeToken",type:{kind:"struct",fields:[]}},{name:"pool",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"tokenBalance",type:"u64"},{name:"vUsdBalance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"totalLpAmount",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"accRewardPerShareP",type:"u128"},{name:"adminFeeAmount",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"vUsdAmount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"userDeposit",type:{kind:"struct",fields:[{name:"userAddress",type:"publicKey"},{name:"mint",type:"publicKey"},{name:"lpAmount",type:"u64"},{name:"rewardDebt",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"vusdAmount",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"publicKey"},{name:"sourceChainId",type:"u8"},{name:"receiveToken",type:"publicKey"},{name:"messenger",type:{defined:"Messenger"}},{name:"hash",type:{array:["u8",32]}},{name:"receiveAmountMin",type:"u64"}]}},{name:"RewardError",type:{kind:"enum",variants:[{name:"FeeTooHigh"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}}],errors:[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"PoolInfo overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"}]};var ea={version:"0.1.0",name:"cctp_bridge",instructions:[{name:"initialize",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"bridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"messageSentEventData",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!0,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"cctpMessenger",isMut:!1,isSigner:!1},{name:"messageTransmitterProgram",isMut:!1,isSigner:!1},{name:"messageTransmitterAccount",isMut:!0,isSigner:!1},{name:"tokenMessenger",isMut:!1,isSigner:!1},{name:"tokenMinter",isMut:!1,isSigner:!1},{name:"localToken",isMut:!0,isSigner:!1},{name:"remoteTokenMessengerKey",isMut:!1,isSigner:!1},{name:"authorityPda",isMut:!1,isSigner:!1},{name:"eventAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"setAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setCctpTokenMessengerMinter",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]}],accounts:[{name:"cctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"admin",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"adminFeeShareBp",type:"u64"},{name:"adminFeeAmount",type:"u64"}]}},{name:"chainBridge",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"amount",type:"u64"},{name:"adminFee",type:"u64"},{name:"relayerFee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"slot",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gasOracleProgramId",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"}]}}],errors:[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}]};import{Spl as $a}from"@project-serum/anchor";import ei from"big.js";import Ft from"web3";async function Ke(s,n){return await $a.token(n).account.token.fetch(s)}async function ta(s,n,t){let a=await n.account.pool.fetch(t),i=a.decimals,r=ei(a.feeShareBp.toString()).div(1e4).toFixed(),o={aValue:a.a.toString(),dValue:a.d.toString(),totalLpAmount:a.totalLpAmount.toString(),tokenBalance:a.tokenBalance.toString(),vUsdBalance:a.vUsdBalance.toString(),accRewardPerShareP:a.accRewardPerShareP.toString()};return ge(s,{decimals:i,feeShare:r},o)}function na(s){let n=s.amount,t="0x"+s.recipient.toString("hex"),a=s.sourceChainId,i=s.destinationChainId,r="0x"+s.receiveToken.toString("hex"),o="0x"+s.nonce.toString("hex"),A=1,c="0x"+s.chainBridge.toString("hex"),m=Ft.utils.encodePacked({t:"uint256",v:n},{t:"bytes32",v:t},{t:"uint256",v:a},{t:"bytes32",v:r},{t:"uint256",v:o},{t:"uint8",v:A});if(!m)throw new k("message cannot be undefined");let u=Ft.utils.keccak256(Buffer.from(m.replace("0x",""),"hex")),l=Buffer.from(u.replace("0x",""),"hex");l[0]=a,l[1]=i;let f=Ft.utils.encodePacked({t:"bytes32",v:"0x"+l.toString("hex")},{t:"bytes32",v:c});if(!f)throw new Ve("messageWithSigner cannot be undefined");let y=Ft.utils.keccak256(Buffer.from(f.replace("0x",""),"hex")),h=Buffer.from(y.replace("0x",""),"hex");return h[0]=l[0],h[1]=l[1],h}import{ComputeBudgetInstruction as ia,ComputeBudgetProgram as Wt,Connection as ra,TransactionMessage as ti}from"@solana/web3.js";import{Big as ni}from"big.js";import{AddressLookupTableAccount as aa}from"@solana/web3.js";async function Ne(s,n){return await Promise.all(s.message.addressTableLookups.map(async t=>new aa({key:t.accountKey,state:aa.deserialize(await n.getAccountInfo(t.accountKey).then(a=>{if(!a)throw new k("Cannot get AccountInfo");return a.data}))})))}var fn="AUTO";async function Qe(s,n,t){let a=new ra(t,"confirmed"),i=(await a.simulateTransaction(s)).value.unitsConsumed;await oa(s.instructions,i,n,a)}async function sa(s,n,t){let a=new ra(t,"confirmed"),i=await Ne(s,a),r=ti.decompile(s.message,{addressLookupTableAccounts:i});if(s.serialize().length>1232)throw new wt;await oa(r.instructions,769230,n,a),s.message=r.compileToV0Message(i)}async function oa(s,n,t,a){if(n>0){let i=ai(n,s);if(t?.solana){let r=t.solana;if(r===fn)await yn(s,a);else if("pricePerUnitInMicroLamports"in r)await yn(s,a,r.pricePerUnitInMicroLamports);else{let o=ni(r.extraFeeInLamports).div(i).mul($e(6)).toFixed(0);await yn(s,a,o)}}}}function ai(s,n){let t=n.findIndex(r=>r.programId.equals(Wt.programId)&&ia.decodeInstructionType(r)==="SetComputeUnitLimit"),a=Number((s*1.3).toFixed(0)),i=Wt.setComputeUnitLimit({units:a});return t>=0?n[t]=i:n.push(i),a.toString()}async function yn(s,n,t){let a=s.findIndex(o=>o.programId.equals(Wt.programId)&&ia.decodeInstructionType(o)==="SetComputeUnitPrice"),i=BigInt(t||await ii(n)),r=Wt.setComputeUnitPrice({microLamports:i});return a>=0?s[a]=r:s.push(r),i.toString()}async function ii(s){let n=await s.getRecentPrioritizationFees(),t=0;for(let a of n)t+=a.prioritizationFee;return(t/n.length).toFixed(0)}import{NATIVE_MINT as ri}from"@solana/spl-token";import{Connection as si,TransactionMessage as Aa,VersionedTransaction as oi}from"@solana/web3.js";import ca,{AxiosError as ma}from"axios";var Et=class{constructor(n){this.connection=new si(n)}async getJupiterSwapTx(n,t,a){let i;try{i=await ca.get(`https://quote-api.jup.ag/v6/quote?inputMint=${t}
|
|
1
|
+
var ur={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}}},lr={solanaRpcUrl:"https://api.devnet.solana.com",tronRpcUrl:"https://nile.trongrid.io"},pr={SOL:"https://api.devnet.solana.com",TRX:"https://nile.trongrid.io",SRB:"https://soroban-testnet.stellar.org",STLR:"https://horizon-testnet.stellar.org"};var yt={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},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}}},gr={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},fr={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org"};import{Big as ye}from"big.js";var ht=class{constructor(n){this.apiClient=n}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let n=await this.getChainDetailsMap();return Object.values(n).flatMap(t=>t.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(n,t){return this.apiClient.getGasBalance(n,t)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(n,t){return await this.apiClient.getTransferStatus(n,t)}async getReceiveTransactionCost(n){return await this.apiClient.getReceiveTransactionCost(n)}async getPoolInfoMap(n){return await this.apiClient.getPoolInfoMap(n)}};import Ua from"axios";var Bn="3.16.0-beta.1";var de=(d=>(d.GRL="GRL",d.SPL="SPL",d.HOL="HOL",d.BSC="BSC",d.ETH="ETH",d.BAS="BAS",d.SOL="SOL",d.TRX="TRX",d.POL="POL",d.MUM="MUM",d.AMO="AMO",d.ARB="ARB",d.CEL="CEL",d.AVA="AVA",d.SRB="SRB",d.STLR="STLR",d.OPT="OPT",d))(de||{}),E=(i=>(i.EVM="EVM",i.SOLANA="SOLANA",i.TRX="TRX",i.SRB="SRB",i))(E||{}),U={EVM:18,SOLANA:9,TRX:6,SRB:7},X={GRL:{chainSymbol:"GRL",chainId:"0x5",name:"Goerli",chainType:"EVM"},SPL:{chainSymbol:"SPL",chainId:"0xaa36a7",name:"Sepolia",chainType:"EVM"},HOL:{chainSymbol:"HOL",chainId:"0x4268",name:"Hole\u0161ky",chainType:"EVM"},BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},MUM:{chainSymbol:"MUM",chainId:"0x13881",name:"Mumbai",chainType:"EVM"},AMO:{chainSymbol:"AMO",chainId:"0x13882",name:"Amoy",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"}};import{Big as p}from"big.js";import an from"bn.js";var D=class extends Error{constructor(n,t){super(t),this.errorCode=n}},k=class extends D{constructor(n){super("SdkError",n)}},Tt=class extends D{constructor(n){super("InvalidAmountError",n)}},Oe=class extends D{constructor(n){super("AmountNotEnoughError",n)}},Te=class extends D{constructor(n){super("InsufficientPoolLiquidityError",n)}},K=class extends D{constructor(n){super("JupiterError",n)}},je=class extends D{constructor(n){super("InvalidGasFeePaymentOptionError",n)}},Mn=class extends D{constructor(n){super("InvalidMessengerOptionError",n)}},Q=class extends D{constructor(n){super("MethodNotSupportedError",n)}},ze=class extends D{constructor(n){super("VerifyTxError",n)}},Ve=class extends D{constructor(n){super("InvalidTxError",n)}},bt=class extends D{constructor(n){super("ExtraGasMaxLimitExceededError",n)}},Pt=class extends D{constructor(n,t,a){super("ArgumentInvalidDecimalsError",`Argument '${n}' decimals '${t}' cannot be greater than '${a}'`)}},qe=class extends D{constructor(n){super("TimeoutError",n)}},St=class extends D{constructor(n){super("NodeRpcUrlNotInitializedError",`For chain '${n}' Node RPC URL not initialized`)}},ie=class extends D{constructor(n){super("CCTPDoesNotSupportedError",n)}},wt=class extends D{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},Ia=(g=>(g.SDK_ERROR="SdkError",g.INVALID_AMOUNT_ERROR="InvalidAmountError",g.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",g.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",g.JUPITER_ERROR="JupiterError",g.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",g.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",g.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",g.VERIFY_TX_ERROR="VerifyTxError",g.INVALID_TX_ERROR="InvalidTxError",g.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",g.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",g.TIMEOUT_ERROR="TimeoutError",g.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",g.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",g.TX_TOO_LARGE="TxTooLargeError",g))(Ia||{});function rn(s,n){return p(100).minus(p(100).times(n).div(s)).toNumber()}function Ee(s,n){return Me(s,n,3).round(0,p.roundDown)}function j(s,n){return Me(s,3,n)}function Me(s,n,t){let a=p(t).minus(n).toNumber();return p(s).times($e(a))}function $e(s){return p(10).pow(s)}function B(s,n){return p(s).times($e(n))}function P(s,n){let t=p(s);return t.eq(0)?p(0):p(t).div($e(n))}function z(s){return P(p(s.tokenBalance).minus(s.vUsdBalance).toFixed(),3).div(2).toFixed()}function ge(s,{feeShare:n,decimals:t},a){let i=p(s);if(i.lte(0))return"0";let r=i.times(n),o=i.minus(r),A=Ee(o,t),c=p(a.tokenBalance).plus(A),m=fe(c,a.aValue,a.dValue);return p(a.vUsdBalance).minus(m).round(0,p.roundDown).toFixed()}function et(s,{feeShare:n,decimals:t},a){let i=p(s);if(i.lte(0))return p(0).toFixed();let r=i.plus(a.vUsdBalance),o=fe(r,a.aValue,a.dValue),A=j(p(a.tokenBalance).minus(o),t),c=p(A).times(n);return p(A).minus(c).round(0,p.roundDown).toFixed()}function kn(s,n){let t=p(s);if(t.lte(0))return n;let a=t.plus(n.vUsdBalance),i=fe(a,n.aValue,n.dValue);return{aValue:n.aValue,dValue:n.dValue,tokenBalance:i.toFixed(0),vUsdBalance:a.toFixed(0)}}function vn(s,{feeShare:n,decimals:t},a){if(p(s).lte(0))return p(0);let i=p(a.vUsdBalance).minus(s);if(i.lte(0))throw new Te;let r=fe(i,a.aValue,a.dValue),o=p(r).minus(a.tokenBalance),A=j(o,t),c=p(n).div(p(1).minus(n)),m=p(A).times(c).round(0,p.roundUp);return p(A).plus(m).round(0,p.roundDown)}function Rn(s,{feeShare:n,decimals:t},a){if(p(s).lte(0))return p(0);let i=p(n).div(p(1).minus(n)),r=p(s).times(i).round(0,p.roundUp),o=p(s).plus(r),A=Ee(o,t),c=p(a.tokenBalance).minus(A);if(c.lte(0))throw new Te;let m=fe(c,a.aValue,a.dValue);return p(m).minus(a.vUsdBalance).round(0,p.roundDown)}function fe(s,n,t){let a=p(4).times(n).times(p(t).minus(s)).minus(t),i=p(t).pow(3),r=a.pow(2),o=p(s).times(p(s).times(r).plus(p(4).times(n).times(i))).sqrt().round(0,p.roundDown),A=p(8).times(n).times(s),c=a.times(s).plus(o).div(A).round(0,p.roundDown);return c.eq(0)?p(0):c.plus(1)}function In(s,n,t,a){let i=new an(s),r=new an(t),o=new an(n);return i.mul(r).shrn(a).sub(o).toString()}function xn(s){return p(s).gt(0)?`${Number(p(s).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function Dn(s,n,t){let a=p(n).times(t),i=p(n).plus(t),r=p(8).times(s).times(a).times(i),o=a.times(p(16).times(s).minus(4)).div(3),A=r.times(r),c=o.times(o).times(o),m=A.plus(c),u=p(m).sqrt(),l=p(Math.cbrt(+r.plus(u).toFixed())),f=p(Math.cbrt(+r.minus(u).toFixed()));return l.plus(f).toFixed()}var sn=(o=>(o.OK="OK",o.INVALID="INVALID",o.FORBIDDEN="FORBIDDEN",o.UNINITIALIZED="UNINITIALIZED",o.CONTRACT_ADDRESS="CONTRACT_ADDRESS",o.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",o))(sn||{});var be=(a=>(a[a.ALLBRIDGE=1]="ALLBRIDGE",a[a.WORMHOLE=2]="WORMHOLE",a[a.CCTP=3]="CCTP",a))(be||{});function Fn(s){return Object.entries(s).reduce((n,t)=>{let a=t[0],i=t[1],r=Ea(a,i);return r&&(n[a]=r),n},{})}function Wn(s){let n={};for(let[t,a]of Object.entries(s)){let i=t;for(let r of a.tokens){let o=Ge({chainSymbol:i,poolAddress:r.poolAddress}),A=z(r.poolInfo);n[o]={...r.poolInfo,imbalance:A}}}return n}function xa(s,n){let{name:t,...a}=s,{poolInfo:i,...r}=n;return{...r,...a,chainName:t}}function Da(s){switch(s){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;default:return null}}function Fa(s){return Object.entries(s).reduce((n,[t,a])=>(n[t]=Wa(a),n),{})}function Wa(s){return Object.entries(s).reduce((n,[t,a])=>{let i=Da(t);return i&&(n[i]=a),n},{})}function Ea(s,n){let t=X[s];if(!t)return null;let a={...t,allbridgeChainId:n.chainId,bridgeAddress:n.bridgeAddress,transferTime:Fa(n.transferTime),txCostAmount:n.txCostAmount,confirmations:n.confirmations};return{...a,tokens:n.tokens.map(i=>xa(a,i))}}function Ge(s){return s.chainSymbol+"_"+s.poolAddress}function En(s){let n=[];for(let[t,a]of Object.entries(s)){let i=t;for(let r of a.tokens)n.push({chainSymbol:i,poolAddress:r.poolAddress})}return n}function Un(s){let n={};for(let[t,a]of Object.entries(s)){let i=t;for(let[r,o]of Object.entries(a))o.imbalance=z(o),n[Ge({chainSymbol:i,poolAddress:r})]=o}return n}var Ct=class{constructor(n){this.api=Ua.create({baseURL:n.coreApiUrl,headers:{Accept:"application/json",...n.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+Bn},params:n.coreApiQueryParams})}async getTokenInfo(){let{data:n}=await this.api.get("/token-info");return{chainDetailsMap:Fn(n),poolInfoMap:Wn(n)}}async getPendingInfo(){let{data:n}=await this.api.get("/pending-info");return n}async getGasBalance(n,t){let{data:a}=await this.api.get(`/check/${n}/${t}`);return a}async getTransferStatus(n,t){let{data:a}=await this.api.get(`/chain/${n}/${t}`);return a}async getReceiveTransactionCost(n){let{data:t}=await this.api.post("/receive-fee",n,{headers:{"Content-Type":"application/json"}});return{exchangeRate:t.exchangeRate,fee:t.fee,sourceNativeTokenPrice:t.sourceNativeTokenPrice}}async getPoolInfoMap(n){let t=n instanceof Array?n:[n],{data:a}=await this.api.post("/pool-info",{pools:t},{headers:{"Content-Type":"application/json"}});return Un(a)}};import Bt from"timed-cache";var on=20*1e3,Na=55*1e3,Mt=class{constructor(n){this.apiClient=n;this.tokenInfoCache=new Bt({defaultTtl:Na}),this.receivedTransactionCache=new Bt({defaultTtl:on}),this.pendingInfoCache=new Bt({defaultTtl:on}),this.gasBalanceCache=new Bt({defaultTtl:on})}getTokenInfo(){let n="TOKEN_INFO_CACHE_KEY",t=this.tokenInfoCache.get(n);if(t)return t;let a=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(n,a),a}async getGasBalance(n,t){let a=`GAS_BALANCE_${n}_${t}`,i=this.gasBalanceCache.get(a);if(i)return i;let r=this.apiClient.getGasBalance(n,t);return this.gasBalanceCache.put(a,r),r}async getPendingInfo(){let n="PENDING_INFO_CACHE_KEY",t=this.pendingInfoCache.get(n);if(t)return t;let a=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(n,a),a}async getReceiveTransactionCost(n){let t=`RECEIVE_TX_COST_${n.sourceChainId}_${n.destinationChainId}_${n.messenger}`,a=this.receivedTransactionCache.get(t);if(a)return a;let i=await this.apiClient.getReceiveTransactionCost(n);return this.receivedTransactionCache.put(t,i),i}async getTransferStatus(n,t){return this.apiClient.getTransferStatus(n,t)}async getPoolInfoMap(n){return this.apiClient.getPoolInfoMap(n)}};import Oa from"timed-cache";var Va=55*1e3,kt=class{constructor(n){this.client=n;this.poolInfoCache=new An}async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(n,t){return this.client.getTransferStatus(n,t)}getReceiveTransactionCost(n){return this.client.getReceiveTransactionCost(n)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(n,t){return this.client.getGasBalance(n,t)}async getPoolInfoByKey(n){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let t=this.poolInfoCache.get(n);if(t)return t;{let a=await this.client.getPoolInfoMap(n);return this.poolInfoCache.putAll(a),a[Ge(n)]}}async refreshPoolInfo(n){let t;if(n)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),t=await this.client.getPoolInfoMap(n);else{let a=await this.client.getChainDetailsMapAndPoolInfoMap();t=await this.client.getPoolInfoMap(En(a.chainDetailsMap))}this.poolInfoCache.putAll(t)}cachePut(n,t){this.poolInfoCache.put(Ge(n),t)}},An=class{constructor(){this.cache=new Oa({defaultTtl:Va})}putAll(n){for(let[t,a]of Object.entries(n))this.cache.put(t,a)}putAllIfNotExists(n){for(let[t,a]of Object.entries(n))this.cache.get(t)||this.cache.put(t,a)}put(n,t){this.cache.put(n,t)}get(n){let t=Ge(n);return this.cache.get(t)}};import Bi from"tronweb";import Mi from"web3";import{Big as Nn}from"big.js";async function N(s,n){return await s.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}function v(s){if(Nn(s).lte(0))throw new Tt("Amount must be greater than zero")}function R(s,n,t){let a=Nn(n).toFixed();if(a.split(".").length==2&&a.split(".")[1].length>t)throw new Pt(s,a.split(".")[1].length,t)}async function vt(s,n,t){return await Promise.race([s,new Promise((a,i)=>{setTimeout(()=>i(new qe(n)),t)})])}async function cn(s,n,t,a){if(t<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${t} was received.`);let i=0;for(;;)try{return await vt(s(),n,a)}catch{if(++i>=t)throw new qe(n)}}async function On(s,n,t,a=1.5,i=!1){let r=[],o=0;if(r.push(await s()),!n(r[r.length-1]))return r;let A=new Date(Date.now()+t*1e3).valueOf(),c=1e3,m=c;for(;Date.now()<A&&n(r[r.length-1]);)o++,i&&console.info(`Waiting ${c}ms before trying again (bringing the total wait time to ${m}ms so far, of total ${t*1e3}ms)`),await new Promise(u=>setTimeout(u,c)),c=c*a,new Date(Date.now()+c).valueOf()>A&&(c=A-Date.now(),i&&console.info(`was gonna wait too long; new waitTime: ${c}ms`)),m=c+m,r.push(await s(r[r.length-1])),i&&n(r[r.length-1])&&console.info(`${o}. Called ${s.name}; ${r.length} prev attempts. Most recent: ${JSON.stringify(r[r.length-1],null,2)}`);return r}import*as It from"@project-serum/anchor";import{PublicKey as $n}from"@solana/web3.js";import{Big as qa}from"big.js";var Vn=[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];var Gn=[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];import*as Z from"@project-serum/anchor";import{PublicKey as _}from"@solana/web3.js";async function re(s,n){return Z.utils.token.associatedAddress({mint:n,owner:s})}async function ke(s){let[n]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("config")],s);return n}async function Zn(s,n){let[t]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("lock"),Uint8Array.from(s)],n);return t}async function tt(s,n){let[t]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([s])],n);return t}async function Ze(s){let n=await ke(s),[t]=await _.findProgramAddress([n.toBuffer()],s);return t}async function _n(s,n){let[t]=await _.findProgramAddress([s.toBuffer()],n);return t}async function _e(s,n){let[t]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("token"),s.toBytes()],n);return t}async function Ln(s,n,t){let[a]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([s]),n],t);return a}async function mn(s,n){let[t]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([s])],n);return t}async function un(s,n){let[t]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([s])],n);return t}async function Xn(s,n){let[t]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("sent_message"),s],n);return t}async function ln(s,n,t){let[a]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("user_deposit"),n.toBytes(),s.toBytes()],t);return a}async function Kn(s,n){let[t]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("cctp_bridge"),s.toBytes()],n);return t}async function Qn(s,n){let[t]=await _.findProgramAddress([Z.utils.bytes.utf8.encode("token"),s.toBytes()],n);return t}function Yn(s,n){let[t]=_.findProgramAddressSync([Z.utils.bytes.utf8.encode("lock"),n.toBuffer()],s);return t}function Jn(s,n,t,a){let i=Ue("message_transmitter",t),r=Ue("token_messenger",a),o=Ue("__event_authority",a),A=Ue("token_minter",a),c=Ue("local_token",a,[n]),m=Ue("remote_token_messenger",a,[s.toString()]),u=Ue("sender_authority",a);return{messageTransmitterAccount:i,tokenMessenger:r,tokenMessengerEventAuthority:o,tokenMinter:A,localToken:c,remoteTokenMessengerKey:m,authorityPda:u}}function Ue(s,n,t=[]){let a=[Buffer.from(Z.utils.bytes.utf8.encode(s))];for(let r of t)typeof r=="string"?a.push(Buffer.from(Z.utils.bytes.utf8.encode(r))):Array.isArray(r)?a.push(Buffer.from(r)):Buffer.isBuffer(r)?a.push(r):a.push(r.toBuffer());return _.findProgramAddressSync(a,n)[0]}import{AnchorProvider as _a}from"@project-serum/anchor";import{Connection as La,PublicKey as Xa}from"@solana/web3.js";function ve(s,n){let t=new La(s,"confirmed"),a=new Xa(n);return new _a(t,{publicKey:a},{preflightCommitment:"confirmed",commitment:"confirmed"})}var se=class{};import{PublicKey as Ka}from"@solana/web3.js";import{Big as Pe}from"big.js";import Hn from"randombytes";import{Address as Qa}from"stellar-sdk";import*as jn from"tronweb";function Se(s,n,t){let a;switch(n){case"EVM":{a=Ya(s);break}case"SOLANA":{a=new Ka(s).toBuffer();break}case"TRX":{a=Ja(s);break}case"SRB":{a=new Qa(s).toBuffer();break}}switch(t){case"EVM":return"0x"+a.toString("hex");case"SOLANA":return Array.from(a);case"TRX":return a.toJSON().data;case"SRB":return a.toJSON().data}}function zn(s){return Buffer.from(s.replace(/^0x/i,""),"hex")}function Ya(s){let t=zn(s);return Buffer.concat([Buffer.alloc(32-t.length,0),t],32)}function Ja(s){let n=nt(s),t=zn(n);return Ha(t,32)}function nt(s){return Buffer.from(jn.utils.crypto.decodeBase58Address(s)).toString("hex").replace(/^41/,"0x")}function Ha(s,n){if(s.length>=n)return s;let t=Buffer.alloc(n,0);return s.copy(t,n-s.length),t}function Le(){return Hn(32)}function pn(){let s=Hn(32).readBigInt64BE();return s<0?s*-1n:s}function Re(s,n){let t={},a=n.sourceToken;return t.amount=B(n.amount,a.decimals).toFixed(),t.contractAddress=a.bridgeAddress,t.fromAccountAddress=n.fromAccountAddress,t.fromTokenAddress=Se(a.tokenAddress,s,s),t.toAccountAddress=n.toAccountAddress,t.toTokenAddress=Se(n.destinationToken.tokenAddress,s,s),t.minimumReceiveAmount=n.minimumReceiveAmount?B(n.minimumReceiveAmount,n.destinationToken.decimals).toFixed():"0",t}async function we(s,n,t){let a={};a.fromChainId=n.sourceToken.allbridgeChainId,a.fromChainSymbol=n.sourceToken.chainSymbol;let i=X[n.destinationToken.chainSymbol].chainType;a.fromTokenAddress=n.sourceToken.tokenAddress,a.toChainId=n.destinationToken.allbridgeChainId,a.toTokenAddress=n.destinationToken.tokenAddress,n.gasFeePaymentMethod==="stablecoin"?a.gasFeePaymentMethod="stablecoin":a.gasFeePaymentMethod="native";let r=n.sourceToken;if(n.messenger===3){if(!r.cctpAddress||!n.destinationToken.cctpAddress)throw new ie("Such route does not support CCTP protocol");a.contractAddress=r.cctpAddress}else a.contractAddress=r.bridgeAddress;a.messenger=n.messenger,a.fromAccountAddress=n.fromAccountAddress,a.amount=B(n.amount,r.decimals).toFixed();let{fee:o,feeFormat:A}=n;if(!o){let l=(await dn(a.fromChainId,n.sourceToken.chainType,a.toChainId,r.decimals,a.messenger,t))[a.gasFeePaymentMethod];if(!l)throw new je;o=l.int,A="int"}if(A=="float")switch(a.gasFeePaymentMethod){case"native":a.fee=B(o,U[r.chainType]).toFixed(0);break;case"stablecoin":a.fee=B(o,r.decimals).toFixed(0);break}else a.fee=o;let{extraGas:c,extraGasFormat:m}=n;if(c&&+c>0){if(m=="float")switch(a.gasFeePaymentMethod){case"native":a.extraGas=B(c,U[r.chainType]).toFixed(0);break;case"stablecoin":a.extraGas=B(c,r.decimals).toFixed(0);break}else a.extraGas=c;await za(a.extraGas,a.gasFeePaymentMethod,r,n.destinationToken,t)}return a.fromTokenAddress=Se(a.fromTokenAddress,s,s),a.toAccountAddress=Se(n.toAccountAddress,i,s),a.toTokenAddress=Se(a.toTokenAddress,i,s),a.gasFeePaymentMethod=="stablecoin"&&ja(a.amount,r.decimals,a.fee,a.extraGas),a}function ja(s,n,t,a){let i=Pe(s).minus(t).minus(a??0);if(i.lte(0))throw new Oe(`Amount not enough to pay fee, ${P(Pe(i).minus(1).neg(),n).toFixed()} stables is missing`)}async function dn(s,n,t,a,i,r){let o=await r.getReceiveTransactionCost({sourceChainId:s,destinationChainId:t,messenger:i}),A={native:{int:o.fee,float:P(o.fee,U[n]).toFixed()}};if(o.sourceNativeTokenPrice){let c=Me(new Pe(o.fee).mul(o.sourceNativeTokenPrice),U[n],a).toFixed(0,Pe.roundUp);A.stablecoin={int:c,float:P(c,a).toFixed()}}return A}async function za(s,n,t,a,i){let o=(await gn(t,a,i)).extraGasMax[n];if(!o)throw new je(`Impossible to pay extra gas by '${n}' payment method`);let A=o.int;if(Pe(s).gt(A))throw new bt(`Extra gas ${s} in int format, exceeded limit ${A} for '${n}' payment method`)}async function gn(s,n,t){let a={},i=await t.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:n.allbridgeChainId,messenger:1}),r=n.txCostAmount.maxAmount,o=P(r,U[n.chainType]).toFixed(),A=Pe(o).div(i.exchangeRate).toFixed(U[s.chainType],Pe.roundDown),c=B(A,U[s.chainType]).toFixed(0);if(a.native={int:c,float:A},i.sourceNativeTokenPrice){let m=Pe(A).mul(i.sourceNativeTokenPrice).toFixed(s.decimals,Pe.roundDown);a.stablecoin={int:B(m,s.decimals).toFixed(0),float:m}}return{extraGasMax:a,destinationChain:{gasAmountMax:{int:r,float:o},swap:{int:n.txCostAmount.swap,float:P(n.txCostAmount.swap,U[n.chainType]).toFixed()},transfer:{int:n.txCostAmount.transfer,float:P(n.txCostAmount.transfer,U[n.chainType]).toFixed()}},exchangeRate:i.exchangeRate,sourceNativeTokenPrice:i.sourceNativeTokenPrice}}function qn(s){return s.sourceToken.chainSymbol!==s.destinationToken.chainSymbol}var at=class extends se{constructor(t,a,i){super();this.web3=t;this.api=a;this.nodeRpcUrlsConfig=i;this.chainType="EVM"}async send(t){let a=await this.buildRawTransactionSend(t);return this.sendRawTransaction(a)}async buildRawTransactionSwap(t){let a=Re(this.chainType,t);return await this.buildRawTransactionSwapFromParams(a)}async buildRawTransactionSwapFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toAccountAddress:A,toTokenAddress:c,minimumReceiveAmount:m}=t,l=this.getBridgeContract(i).methods.swap(a,o,c,A,m);return Promise.resolve({from:r,to:i,data:l.encodeABI()})}async buildRawTransactionSend(t){let a=await we(this.chainType,t,this.api),{amount:i,contractAddress:r,fromAccountAddress:o,fromTokenAddress:A,toChainId:c,toAccountAddress:m,toTokenAddress:u,messenger:l,fee:f,gasFeePaymentMethod:y,extraGas:h}=a,T="0x"+Le().toString("hex"),g,d,S=f;if(h&&(S=qa(S).plus(h).toFixed()),l===3){let b=await this.buildRawTransactionCctpSend(t,a,S);g=b.sendMethod,d=b.value}else{let b=this.getBridgeContract(r);y==="stablecoin"?(g=b.methods.swapAndBridge(A,i,m,c,u,T,l,S),d="0"):(g=b.methods.swapAndBridge(A,i,m,c,u,T,l,0),d=S)}return Promise.resolve({from:o,to:r,value:d,data:g.encodeABI()})}async buildRawTransactionCctpSend(t,a,i){let{amount:r,contractAddress:o,toChainId:A,toAccountAddress:c,gasFeePaymentMethod:m}=a,u=this.getContract(Gn,o),l,f;if(t.destinationToken.chainType==="SOLANA"){let y,h=new $n(t.toAccountAddress),T=new $n(t.destinationToken.tokenAddress),g=await re(h,T),d=ve(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),t.toAccountAddress);It.setProvider(d);let S=await It.Spl.token(d).account.token.fetchNullable(g);if(S?.authority.equals(h))y=Se(g.toBase58(),"SOLANA",this.chainType);else{let b=await d.connection.getTokenAccountsByOwner(h,{mint:T});if(b.value.length===0&&!S)y=Se(g.toBase58(),"SOLANA",this.chainType);else if(b.value.length>0)y=Se(b.value[0].pubkey.toBase58(),"SOLANA",this.chainType);else throw new k("Associated account has wrong owner")}m==="stablecoin"?(l=u.methods.bridgeWithWalletAddress(r,y,c,A,i),f="0"):(l=u.methods.bridgeWithWalletAddress(r,y,c,A,0),f=i)}else m==="stablecoin"?(l=u.methods.bridge(r,c,A,i),f="0"):(l=u.methods.bridge(r,c,A,0),f=i);return{sendMethod:l,value:f}}async sendRawTransaction(t){let a=await this.web3.eth.estimateGas(t),i={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:r}=await this.web3.eth.sendTransaction({...t,gas:a,...i});return{txId:r}}getContract(t,a){return new this.web3.eth.Contract(t,a)}getBridgeContract(t){return this.getContract(Vn,t)}};var xt=class{constructor(n,t,a,i){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a;this.tokenService=i}async approve(n,t){let a,i;t?(a=n,i=t):i=n;let r=it(i.token,i.messenger);return this.tokenService.buildRawTransactionApprove({...i,spender:r},a)}async send(n,t){return v(n.amount),R("amount",n.amount,n.sourceToken.decimals),qn(n)?Dt(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionSend(n):Dt(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionSwap(n)}};import{BN as Ye,Program as hn,Spl as Ai,web3 as Ie}from"@project-serum/anchor";import{Keypair as ua,PublicKey as I,SystemProgram as ci}from"@solana/web3.js";import{Big as xe}from"big.js";var rt={version:"0.1.0",name:"bridge",instructions:[{name:"initialize",accounts:[{name:"admin",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"initializePool",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"token",isMut:!0,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializePoolArgs"}}]},{name:"initDepositAccount",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"deposit",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdraw",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amountLp",type:"u64"}]},{name:"swapAndBridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"messenger",isMut:!1,isSigner:!1},{name:"messengerConfig",isMut:!0,isSigner:!1},{name:"sentMessageAccount",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swapAndBridgeWormhole",accounts:[{name:"user",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"wormholeMessenger",isMut:!1,isSigner:!1},{name:"wormholeMessengerConfig",isMut:!0,isSigner:!1},{name:"wormholeProgram",isMut:!1,isSigner:!1},{name:"bridge",isMut:!0,isSigner:!1},{name:"message",isMut:!0,isSigner:!0},{name:"sequence",isMut:!0,isSigner:!1},{name:"feeCollector",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"clock",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swap",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"sendMint",isMut:!1,isSigner:!1},{name:"receiveMint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"sendPool",isMut:!0,isSigner:!1},{name:"receivePool",isMut:!0,isSigner:!1},{name:"sendBridgeToken",isMut:!0,isSigner:!1},{name:"receiveBridgeToken",isMut:!0,isSigner:!1},{name:"sendUserToken",isMut:!0,isSigner:!1},{name:"receiveUserToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"},{name:"receiveAmountMin",type:"u64"}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"receiveAndSwap",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"receiveAndSwapWormhole",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"claimRewards",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setAdmin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAdmin",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"startBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"stopBridge",accounts:[{name:"stopAuthority",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"setRebalancer",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"rebalancer",isMut:!1,isSigner:!1}],args:[]},{name:"setStopAuthority",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAuthority",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"setAllbridgeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setWormholeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setPoolFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setBalanceRatioMin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"balanceRatioMinBp",type:"u16"}]},{name:"setPoolAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"addOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"removeOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"adjustTotalLpAmount",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[]}],accounts:[{name:"chainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"config",type:{kind:"struct",fields:[{name:"admin",type:"publicKey"},{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"rebalancer",type:"publicKey"},{name:"stopAuthority",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"canSwap",type:"bool"},{name:"canDeposit",type:"bool"},{name:"canWithdraw",type:"bool"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"sentTokenAddress",type:"publicKey"},{name:"amount",type:"u64"},{name:"vusdAmount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:"Messenger"}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"otherBridgeToken",type:{kind:"struct",fields:[]}},{name:"pool",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"tokenBalance",type:"u64"},{name:"vUsdBalance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"totalLpAmount",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"accRewardPerShareP",type:"u128"},{name:"adminFeeAmount",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"vUsdAmount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"userDeposit",type:{kind:"struct",fields:[{name:"userAddress",type:"publicKey"},{name:"mint",type:"publicKey"},{name:"lpAmount",type:"u64"},{name:"rewardDebt",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"vusdAmount",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"publicKey"},{name:"sourceChainId",type:"u8"},{name:"receiveToken",type:"publicKey"},{name:"messenger",type:{defined:"Messenger"}},{name:"hash",type:{array:["u8",32]}},{name:"receiveAmountMin",type:"u64"}]}},{name:"RewardError",type:{kind:"enum",variants:[{name:"FeeTooHigh"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}}],errors:[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"PoolInfo overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"}]};var ea={version:"0.1.0",name:"cctp_bridge",instructions:[{name:"initialize",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"bridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"messageSentEventData",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!0,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"cctpMessenger",isMut:!1,isSigner:!1},{name:"messageTransmitterProgram",isMut:!1,isSigner:!1},{name:"messageTransmitterAccount",isMut:!0,isSigner:!1},{name:"tokenMessenger",isMut:!1,isSigner:!1},{name:"tokenMinter",isMut:!1,isSigner:!1},{name:"localToken",isMut:!0,isSigner:!1},{name:"remoteTokenMessengerKey",isMut:!1,isSigner:!1},{name:"authorityPda",isMut:!1,isSigner:!1},{name:"eventAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"setAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setCctpTokenMessengerMinter",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]}],accounts:[{name:"cctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"admin",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"adminFeeShareBp",type:"u64"},{name:"adminFeeAmount",type:"u64"}]}},{name:"chainBridge",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"amount",type:"u64"},{name:"adminFee",type:"u64"},{name:"relayerFee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"slot",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gasOracleProgramId",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"}]}}],errors:[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}]};import{Spl as $a}from"@project-serum/anchor";import ei from"big.js";import Ft from"web3";async function Ke(s,n){return await $a.token(n).account.token.fetch(s)}async function ta(s,n,t){let a=await n.account.pool.fetch(t),i=a.decimals,r=ei(a.feeShareBp.toString()).div(1e4).toFixed(),o={aValue:a.a.toString(),dValue:a.d.toString(),totalLpAmount:a.totalLpAmount.toString(),tokenBalance:a.tokenBalance.toString(),vUsdBalance:a.vUsdBalance.toString(),accRewardPerShareP:a.accRewardPerShareP.toString()};return ge(s,{decimals:i,feeShare:r},o)}function na(s){let n=s.amount,t="0x"+s.recipient.toString("hex"),a=s.sourceChainId,i=s.destinationChainId,r="0x"+s.receiveToken.toString("hex"),o="0x"+s.nonce.toString("hex"),A=1,c="0x"+s.chainBridge.toString("hex"),m=Ft.utils.encodePacked({t:"uint256",v:n},{t:"bytes32",v:t},{t:"uint256",v:a},{t:"bytes32",v:r},{t:"uint256",v:o},{t:"uint8",v:A});if(!m)throw new k("message cannot be undefined");let u=Ft.utils.keccak256(Buffer.from(m.replace("0x",""),"hex")),l=Buffer.from(u.replace("0x",""),"hex");l[0]=a,l[1]=i;let f=Ft.utils.encodePacked({t:"bytes32",v:"0x"+l.toString("hex")},{t:"bytes32",v:c});if(!f)throw new Ve("messageWithSigner cannot be undefined");let y=Ft.utils.keccak256(Buffer.from(f.replace("0x",""),"hex")),h=Buffer.from(y.replace("0x",""),"hex");return h[0]=l[0],h[1]=l[1],h}import{ComputeBudgetInstruction as ia,ComputeBudgetProgram as Wt,Connection as ra,TransactionMessage as ti}from"@solana/web3.js";import{Big as ni}from"big.js";import{AddressLookupTableAccount as aa}from"@solana/web3.js";async function Ne(s,n){return await Promise.all(s.message.addressTableLookups.map(async t=>new aa({key:t.accountKey,state:aa.deserialize(await n.getAccountInfo(t.accountKey).then(a=>{if(!a)throw new k("Cannot get AccountInfo");return a.data}))})))}var fn="AUTO";async function Qe(s,n,t){let a=new ra(t,"confirmed"),i=(await a.simulateTransaction(s)).value.unitsConsumed;await oa(s.instructions,i,n,a)}async function sa(s,n,t){let a=new ra(t,"confirmed"),i=await Ne(s,a),r=ti.decompile(s.message,{addressLookupTableAccounts:i});if(s.serialize().length>1232)throw new wt;await oa(r.instructions,769230,n,a),s.message=r.compileToV0Message(i)}async function oa(s,n,t,a){if(n>0){let i=ai(n,s);if(t?.solana){let r=t.solana;if(r===fn)await yn(s,a);else if("pricePerUnitInMicroLamports"in r)await yn(s,a,r.pricePerUnitInMicroLamports);else{let o=ni(r.extraFeeInLamports).div(i).mul($e(6)).toFixed(0);await yn(s,a,o)}}}}function ai(s,n){let t=n.findIndex(r=>r.programId.equals(Wt.programId)&&ia.decodeInstructionType(r)==="SetComputeUnitLimit"),a=Number((s*1.3).toFixed(0)),i=Wt.setComputeUnitLimit({units:a});return t>=0?n[t]=i:n.push(i),a.toString()}async function yn(s,n,t){let a=s.findIndex(o=>o.programId.equals(Wt.programId)&&ia.decodeInstructionType(o)==="SetComputeUnitPrice"),i=BigInt(t||await ii(n)),r=Wt.setComputeUnitPrice({microLamports:i});return a>=0?s[a]=r:s.push(r),i.toString()}async function ii(s){let n=await s.getRecentPrioritizationFees(),t=0;for(let a of n)t+=a.prioritizationFee;return(t/n.length).toFixed(0)}import{NATIVE_MINT as ri}from"@solana/spl-token";import{Connection as si,TransactionMessage as Aa,VersionedTransaction as oi}from"@solana/web3.js";import ca,{AxiosError as ma}from"axios";var Et=class{constructor(n,t){this.connection=new si(n),this.jupiterUrl=t.replace(/\/$/,"")}async getJupiterSwapTx(n,t,a){let i;try{i=await ca.get(`${this.jupiterUrl}/quote?inputMint=${t}
|
|
2
2
|
&outputMint=${ri.toString()}
|
|
3
3
|
&amount=${a}
|
|
4
4
|
&slippageBps=100
|
|
5
|
-
&onlyDirectRoutes=true`)}catch(c){throw c instanceof ma&&c.response&&c.response.data&&c.response.data.error?new K(c.response.data.error):new K("Cannot get route")}let r;try{r=await ca.post("https://quote-api.jup.ag/v6/swap",JSON.stringify({quoteResponse:i.data,userPublicKey:n,wrapAndUnwrapSol:!0}))}catch(c){throw c instanceof ma&&c.response&&c.response.data&&c.response.data.error?new K(c.response.data.error):new K("Cannot get swap transaction")}let o;if(r?.data?.swapTransaction)o=r.data.swapTransaction;else throw new K("Cannot get swap transaction");let A=Buffer.from(o,"base64");return{tx:oi.deserialize(A)}}async amendJupiterWithSdkTx(n,t){try{let a=await Ne(n,this.connection),i=await Ne(t,this.connection),r=Aa.decompile(n.message,{addressLookupTableAccounts:a}),o=Aa.decompile(t.message,{addressLookupTableAccounts:i});return o.instructions.shift(),r.instructions.push(...o.instructions),a.push(...i),n.message=r.compileToV0Message(a),t.message.header.numRequiredSignatures===2&&n.signatures.length===1&&n.signatures.push(t.signatures[0]),n}catch(a){throw a instanceof Error&&a.message?new K(`Some error occurred during creation final swap and bridge transaction. ${a.message}`):new K("Some error occurred during creation final swap and bridge transaction")}}};var Tn=1e6,Ut=class extends se{constructor(t,a,i){super();this.solanaRpcUrl=t;this.params=a;this.api=i;this.chainType="SOLANA";this.jupiterService=new Et(t)}async buildRawTransactionSwap(t){let a=Re(this.chainType,t);return await this.buildSwapTransaction(a,t.sourceToken.poolAddress,t.destinationToken.poolAddress,t.txFeeParams)}async buildSwapTransaction(t,a,i,r){let{fromAccountAddress:o,amount:A,contractAddress:c,fromTokenAddress:m,toTokenAddress:u,toAccountAddress:l,minimumReceiveAmount:f}=t,y=o,h=c,T=m,g=u,d=i,S=l,b=new I(y),V=ve(this.solanaRpcUrl,b.toString()),M=new hn(rt,h,V),w=await Ze(M.programId),J=await ke(M.programId),W=new I(T),me=await _e(W,M.programId),ue=new I(a),he=await re(b,W),te=new I(S),L=new I(g),$=await _e(L,M.programId),ne=new I(d),H=await re(te,L),le=[Ie.ComputeBudgetProgram.setComputeUnitLimit({units:Tn})];try{await Ke(H,V)}catch{let Ra=await Ai.associatedToken(V).methods.create().accounts({mint:L,owner:te,associatedAccount:H}).instruction();le.push(Ra)}let pe=await M.methods.swap(new Ye(A),new Ye(f||0)).accounts({payer:b,config:J,bridgeAuthority:w,user:b,sendBridgeToken:me,sendMint:W,sendPool:ue,sendUserToken:he,receiveBridgeToken:$,receiveMint:L,receivePool:ne,receiveUserToken:H}).preInstructions(le).transaction(),ae=V.connection;return pe.recentBlockhash=(await ae.getLatestBlockhash()).blockhash,pe.feePayer=b,await Qe(pe,r,this.solanaRpcUrl),await this.convertToVersionedTransaction(pe,ae)}async buildRawTransactionSend(t){let a=await we(this.chainType,t,this.api),i=this.addPoolAddress(t,a),r=i.gasFeePaymentMethod=="stablecoin",o;if(r)try{let m=xe(i.fee);i.extraGas&&(m=m.plus(i.extraGas)),i=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(t.sourceToken.decimals,i);let{tx:u}=await this.jupiterService.getJupiterSwapTx(t.fromAccountAddress,t.sourceToken.tokenAddress,m.toFixed(0));if(o=u,i.amount=xe(i.amount).minus(m).toFixed(0),xe(i.amount).lte(0))throw new Oe(`Amount not enough to pay fee, ${P(xe(i.amount).minus(1).neg(),t.sourceToken.decimals).toFixed()} stables is missing`)}catch(m){throw m instanceof D?m:m instanceof Error&&m.message?new K(`Some error occurred during creation Jupiter swap transaction. ${m.message}`):new K("Some error occurred during creation Jupiter swap transaction")}let A,c;switch(a.messenger){case 1:{let m=await this.prepareSwapAndBridgeData(i);A=await this.buildSwapAndBridgeAllbridgeTransaction(m);break}case 2:{let m=await this.prepareSwapAndBridgeData(i),{transaction:u,messageAccount:l}=await this.buildSwapAndBridgeWormholeTransaction(m);A=u,c=l;break}case 3:{let m=await this.prepareSwapAndBridgeCctpData(i),{transaction:u,messageSentEventDataKeypair:l}=await this.buildSwapAndBridgeCctpTransaction(t.destinationToken.chainSymbol,m);A=u,c=l;break}}if(r){if(!o)throw new K("Swap tx is absent");A=await this.jupiterService.amendJupiterWithSdkTx(o,A)}return await sa(A,t.txFeeParams,this.solanaRpcUrl),c&&A.sign([c]),A}addPoolAddress(t,a){return{...a,poolAddress:t.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(t,a){if(a.gasFeePaymentMethod=="stablecoin"){let i=(await this.api.getReceiveTransactionCost({sourceChainId:a.fromChainId,destinationChainId:a.toChainId,messenger:a.messenger})).sourceNativeTokenPrice;a.fee=xe(a.fee).div(i).mul(xe(10).pow(U.SOLANA-t)).toFixed(0),a.extraGas&&(a.extraGas=xe(a.extraGas).div(i).mul(xe(10).pow(U.SOLANA-t)).toFixed(0)),a.gasFeePaymentMethod="native"}return a}getExtraGasInstruction(t,a,i){return Ie.SystemProgram.transfer({fromPubkey:a,toPubkey:i,lamports:+t})}async prepareSwapAndBridgeData(t){let{amount:a,contractAddress:i,fromChainId:r,fromAccountAddress:o,fromTokenAddress:A,toChainId:c,toAccountAddress:m,toTokenAddress:u,poolAddress:l,extraGas:f}=t,y=A,h=o,T=c,g=u,d=m,S=i,b=r,V=ve(this.solanaRpcUrl,h),M=new hn(rt,S,V),w=Array.from(Le()),J=new I(l),W=await ta(a,M,J),me=await Zn(w,M.programId),ue=await Ze(M.programId),he=await re(new I(h),new I(y)),te=await _e(new I(y),M.programId),L=await mn(T,M.programId),$=await Ln(T,Buffer.from(g),M.programId),ne=await ke(M.programId),H=await M.account.config.fetch(ne),le=await tt(T,H.gasOracleProgramId),pe=await tt(b,H.gasOracleProgramId),ae=na({amount:W,recipient:Buffer.from(d),nonce:Buffer.from(w),receiveToken:Buffer.from(g),destinationChainId:T,sourceChainId:b,chainBridge:(await Ze(M.programId)).toBuffer()}),C={};return C.bridge=M,C.amount=new Ye(a),C.vusdAmount=new Ye(W),C.nonce=w,C.recipient=Array.from(d),C.receiveToken=Array.from(g),C.poolAccount=J,C.lockAccount=me,C.bridgeAuthority=ue,C.userToken=he,C.bridgeTokenAccount=te,C.chainBridgeAccount=L,C.otherBridgeTokenAccount=$,C.userAccount=new I(h),C.destinationChainId=T,C.mint=new I(y),C.config=ne,C.configAccountInfo=H,C.gasPrice=le,C.thisGasPrice=pe,C.message=ae,f&&(C.extraGasInstruction=this.getExtraGasInstruction(f,C.userAccount,ne)),C}async buildSwapAndBridgeAllbridgeTransaction(t){let{bridge:a,vusdAmount:i,nonce:r,recipient:o,receiveToken:A,poolAccount:c,lockAccount:m,bridgeAuthority:u,userToken:l,bridgeTokenAccount:f,chainBridgeAccount:y,otherBridgeTokenAccount:h,userAccount:T,destinationChainId:g,mint:d,config:S,configAccountInfo:b,gasPrice:V,thisGasPrice:M,message:w,extraGasInstruction:J}=t,W=b.allbridgeMessengerProgramId,me=await un(g,W),ue=await ke(W),he=await Xn(w,W),te=[];J&&te.push(J);let L=await a.methods.swapAndBridge({vusdAmount:i,nonce:r,destinationChainId:g,recipient:o,receiveToken:A}).accounts({mint:d,user:T,config:S,lock:m,pool:c,gasPrice:V,thisGasPrice:M,bridgeAuthority:u,userToken:l,bridgeToken:f,chainBridge:y,messenger:W,messengerGasUsage:me,messengerConfig:ue,sentMessageAccount:he,otherBridgeToken:h}).preInstructions([Ie.ComputeBudgetProgram.setComputeUnitLimit({units:Tn})]).postInstructions(te).transaction(),$=ve(this.solanaRpcUrl,T.toString()).connection;return L.recentBlockhash=(await $.getLatestBlockhash()).blockhash,L.feePayer=T,await this.convertToVersionedTransaction(L,$)}async convertToVersionedTransaction(t,a){let i=await a.getAddressLookupTable(new I(this.params.solanaLookUpTable)).then(o=>o.value);if(!i)throw new k("Cannot find allbridgeLookupTableAccount");let r=new Ie.TransactionMessage({payerKey:t.feePayer,recentBlockhash:t.recentBlockhash,instructions:t.instructions}).compileToV0Message([i]);return new Ie.VersionedTransaction(r)}async buildSwapAndBridgeWormholeTransaction(t){let{bridge:a,vusdAmount:i,nonce:r,recipient:o,receiveToken:A,poolAccount:c,lockAccount:m,bridgeAuthority:u,userToken:l,bridgeTokenAccount:f,chainBridgeAccount:y,otherBridgeTokenAccount:h,userAccount:T,destinationChainId:g,mint:d,config:S,configAccountInfo:b,gasPrice:V,thisGasPrice:M,message:w,extraGasInstruction:J}=t,W=this.params.wormholeMessengerProgramId,[me]=I.findProgramAddressSync([Buffer.from("Bridge")],new I(W)),[ue]=I.findProgramAddressSync([Buffer.from("fee_collector")],new I(W)),[he]=I.findProgramAddressSync([Buffer.from("Sequence"),u.toBuffer()],new I(W)),te=await un(g,b.wormholeMessengerProgramId),L=await ke(b.wormholeMessengerProgramId),$=ua.generate(),ne=ve(this.solanaRpcUrl,T.toString()),H=await ne.connection.getAccountInfo(me);if(H==null)throw new k("Cannot fetch wormhole bridge account info");let le=new Ye(H.data.slice(16,24),"le").toString(),pe=ci.transfer({fromPubkey:T,toPubkey:ue,lamports:+le}),ae=[];J&&ae.push(J);let C={mint:d,user:T,config:S,lock:m,pool:c,gasPrice:V,thisGasPrice:M,bridgeAuthority:u,userToken:l,bridgeToken:f,chainBridge:y,otherBridgeToken:h,messengerGasUsage:te,wormholeProgram:W,bridge:me,message:$.publicKey,wormholeMessenger:b.wormholeMessengerProgramId,sequence:he,feeCollector:ue,wormholeMessengerConfig:L,clock:Ie.SYSVAR_CLOCK_PUBKEY},ft=await a.methods.swapAndBridgeWormhole({vusdAmount:i,nonce:r,destinationChainId:g,recipient:o,receiveToken:A}).accounts(C).preInstructions([Ie.ComputeBudgetProgram.setComputeUnitLimit({units:Tn}),pe]).postInstructions(ae).signers([$]).transaction();return ft.recentBlockhash=(await ne.connection.getLatestBlockhash()).blockhash,ft.feePayer=T,{transaction:await this.convertToVersionedTransaction(ft,ne.connection),messageAccount:$}}async prepareSwapAndBridgeCctpData(t){let{contractAddress:a,amount:i,fromAccountAddress:r,fromTokenAddress:o,toChainId:A,toAccountAddress:c,toTokenAddress:m,extraGas:u}=t,l=a;if(!l)throw new ie("Such route does not support CCTP protocol");let f=4,y=r,h=m,T=c,g=ve(this.solanaRpcUrl,y),d=new hn(ea,l,g),S=new I(o),b=await Kn(S,d.programId),V=new I(y),M=await d.account.cctpBridge.fetch(b),w={};return w.cctpBridge=d,w.cctpBridgeAccount=b,w.cctpAddressAccount=new I(l),w.amount=new Ye(i),w.recipient=Array.from(T),w.receiveToken=Array.from(h),w.userToken=await re(V,S),w.bridgeAuthority=await _n(b,d.programId),w.bridgeTokenAccount=await Qn(S,d.programId),w.chainBridgeAccount=await mn(A,d.programId),w.userAccount=V,w.destinationChainId=A,w.mint=S,w.gasPrice=await tt(A,M.gasOracleProgramId),w.thisGasPrice=await tt(f,M.gasOracleProgramId),w.provider=g,u&&(w.extraGasInstruction=this.getExtraGasInstruction(u,w.userAccount,b)),w}async buildSwapAndBridgeCctpTransaction(t,a){let{cctpBridge:i,cctpBridgeAccount:r,amount:o,recipient:A,receiveToken:c,bridgeAuthority:m,userToken:u,bridgeTokenAccount:l,chainBridgeAccount:f,userAccount:y,destinationChainId:h,mint:T,gasPrice:g,thisGasPrice:d,extraGasInstruction:S,provider:b}=a,V=this.params.cctpParams.cctpDomains[t],M=this.params.cctpParams.cctpTransmitterProgramId,w=this.params.cctpParams.cctpTokenMessengerMinter;if(V==null||!M||!w)throw new k("CCTP is not configured");let J=new I(M),W=new I(w),{messageTransmitterAccount:me,tokenMessenger:ue,tokenMessengerEventAuthority:he,tokenMinter:te,localToken:L,remoteTokenMessengerKey:$,authorityPda:ne}=Jn(V,T,J,W),H=[];S&&H.push(S);let le=ua.generate(),pe=Yn(i.programId,le.publicKey),ae=await i.methods.bridge({amount:o,destinationChainId:h,recipient:A,receiveToken:c}).accounts({mint:T,user:y,cctpBridge:r,messageSentEventData:le.publicKey,lock:pe,cctpMessenger:W,messageTransmitterProgram:J,messageTransmitterAccount:me,tokenMessenger:ue,tokenMinter:te,localToken:L,remoteTokenMessengerKey:$,authorityPda:ne,eventAuthority:he,bridgeToken:l,gasPrice:g,thisGasPrice:d,chainBridge:f,userToken:u,bridgeAuthority:m}).preInstructions([Ie.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(H).transaction(),C=b.connection;return ae.recentBlockhash=(await C.getLatestBlockhash()).blockhash,ae.feePayer=y,{transaction:await this.convertToVersionedTransaction(ae,C),messageSentEventDataKeypair:le}}send(t){throw new Q}};import{Big as Pi}from"big.js";import{Address as Pn}from"stellar-sdk";import{Address as Ot,ContractSpec as bi}from"stellar-sdk";import{Account as mi,Address as mA,BASE_FEE as ui,Contract as li,SorobanRpc as Nt,TimeoutInfinite as pi,TransactionBuilder as di}from"stellar-sdk";var oe=class{constructor(n){this.value=n}unwrapErr(){throw new Error("No error")}unwrap(){return"value"in this.value?this.value.value:this.value}isOk(){return!0}isErr(){return!this.isOk()}},ee=class{constructor(n){this.error=n}unwrapErr(){return"error"in this.error?this.error.error:this.error}unwrap(){throw new Error(this.error.message)}isOk(){return!1}isErr(){return!this.isOk()}},gi=/Error\(Contract, #(\d+)\)/,fi="GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF",F=class s{constructor(n){this.options=n;this.simulate=async()=>(this.simulation=await this.server.simulateTransaction(this.raw),Nt.Api.isSimulationSuccess(this.simulation)&&(this.raw=Nt.assembleTransaction(this.raw,this.simulation).build()),this);this.getAccount=()=>new mi(fi,"0");this.server=new Nt.Server(this.options.rpcUrl,{allowHttp:this.options.rpcUrl.startsWith("http://")})}static async fromSimulation(n){let t=new s(n),a=new li(n.contractId);return t.raw=new di(t.getAccount(),{fee:n.fee?.toString(10)??ui,networkPassphrase:n.networkPassphrase}).addOperation(a.call(n.method,...n.args??[])).setTimeout(pi).build(),await t.simulate()}get simulationData(){if(this.simulationResult&&this.simulationTransactionData)return{result:this.simulationResult,transactionData:this.simulationTransactionData};let n=this.simulation;if(Nt.Api.isSimulationError(n))throw new Error(`Transaction simulation failed: "${n.error}"`);if(!n.result)throw new Error(`Expected an invocation simulation, but got no 'result' field. Simulation: ${JSON.stringify(n,null,2)}`);return this.simulationResult=n.result,this.simulationTransactionData=n.transactionData.build(),{result:this.simulationResult,transactionData:this.simulationTransactionData}}get result(){try{return this.options.parseResultXdr(this.simulationData.result.retval)}catch(n){let t=this.parseError(n.toString());if(t)return t;throw n}}parseError(n){if(!this.options.errorTypes)return;let t=n.match(gi);if(!t)return;let a=parseInt(t[1],10),i=this.options.errorTypes[a];if(i.message)return new ee(i)}};import{Address as dA,BASE_FEE as yi,Contract as hi,Operation as Ti,SorobanRpc as bn,TimeoutInfinite as la,TransactionBuilder as pa}from"stellar-sdk";var Ce=class s{constructor(n){this.options=n;this.simulate=async()=>(this.simulation=await this.server.simulateTransaction(this.raw),bn.Api.isSimulationSuccess(this.simulation)&&(this.raw=bn.assembleTransaction(this.raw,this.simulation).build()),this);this.server=new bn.Server(this.options.rpcUrl,{allowHttp:this.options.rpcUrl.startsWith("http://")})}static async xdrFromSimulation(n){let t=new s(n),a=new hi(n.contractId);t.raw=new pa(await t.server.getAccount(n.account),{fee:n.fee?.toString(10)??yi,networkPassphrase:n.networkPassphrase}).addOperation(a.call(n.method,...n.args??[])).setTimeout(la).build();let i=await t.simulate(),r=i.raw.operations[0];return i.raw=new pa(await t.server.getAccount(n.account),{fee:i.raw.fee,networkPassphrase:n.networkPassphrase}).setTimeout(la).addOperation(Ti.invokeHostFunction({...r,auth:r.auth??[]})).build(),await i.simulate(),i.raw.toXDR()}};var da={0:{message:""},1:{message:""},2:{message:""},3:{message:""},4:{message:""},5:{message:""},6:{message:""},7:{message:""},8:{message:""},9:{message:""},103:{message:""},104:{message:""},105:{message:""},106:{message:""},107:{message:""},108:{message:""},109:{message:""},203:{message:""},204:{message:""},205:{message:""},206:{message:""},207:{message:""},208:{message:""},209:{message:""},210:{message:""},211:{message:""},212:{message:""},214:{message:""},215:{message:""},216:{message:""},217:{message:""},218:{message:""},300:{message:""},301:{message:""},302:{message:""},303:{message:""},400:{message:""}},st=class{constructor(n){this.options=n;this.parsers={swapAndBridge:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("swap_and_bridge",n)),swap:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("swap",n))};this.swapAndBridge=async({sender:n,token:t,amount:a,recipient:i,destination_chain_id:r,receive_token:o,nonce:A,gas_amount:c,fee_token_amount:m},u={})=>await Ce.xdrFromSimulation({method:"swap_and_bridge",args:this.spec.funcArgsToScVals("swap_and_bridge",{sender:new Ot(n),token:new Ot(t),amount:a,recipient:i,destination_chain_id:r,receive_token:o,nonce:A,gas_amount:c,fee_token_amount:m}),account:n,...u,...this.options,errorTypes:da,parseResultXdr:this.parsers.swapAndBridge});this.swap=async({sender:n,amount:t,token:a,receive_token:i,recipient:r,receive_amount_min:o},A={})=>await Ce.xdrFromSimulation({method:"swap",args:this.spec.funcArgsToScVals("swap",{sender:new Ot(n),amount:t,token:a,receive_token:i,recipient:new Ot(r),receive_amount_min:o}),account:n,...A,...this.options,errorTypes:da,parseResultXdr:this.parsers.swap});this.spec=new bi(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJY2xhaW1hYmxlAAAAAAAAAQAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACWNsYWltYWJsZQAAAAAAAAEAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAJQAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"])}};var Vt=class extends se{constructor(t,a,i){super();this.nodeRpcUrlsConfig=t;this.params=a;this.api=i;this.chainType="SRB"}async buildRawTransactionSend(t){let a=await we(this.chainType,t,this.api);return await this.buildRawTransactionSendFromParams(a)}async buildRawTransactionSendFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toChainId:A,toAccountAddress:c,toTokenAddress:m,fee:u,gasFeePaymentMethod:l,extraGas:f}=t,y=u;f&&(y=Pi(y).plus(f).toFixed());let h=this.getContract(st,i),T;return l==="stablecoin"?T=await h.swapAndBridge({sender:r,token:Pn.contract(Buffer.from(o)).toString(),amount:BigInt(a),recipient:Buffer.from(c),destination_chain_id:+A,receive_token:Buffer.from(m),nonce:pn(),gas_amount:BigInt(0),fee_token_amount:BigInt(y)}):T=await h.swapAndBridge({sender:r,token:Pn.contract(Buffer.from(o)).toString(),amount:BigInt(a),recipient:Buffer.from(c),destination_chain_id:+A,receive_token:Buffer.from(m),nonce:pn(),gas_amount:BigInt(y),fee_token_amount:BigInt(0)}),T}async buildRawTransactionSwap(t){let a=Re(this.chainType,t);return await this.buildRawTransactionSwapFromParams(a)}async buildRawTransactionSwapFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toAccountAddress:A,toTokenAddress:c,minimumReceiveAmount:m}=t;return await this.getContract(st,i).swap({sender:r,amount:BigInt(a),token:Pn.contract(Buffer.from(o)).toBuffer(),receive_token:Buffer.from(c),recipient:A,receive_amount_min:BigInt(m)})}send(t){throw new Q}getContract(t,a){let i={contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new t(i)}};import{Big as Ci}from"big.js";import Si from"bn.js";function Gt(s){return"0x"+new Si(s).toString("hex")}function ga(s){return new Promise(n=>setTimeout(()=>n(),s))}var Je=s=>(...n)=>new Promise((t,a)=>s(...n,(i,r)=>i?a(i):t(r)));async function Zt(s,n){let t=await s.trx.sign(n);if(!t.signature)throw new Ve("Transaction was not signed properly");let i=(await s.trx.sendRawTransaction(t)).txid;return await wi(s,i),{txId:i}}async function wi(s,n,t=1e4){let a=Date.now();for(;;){if(Date.now()-a>t)throw new je("Transaction not found");let i=await s.trx.getUnconfirmedTransactionInfo(n);if(!i?.receipt){await ga(2e3);continue}if(i.receipt.result==="SUCCESS")return i;throw new je(`Transaction status is ${i.receipt.result}`)}}var ot=class extends se{constructor(t,a){super();this.tronWeb=t;this.api=a;this.chainType="TRX"}async send(t){let a=await we(this.chainType,t,this.api),i=await this.buildRawTransactionSendFromParams(a);return await Zt(this.tronWeb,i)}async buildRawTransactionSwap(t){let a=Re(this.chainType,t);return await this.buildRawTransactionSwapFromParams(a)}async buildRawTransactionSwapFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toAccountAddress:A,toTokenAddress:c,minimumReceiveAmount:m}=t,u=[{type:"uint256",value:a},{type:"bytes32",value:o},{type:"bytes32",value:c},{type:"address",value:A},{type:"uint256",value:m}];return this.buildRawTransaction(i,"swap(uint256,bytes32,bytes32,address,uint256)",u,"0",r)}async buildRawTransactionSend(t){let a=await we(this.chainType,t,this.api);return this.buildRawTransactionSendFromParams(a)}async buildRawTransactionSendFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toChainId:A,toAccountAddress:c,toTokenAddress:m,messenger:u,fee:l,gasFeePaymentMethod:f,extraGas:y}=t,h=l;y&&(h=Ci(h).plus(y).toFixed());let T=Le().toJSON().data,g,d,S;return u==3?(f==="stablecoin"?(g=[{type:"uint256",value:a},{type:"bytes32",value:c},{type:"uint256",value:A},{type:"uint256",value:h}],d="0"):(g=[{type:"uint256",value:a},{type:"bytes32",value:c},{type:"uint256",value:A},{type:"uint256",value:0}],d=h),S="bridge(uint256,bytes32,uint256,uint256)"):(f==="stablecoin"?(g=[{type:"bytes32",value:o},{type:"uint256",value:a},{type:"bytes32",value:c},{type:"uint256",value:A},{type:"bytes32",value:m},{type:"uint256",value:T},{type:"uint8",value:u},{type:"uint256",value:h}],d="0"):(g=[{type:"bytes32",value:o},{type:"uint256",value:a},{type:"bytes32",value:c},{type:"uint256",value:A},{type:"bytes32",value:m},{type:"uint256",value:T},{type:"uint8",value:u},{type:"uint256",value:0}],d=h),S="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)"),this.buildRawTransaction(i,S,g,d,r)}async buildRawTransaction(t,a,i,r,o){let A=await this.tronWeb.transactionBuilder.triggerSmartContract(t,a,{callValue:r},i,o);if(!A?.result?.result)throw new k("Unknown error: "+JSON.stringify(A,null,2));return A.transaction}};var _t=class{constructor(n,t,a,i){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a;this.tokenService=i;this.rawTxBuilder=new xt(n,t,a,i)}async getAllowance(n,t){let a,i;t?(a=n,i=t):i=n;let r=it(i.token,i.messenger);return await this.tokenService.getAllowance({...i,spender:r},a)}async checkAllowance(n,t){let a,i;t?(a=n,i=t):i=n;let r=it(i.token,i.messenger);return this.tokenService.checkAllowance({...i,spender:r},a)}async approve(n,t){let a=it(t.token,t.messenger);return this.tokenService.approve(n,{...t,spender:a})}async send(n,t){return v(t.amount),R("amount",t.amount,t.sourceToken.decimals),Dt(t.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,n).send(t)}};function it(s,n){if(n&&n==3){if(s.cctpAddress)return s.cctpAddress;throw new ie("Such route does not support CCTP protocol")}else return s.bridgeAddress}function Dt(s,n,t,a,i){switch(X[s].chainType){case"EVM":{if(i)return new at(i,n,t);{let r=t.getNodeRpcUrl(s);return new at(new Mi(r),n,t)}}case"TRX":{if(i)return new ot(i,n);{let r=t.getNodeRpcUrl(s);return new ot(new Bi({fullHost:r}),n)}}case"SOLANA":return new Ut(t.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:a.wormholeMessengerProgramId,solanaLookUpTable:a.solanaLookUpTable,cctpParams:a.cctpParams},n);case"SRB":return new Vt(t,a,n)}}import{Big as Ei}from"big.js";import Ui from"tronweb";import Ni from"web3";import{Big as Be}from"big.js";function fa(s,n,t,a,i){let r=B(s,3),o=Be(r),A=Be(t),c=Be(a).plus(i),m,u;if(A.eq(0)||c.eq(0)){let f=o.div(2);m=Be(a).plus(f),u=Be(i).plus(f)}else m=Be(a).plus(o.mul(a).div(c)),u=Be(i).plus(o.mul(i).div(c));return Be(Dn(n,m.toFixed(),u.toFixed())).minus(A).toFixed()}function ya(s){let n=B(s,3);return Be(n).round().toFixed()}var De=[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];var q=class{constructor(n){this.lpAmount=n.lpAmount,this.rewardDebt=n.rewardDebt}get userLiquidity(){return P(this.lpAmount,3).toFixed()}earned(n,t){let a=In(this.lpAmount,this.rewardDebt,n.accRewardPerShareP,n.p);return t?P(a,t).toFixed():a}};var Ae=class{};var At=class extends Ae{constructor(t,a){super();this.web3=t;this.api=a;this.chainType="EVM";this.P=52}async getUserBalanceInfo(t,a){let i;try{i=await vt(this.getUserBalanceInfoByBatch(t,a),`Cannot get UserBalanceInfo for ${a.name} on ${a.chainSymbol}`,5e3)}catch{i=await cn(()=>this.getUserBalanceInfoPerProperty(t,a),`Cannot get UserBalanceInfo for ${a.name} on ${a.chainSymbol}`,5,2e3)}return i}async getUserBalanceInfoByBatch(t,a){let i=new this.web3.BatchRequest,r=new this.web3.eth.Contract(De,a.poolAddress),o=["userRewardDebt","balanceOf"].map(m=>Je(u=>i.add(r.methods[m](t).call.request({},u)))());i.execute();let[A,c]=await Promise.all(o);return new q({lpAmount:c,rewardDebt:A})}async getUserBalanceInfoPerProperty(t,a){let i=await this.getPoolContract(a.poolAddress).methods.userRewardDebt(t).call(),r=await this.getPoolContract(a.poolAddress).methods.balanceOf(t).call();return new q({lpAmount:r,rewardDebt:i})}async getPoolInfoFromChain(t){let a;try{a=await vt(this.getPoolInfoByBatch(t),`Cannot get PoolInfo for ${t.name} on ${t.chainSymbol}`,5e3)}catch{a=await cn(()=>this.getPoolInfoPerProperty(t),`Cannot get PoolInfo for ${t.name} on ${t.chainSymbol}`,5,2e3)}return a}async getPoolInfoByBatch(t){let a=new this.web3.BatchRequest,i=new this.web3.eth.Contract(De,t.poolAddress),r=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(T=>Je(g=>a.add(i.methods[T]().call.request({},g)))());a.execute();let[o,A,c,m,u,l]=await Promise.all(r),f=c.toString(),y=m.toString(),h=j({tokenBalance:f,vUsdBalance:y});return{aValue:o.toString(),dValue:A.toString(),tokenBalance:f,vUsdBalance:y,totalLpAmount:u.toString(),accRewardPerShareP:l.toString(),p:this.P,imbalance:h}}async getPoolInfoPerProperty(t){let a=this.getPoolContract(t.poolAddress),i=await a.methods.a().call(),r=await a.methods.d().call(),o=await a.methods.tokenBalance().call(),A=await a.methods.vUsdBalance().call(),c=await a.methods.totalSupply().call(),m=await a.methods.accRewardPerShareP().call(),u=j({tokenBalance:o,vUsdBalance:A});return{aValue:i,dValue:r,tokenBalance:o,vUsdBalance:A,totalLpAmount:c,accRewardPerShareP:m,p:this.P,imbalance:u}}async buildRawTransactionDeposit(t){return Promise.resolve({...this.buildTxParams(t),data:this.getPoolContract(t.token.poolAddress).methods.deposit(t.amount).encodeABI()})}async buildRawTransactionWithdraw(t){return Promise.resolve({...this.buildTxParams(t),data:this.getPoolContract(t.token.poolAddress).methods.withdraw(t.amount).encodeABI()})}async buildRawTransactionClaimRewards(t){return Promise.resolve({...this.buildTxParams(t),data:this.getPoolContract(t.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(t){return{from:t.accountAddress,to:t.token.poolAddress,value:"0"}}getContract(t,a){return new this.web3.eth.Contract(t,a)}getPoolContract(t){return this.getContract(De,t)}};var Lt=class{constructor(n,t,a,i){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a;this.tokenService=i}async approve(n,t){if(t){let a=n,i=t;return this.tokenService.buildRawTransactionApprove({...i,spender:i.token.poolAddress},a)}else{let a=n;return this.tokenService.buildRawTransactionApprove({...a,spender:a.token.poolAddress})}}async deposit(n,t){return v(n.amount),R("amount",n.amount,n.token.decimals),n.amount=B(n.amount,n.token.decimals).toFixed(),He(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionDeposit(n)}async withdraw(n,t){return v(n.amount),R("amount",n.amount,n.token.decimals),n.amount=B(n.amount,3).toFixed(),He(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionWithdraw(n)}async claimRewards(n,t){return He(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionClaimRewards(n)}};import{AnchorProvider as vi,BN as ha,Program as Ri,Spl as Ii,web3 as xi}from"@project-serum/anchor";import{Connection as Di,PublicKey as Fe}from"@solana/web3.js";var Xt=class extends Ae{constructor(t,a){super();this.solanaRpcUrl=t;this.api=a;this.chainType="SOLANA";this.P=48}async getUserBalanceInfo(t,a){let i=this.buildAnchorProvider(t),r=this.getBridge(a.bridgeAddress,i),o=new Fe(a.poolAddress),A=await r.account.pool.fetch(o);try{let c=await ln(new Fe(t),A.mint,r.programId),{lpAmount:m,rewardDebt:u}=await r.account.userDeposit.fetch(c);return new q({lpAmount:m.toString(),rewardDebt:u.toString()})}catch{return new q({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(t){let a=this.buildAnchorProvider(t.bridgeAddress),i=await this.getBridge(t.bridgeAddress,a).account.pool.fetch(t.poolAddress),r=i.vUsdBalance.toString(),o=i.tokenBalance.toString(),A=j({tokenBalance:o,vUsdBalance:r});return{dValue:i.d.toString(),aValue:i.a.toString(),totalLpAmount:i.totalLpAmount.toString(),vUsdBalance:r,tokenBalance:o,accRewardPerShareP:i.accRewardPerShareP.toString(),p:this.P,imbalance:A}}async buildRawTransactionDeposit(t){let{bridge:a,accounts:i,preInstructions:r}=await this.prepareDataForTransaction(t),o=await a.methods.deposit(new ha(t.amount)).accounts(i).preInstructions(r).transaction();return o.recentBlockhash=(await this.buildAnchorProvider(t.accountAddress).connection.getLatestBlockhash()).blockhash,o.feePayer=new Fe(t.accountAddress),await Qe(o,t.txFeeParams,this.solanaRpcUrl),o}async buildRawTransactionWithdraw(t){let{bridge:a,accounts:i,preInstructions:r}=await this.prepareDataForTransaction(t),o=await a.methods.withdraw(new ha(t.amount)).accounts(i).preInstructions(r).transaction();return o.recentBlockhash=(await this.buildAnchorProvider(t.accountAddress).connection.getLatestBlockhash()).blockhash,o.feePayer=new Fe(t.accountAddress),await Qe(o,t.txFeeParams,this.solanaRpcUrl),o}async buildRawTransactionClaimRewards(t){let{bridge:a,accounts:i,preInstructions:r}=await this.prepareDataForTransaction(t),o=await a.methods.claimRewards().accounts(i).preInstructions(r).transaction();return o.recentBlockhash=(await this.buildAnchorProvider(t.accountAddress).connection.getLatestBlockhash()).blockhash,o.feePayer=new Fe(t.accountAddress),await Qe(o,t.txFeeParams,this.solanaRpcUrl),o}async prepareDataForTransaction(t){let a=this.buildAnchorProvider(t.accountAddress),i=this.getBridge(t.token.bridgeAddress,a),{accounts:r,preInstructions:o}=await this._getLPTransactionData(i,t.token.poolAddress,t.accountAddress,a);return{bridge:i,accounts:r,preInstructions:o}}getBridge(t,a){return new Ri(rt,t,a)}buildAnchorProvider(t){let a=new Di(this.solanaRpcUrl,"confirmed"),i=new Fe(t);return new vi(a,{publicKey:i},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(t,a,i,r){let o=new Fe(i),A=await ke(t.programId),c=await Ze(t.programId),m=new Fe(a),l=(await t.account.pool.fetch(m)).mint,f=await re(o,l),y=await _e(l,t.programId),h=await ln(o,l,t.programId),T=[xi.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await Ke(f,r)}catch{let b=await Ii.associatedToken(r).methods.create().accounts({mint:l,owner:o,associatedAccount:f}).instruction();T.push(b)}try{await t.account.userDeposit.fetch(h)}catch{let S=await t.methods.initDepositAccount().accounts({mint:l,user:o,userDeposit:h}).instruction();T.push(S)}return{accounts:{mint:l,user:o,config:A,pool:m,bridgeAuthority:c,userDeposit:h,userToken:f,bridgeToken:y},preInstructions:T}}};import{Address as Kt,ContractSpec as Fi}from"stellar-sdk";var ct={0:{message:""},1:{message:""},2:{message:""},3:{message:""},4:{message:""},5:{message:""},6:{message:""},7:{message:""},8:{message:""},9:{message:""},103:{message:""},104:{message:""},105:{message:""},106:{message:""},107:{message:""},108:{message:""},109:{message:""},203:{message:""},204:{message:""},205:{message:""},206:{message:""},207:{message:""},208:{message:""},209:{message:""},210:{message:""},211:{message:""},212:{message:""},214:{message:""},215:{message:""},216:{message:""},217:{message:""},218:{message:""},300:{message:""},301:{message:""},302:{message:""},303:{message:""},400:{message:""}},Qt=class{constructor(n){this.options=n;this.parsers={deposit:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("deposit",n)),withdraw:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("withdraw",n)),claimRewards:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("claim_rewards",n)),getPool:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("get_pool",n)),getUserDeposit:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("get_user_deposit",n))};this.depositXdr=async({sender:n,amount:t},a={})=>await Ce.xdrFromSimulation({method:"deposit",args:this.spec.funcArgsToScVals("deposit",{sender:new Kt(n),amount:t}),account:n,...a,...this.options,errorTypes:ct,parseResultXdr:this.parsers.deposit});this.withdrawXdr=async({sender:n,amount_lp:t},a={})=>await Ce.xdrFromSimulation({method:"withdraw",args:this.spec.funcArgsToScVals("withdraw",{sender:new Kt(n),amount_lp:t}),account:n,...a,...this.options,errorTypes:ct,parseResultXdr:this.parsers.withdraw});this.claimRewardsXdr=async({sender:n},t={})=>await Ce.xdrFromSimulation({method:"claim_rewards",args:this.spec.funcArgsToScVals("claim_rewards",{sender:new Kt(n)}),account:n,...t,...this.options,errorTypes:ct,parseResultXdr:this.parsers.claimRewards});this.getPool=async(n={})=>await F.fromSimulation({method:"get_pool",args:this.spec.funcArgsToScVals("get_pool",{}),...n,...this.options,errorTypes:ct,parseResultXdr:this.parsers.getPool});this.getUserDeposit=async({user:n},t={})=>await F.fromSimulation({method:"get_user_deposit",args:this.spec.funcArgsToScVals("get_user_deposit",{user:new Kt(n)}),...t,...this.options,errorTypes:ct,parseResultXdr:this.parsers.getUserDeposit});this.spec=new Fi(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAUAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAAAAAAJY2xhaW1hYmxlAAAAAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANY2xhaW1fYmFsYW5jZQAAAAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAVZ2V0X2NsYWltYWJsZV9iYWxhbmNlAAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAADkJhbGFuY2VDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAgAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAATAAAAAQAAAAAAAAAQQ2xhaW1hYmxlQmFsYW5jZQAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAAEENsYWltYWJsZUJhbGFuY2UAAAABAAAAAAAAAAZhbW91bnQAAAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAJQAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"])}};var Yt=class extends Ae{constructor(t,a,i){super();this.nodeRpcUrlsConfig=t;this.params=a;this.api=i;this.chainType="SRB";this.P=48}async getUserBalanceInfo(t,a){let r=(await this.getContract(a.poolAddress).getUserDeposit({user:t})).result;if(r.isErr())throw new k;let o=r.unwrap();return new q({lpAmount:o.lp_amount.toString(),rewardDebt:o.reward_debt.toString()})}async getPoolInfoFromChain(t){let i=(await this.getContract(t.poolAddress).getPool()).result;if(i.isErr())throw new k;let r=i.unwrap();return{aValue:r.a.toString(),accRewardPerShareP:r.acc_reward_per_share_p.toString(),dValue:r.d.toString(),tokenBalance:r.token_balance.toString(),p:this.P,totalLpAmount:r.total_lp_amount.toString(),vUsdBalance:r.v_usd_balance.toString(),imbalance:j({tokenBalance:r.token_balance.toString(),vUsdBalance:r.v_usd_balance.toString()})}}async buildRawTransactionDeposit(t){return await this.getContract(t.token.poolAddress).depositXdr({sender:t.accountAddress,amount:BigInt(t.amount)})}async buildRawTransactionWithdraw(t){return await this.getContract(t.token.poolAddress).withdrawXdr({sender:t.accountAddress,amount_lp:BigInt(t.amount)})}async buildRawTransactionClaimRewards(t){return await this.getContract(t.token.poolAddress).claimRewardsXdr({sender:t.accountAddress})}getContract(t){let a={contractId:t,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new Qt(a)}};import Wi from"web3";var mt=class extends Ae{constructor(t,a,i){super();this.tronWeb=t;this.api=a;this.chainType="TRX";this.P=52;i&&(this.web3=new Wi(i))}async getUserBalanceInfo(t,a){let i;if(this.web3)try{i=await this.getUserBalanceInfoByBatch(this.web3,t,a)}catch{i=await this.getUserBalanceInfoPerProperty(t,a)}else i=await this.getUserBalanceInfoPerProperty(t,a);return i}async getUserBalanceInfoByBatch(t,a,i){let r=new t.BatchRequest,o=new t.eth.Contract(De,nt(i.poolAddress)),A=nt(a),c=["userRewardDebt","balanceOf"].map(l=>Je(f=>r.add(o.methods[l](A).call.request({},f)))());r.execute();let[m,u]=await Promise.all(c);return new q({lpAmount:u,rewardDebt:m})}async getUserBalanceInfoPerProperty(t,a){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(t);let i=await this.getContract(a.poolAddress),r=(await i.methods.userRewardDebt(t).call()).toString(),o=(await i.methods.balanceOf(t).call()).toString();return new q({lpAmount:o,rewardDebt:r})}async getPoolInfoFromChain(t){let a;if(this.web3)try{a=await this.getPoolInfoByBatch(this.web3,t)}catch{a=await this.getPoolInfoPerProperty(t)}else a=await this.getPoolInfoPerProperty(t);return a}async getPoolInfoByBatch(t,a){let i=new t.BatchRequest,r=new t.eth.Contract(De,nt(a.poolAddress)),o=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(g=>Je(d=>i.add(r.methods[g]().call.request({},d)))());i.execute();let[A,c,m,u,l,f]=await Promise.all(o),y=m.toString(),h=u.toString(),T=j({tokenBalance:y,vUsdBalance:h});return{aValue:A.toString(),dValue:c.toString(),tokenBalance:y,vUsdBalance:h,totalLpAmount:l.toString(),accRewardPerShareP:f.toString(),p:this.P,imbalance:T}}async getPoolInfoPerProperty(t){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(t.poolAddress);let a=await this.getContract(t.poolAddress),[i,r,o,A,c,m]=await Promise.all([a.methods.a().call(),a.methods.d().call(),a.methods.tokenBalance().call(),a.methods.vUsdBalance().call(),a.methods.totalSupply().call(),a.methods.accRewardPerShareP().call()]),u=o.toString(),l=A.toString(),f=j({tokenBalance:u,vUsdBalance:l});return{aValue:i.toString(),dValue:r.toString(),tokenBalance:u,vUsdBalance:l,totalLpAmount:c.toString(),accRewardPerShareP:m.toString(),p:this.P,imbalance:f}}buildRawTransactionDeposit(t){let{amount:a,accountAddress:i}=t,r=[{type:"uint256",value:a}];return this.buildRawTransaction(t.token.poolAddress,"deposit(uint256)",r,"0",i)}buildRawTransactionWithdraw(t){let{amount:a,accountAddress:i}=t,r=[{type:"uint256",value:a}];return this.buildRawTransaction(t.token.poolAddress,"withdraw(uint256)",r,"0",i)}buildRawTransactionClaimRewards(t){let{accountAddress:a}=t,i=[];return this.buildRawTransaction(t.token.poolAddress,"claimRewards()",i,"0",a)}async buildRawTransaction(t,a,i,r,o){let A=await this.tronWeb.transactionBuilder.triggerSmartContract(t,a,{callValue:r},i,o);if(!A?.result?.result)throw new k("Unknown error: "+JSON.stringify(A,null,2));return A.transaction}async getContract(t){return await this.tronWeb.contract(De,t)}};var Jt=class{constructor(n,t,a,i){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a;this.tokenService=i;this.rawTxBuilder=new Lt(n,t,this.params,i)}async getAllowance(n,t){if(t){let a=n,i=t;return await this.tokenService.getAllowance({...i,spender:i.token.poolAddress},a)}else{let a=n;return await this.tokenService.getAllowance({...a,spender:a.token.poolAddress})}}async checkAllowance(n,t){if(t){let a=n,i=t;return this.tokenService.checkAllowance({...i,spender:i.token.poolAddress},a)}else{let a=n;return this.tokenService.checkAllowance({...a,spender:a.token.poolAddress})}}async approve(n,t){return this.tokenService.approve(n,{...t,spender:t.token.poolAddress})}async getAmountToBeDeposited(n,t,a){v(n),R("amount",n,t.decimals);let i=await this.getPoolInfoFromChain(t,a),{vUsdBalance:r,tokenBalance:o,aValue:A,dValue:c}=i,m=fa(n,A,c,o,r);return P(m,3).toFixed()}async getAmountToBeWithdrawn(n,t,a,i){v(n),R("amount",n,a.decimals);let r=await this.getPoolInfoFromChain(a,i),o=ya(n),A=z(o,a.decimals),m=(await this.getUserBalanceInfo(t,a,i)).earned(r)||"0",u=Ei(A).plus(m).toFixed();return P(u,a.decimals).toFixed()}async getUserBalanceInfo(n,t,a){return He(t.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).getUserBalanceInfo(n,t)}async getPoolInfoFromChain(n,t){let a=await He(n.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).getPoolInfoFromChain(n);return this.api.cachePut({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress},a),a}};function He(s,n,t,a,i){switch(X[s].chainType){case"EVM":{if(i)return new At(i,n);{let r=t.getNodeRpcUrl(s);return new At(new Ni(r),n)}}case"TRX":{let r=t.getNodeRpcUrl(s),o=a.tronJsonRpc;if(i)return new mt(i,n,o);{let A=new Ui({fullHost:r});return new mt(A,n,o)}}case"SOLANA":{let r=t.getNodeRpcUrl(s);return new Xt(r,n)}case"SRB":return new Yt(t,a,n)}}import{Big as x}from"big.js";function Pa(s,n,t){let a=Oi(s,{decimals:n.decimals,feeShare:n.feeShare},n.poolInfo),i=Vi(a.amountIncludingCommissionInSystemPrecision,{decimals:t.decimals,feeShare:t.feeShare},t.poolInfo);return{swapToVUsdCalcResult:a,swapFromVUsdCalcResult:i}}function Sa(s,n,t){let a=Gi(s,{decimals:t.decimals,feeShare:t.feeShare},t.poolInfo),i=Zi(a.amountIncludingCommissionInSystemPrecision,{decimals:n.decimals,feeShare:n.feeShare},n.poolInfo);return{swapToVUsdCalcResult:a,swapFromVUsdCalcResult:i}}function Oi(s,{feeShare:n,decimals:t},a){let i=x(s),r=i.times(n),o=i.minus(r);return{bridgeFeeInTokenPrecision:r.round().toFixed(),amountIncludingCommissionInSystemPrecision:Ta(Ee(o,t),a),amountExcludingCommissionInSystemPrecision:Ta(Ee(i,t),a)}}function Ta(s,n){if(s.eq(0))return"0";let t=x(n.tokenBalance).plus(s),a=fe(t.toFixed(),n.aValue,n.dValue);return x(n.vUsdBalance).minus(a).round().toFixed()}function Vi(s,{feeShare:n,decimals:t},a){if(x(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let r=x(s).plus(a.vUsdBalance),o=fe(r,a.aValue,a.dValue),A=z(x(a.tokenBalance).minus(o),t),c=x(A).times(n),m=x(A).minus(c).round();return{bridgeFeeInTokenPrecision:c.round().toFixed(),amountIncludingCommissionInTokenPrecision:m.toFixed(),amountExcludingCommissionInTokenPrecision:A.toFixed()}}function Gi(s,{feeShare:n,decimals:t},a){let i=x(n).div(x(1).minus(n)),r=x(s).times(i),o=x(s).plus(r);return{bridgeFeeInTokenPrecision:r.round().toFixed(),amountIncludingCommissionInSystemPrecision:ba(Ee(o,t),a),amountExcludingCommissionInSystemPrecision:ba(Ee(s,t),a)}}function ba(s,n){let t=x(n.tokenBalance).minus(s),a=fe(t.toFixed(),n.aValue,n.dValue);return x(a).minus(n.vUsdBalance).round().toFixed()}function Zi(s,{feeShare:n,decimals:t},a){if(x(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let i=x(a.vUsdBalance).minus(s),r=fe(i.toFixed(),a.aValue,a.dValue),o=x(r).minus(a.tokenBalance),A=z(o.toFixed(),t),c=x(n).div(x(1).minus(n)),m=x(A).times(c),u=x(A).plus(m);return{bridgeFeeInTokenPrecision:m.round().toFixed(),amountIncludingCommissionInTokenPrecision:u.round().toFixed(),amountExcludingCommissionInTokenPrecision:A.toFixed()}}import{Big as We}from"big.js";function wa(s,n,t,a,i){let r=ge(s,n,t),o=z(r,n.decimals),A=et(r,a,i),c=We(s).times(n.feeShare),m=We(A).div(We(1).minus(a.feeShare)).minus(A);return{sourceLPSwap:{fee:P(c,n.decimals).neg().round(n.decimals,We.roundUp).toFixed(),swap:P(We(s).minus(o).minus(c),n.decimals).neg().round(n.decimals,We.roundUp).toFixed()},destLPSwap:{fee:P(m,a.decimals).neg().round(a.decimals,We.roundUp).toFixed(),swap:P(z(r,a.decimals).minus(A).minus(m),a.decimals).neg().round(a.decimals,We.roundUp).toFixed()}}}import{Connection as _i,PublicKey as Li,TransactionMessage as Xi}from"@solana/web3.js";var Ht=class{constructor(n,t){this.nodeRpcUrlsConfig=n;this.params=t}async addMemoToTx(n,t){if(t.length>28)throw new k("InvalidArgumentException memo cannot be more than 28 characters");let a=new _i(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),i=await Ne(n,a),r=Xi.decompile(n.message,{addressLookupTableAccounts:i});r.instructions[r.instructions.length-1].keys.push({pubkey:new Li(Buffer.from(t)),isSigner:!1,isWritable:!1}),n.message=r.compileToV0Message(i)}};import{Asset as Qi,BASE_FEE as Yi,Horizon as Sn,Operation as Ji,Operation as Hi,SorobanRpc as lt,TimeoutInfinite as zi,TransactionBuilder as wn,TransactionBuilder as Ca}from"stellar-sdk";import{HorizonApi as id}from"stellar-sdk/lib/horizon";import{Address as O,ContractSpec as Ki}from"stellar-sdk";var Y={},ut=class{constructor(n){this.options=n;this.parsers={initialize:()=>{},mint:()=>{},setAdmin:()=>{},allowance:n=>this.spec.funcResToNative("allowance",n),approve:()=>{},balance:n=>this.spec.funcResToNative("balance",n),spendableBalance:n=>this.spec.funcResToNative("spendable_balance",n),transfer:()=>{},transferFrom:()=>{},burn:()=>{},burnFrom:()=>{},decimals:n=>this.spec.funcResToNative("decimals",n),name:n=>this.spec.funcResToNative("name",n),symbol:n=>this.spec.funcResToNative("symbol",n)};this.initialize=async({admin:n,decimal:t,name:a,symbol:i},r={})=>await F.fromSimulation({method:"initialize",args:this.spec.funcArgsToScVals("initialize",{admin:new O(n),decimal:t,name:a,symbol:i}),...r,...this.options,errorTypes:Y,parseResultXdr:this.parsers.initialize});this.mint=async({to:n,amount:t},a={})=>await F.fromSimulation({method:"mint",args:this.spec.funcArgsToScVals("mint",{to:new O(n),amount:t}),...a,...this.options,errorTypes:Y,parseResultXdr:this.parsers.mint});this.setAdmin=async({new_admin:n},t={})=>await F.fromSimulation({method:"set_admin",args:this.spec.funcArgsToScVals("set_admin",{new_admin:new O(n)}),...t,...this.options,errorTypes:Y,parseResultXdr:this.parsers.setAdmin});this.allowance=async({from:n,spender:t},a={})=>await F.fromSimulation({method:"allowance",args:this.spec.funcArgsToScVals("allowance",{from:new O(n),spender:new O(t)}),...a,...this.options,errorTypes:Y,parseResultXdr:this.parsers.allowance});this.approve=async({from:n,spender:t,amount:a,expiration_ledger:i},r={})=>await F.fromSimulation({method:"approve",args:this.spec.funcArgsToScVals("approve",{from:new O(n),spender:new O(t),amount:a,expiration_ledger:i}),...r,...this.options,errorTypes:Y,parseResultXdr:this.parsers.approve});this.balance=async({id:n},t={})=>await F.fromSimulation({method:"balance",args:this.spec.funcArgsToScVals("balance",{id:new O(n)}),...t,...this.options,errorTypes:Y,parseResultXdr:this.parsers.balance});this.spendableBalance=async({id:n},t={})=>await F.fromSimulation({method:"spendable_balance",args:this.spec.funcArgsToScVals("spendable_balance",{id:new O(n)}),...t,...this.options,errorTypes:Y,parseResultXdr:this.parsers.spendableBalance});this.transfer=async({from:n,to:t,amount:a},i={})=>await F.fromSimulation({method:"transfer",args:this.spec.funcArgsToScVals("transfer",{from:new O(n),to:new O(t),amount:a}),...i,...this.options,errorTypes:Y,parseResultXdr:this.parsers.transfer});this.transferFrom=async({spender:n,from:t,to:a,amount:i},r={})=>await F.fromSimulation({method:"transfer_from",args:this.spec.funcArgsToScVals("transfer_from",{spender:new O(n),from:new O(t),to:new O(a),amount:i}),...r,...this.options,errorTypes:Y,parseResultXdr:this.parsers.transferFrom});this.burn=async({from:n,amount:t},a={})=>await F.fromSimulation({method:"burn",args:this.spec.funcArgsToScVals("burn",{from:new O(n),amount:t}),...a,...this.options,errorTypes:Y,parseResultXdr:this.parsers.burn});this.burnFrom=async({spender:n,from:t,amount:a},i={})=>await F.fromSimulation({method:"burn_from",args:this.spec.funcArgsToScVals("burn_from",{spender:new O(n),from:new O(t),amount:a}),...i,...this.options,errorTypes:Y,parseResultXdr:this.parsers.burnFrom});this.decimals=async(n={})=>await F.fromSimulation({method:"decimals",args:this.spec.funcArgsToScVals("decimals",{}),...n,...this.options,errorTypes:Y,parseResultXdr:this.parsers.decimals});this.name=async(n={})=>await F.fromSimulation({method:"name",args:this.spec.funcArgsToScVals("name",{}),...n,...this.options,errorTypes:Y,parseResultXdr:this.parsers.name});this.symbol=async(n={})=>await F.fromSimulation({method:"symbol",args:this.spec.funcArgsToScVals("symbol",{}),...n,...this.options,errorTypes:Y,parseResultXdr:this.parsers.symbol});this.spec=new Ki(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAdkZWNpbWFsAAAAAAQAAAAAAAAABG5hbWUAAAAQAAAAAAAAAAZzeW1ib2wAAAAAABAAAAAA","AAAAAAAAAAAAAAAEbWludAAAAAIAAAAAAAAAAnRvAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAA","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAA=","AAAAAAAAAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAAAAAAAHYXBwcm92ZQAAAAAEAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAAAAAAEWV4cGlyYXRpb25fbGVkZ2VyAAAAAAAABAAAAAA=","AAAAAAAAAAAAAAAHYmFsYW5jZQAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAL","AAAAAAAAAAAAAAARc3BlbmRhYmxlX2JhbGFuY2UAAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAL","AAAAAAAAAAAAAAAIdHJhbnNmZXIAAAADAAAAAAAAAARmcm9tAAAAEwAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAAAAAAANdHJhbnNmZXJfZnJvbQAAAAAAAAQAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAEZnJvbQAAABMAAAAAAAAAAnRvAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAA","AAAAAAAAAAAAAAAEYnVybgAAAAIAAAAAAAAABGZyb20AAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAA","AAAAAAAAAAAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAAAAAAAIZGVjaW1hbHMAAAAAAAAAAQAAAAQ=","AAAAAAAAAAAAAAAEbmFtZQAAAAAAAAABAAAAEA==","AAAAAAAAAAAAAAAGc3ltYm9sAAAAAAAAAAAAAQAAABA=","AAAAAQAAAAAAAAAAAAAAEEFsbG93YW5jZURhdGFLZXkAAAACAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAHc3BlbmRlcgAAAAAT","AAAAAQAAAAAAAAAAAAAADkFsbG93YW5jZVZhbHVlAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAAAAAAEWV4cGlyYXRpb25fbGVkZ2VyAAAAAAAABA==","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAABQAAAAEAAAAAAAAACUFsbG93YW5jZQAAAAAAAAEAAAfQAAAAEEFsbG93YW5jZURhdGFLZXkAAAABAAAAAAAAAAdCYWxhbmNlAAAAAAEAAAATAAAAAQAAAAAAAAAFTm9uY2UAAAAAAAABAAAAEwAAAAEAAAAAAAAABVN0YXRlAAAAAAAAAQAAABMAAAAAAAAAAAAAAAVBZG1pbgAAAA==","AAAAAQAAAAAAAAAAAAAADVRva2VuTWV0YWRhdGEAAAAAAAADAAAAAAAAAAdkZWNpbWFsAAAAAAQAAAAAAAAABG5hbWUAAAAQAAAAAAAAAAZzeW1ib2wAAAAAABA="])}};var ji=100,qi=180,zt=class{constructor(n,t){this.nodeRpcUrlsConfig=n;this.params=t}async buildChangeTrustLineXdrTx(n){let a=await new Sn.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(n.sender),r=(await this.getContract(ut,n.tokenAddress).name()).result,[o,A]=r.split(":"),c=new Qi(o,A),m=Hi.changeTrust({asset:c,limit:n.limit});return new Ca(a,{fee:ji.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(m).setTimeout(qi).build().toXDR()}async getBalanceLine(n,t){let i=(await this.getContract(ut,t).name()).result,[r,o]=i.split(":"),A=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new Sn.Server(A).loadAccount(n)).balances.find(l=>(l.asset_type==="credit_alphanum4"||l.asset_type==="credit_alphanum12")&&l.asset_code==r&&l.asset_issuer==o)}async submitTransactionStellar(n){let t=new Sn.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),a=Ca.fromXDR(n,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await t.submitTransaction(a)}async simulateAndCheckRestoreTxRequiredSoroban(n,t){let a=new lt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),i=await a.getAccount(t),r=wn.fromXDR(n,this.params.sorobanNetworkPassphrase),o=await a.simulateTransaction(r);if(lt.Api.isSimulationRestore(o))return new wn(i,{fee:(+Yi+ +o.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(o.restorePreamble.transactionData.build()).addOperation(Ji.restoreFootprint({})).setTimeout(zi).build().toXDR()}async sendTransactionSoroban(n){let t=new lt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),a=wn.fromXDR(n,this.params.sorobanNetworkPassphrase);return t.sendTransaction(a)}async confirmTx(n,t=15){let a=new lt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),i=await On(()=>a.getTransaction(n),r=>r.status===lt.Api.GetTransactionStatus.NOT_FOUND,t);return i[i.length-1]}getContract(n,t){let a={contractId:t,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new n(a)}};var jt=class{constructor(n,t){this.nodeRpcUrlsConfig=n;this.srb=new zt(n,t),this.sol=new Ht(n,t)}};var Xe=(t=>(t.WITH_NATIVE_CURRENCY="native",t.WITH_STABLECOIN="stablecoin",t))(Xe||{}),Rt=(t=>(t.INT="int",t.FLOAT="float",t))(Rt||{});import{Big as or}from"big.js";import Ar from"tronweb";import cr from"web3";import Cn from"erc-20-abi";import{Big as Ba}from"big.js";var ce=class{async checkAllowance(n){let t=await this.getAllowance(n);return Ba(t).gte(Ba(n.amount))}};var $i="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",er="0xdac17f958d2ee523a2206206994597c13d831ec7",tr=1e5,pt=class extends ce{constructor(t,a){super();this.web3=t;this.api=a;this.chainType="EVM"}getAllowance(t){let a=t.token.tokenAddress,i=t.owner,r=t.spender;return this.getAllowanceByTokenAddress(a,i,r)}getAllowanceByTokenAddress(t,a,i){return this.getContract(Cn,t).methods.allowance(a,i).call()}async getTokenBalance(t){return await this.getContract(Cn,t.token.tokenAddress).methods.balanceOf(t.account).call()}async getNativeTokenBalance(t){return await this.web3.eth.getBalance(t.account)}async approve(t){if(this.isUsdt(t.tokenAddress)&&await this.getAllowanceByTokenAddress(t.tokenAddress,t.owner,t.spender)!=="0"){let r=await this.buildRawTransactionApprove({...t,amount:"0"});await this.sendRawTransaction(r,t.chainSymbol)}let a=await this.buildRawTransactionApprove(t);return await this.sendRawTransaction(a,t.chainSymbol)}isUsdt(t){return t.toLowerCase()===er}async buildRawTransactionApprove(t){let{tokenAddress:a,spender:i,owner:r,amount:o}=t,c=await this.getContract(Cn,a).methods.approve(i,o==null?$i:Gt(o));return{from:r,to:a,value:"0",data:c.encodeABI()}}async sendRawTransaction(t,a){let i=t,r={maxPriorityFeePerGas:null,maxFeePerGas:null};a=="POL"?i.gas=tr:i.gas=await this.web3.eth.estimateGas(t);let{transactionHash:o}=await this.web3.eth.sendTransaction({...i,...r});return{txId:o}}getContract(t,a){return new this.web3.eth.Contract(t,a)}};import{AnchorProvider as nr}from"@project-serum/anchor";import{Connection as ar,PublicKey as qt}from"@solana/web3.js";var $t=class extends ce{constructor(t,a){super();this.solanaRpcUrl=t;this.api=a;this.chainType="SOLANA"}approve(t){throw new Q}buildRawTransactionApprove(t){throw new Q}buildAnchorProvider(t){let a=new ar(this.solanaRpcUrl,"confirmed"),i=new qt(t);return new nr(a,{publicKey:i},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(t){throw new Q}async getTokenBalance(t){let{account:a,token:i}=t;try{let r=await re(new qt(a),new qt(i.tokenAddress));return(await Ke(r,this.buildAnchorProvider(a))).amount.toString()}catch(r){if(r instanceof Error)return r.message.startsWith("Account does not exist"),"0";throw r}}async getNativeTokenBalance(t){return(await this.buildAnchorProvider(t.account).connection.getBalance(new qt(t.account))).toString()}};import{Horizon as Ma,NotFoundError as ir}from"stellar-sdk";import{HorizonApi as e}from"stellar-sdk/lib/horizon";var en=class extends ce{constructor(t,a,i){super();this.nodeRpcUrlsConfig=t;this.params=a;this.api=i;this.chainType="SRB"}getAllowance(){throw new Q}async getTokenBalance(t){if(!t.token.originTokenAddress)throw new k("OriginTokenAddress missing");let[a,i]=t.token.originTokenAddress.split(":"),r=new Ma.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),o;try{o=await r.loadAccount(t.account)}catch(m){if(m instanceof ir)return"0";throw m}let c=o.balances.find(m=>(m.asset_type==="credit_alphanum4"||m.asset_type==="credit_alphanum12")&&m.asset_code==a&&m.asset_issuer==i);return c?.balance?B(c.balance,U[X[t.token.chainSymbol].chainType]).toFixed():"0"}async getNativeTokenBalance(t){let o=(await new Ma.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(t.account)).balances.find(A=>A.asset_type==="native");return o?.balance?B(o.balance,U[X[t.chainSymbol].chainType]).toFixed():"0"}approve(){throw new Q}buildRawTransactionApprove(){throw new Q}};var ka=[{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 sr="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",dt=class extends ce{constructor(t,a){super();this.tronWeb=t;this.api=a;this.chainType="TRX"}async getAllowance(t){let{token:{tokenAddress:a},owner:i}=t;return(await(await this.getContract(a)).methods.allowance(i,t.spender).call()).toString()}async getTokenBalance(t){return(await(await this.getContract(t.token.tokenAddress)).balanceOf(t.account).call()).toString()}async getNativeTokenBalance(t){return(await this.tronWeb.trx.getBalance(t.account)).toString()}async approve(t){let a=await this.buildRawTransactionApprove(t);return await Zt(this.tronWeb,a)}async buildRawTransactionApprove(t){let{tokenAddress:a,spender:i,owner:r,amount:o}=t,A=o==null?sr:Gt(o),c=[{type:"address",value:i},{type:"uint256",value:A}];return this.buildRawTransaction(a,"approve(address,uint256)",c,"0",r)}async getContract(t){return await this.tronWeb.contract(ka,t)}async buildRawTransaction(t,a,i,r,o){let A=await this.tronWeb.transactionBuilder.triggerSmartContract(t,a,{callValue:r},i,o);if(!A?.result?.result)throw new k("Unknown error: "+JSON.stringify(A,null,2));return A.transaction}};var tn=class{constructor(n,t,a){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a}async getAllowance(n,t){let a=await this.getChainTokenService(n.token.chainSymbol,n.owner,t).getAllowance(n);return P(a,n.token.decimals).toFixed()}async checkAllowance(n,t){return v(n.amount),R("amount",n.amount,n.token.decimals),this.getChainTokenService(n.token.chainSymbol,n.owner,t).checkAllowance(this.prepareCheckAllowanceParams(n))}async approve(n,t){return t.amount&&(v(t.amount),R("amount",t.amount,t.token.decimals)),this.getChainTokenService(t.token.chainSymbol,t.owner,n).approve(this.prepareApproveParams(t))}async buildRawTransactionApprove(n,t){return n.amount&&(v(n.amount),R("amount",n.amount,n.token.decimals)),this.getChainTokenService(n.token.chainSymbol,n.owner,t).buildRawTransactionApprove(this.prepareApproveParams(n))}async getTokenBalance(n,t){let a=await this.getChainTokenService(n.token.chainSymbol,n.account,t).getTokenBalance(n);return n.token.decimals?P(a,n.token.decimals).toFixed():a}async getNativeTokenBalance(n,t){let a=await this.getChainTokenService(n.chainSymbol,n.account,t).getNativeTokenBalance(n);return{int:a,float:P(a,U[X[n.chainSymbol].chainType]).toFixed()}}getChainTokenService(n,t,a){switch(X[n].chainType){case"EVM":{if(a)return new pt(a,this.api);{let i=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new pt(new cr(i),this.api)}}case"TRX":{if(a)return new dt(a,this.api);{let i=this.nodeRpcUrlsConfig.getNodeRpcUrl(n),r=new Ar({fullHost:i});return r.setAddress(t),new dt(r,this.api)}}case"SOLANA":{let i=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new $t(i,this.api)}case"SRB":return new en(this.nodeRpcUrlsConfig,this.params,this.api)}}prepareCheckAllowanceParams(n){return{...n,amount:B(n.amount,n.token.decimals)}}prepareApproveParams(n){return{tokenAddress:n.token.tokenAddress,owner:n.owner,spender:n.spender,chainSymbol:n.token.chainSymbol,amount:n.amount==null?void 0:or(n.amount).toFixed()}}};var gt=class{constructor(n){this.nodeRpcUrls=n}getNodeRpcUrl(n){let t=this.nodeRpcUrls[n];if(t!==void 0)return t;throw new St(n)}},nn=class{constructor(n,t=yt){let a=new Ct(t),i=new Mt(a),r=new ht(i);this.api=new kt(r),this.tokenService=new tn(this.api,n,t),this.bridge=new _t(this.api,n,t,this.tokenService),this.pool=new Jt(this.api,n,t,this.tokenService),this.params=t}async chainDetailsMap(){return this.api.getChainDetailsMap()}async tokens(){return this.api.tokens()}async tokensByChain(n){return(await this.api.getChainDetailsMap())[n].tokens}async getTransferStatus(n,t){return this.api.getTransferStatus(n,t)}async getGasBalance(n,t){return this.api.getGasBalance(n,t)}async checkAddress(){return new Promise(n=>{n({status:"OK",gasBalance:null})})}async getPendingStatusInfo(n,t,a,i){v(n);let r;t=="float"?(R("amount",n,a.decimals),r=B(n,a.decimals).toFixed()):r=n;let o=ge(r,a,await N(this.api,a)),A=await N(this.api,i),c=this.getAmountFromVUsdFormatted(o,i,A),m,u=await this.api.getPendingInfo();for(let l in u[i.chainSymbol])l.toLowerCase()===i.tokenAddress.toLowerCase()&&(m=u[i.chainSymbol][l]);if(m){let l=kn(m.totalSentAmount,A),f=this.getAmountFromVUsdFormatted(o,i,l),y;return ye(f.int).gt(c.int)?y={min:c,max:f}:y={min:f,max:c},{pendingTxs:m.pendingTxs,pendingAmount:{int:Me(m.totalSentAmount,3,i.decimals).toFixed(0),float:P(m.totalSentAmount,3).toFixed()},estimatedAmount:y}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:c,max:c}}}async getTokenBalance(n,t){return this.tokenService.getTokenBalance(n,t)}async getNativeTokenBalance(n,t){return this.tokenService.getNativeTokenBalance(n,t)}async calculateFeePercentOnSourceChain(n,t){v(n),R("amountFloat",n,t.decimals);let a=B(n,t.decimals);if(a.eq(0))return 0;let i=ge(a,t,await N(this.api,t)),r=z(i,t.decimals);return rn(a,r)}async calculateFeePercentOnDestinationChain(n,t,a){v(n),R("amountFloat",n,t.decimals);let i=B(n,t.decimals);if(i.eq(0))return 0;let r=ge(i,t,await N(this.api,t)),o=et(r,a,await N(this.api,a)),A=z(r,a.decimals);return rn(A,o)}async getAmountToBeReceivedAndGasFeeOptions(n,t,a,i){return v(n),R("amountToSendFloat",n,t.decimals),{amountToSendFloat:ye(n).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(n,t,a,i),gasFeeOptions:await this.getGasFeeOptions(t,a,i)}}async getAmountToSendAndGasFeeOptions(n,t,a,i){return v(n),R("amountToBeReceivedFloat",n,a.decimals),{amountToSendFloat:await this.getAmountToSend(n,t,a,i),amountToBeReceivedFloat:ye(n).toFixed(),gasFeeOptions:await this.getGasFeeOptions(t,a,i)}}async getAmountToBeReceived(n,t,a,i){let r=await N(this.api,t),o=await N(this.api,a);return this.getAmountToBeReceivedFromPools(n,t,a,r,o,i)}async getAmountToBeReceivedFromChain(n,t,a,i,r,o){let A=await this.pool.getPoolInfoFromChain(t,r),c=await this.pool.getPoolInfoFromChain(a,o);return this.getAmountToBeReceivedFromPools(n,t,a,A,c,i)}getAmountToBeReceivedFromPools(n,t,a,i,r,o){v(n),R("amountToSendFloat",n,t.decimals);let A=B(n,t.decimals);if(o&&o==3){if(!t.cctpAddress||!a.cctpAddress||!t.cctpFeeShare)throw new ie("Such route does not support CCTP protocol");let m=A.mul(ye(1).minus(t.cctpFeeShare)).round(0,ye.roundUp),u=Me(m,t.decimals,a.decimals).round(0);return P(u,a.decimals).toFixed()}let c=ge(A,t,i);return this.getAmountFromVUsdFormatted(c,a,r).float}async getAmountToSend(n,t,a,i){let r=await N(this.api,t),o=await N(this.api,a);return this.getAmountToSendFromPools(n,t,a,r,o,i)}async getAmountToSendFromChain(n,t,a,i,r,o){let A=await this.pool.getPoolInfoFromChain(t,r),c=await this.pool.getPoolInfoFromChain(a,o);return this.getAmountToSendFromPools(n,t,a,A,c,i)}getAmountToSendFromPools(n,t,a,i,r,o){v(n),R("amountToBeReceivedFloat",n,a.decimals);let A=B(n,a.decimals);if(o&&o==3){if(!t.cctpAddress||!a.cctpAddress||!t.cctpFeeShare)throw new ie("Such route does not support CCTP protocol");let u=A.div(ye(1).minus(t.cctpFeeShare)).round(0,ye.roundDown),l=Me(u,a.decimals,t.decimals).round(0);return P(l,t.decimals).toFixed()}let c=Rn(A,a,r),m=vn(c,t,i);if(ye(m).lte(0))throw new Te;return P(m,t.decimals).toFixed()}async getGasFeeOptions(n,t,a){return dn(n.allbridgeChainId,n.chainType,t.allbridgeChainId,n.decimals,a,this.api)}getAverageTransferTime(n,t,a){return n.transferTime?.[t.chainSymbol]?.[a]??null}async getPoolInfoByToken(n){return await this.api.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}async refreshPoolInfo(n){if(n){let a=(n instanceof Array?n:[n]).map(i=>({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress}));return this.api.refreshPoolInfo(a)}return this.api.refreshPoolInfo()}aprInPercents(n){return xn(n)}async getExtraGasMaxLimits(n,t){return await gn(n,t,this.api)}async getVUsdFromAmount(n,t,a){v(n);let i;t=="float"?(R("amount",n,a.decimals),i=B(n,a.decimals).toFixed()):i=n;let r=ge(i,a,await N(this.api,a));return{int:r,float:P(r,3).toFixed()}}async getAmountFromVUsd(n,t){return this.getAmountFromVUsdFormatted(n,t,await N(this.api,t))}getAmountFromVUsdFormatted(n,t,a){v(n);let i=et(n,t,a);if(ye(i).lt(0))throw new Te;return{int:i,float:P(i,t.decimals).toFixed()}}async swapAndBridgeFeeCalculation(n,t,a){return Pa(n,{decimals:t.decimals,feeShare:t.feeShare,poolInfo:await N(this.api,t)},{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await N(this.api,a)})}async swapAndBridgeFeeCalculationReverse(n,t,a){let i=Sa(n,{decimals:t.decimals,feeShare:t.feeShare,poolInfo:await N(this.api,t)},{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await N(this.api,a)}),r=i.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(ye(r).lt(0))throw new Te;return i}async getSendAmountDetails(n,t,a,i){v(n);let r;return t=="float"?(R("amount",n,a.decimals),r=B(n,a.decimals).toFixed()):r=n,wa(r,a,await N(this.api,a),i,await N(this.api,i))}};function mr(s){return"solanaRpcUrl"in s}var va=class{constructor(n,t=yt){let a;mr(n)?a=new gt({SOL:n.solanaRpcUrl,TRX:n.tronRpcUrl}):a=new gt(n),this.service=new nn(a,t),this.bridge=this.service.bridge,this.pool=this.service.pool,this.utils=new jt(a,t),this.params=t}async chainDetailsMap(){return this.service.chainDetailsMap()}async tokens(){return this.service.tokens()}async tokensByChain(n){return this.service.tokensByChain(n)}async getTransferStatus(n,t){return this.service.getTransferStatus(n,t)}async getGasBalance(n,t){return this.service.getGasBalance(n,t)}async checkAddress(n,t,a){return await this.service.checkAddress()}async getPendingStatusInfo(n,t,a,i){return this.service.getPendingStatusInfo(n,t,a,i)}async getTokenBalance(n,t){return this.service.getTokenBalance(n,t)}async getNativeTokenBalance(n,t){return this.service.getNativeTokenBalance(n,t)}async calculateFeePercentOnSourceChain(n,t){return this.service.calculateFeePercentOnSourceChain(n,t)}async calculateFeePercentOnDestinationChain(n,t,a){return this.service.calculateFeePercentOnDestinationChain(n,t,a)}async getAmountToBeReceivedAndGasFeeOptions(n,t,a,i){return this.service.getAmountToBeReceivedAndGasFeeOptions(n,t,a,i)}async getAmountToSendAndGasFeeOptions(n,t,a,i){return this.service.getAmountToSendAndGasFeeOptions(n,t,a,i)}async getAmountToBeReceived(n,t,a,i){return this.service.getAmountToBeReceived(n,t,a,i)}async getAmountToBeReceivedFromChain(n,t,a,i,r,o){return this.service.getAmountToBeReceivedFromChain(n,t,a,i,r,o)}getAmountToBeReceivedFromPools(n,t,a,i,r,o){return this.service.getAmountToBeReceivedFromPools(n,t,a,i,r,o)}async getAmountToSend(n,t,a,i){return this.service.getAmountToSend(n,t,a,i)}async getAmountToSendFromChain(n,t,a,i,r,o){return this.service.getAmountToSendFromChain(n,t,a,i,r,o)}getAmountToSendFromPools(n,t,a,i,r,o){return this.service.getAmountToSendFromPools(n,t,a,i,r,o)}async getGasFeeOptions(n,t,a){return this.service.getGasFeeOptions(n,t,a)}getAverageTransferTime(n,t,a){return this.service.getAverageTransferTime(n,t,a)}async getPoolInfoByToken(n){return this.service.getPoolInfoByToken(n)}async refreshPoolInfo(n){return this.service.refreshPoolInfo(n)}aprInPercents(n){return this.service.aprInPercents(n)}async getExtraGasMaxLimits(n,t){return this.service.getExtraGasMaxLimits(n,t)}async getVUsdFromAmount(n,t,a){return this.service.getVUsdFromAmount(n,t,a)}async getAmountFromVUsd(n,t){return this.service.getAmountFromVUsd(n,t)}async swapAndBridgeFeeCalculation(n,t,a){return this.service.swapAndBridgeFeeCalculation(n,t,a)}async swapAndBridgeFeeCalculationReverse(n,t,a){return this.service.swapAndBridgeFeeCalculationReverse(n,t,a)}async getSendAmountDetails(n,t,a,i){return this.service.getSendAmountDetails(n,t,a,i)}};export{sn as AddressStatus,va as AllbridgeCoreSdk,Rt as AmountFormat,Oe as AmountNotEnoughError,Pt as ArgumentInvalidDecimalsError,ie as CCTPDoesNotSupportedError,de as ChainSymbol,E as ChainType,Ia as ErrorCode,bt as ExtraGasMaxLimitExceededError,Xe as FeePaymentMethod,Te as InsufficientPoolLiquidityError,Tt as InvalidAmountError,ze as InvalidGasFeePaymentOptionError,Mn as InvalidMessengerOptionError,Ve as InvalidTxError,K as JupiterError,be as Messenger,Q as MethodNotSupportedError,St as NodeRpcUrlNotInitializedError,k as SdkError,D as SdkRootError,fn as SolanaAutoTxFee,qe as TimeoutError,wt as TxTooLargeError,je as VerifyTxError,yt as mainnet,fr as nodeRpcUrlsDefault,gr as nodeUrlsDefault,ur as testnet,pr as testnetNodeRpcUrlsDefault,lr as testnetNodeUrlsDefault};
|
|
5
|
+
&onlyDirectRoutes=true`)}catch(c){throw c instanceof ma&&c.response&&c.response.data&&c.response.data.error?new K(c.response.data.error):new K("Cannot get route")}let r;try{r=await ca.post(`${this.jupiterUrl}/swap`,JSON.stringify({quoteResponse:i.data,userPublicKey:n,wrapAndUnwrapSol:!0}))}catch(c){throw c instanceof ma&&c.response&&c.response.data&&c.response.data.error?new K(c.response.data.error):new K("Cannot get swap transaction")}let o;if(r?.data?.swapTransaction)o=r.data.swapTransaction;else throw new K("Cannot get swap transaction");let A=Buffer.from(o,"base64");return{tx:oi.deserialize(A)}}async amendJupiterWithSdkTx(n,t){try{let a=await Ne(n,this.connection),i=await Ne(t,this.connection),r=Aa.decompile(n.message,{addressLookupTableAccounts:a}),o=Aa.decompile(t.message,{addressLookupTableAccounts:i});return o.instructions.shift(),r.instructions.push(...o.instructions),a.push(...i),n.message=r.compileToV0Message(a),t.message.header.numRequiredSignatures===2&&n.signatures.length===1&&n.signatures.push(t.signatures[0]),n}catch(a){throw a instanceof Error&&a.message?new K(`Some error occurred during creation final swap and bridge transaction. ${a.message}`):new K("Some error occurred during creation final swap and bridge transaction")}}};var Tn=1e6,Ut=class extends se{constructor(t,a,i){super();this.solanaRpcUrl=t;this.params=a;this.api=i;this.chainType="SOLANA";this.jupiterService=new Et(t,a.jupiterUrl)}async buildRawTransactionSwap(t){let a=Re(this.chainType,t);return await this.buildSwapTransaction(a,t.sourceToken.poolAddress,t.destinationToken.poolAddress,t.txFeeParams)}async buildSwapTransaction(t,a,i,r){let{fromAccountAddress:o,amount:A,contractAddress:c,fromTokenAddress:m,toTokenAddress:u,toAccountAddress:l,minimumReceiveAmount:f}=t,y=o,h=c,T=m,g=u,d=i,S=l,b=new I(y),V=ve(this.solanaRpcUrl,b.toString()),M=new hn(rt,h,V),w=await Ze(M.programId),J=await ke(M.programId),W=new I(T),me=await _e(W,M.programId),ue=new I(a),he=await re(b,W),te=new I(S),L=new I(g),$=await _e(L,M.programId),ne=new I(d),H=await re(te,L),le=[Ie.ComputeBudgetProgram.setComputeUnitLimit({units:Tn})];try{await Ke(H,V)}catch{let Ra=await Ai.associatedToken(V).methods.create().accounts({mint:L,owner:te,associatedAccount:H}).instruction();le.push(Ra)}let pe=await M.methods.swap(new Ye(A),new Ye(f||0)).accounts({payer:b,config:J,bridgeAuthority:w,user:b,sendBridgeToken:me,sendMint:W,sendPool:ue,sendUserToken:he,receiveBridgeToken:$,receiveMint:L,receivePool:ne,receiveUserToken:H}).preInstructions(le).transaction(),ae=V.connection;return pe.recentBlockhash=(await ae.getLatestBlockhash()).blockhash,pe.feePayer=b,await Qe(pe,r,this.solanaRpcUrl),await this.convertToVersionedTransaction(pe,ae)}async buildRawTransactionSend(t){let a=await we(this.chainType,t,this.api),i=this.addPoolAddress(t,a),r=i.gasFeePaymentMethod=="stablecoin",o;if(r)try{let m=xe(i.fee);i.extraGas&&(m=m.plus(i.extraGas)),i=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(t.sourceToken.decimals,i);let{tx:u}=await this.jupiterService.getJupiterSwapTx(t.fromAccountAddress,t.sourceToken.tokenAddress,m.toFixed(0));if(o=u,i.amount=xe(i.amount).minus(m).toFixed(0),xe(i.amount).lte(0))throw new Oe(`Amount not enough to pay fee, ${P(xe(i.amount).minus(1).neg(),t.sourceToken.decimals).toFixed()} stables is missing`)}catch(m){throw m instanceof D?m:m instanceof Error&&m.message?new K(`Some error occurred during creation Jupiter swap transaction. ${m.message}`):new K("Some error occurred during creation Jupiter swap transaction")}let A,c;switch(a.messenger){case 1:{let m=await this.prepareSwapAndBridgeData(i);A=await this.buildSwapAndBridgeAllbridgeTransaction(m);break}case 2:{let m=await this.prepareSwapAndBridgeData(i),{transaction:u,messageAccount:l}=await this.buildSwapAndBridgeWormholeTransaction(m);A=u,c=l;break}case 3:{let m=await this.prepareSwapAndBridgeCctpData(i),{transaction:u,messageSentEventDataKeypair:l}=await this.buildSwapAndBridgeCctpTransaction(t.destinationToken.chainSymbol,m);A=u,c=l;break}}if(r){if(!o)throw new K("Swap tx is absent");A=await this.jupiterService.amendJupiterWithSdkTx(o,A)}return await sa(A,t.txFeeParams,this.solanaRpcUrl),c&&A.sign([c]),A}addPoolAddress(t,a){return{...a,poolAddress:t.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(t,a){if(a.gasFeePaymentMethod=="stablecoin"){let i=(await this.api.getReceiveTransactionCost({sourceChainId:a.fromChainId,destinationChainId:a.toChainId,messenger:a.messenger})).sourceNativeTokenPrice;a.fee=xe(a.fee).div(i).mul(xe(10).pow(U.SOLANA-t)).toFixed(0),a.extraGas&&(a.extraGas=xe(a.extraGas).div(i).mul(xe(10).pow(U.SOLANA-t)).toFixed(0)),a.gasFeePaymentMethod="native"}return a}getExtraGasInstruction(t,a,i){return Ie.SystemProgram.transfer({fromPubkey:a,toPubkey:i,lamports:+t})}async prepareSwapAndBridgeData(t){let{amount:a,contractAddress:i,fromChainId:r,fromAccountAddress:o,fromTokenAddress:A,toChainId:c,toAccountAddress:m,toTokenAddress:u,poolAddress:l,extraGas:f}=t,y=A,h=o,T=c,g=u,d=m,S=i,b=r,V=ve(this.solanaRpcUrl,h),M=new hn(rt,S,V),w=Array.from(Le()),J=new I(l),W=await ta(a,M,J),me=await Zn(w,M.programId),ue=await Ze(M.programId),he=await re(new I(h),new I(y)),te=await _e(new I(y),M.programId),L=await mn(T,M.programId),$=await Ln(T,Buffer.from(g),M.programId),ne=await ke(M.programId),H=await M.account.config.fetch(ne),le=await tt(T,H.gasOracleProgramId),pe=await tt(b,H.gasOracleProgramId),ae=na({amount:W,recipient:Buffer.from(d),nonce:Buffer.from(w),receiveToken:Buffer.from(g),destinationChainId:T,sourceChainId:b,chainBridge:(await Ze(M.programId)).toBuffer()}),C={};return C.bridge=M,C.amount=new Ye(a),C.vusdAmount=new Ye(W),C.nonce=w,C.recipient=Array.from(d),C.receiveToken=Array.from(g),C.poolAccount=J,C.lockAccount=me,C.bridgeAuthority=ue,C.userToken=he,C.bridgeTokenAccount=te,C.chainBridgeAccount=L,C.otherBridgeTokenAccount=$,C.userAccount=new I(h),C.destinationChainId=T,C.mint=new I(y),C.config=ne,C.configAccountInfo=H,C.gasPrice=le,C.thisGasPrice=pe,C.message=ae,f&&(C.extraGasInstruction=this.getExtraGasInstruction(f,C.userAccount,ne)),C}async buildSwapAndBridgeAllbridgeTransaction(t){let{bridge:a,vusdAmount:i,nonce:r,recipient:o,receiveToken:A,poolAccount:c,lockAccount:m,bridgeAuthority:u,userToken:l,bridgeTokenAccount:f,chainBridgeAccount:y,otherBridgeTokenAccount:h,userAccount:T,destinationChainId:g,mint:d,config:S,configAccountInfo:b,gasPrice:V,thisGasPrice:M,message:w,extraGasInstruction:J}=t,W=b.allbridgeMessengerProgramId,me=await un(g,W),ue=await ke(W),he=await Xn(w,W),te=[];J&&te.push(J);let L=await a.methods.swapAndBridge({vusdAmount:i,nonce:r,destinationChainId:g,recipient:o,receiveToken:A}).accounts({mint:d,user:T,config:S,lock:m,pool:c,gasPrice:V,thisGasPrice:M,bridgeAuthority:u,userToken:l,bridgeToken:f,chainBridge:y,messenger:W,messengerGasUsage:me,messengerConfig:ue,sentMessageAccount:he,otherBridgeToken:h}).preInstructions([Ie.ComputeBudgetProgram.setComputeUnitLimit({units:Tn})]).postInstructions(te).transaction(),$=ve(this.solanaRpcUrl,T.toString()).connection;return L.recentBlockhash=(await $.getLatestBlockhash()).blockhash,L.feePayer=T,await this.convertToVersionedTransaction(L,$)}async convertToVersionedTransaction(t,a){let i=await a.getAddressLookupTable(new I(this.params.solanaLookUpTable)).then(o=>o.value);if(!i)throw new k("Cannot find allbridgeLookupTableAccount");let r=new Ie.TransactionMessage({payerKey:t.feePayer,recentBlockhash:t.recentBlockhash,instructions:t.instructions}).compileToV0Message([i]);return new Ie.VersionedTransaction(r)}async buildSwapAndBridgeWormholeTransaction(t){let{bridge:a,vusdAmount:i,nonce:r,recipient:o,receiveToken:A,poolAccount:c,lockAccount:m,bridgeAuthority:u,userToken:l,bridgeTokenAccount:f,chainBridgeAccount:y,otherBridgeTokenAccount:h,userAccount:T,destinationChainId:g,mint:d,config:S,configAccountInfo:b,gasPrice:V,thisGasPrice:M,message:w,extraGasInstruction:J}=t,W=this.params.wormholeMessengerProgramId,[me]=I.findProgramAddressSync([Buffer.from("Bridge")],new I(W)),[ue]=I.findProgramAddressSync([Buffer.from("fee_collector")],new I(W)),[he]=I.findProgramAddressSync([Buffer.from("Sequence"),u.toBuffer()],new I(W)),te=await un(g,b.wormholeMessengerProgramId),L=await ke(b.wormholeMessengerProgramId),$=ua.generate(),ne=ve(this.solanaRpcUrl,T.toString()),H=await ne.connection.getAccountInfo(me);if(H==null)throw new k("Cannot fetch wormhole bridge account info");let le=new Ye(H.data.slice(16,24),"le").toString(),pe=ci.transfer({fromPubkey:T,toPubkey:ue,lamports:+le}),ae=[];J&&ae.push(J);let C={mint:d,user:T,config:S,lock:m,pool:c,gasPrice:V,thisGasPrice:M,bridgeAuthority:u,userToken:l,bridgeToken:f,chainBridge:y,otherBridgeToken:h,messengerGasUsage:te,wormholeProgram:W,bridge:me,message:$.publicKey,wormholeMessenger:b.wormholeMessengerProgramId,sequence:he,feeCollector:ue,wormholeMessengerConfig:L,clock:Ie.SYSVAR_CLOCK_PUBKEY},ft=await a.methods.swapAndBridgeWormhole({vusdAmount:i,nonce:r,destinationChainId:g,recipient:o,receiveToken:A}).accounts(C).preInstructions([Ie.ComputeBudgetProgram.setComputeUnitLimit({units:Tn}),pe]).postInstructions(ae).signers([$]).transaction();return ft.recentBlockhash=(await ne.connection.getLatestBlockhash()).blockhash,ft.feePayer=T,{transaction:await this.convertToVersionedTransaction(ft,ne.connection),messageAccount:$}}async prepareSwapAndBridgeCctpData(t){let{contractAddress:a,amount:i,fromAccountAddress:r,fromTokenAddress:o,toChainId:A,toAccountAddress:c,toTokenAddress:m,extraGas:u}=t,l=a;if(!l)throw new ie("Such route does not support CCTP protocol");let f=4,y=r,h=m,T=c,g=ve(this.solanaRpcUrl,y),d=new hn(ea,l,g),S=new I(o),b=await Kn(S,d.programId),V=new I(y),M=await d.account.cctpBridge.fetch(b),w={};return w.cctpBridge=d,w.cctpBridgeAccount=b,w.cctpAddressAccount=new I(l),w.amount=new Ye(i),w.recipient=Array.from(T),w.receiveToken=Array.from(h),w.userToken=await re(V,S),w.bridgeAuthority=await _n(b,d.programId),w.bridgeTokenAccount=await Qn(S,d.programId),w.chainBridgeAccount=await mn(A,d.programId),w.userAccount=V,w.destinationChainId=A,w.mint=S,w.gasPrice=await tt(A,M.gasOracleProgramId),w.thisGasPrice=await tt(f,M.gasOracleProgramId),w.provider=g,u&&(w.extraGasInstruction=this.getExtraGasInstruction(u,w.userAccount,b)),w}async buildSwapAndBridgeCctpTransaction(t,a){let{cctpBridge:i,cctpBridgeAccount:r,amount:o,recipient:A,receiveToken:c,bridgeAuthority:m,userToken:u,bridgeTokenAccount:l,chainBridgeAccount:f,userAccount:y,destinationChainId:h,mint:T,gasPrice:g,thisGasPrice:d,extraGasInstruction:S,provider:b}=a,V=this.params.cctpParams.cctpDomains[t],M=this.params.cctpParams.cctpTransmitterProgramId,w=this.params.cctpParams.cctpTokenMessengerMinter;if(V==null||!M||!w)throw new k("CCTP is not configured");let J=new I(M),W=new I(w),{messageTransmitterAccount:me,tokenMessenger:ue,tokenMessengerEventAuthority:he,tokenMinter:te,localToken:L,remoteTokenMessengerKey:$,authorityPda:ne}=Jn(V,T,J,W),H=[];S&&H.push(S);let le=ua.generate(),pe=Yn(i.programId,le.publicKey),ae=await i.methods.bridge({amount:o,destinationChainId:h,recipient:A,receiveToken:c}).accounts({mint:T,user:y,cctpBridge:r,messageSentEventData:le.publicKey,lock:pe,cctpMessenger:W,messageTransmitterProgram:J,messageTransmitterAccount:me,tokenMessenger:ue,tokenMinter:te,localToken:L,remoteTokenMessengerKey:$,authorityPda:ne,eventAuthority:he,bridgeToken:l,gasPrice:g,thisGasPrice:d,chainBridge:f,userToken:u,bridgeAuthority:m}).preInstructions([Ie.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(H).transaction(),C=b.connection;return ae.recentBlockhash=(await C.getLatestBlockhash()).blockhash,ae.feePayer=y,{transaction:await this.convertToVersionedTransaction(ae,C),messageSentEventDataKeypair:le}}send(t){throw new Q}};import{Big as Pi}from"big.js";import{Address as Pn}from"stellar-sdk";import{Address as Ot,ContractSpec as bi}from"stellar-sdk";import{Account as mi,Address as mA,BASE_FEE as ui,Contract as li,SorobanRpc as Nt,TimeoutInfinite as pi,TransactionBuilder as di}from"stellar-sdk";var oe=class{constructor(n){this.value=n}unwrapErr(){throw new Error("No error")}unwrap(){return"value"in this.value?this.value.value:this.value}isOk(){return!0}isErr(){return!this.isOk()}},ee=class{constructor(n){this.error=n}unwrapErr(){return"error"in this.error?this.error.error:this.error}unwrap(){throw new Error(this.error.message)}isOk(){return!1}isErr(){return!this.isOk()}},gi=/Error\(Contract, #(\d+)\)/,fi="GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF",F=class s{constructor(n){this.options=n;this.simulate=async()=>(this.simulation=await this.server.simulateTransaction(this.raw),Nt.Api.isSimulationSuccess(this.simulation)&&(this.raw=Nt.assembleTransaction(this.raw,this.simulation).build()),this);this.getAccount=()=>new mi(fi,"0");this.server=new Nt.Server(this.options.rpcUrl,{allowHttp:this.options.rpcUrl.startsWith("http://")})}static async fromSimulation(n){let t=new s(n),a=new li(n.contractId);return t.raw=new di(t.getAccount(),{fee:n.fee?.toString(10)??ui,networkPassphrase:n.networkPassphrase}).addOperation(a.call(n.method,...n.args??[])).setTimeout(pi).build(),await t.simulate()}get simulationData(){if(this.simulationResult&&this.simulationTransactionData)return{result:this.simulationResult,transactionData:this.simulationTransactionData};let n=this.simulation;if(Nt.Api.isSimulationError(n))throw new Error(`Transaction simulation failed: "${n.error}"`);if(!n.result)throw new Error(`Expected an invocation simulation, but got no 'result' field. Simulation: ${JSON.stringify(n,null,2)}`);return this.simulationResult=n.result,this.simulationTransactionData=n.transactionData.build(),{result:this.simulationResult,transactionData:this.simulationTransactionData}}get result(){try{return this.options.parseResultXdr(this.simulationData.result.retval)}catch(n){let t=this.parseError(n.toString());if(t)return t;throw n}}parseError(n){if(!this.options.errorTypes)return;let t=n.match(gi);if(!t)return;let a=parseInt(t[1],10),i=this.options.errorTypes[a];if(i.message)return new ee(i)}};import{Address as dA,BASE_FEE as yi,Contract as hi,Operation as Ti,SorobanRpc as bn,TimeoutInfinite as la,TransactionBuilder as pa}from"stellar-sdk";var Ce=class s{constructor(n){this.options=n;this.simulate=async()=>(this.simulation=await this.server.simulateTransaction(this.raw),bn.Api.isSimulationSuccess(this.simulation)&&(this.raw=bn.assembleTransaction(this.raw,this.simulation).build()),this);this.server=new bn.Server(this.options.rpcUrl,{allowHttp:this.options.rpcUrl.startsWith("http://")})}static async xdrFromSimulation(n){let t=new s(n),a=new hi(n.contractId);t.raw=new pa(await t.server.getAccount(n.account),{fee:n.fee?.toString(10)??yi,networkPassphrase:n.networkPassphrase}).addOperation(a.call(n.method,...n.args??[])).setTimeout(la).build();let i=await t.simulate(),r=i.raw.operations[0];return i.raw=new pa(await t.server.getAccount(n.account),{fee:i.raw.fee,networkPassphrase:n.networkPassphrase}).setTimeout(la).addOperation(Ti.invokeHostFunction({...r,auth:r.auth??[]})).build(),await i.simulate(),i.raw.toXDR()}};var da={0:{message:""},1:{message:""},2:{message:""},3:{message:""},4:{message:""},5:{message:""},6:{message:""},7:{message:""},8:{message:""},9:{message:""},103:{message:""},104:{message:""},105:{message:""},106:{message:""},107:{message:""},108:{message:""},109:{message:""},203:{message:""},204:{message:""},205:{message:""},206:{message:""},207:{message:""},208:{message:""},209:{message:""},210:{message:""},211:{message:""},212:{message:""},214:{message:""},215:{message:""},216:{message:""},217:{message:""},218:{message:""},300:{message:""},301:{message:""},302:{message:""},303:{message:""},400:{message:""}},st=class{constructor(n){this.options=n;this.parsers={swapAndBridge:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("swap_and_bridge",n)),swap:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("swap",n))};this.swapAndBridge=async({sender:n,token:t,amount:a,recipient:i,destination_chain_id:r,receive_token:o,nonce:A,gas_amount:c,fee_token_amount:m},u={})=>await Ce.xdrFromSimulation({method:"swap_and_bridge",args:this.spec.funcArgsToScVals("swap_and_bridge",{sender:new Ot(n),token:new Ot(t),amount:a,recipient:i,destination_chain_id:r,receive_token:o,nonce:A,gas_amount:c,fee_token_amount:m}),account:n,...u,...this.options,errorTypes:da,parseResultXdr:this.parsers.swapAndBridge});this.swap=async({sender:n,amount:t,token:a,receive_token:i,recipient:r,receive_amount_min:o},A={})=>await Ce.xdrFromSimulation({method:"swap",args:this.spec.funcArgsToScVals("swap",{sender:new Ot(n),amount:t,token:a,receive_token:i,recipient:new Ot(r),receive_amount_min:o}),account:n,...A,...this.options,errorTypes:da,parseResultXdr:this.parsers.swap});this.spec=new bi(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJY2xhaW1hYmxlAAAAAAAAAQAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACWNsYWltYWJsZQAAAAAAAAEAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAJQAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"])}};var Vt=class extends se{constructor(t,a,i){super();this.nodeRpcUrlsConfig=t;this.params=a;this.api=i;this.chainType="SRB"}async buildRawTransactionSend(t){let a=await we(this.chainType,t,this.api);return await this.buildRawTransactionSendFromParams(a)}async buildRawTransactionSendFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toChainId:A,toAccountAddress:c,toTokenAddress:m,fee:u,gasFeePaymentMethod:l,extraGas:f}=t,y=u;f&&(y=Pi(y).plus(f).toFixed());let h=this.getContract(st,i),T;return l==="stablecoin"?T=await h.swapAndBridge({sender:r,token:Pn.contract(Buffer.from(o)).toString(),amount:BigInt(a),recipient:Buffer.from(c),destination_chain_id:+A,receive_token:Buffer.from(m),nonce:pn(),gas_amount:BigInt(0),fee_token_amount:BigInt(y)}):T=await h.swapAndBridge({sender:r,token:Pn.contract(Buffer.from(o)).toString(),amount:BigInt(a),recipient:Buffer.from(c),destination_chain_id:+A,receive_token:Buffer.from(m),nonce:pn(),gas_amount:BigInt(y),fee_token_amount:BigInt(0)}),T}async buildRawTransactionSwap(t){let a=Re(this.chainType,t);return await this.buildRawTransactionSwapFromParams(a)}async buildRawTransactionSwapFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toAccountAddress:A,toTokenAddress:c,minimumReceiveAmount:m}=t;return await this.getContract(st,i).swap({sender:r,amount:BigInt(a),token:Pn.contract(Buffer.from(o)).toBuffer(),receive_token:Buffer.from(c),recipient:A,receive_amount_min:BigInt(m)})}send(t){throw new Q}getContract(t,a){let i={contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new t(i)}};import{Big as Ci}from"big.js";import Si from"bn.js";function Gt(s){return"0x"+new Si(s).toString("hex")}function ga(s){return new Promise(n=>setTimeout(()=>n(),s))}var Je=s=>(...n)=>new Promise((t,a)=>s(...n,(i,r)=>i?a(i):t(r)));async function Zt(s,n){let t=await s.trx.sign(n);if(!t.signature)throw new Ve("Transaction was not signed properly");let i=(await s.trx.sendRawTransaction(t)).txid;return await wi(s,i),{txId:i}}async function wi(s,n,t=1e4){let a=Date.now();for(;;){if(Date.now()-a>t)throw new ze("Transaction not found");let i=await s.trx.getUnconfirmedTransactionInfo(n);if(!i?.receipt){await ga(2e3);continue}if(i.receipt.result==="SUCCESS")return i;throw new ze(`Transaction status is ${i.receipt.result}`)}}var ot=class extends se{constructor(t,a){super();this.tronWeb=t;this.api=a;this.chainType="TRX"}async send(t){let a=await we(this.chainType,t,this.api),i=await this.buildRawTransactionSendFromParams(a);return await Zt(this.tronWeb,i)}async buildRawTransactionSwap(t){let a=Re(this.chainType,t);return await this.buildRawTransactionSwapFromParams(a)}async buildRawTransactionSwapFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toAccountAddress:A,toTokenAddress:c,minimumReceiveAmount:m}=t,u=[{type:"uint256",value:a},{type:"bytes32",value:o},{type:"bytes32",value:c},{type:"address",value:A},{type:"uint256",value:m}];return this.buildRawTransaction(i,"swap(uint256,bytes32,bytes32,address,uint256)",u,"0",r)}async buildRawTransactionSend(t){let a=await we(this.chainType,t,this.api);return this.buildRawTransactionSendFromParams(a)}async buildRawTransactionSendFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toChainId:A,toAccountAddress:c,toTokenAddress:m,messenger:u,fee:l,gasFeePaymentMethod:f,extraGas:y}=t,h=l;y&&(h=Ci(h).plus(y).toFixed());let T=Le().toJSON().data,g,d,S;return u==3?(f==="stablecoin"?(g=[{type:"uint256",value:a},{type:"bytes32",value:c},{type:"uint256",value:A},{type:"uint256",value:h}],d="0"):(g=[{type:"uint256",value:a},{type:"bytes32",value:c},{type:"uint256",value:A},{type:"uint256",value:0}],d=h),S="bridge(uint256,bytes32,uint256,uint256)"):(f==="stablecoin"?(g=[{type:"bytes32",value:o},{type:"uint256",value:a},{type:"bytes32",value:c},{type:"uint256",value:A},{type:"bytes32",value:m},{type:"uint256",value:T},{type:"uint8",value:u},{type:"uint256",value:h}],d="0"):(g=[{type:"bytes32",value:o},{type:"uint256",value:a},{type:"bytes32",value:c},{type:"uint256",value:A},{type:"bytes32",value:m},{type:"uint256",value:T},{type:"uint8",value:u},{type:"uint256",value:0}],d=h),S="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)"),this.buildRawTransaction(i,S,g,d,r)}async buildRawTransaction(t,a,i,r,o){let A=await this.tronWeb.transactionBuilder.triggerSmartContract(t,a,{callValue:r},i,o);if(!A?.result?.result)throw new k("Unknown error: "+JSON.stringify(A,null,2));return A.transaction}};var _t=class{constructor(n,t,a,i){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a;this.tokenService=i;this.rawTxBuilder=new xt(n,t,a,i)}async getAllowance(n,t){let a,i;t?(a=n,i=t):i=n;let r=it(i.token,i.messenger);return await this.tokenService.getAllowance({...i,spender:r},a)}async checkAllowance(n,t){let a,i;t?(a=n,i=t):i=n;let r=it(i.token,i.messenger);return this.tokenService.checkAllowance({...i,spender:r},a)}async approve(n,t){let a=it(t.token,t.messenger);return this.tokenService.approve(n,{...t,spender:a})}async send(n,t){return v(t.amount),R("amount",t.amount,t.sourceToken.decimals),Dt(t.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,n).send(t)}};function it(s,n){if(n&&n==3){if(s.cctpAddress)return s.cctpAddress;throw new ie("Such route does not support CCTP protocol")}else return s.bridgeAddress}function Dt(s,n,t,a,i){switch(X[s].chainType){case"EVM":{if(i)return new at(i,n,t);{let r=t.getNodeRpcUrl(s);return new at(new Mi(r),n,t)}}case"TRX":{if(i)return new ot(i,n);{let r=t.getNodeRpcUrl(s);return new ot(new Bi({fullHost:r}),n)}}case"SOLANA":return new Ut(t.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:a.wormholeMessengerProgramId,solanaLookUpTable:a.solanaLookUpTable,cctpParams:a.cctpParams,jupiterUrl:a.jupiterUrl},n);case"SRB":return new Vt(t,a,n)}}import{Big as Ei}from"big.js";import Ui from"tronweb";import Ni from"web3";import{Big as Be}from"big.js";function fa(s,n,t,a,i){let r=B(s,3),o=Be(r),A=Be(t),c=Be(a).plus(i),m,u;if(A.eq(0)||c.eq(0)){let f=o.div(2);m=Be(a).plus(f),u=Be(i).plus(f)}else m=Be(a).plus(o.mul(a).div(c)),u=Be(i).plus(o.mul(i).div(c));return Be(Dn(n,m.toFixed(),u.toFixed())).minus(A).toFixed()}function ya(s){let n=B(s,3);return Be(n).round().toFixed()}var De=[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];var q=class{constructor(n){this.lpAmount=n.lpAmount,this.rewardDebt=n.rewardDebt}get userLiquidity(){return P(this.lpAmount,3).toFixed()}earned(n,t){let a=In(this.lpAmount,this.rewardDebt,n.accRewardPerShareP,n.p);return t?P(a,t).toFixed():a}};var Ae=class{};var At=class extends Ae{constructor(t,a){super();this.web3=t;this.api=a;this.chainType="EVM";this.P=52}async getUserBalanceInfo(t,a){let i;try{i=await vt(this.getUserBalanceInfoByBatch(t,a),`Cannot get UserBalanceInfo for ${a.name} on ${a.chainSymbol}`,5e3)}catch{i=await cn(()=>this.getUserBalanceInfoPerProperty(t,a),`Cannot get UserBalanceInfo for ${a.name} on ${a.chainSymbol}`,5,2e3)}return i}async getUserBalanceInfoByBatch(t,a){let i=new this.web3.BatchRequest,r=new this.web3.eth.Contract(De,a.poolAddress),o=["userRewardDebt","balanceOf"].map(m=>Je(u=>i.add(r.methods[m](t).call.request({},u)))());i.execute();let[A,c]=await Promise.all(o);return new q({lpAmount:c,rewardDebt:A})}async getUserBalanceInfoPerProperty(t,a){let i=await this.getPoolContract(a.poolAddress).methods.userRewardDebt(t).call(),r=await this.getPoolContract(a.poolAddress).methods.balanceOf(t).call();return new q({lpAmount:r,rewardDebt:i})}async getPoolInfoFromChain(t){let a;try{a=await vt(this.getPoolInfoByBatch(t),`Cannot get PoolInfo for ${t.name} on ${t.chainSymbol}`,5e3)}catch{a=await cn(()=>this.getPoolInfoPerProperty(t),`Cannot get PoolInfo for ${t.name} on ${t.chainSymbol}`,5,2e3)}return a}async getPoolInfoByBatch(t){let a=new this.web3.BatchRequest,i=new this.web3.eth.Contract(De,t.poolAddress),r=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(T=>Je(g=>a.add(i.methods[T]().call.request({},g)))());a.execute();let[o,A,c,m,u,l]=await Promise.all(r),f=c.toString(),y=m.toString(),h=z({tokenBalance:f,vUsdBalance:y});return{aValue:o.toString(),dValue:A.toString(),tokenBalance:f,vUsdBalance:y,totalLpAmount:u.toString(),accRewardPerShareP:l.toString(),p:this.P,imbalance:h}}async getPoolInfoPerProperty(t){let a=this.getPoolContract(t.poolAddress),i=await a.methods.a().call(),r=await a.methods.d().call(),o=await a.methods.tokenBalance().call(),A=await a.methods.vUsdBalance().call(),c=await a.methods.totalSupply().call(),m=await a.methods.accRewardPerShareP().call(),u=z({tokenBalance:o,vUsdBalance:A});return{aValue:i,dValue:r,tokenBalance:o,vUsdBalance:A,totalLpAmount:c,accRewardPerShareP:m,p:this.P,imbalance:u}}async buildRawTransactionDeposit(t){return Promise.resolve({...this.buildTxParams(t),data:this.getPoolContract(t.token.poolAddress).methods.deposit(t.amount).encodeABI()})}async buildRawTransactionWithdraw(t){return Promise.resolve({...this.buildTxParams(t),data:this.getPoolContract(t.token.poolAddress).methods.withdraw(t.amount).encodeABI()})}async buildRawTransactionClaimRewards(t){return Promise.resolve({...this.buildTxParams(t),data:this.getPoolContract(t.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(t){return{from:t.accountAddress,to:t.token.poolAddress,value:"0"}}getContract(t,a){return new this.web3.eth.Contract(t,a)}getPoolContract(t){return this.getContract(De,t)}};var Lt=class{constructor(n,t,a,i){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a;this.tokenService=i}async approve(n,t){if(t){let a=n,i=t;return this.tokenService.buildRawTransactionApprove({...i,spender:i.token.poolAddress},a)}else{let a=n;return this.tokenService.buildRawTransactionApprove({...a,spender:a.token.poolAddress})}}async deposit(n,t){return v(n.amount),R("amount",n.amount,n.token.decimals),n.amount=B(n.amount,n.token.decimals).toFixed(),He(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionDeposit(n)}async withdraw(n,t){return v(n.amount),R("amount",n.amount,n.token.decimals),n.amount=B(n.amount,3).toFixed(),He(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionWithdraw(n)}async claimRewards(n,t){return He(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionClaimRewards(n)}};import{AnchorProvider as vi,BN as ha,Program as Ri,Spl as Ii,web3 as xi}from"@project-serum/anchor";import{Connection as Di,PublicKey as Fe}from"@solana/web3.js";var Xt=class extends Ae{constructor(t,a){super();this.solanaRpcUrl=t;this.api=a;this.chainType="SOLANA";this.P=48}async getUserBalanceInfo(t,a){let i=this.buildAnchorProvider(t),r=this.getBridge(a.bridgeAddress,i),o=new Fe(a.poolAddress),A=await r.account.pool.fetch(o);try{let c=await ln(new Fe(t),A.mint,r.programId),{lpAmount:m,rewardDebt:u}=await r.account.userDeposit.fetch(c);return new q({lpAmount:m.toString(),rewardDebt:u.toString()})}catch{return new q({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(t){let a=this.buildAnchorProvider(t.bridgeAddress),i=await this.getBridge(t.bridgeAddress,a).account.pool.fetch(t.poolAddress),r=i.vUsdBalance.toString(),o=i.tokenBalance.toString(),A=z({tokenBalance:o,vUsdBalance:r});return{dValue:i.d.toString(),aValue:i.a.toString(),totalLpAmount:i.totalLpAmount.toString(),vUsdBalance:r,tokenBalance:o,accRewardPerShareP:i.accRewardPerShareP.toString(),p:this.P,imbalance:A}}async buildRawTransactionDeposit(t){let{bridge:a,accounts:i,preInstructions:r}=await this.prepareDataForTransaction(t),o=await a.methods.deposit(new ha(t.amount)).accounts(i).preInstructions(r).transaction();return o.recentBlockhash=(await this.buildAnchorProvider(t.accountAddress).connection.getLatestBlockhash()).blockhash,o.feePayer=new Fe(t.accountAddress),await Qe(o,t.txFeeParams,this.solanaRpcUrl),o}async buildRawTransactionWithdraw(t){let{bridge:a,accounts:i,preInstructions:r}=await this.prepareDataForTransaction(t),o=await a.methods.withdraw(new ha(t.amount)).accounts(i).preInstructions(r).transaction();return o.recentBlockhash=(await this.buildAnchorProvider(t.accountAddress).connection.getLatestBlockhash()).blockhash,o.feePayer=new Fe(t.accountAddress),await Qe(o,t.txFeeParams,this.solanaRpcUrl),o}async buildRawTransactionClaimRewards(t){let{bridge:a,accounts:i,preInstructions:r}=await this.prepareDataForTransaction(t),o=await a.methods.claimRewards().accounts(i).preInstructions(r).transaction();return o.recentBlockhash=(await this.buildAnchorProvider(t.accountAddress).connection.getLatestBlockhash()).blockhash,o.feePayer=new Fe(t.accountAddress),await Qe(o,t.txFeeParams,this.solanaRpcUrl),o}async prepareDataForTransaction(t){let a=this.buildAnchorProvider(t.accountAddress),i=this.getBridge(t.token.bridgeAddress,a),{accounts:r,preInstructions:o}=await this._getLPTransactionData(i,t.token.poolAddress,t.accountAddress,a);return{bridge:i,accounts:r,preInstructions:o}}getBridge(t,a){return new Ri(rt,t,a)}buildAnchorProvider(t){let a=new Di(this.solanaRpcUrl,"confirmed"),i=new Fe(t);return new vi(a,{publicKey:i},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(t,a,i,r){let o=new Fe(i),A=await ke(t.programId),c=await Ze(t.programId),m=new Fe(a),l=(await t.account.pool.fetch(m)).mint,f=await re(o,l),y=await _e(l,t.programId),h=await ln(o,l,t.programId),T=[xi.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await Ke(f,r)}catch{let b=await Ii.associatedToken(r).methods.create().accounts({mint:l,owner:o,associatedAccount:f}).instruction();T.push(b)}try{await t.account.userDeposit.fetch(h)}catch{let S=await t.methods.initDepositAccount().accounts({mint:l,user:o,userDeposit:h}).instruction();T.push(S)}return{accounts:{mint:l,user:o,config:A,pool:m,bridgeAuthority:c,userDeposit:h,userToken:f,bridgeToken:y},preInstructions:T}}};import{Address as Kt,ContractSpec as Fi}from"stellar-sdk";var ct={0:{message:""},1:{message:""},2:{message:""},3:{message:""},4:{message:""},5:{message:""},6:{message:""},7:{message:""},8:{message:""},9:{message:""},103:{message:""},104:{message:""},105:{message:""},106:{message:""},107:{message:""},108:{message:""},109:{message:""},203:{message:""},204:{message:""},205:{message:""},206:{message:""},207:{message:""},208:{message:""},209:{message:""},210:{message:""},211:{message:""},212:{message:""},214:{message:""},215:{message:""},216:{message:""},217:{message:""},218:{message:""},300:{message:""},301:{message:""},302:{message:""},303:{message:""},400:{message:""}},Qt=class{constructor(n){this.options=n;this.parsers={deposit:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("deposit",n)),withdraw:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("withdraw",n)),claimRewards:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("claim_rewards",n)),getPool:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("get_pool",n)),getUserDeposit:n=>n instanceof ee?n:new oe(this.spec.funcResToNative("get_user_deposit",n))};this.depositXdr=async({sender:n,amount:t},a={})=>await Ce.xdrFromSimulation({method:"deposit",args:this.spec.funcArgsToScVals("deposit",{sender:new Kt(n),amount:t}),account:n,...a,...this.options,errorTypes:ct,parseResultXdr:this.parsers.deposit});this.withdrawXdr=async({sender:n,amount_lp:t},a={})=>await Ce.xdrFromSimulation({method:"withdraw",args:this.spec.funcArgsToScVals("withdraw",{sender:new Kt(n),amount_lp:t}),account:n,...a,...this.options,errorTypes:ct,parseResultXdr:this.parsers.withdraw});this.claimRewardsXdr=async({sender:n},t={})=>await Ce.xdrFromSimulation({method:"claim_rewards",args:this.spec.funcArgsToScVals("claim_rewards",{sender:new Kt(n)}),account:n,...t,...this.options,errorTypes:ct,parseResultXdr:this.parsers.claimRewards});this.getPool=async(n={})=>await F.fromSimulation({method:"get_pool",args:this.spec.funcArgsToScVals("get_pool",{}),...n,...this.options,errorTypes:ct,parseResultXdr:this.parsers.getPool});this.getUserDeposit=async({user:n},t={})=>await F.fromSimulation({method:"get_user_deposit",args:this.spec.funcArgsToScVals("get_user_deposit",{user:new Kt(n)}),...t,...this.options,errorTypes:ct,parseResultXdr:this.parsers.getUserDeposit});this.spec=new Fi(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAUAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAAAAAAJY2xhaW1hYmxlAAAAAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANY2xhaW1fYmFsYW5jZQAAAAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAVZ2V0X2NsYWltYWJsZV9iYWxhbmNlAAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAADkJhbGFuY2VDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAgAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAATAAAAAQAAAAAAAAAQQ2xhaW1hYmxlQmFsYW5jZQAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAAEENsYWltYWJsZUJhbGFuY2UAAAABAAAAAAAAAAZhbW91bnQAAAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAJQAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"])}};var Yt=class extends Ae{constructor(t,a,i){super();this.nodeRpcUrlsConfig=t;this.params=a;this.api=i;this.chainType="SRB";this.P=48}async getUserBalanceInfo(t,a){let r=(await this.getContract(a.poolAddress).getUserDeposit({user:t})).result;if(r.isErr())throw new k;let o=r.unwrap();return new q({lpAmount:o.lp_amount.toString(),rewardDebt:o.reward_debt.toString()})}async getPoolInfoFromChain(t){let i=(await this.getContract(t.poolAddress).getPool()).result;if(i.isErr())throw new k;let r=i.unwrap();return{aValue:r.a.toString(),accRewardPerShareP:r.acc_reward_per_share_p.toString(),dValue:r.d.toString(),tokenBalance:r.token_balance.toString(),p:this.P,totalLpAmount:r.total_lp_amount.toString(),vUsdBalance:r.v_usd_balance.toString(),imbalance:z({tokenBalance:r.token_balance.toString(),vUsdBalance:r.v_usd_balance.toString()})}}async buildRawTransactionDeposit(t){return await this.getContract(t.token.poolAddress).depositXdr({sender:t.accountAddress,amount:BigInt(t.amount)})}async buildRawTransactionWithdraw(t){return await this.getContract(t.token.poolAddress).withdrawXdr({sender:t.accountAddress,amount_lp:BigInt(t.amount)})}async buildRawTransactionClaimRewards(t){return await this.getContract(t.token.poolAddress).claimRewardsXdr({sender:t.accountAddress})}getContract(t){let a={contractId:t,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new Qt(a)}};import Wi from"web3";var mt=class extends Ae{constructor(t,a,i){super();this.tronWeb=t;this.api=a;this.chainType="TRX";this.P=52;i&&(this.web3=new Wi(i))}async getUserBalanceInfo(t,a){let i;if(this.web3)try{i=await this.getUserBalanceInfoByBatch(this.web3,t,a)}catch{i=await this.getUserBalanceInfoPerProperty(t,a)}else i=await this.getUserBalanceInfoPerProperty(t,a);return i}async getUserBalanceInfoByBatch(t,a,i){let r=new t.BatchRequest,o=new t.eth.Contract(De,nt(i.poolAddress)),A=nt(a),c=["userRewardDebt","balanceOf"].map(l=>Je(f=>r.add(o.methods[l](A).call.request({},f)))());r.execute();let[m,u]=await Promise.all(c);return new q({lpAmount:u,rewardDebt:m})}async getUserBalanceInfoPerProperty(t,a){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(t);let i=await this.getContract(a.poolAddress),r=(await i.methods.userRewardDebt(t).call()).toString(),o=(await i.methods.balanceOf(t).call()).toString();return new q({lpAmount:o,rewardDebt:r})}async getPoolInfoFromChain(t){let a;if(this.web3)try{a=await this.getPoolInfoByBatch(this.web3,t)}catch{a=await this.getPoolInfoPerProperty(t)}else a=await this.getPoolInfoPerProperty(t);return a}async getPoolInfoByBatch(t,a){let i=new t.BatchRequest,r=new t.eth.Contract(De,nt(a.poolAddress)),o=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(g=>Je(d=>i.add(r.methods[g]().call.request({},d)))());i.execute();let[A,c,m,u,l,f]=await Promise.all(o),y=m.toString(),h=u.toString(),T=z({tokenBalance:y,vUsdBalance:h});return{aValue:A.toString(),dValue:c.toString(),tokenBalance:y,vUsdBalance:h,totalLpAmount:l.toString(),accRewardPerShareP:f.toString(),p:this.P,imbalance:T}}async getPoolInfoPerProperty(t){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(t.poolAddress);let a=await this.getContract(t.poolAddress),[i,r,o,A,c,m]=await Promise.all([a.methods.a().call(),a.methods.d().call(),a.methods.tokenBalance().call(),a.methods.vUsdBalance().call(),a.methods.totalSupply().call(),a.methods.accRewardPerShareP().call()]),u=o.toString(),l=A.toString(),f=z({tokenBalance:u,vUsdBalance:l});return{aValue:i.toString(),dValue:r.toString(),tokenBalance:u,vUsdBalance:l,totalLpAmount:c.toString(),accRewardPerShareP:m.toString(),p:this.P,imbalance:f}}buildRawTransactionDeposit(t){let{amount:a,accountAddress:i}=t,r=[{type:"uint256",value:a}];return this.buildRawTransaction(t.token.poolAddress,"deposit(uint256)",r,"0",i)}buildRawTransactionWithdraw(t){let{amount:a,accountAddress:i}=t,r=[{type:"uint256",value:a}];return this.buildRawTransaction(t.token.poolAddress,"withdraw(uint256)",r,"0",i)}buildRawTransactionClaimRewards(t){let{accountAddress:a}=t,i=[];return this.buildRawTransaction(t.token.poolAddress,"claimRewards()",i,"0",a)}async buildRawTransaction(t,a,i,r,o){let A=await this.tronWeb.transactionBuilder.triggerSmartContract(t,a,{callValue:r},i,o);if(!A?.result?.result)throw new k("Unknown error: "+JSON.stringify(A,null,2));return A.transaction}async getContract(t){return await this.tronWeb.contract(De,t)}};var Jt=class{constructor(n,t,a,i){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a;this.tokenService=i;this.rawTxBuilder=new Lt(n,t,this.params,i)}async getAllowance(n,t){if(t){let a=n,i=t;return await this.tokenService.getAllowance({...i,spender:i.token.poolAddress},a)}else{let a=n;return await this.tokenService.getAllowance({...a,spender:a.token.poolAddress})}}async checkAllowance(n,t){if(t){let a=n,i=t;return this.tokenService.checkAllowance({...i,spender:i.token.poolAddress},a)}else{let a=n;return this.tokenService.checkAllowance({...a,spender:a.token.poolAddress})}}async approve(n,t){return this.tokenService.approve(n,{...t,spender:t.token.poolAddress})}async getAmountToBeDeposited(n,t,a){v(n),R("amount",n,t.decimals);let i=await this.getPoolInfoFromChain(t,a),{vUsdBalance:r,tokenBalance:o,aValue:A,dValue:c}=i,m=fa(n,A,c,o,r);return P(m,3).toFixed()}async getAmountToBeWithdrawn(n,t,a,i){v(n),R("amount",n,a.decimals);let r=await this.getPoolInfoFromChain(a,i),o=ya(n),A=j(o,a.decimals),m=(await this.getUserBalanceInfo(t,a,i)).earned(r)||"0",u=Ei(A).plus(m).toFixed();return P(u,a.decimals).toFixed()}async getUserBalanceInfo(n,t,a){return He(t.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).getUserBalanceInfo(n,t)}async getPoolInfoFromChain(n,t){let a=await He(n.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).getPoolInfoFromChain(n);return this.api.cachePut({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress},a),a}};function He(s,n,t,a,i){switch(X[s].chainType){case"EVM":{if(i)return new At(i,n);{let r=t.getNodeRpcUrl(s);return new At(new Ni(r),n)}}case"TRX":{let r=t.getNodeRpcUrl(s),o=a.tronJsonRpc;if(i)return new mt(i,n,o);{let A=new Ui({fullHost:r});return new mt(A,n,o)}}case"SOLANA":{let r=t.getNodeRpcUrl(s);return new Xt(r,n)}case"SRB":return new Yt(t,a,n)}}import{Big as x}from"big.js";function Pa(s,n,t){let a=Oi(s,{decimals:n.decimals,feeShare:n.feeShare},n.poolInfo),i=Vi(a.amountIncludingCommissionInSystemPrecision,{decimals:t.decimals,feeShare:t.feeShare},t.poolInfo);return{swapToVUsdCalcResult:a,swapFromVUsdCalcResult:i}}function Sa(s,n,t){let a=Gi(s,{decimals:t.decimals,feeShare:t.feeShare},t.poolInfo),i=Zi(a.amountIncludingCommissionInSystemPrecision,{decimals:n.decimals,feeShare:n.feeShare},n.poolInfo);return{swapToVUsdCalcResult:a,swapFromVUsdCalcResult:i}}function Oi(s,{feeShare:n,decimals:t},a){let i=x(s),r=i.times(n),o=i.minus(r);return{bridgeFeeInTokenPrecision:r.round().toFixed(),amountIncludingCommissionInSystemPrecision:Ta(Ee(o,t),a),amountExcludingCommissionInSystemPrecision:Ta(Ee(i,t),a)}}function Ta(s,n){if(s.eq(0))return"0";let t=x(n.tokenBalance).plus(s),a=fe(t.toFixed(),n.aValue,n.dValue);return x(n.vUsdBalance).minus(a).round().toFixed()}function Vi(s,{feeShare:n,decimals:t},a){if(x(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let r=x(s).plus(a.vUsdBalance),o=fe(r,a.aValue,a.dValue),A=j(x(a.tokenBalance).minus(o),t),c=x(A).times(n),m=x(A).minus(c).round();return{bridgeFeeInTokenPrecision:c.round().toFixed(),amountIncludingCommissionInTokenPrecision:m.toFixed(),amountExcludingCommissionInTokenPrecision:A.toFixed()}}function Gi(s,{feeShare:n,decimals:t},a){let i=x(n).div(x(1).minus(n)),r=x(s).times(i),o=x(s).plus(r);return{bridgeFeeInTokenPrecision:r.round().toFixed(),amountIncludingCommissionInSystemPrecision:ba(Ee(o,t),a),amountExcludingCommissionInSystemPrecision:ba(Ee(s,t),a)}}function ba(s,n){let t=x(n.tokenBalance).minus(s),a=fe(t.toFixed(),n.aValue,n.dValue);return x(a).minus(n.vUsdBalance).round().toFixed()}function Zi(s,{feeShare:n,decimals:t},a){if(x(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let i=x(a.vUsdBalance).minus(s),r=fe(i.toFixed(),a.aValue,a.dValue),o=x(r).minus(a.tokenBalance),A=j(o.toFixed(),t),c=x(n).div(x(1).minus(n)),m=x(A).times(c),u=x(A).plus(m);return{bridgeFeeInTokenPrecision:m.round().toFixed(),amountIncludingCommissionInTokenPrecision:u.round().toFixed(),amountExcludingCommissionInTokenPrecision:A.toFixed()}}import{Big as We}from"big.js";function wa(s,n,t,a,i){let r=ge(s,n,t),o=j(r,n.decimals),A=et(r,a,i),c=We(s).times(n.feeShare),m=We(A).div(We(1).minus(a.feeShare)).minus(A);return{sourceLPSwap:{fee:P(c,n.decimals).neg().round(n.decimals,We.roundUp).toFixed(),swap:P(We(s).minus(o).minus(c),n.decimals).neg().round(n.decimals,We.roundUp).toFixed()},destLPSwap:{fee:P(m,a.decimals).neg().round(a.decimals,We.roundUp).toFixed(),swap:P(j(r,a.decimals).minus(A).minus(m),a.decimals).neg().round(a.decimals,We.roundUp).toFixed()}}}import{Connection as _i,PublicKey as Li,TransactionMessage as Xi}from"@solana/web3.js";var Ht=class{constructor(n,t){this.nodeRpcUrlsConfig=n;this.params=t}async addMemoToTx(n,t){if(t.length>28)throw new k("InvalidArgumentException memo cannot be more than 28 characters");let a=new _i(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),i=await Ne(n,a),r=Xi.decompile(n.message,{addressLookupTableAccounts:i});r.instructions[r.instructions.length-1].keys.push({pubkey:new Li(Buffer.from(t)),isSigner:!1,isWritable:!1}),n.message=r.compileToV0Message(i)}};import{Asset as Qi,BASE_FEE as Yi,Horizon as Sn,Operation as Ji,Operation as Hi,SorobanRpc as lt,TimeoutInfinite as ji,TransactionBuilder as wn,TransactionBuilder as Ca}from"stellar-sdk";import{HorizonApi as id}from"stellar-sdk/lib/horizon";import{Address as O,ContractSpec as Ki}from"stellar-sdk";var Y={},ut=class{constructor(n){this.options=n;this.parsers={initialize:()=>{},mint:()=>{},setAdmin:()=>{},allowance:n=>this.spec.funcResToNative("allowance",n),approve:()=>{},balance:n=>this.spec.funcResToNative("balance",n),spendableBalance:n=>this.spec.funcResToNative("spendable_balance",n),transfer:()=>{},transferFrom:()=>{},burn:()=>{},burnFrom:()=>{},decimals:n=>this.spec.funcResToNative("decimals",n),name:n=>this.spec.funcResToNative("name",n),symbol:n=>this.spec.funcResToNative("symbol",n)};this.initialize=async({admin:n,decimal:t,name:a,symbol:i},r={})=>await F.fromSimulation({method:"initialize",args:this.spec.funcArgsToScVals("initialize",{admin:new O(n),decimal:t,name:a,symbol:i}),...r,...this.options,errorTypes:Y,parseResultXdr:this.parsers.initialize});this.mint=async({to:n,amount:t},a={})=>await F.fromSimulation({method:"mint",args:this.spec.funcArgsToScVals("mint",{to:new O(n),amount:t}),...a,...this.options,errorTypes:Y,parseResultXdr:this.parsers.mint});this.setAdmin=async({new_admin:n},t={})=>await F.fromSimulation({method:"set_admin",args:this.spec.funcArgsToScVals("set_admin",{new_admin:new O(n)}),...t,...this.options,errorTypes:Y,parseResultXdr:this.parsers.setAdmin});this.allowance=async({from:n,spender:t},a={})=>await F.fromSimulation({method:"allowance",args:this.spec.funcArgsToScVals("allowance",{from:new O(n),spender:new O(t)}),...a,...this.options,errorTypes:Y,parseResultXdr:this.parsers.allowance});this.approve=async({from:n,spender:t,amount:a,expiration_ledger:i},r={})=>await F.fromSimulation({method:"approve",args:this.spec.funcArgsToScVals("approve",{from:new O(n),spender:new O(t),amount:a,expiration_ledger:i}),...r,...this.options,errorTypes:Y,parseResultXdr:this.parsers.approve});this.balance=async({id:n},t={})=>await F.fromSimulation({method:"balance",args:this.spec.funcArgsToScVals("balance",{id:new O(n)}),...t,...this.options,errorTypes:Y,parseResultXdr:this.parsers.balance});this.spendableBalance=async({id:n},t={})=>await F.fromSimulation({method:"spendable_balance",args:this.spec.funcArgsToScVals("spendable_balance",{id:new O(n)}),...t,...this.options,errorTypes:Y,parseResultXdr:this.parsers.spendableBalance});this.transfer=async({from:n,to:t,amount:a},i={})=>await F.fromSimulation({method:"transfer",args:this.spec.funcArgsToScVals("transfer",{from:new O(n),to:new O(t),amount:a}),...i,...this.options,errorTypes:Y,parseResultXdr:this.parsers.transfer});this.transferFrom=async({spender:n,from:t,to:a,amount:i},r={})=>await F.fromSimulation({method:"transfer_from",args:this.spec.funcArgsToScVals("transfer_from",{spender:new O(n),from:new O(t),to:new O(a),amount:i}),...r,...this.options,errorTypes:Y,parseResultXdr:this.parsers.transferFrom});this.burn=async({from:n,amount:t},a={})=>await F.fromSimulation({method:"burn",args:this.spec.funcArgsToScVals("burn",{from:new O(n),amount:t}),...a,...this.options,errorTypes:Y,parseResultXdr:this.parsers.burn});this.burnFrom=async({spender:n,from:t,amount:a},i={})=>await F.fromSimulation({method:"burn_from",args:this.spec.funcArgsToScVals("burn_from",{spender:new O(n),from:new O(t),amount:a}),...i,...this.options,errorTypes:Y,parseResultXdr:this.parsers.burnFrom});this.decimals=async(n={})=>await F.fromSimulation({method:"decimals",args:this.spec.funcArgsToScVals("decimals",{}),...n,...this.options,errorTypes:Y,parseResultXdr:this.parsers.decimals});this.name=async(n={})=>await F.fromSimulation({method:"name",args:this.spec.funcArgsToScVals("name",{}),...n,...this.options,errorTypes:Y,parseResultXdr:this.parsers.name});this.symbol=async(n={})=>await F.fromSimulation({method:"symbol",args:this.spec.funcArgsToScVals("symbol",{}),...n,...this.options,errorTypes:Y,parseResultXdr:this.parsers.symbol});this.spec=new Ki(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAdkZWNpbWFsAAAAAAQAAAAAAAAABG5hbWUAAAAQAAAAAAAAAAZzeW1ib2wAAAAAABAAAAAA","AAAAAAAAAAAAAAAEbWludAAAAAIAAAAAAAAAAnRvAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAA","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAA=","AAAAAAAAAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAAAAAAAHYXBwcm92ZQAAAAAEAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAAAAAAEWV4cGlyYXRpb25fbGVkZ2VyAAAAAAAABAAAAAA=","AAAAAAAAAAAAAAAHYmFsYW5jZQAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAL","AAAAAAAAAAAAAAARc3BlbmRhYmxlX2JhbGFuY2UAAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAL","AAAAAAAAAAAAAAAIdHJhbnNmZXIAAAADAAAAAAAAAARmcm9tAAAAEwAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAAAAAAANdHJhbnNmZXJfZnJvbQAAAAAAAAQAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAEZnJvbQAAABMAAAAAAAAAAnRvAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAA","AAAAAAAAAAAAAAAEYnVybgAAAAIAAAAAAAAABGZyb20AAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAA","AAAAAAAAAAAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAAAAAAAIZGVjaW1hbHMAAAAAAAAAAQAAAAQ=","AAAAAAAAAAAAAAAEbmFtZQAAAAAAAAABAAAAEA==","AAAAAAAAAAAAAAAGc3ltYm9sAAAAAAAAAAAAAQAAABA=","AAAAAQAAAAAAAAAAAAAAEEFsbG93YW5jZURhdGFLZXkAAAACAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAHc3BlbmRlcgAAAAAT","AAAAAQAAAAAAAAAAAAAADkFsbG93YW5jZVZhbHVlAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAAAAAAEWV4cGlyYXRpb25fbGVkZ2VyAAAAAAAABA==","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAABQAAAAEAAAAAAAAACUFsbG93YW5jZQAAAAAAAAEAAAfQAAAAEEFsbG93YW5jZURhdGFLZXkAAAABAAAAAAAAAAdCYWxhbmNlAAAAAAEAAAATAAAAAQAAAAAAAAAFTm9uY2UAAAAAAAABAAAAEwAAAAEAAAAAAAAABVN0YXRlAAAAAAAAAQAAABMAAAAAAAAAAAAAAAVBZG1pbgAAAA==","AAAAAQAAAAAAAAAAAAAADVRva2VuTWV0YWRhdGEAAAAAAAADAAAAAAAAAAdkZWNpbWFsAAAAAAQAAAAAAAAABG5hbWUAAAAQAAAAAAAAAAZzeW1ib2wAAAAAABA="])}};var zi=100,qi=180,jt=class{constructor(n,t){this.nodeRpcUrlsConfig=n;this.params=t}async buildChangeTrustLineXdrTx(n){let a=await new Sn.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(n.sender),r=(await this.getContract(ut,n.tokenAddress).name()).result,[o,A]=r.split(":"),c=new Qi(o,A),m=Hi.changeTrust({asset:c,limit:n.limit});return new Ca(a,{fee:zi.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(m).setTimeout(qi).build().toXDR()}async getBalanceLine(n,t){let i=(await this.getContract(ut,t).name()).result,[r,o]=i.split(":"),A=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new Sn.Server(A).loadAccount(n)).balances.find(l=>(l.asset_type==="credit_alphanum4"||l.asset_type==="credit_alphanum12")&&l.asset_code==r&&l.asset_issuer==o)}async submitTransactionStellar(n){let t=new Sn.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),a=Ca.fromXDR(n,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await t.submitTransaction(a)}async simulateAndCheckRestoreTxRequiredSoroban(n,t){let a=new lt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),i=await a.getAccount(t),r=wn.fromXDR(n,this.params.sorobanNetworkPassphrase),o=await a.simulateTransaction(r);if(lt.Api.isSimulationRestore(o))return new wn(i,{fee:(+Yi+ +o.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(o.restorePreamble.transactionData.build()).addOperation(Ji.restoreFootprint({})).setTimeout(ji).build().toXDR()}async sendTransactionSoroban(n){let t=new lt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),a=wn.fromXDR(n,this.params.sorobanNetworkPassphrase);return t.sendTransaction(a)}async confirmTx(n,t=15){let a=new lt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),i=await On(()=>a.getTransaction(n),r=>r.status===lt.Api.GetTransactionStatus.NOT_FOUND,t);return i[i.length-1]}getContract(n,t){let a={contractId:t,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new n(a)}};var zt=class{constructor(n,t){this.nodeRpcUrlsConfig=n;this.srb=new jt(n,t),this.sol=new Ht(n,t)}};var Xe=(t=>(t.WITH_NATIVE_CURRENCY="native",t.WITH_STABLECOIN="stablecoin",t))(Xe||{}),Rt=(t=>(t.INT="int",t.FLOAT="float",t))(Rt||{});import{Big as or}from"big.js";import Ar from"tronweb";import cr from"web3";import Cn from"erc-20-abi";import{Big as Ba}from"big.js";var ce=class{async checkAllowance(n){let t=await this.getAllowance(n);return Ba(t).gte(Ba(n.amount))}};var $i="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",er="0xdac17f958d2ee523a2206206994597c13d831ec7",tr=1e5,pt=class extends ce{constructor(t,a){super();this.web3=t;this.api=a;this.chainType="EVM"}getAllowance(t){let a=t.token.tokenAddress,i=t.owner,r=t.spender;return this.getAllowanceByTokenAddress(a,i,r)}getAllowanceByTokenAddress(t,a,i){return this.getContract(Cn,t).methods.allowance(a,i).call()}async getTokenBalance(t){return await this.getContract(Cn,t.token.tokenAddress).methods.balanceOf(t.account).call()}async getNativeTokenBalance(t){return await this.web3.eth.getBalance(t.account)}async approve(t){if(this.isUsdt(t.tokenAddress)&&await this.getAllowanceByTokenAddress(t.tokenAddress,t.owner,t.spender)!=="0"){let r=await this.buildRawTransactionApprove({...t,amount:"0"});await this.sendRawTransaction(r,t.chainSymbol)}let a=await this.buildRawTransactionApprove(t);return await this.sendRawTransaction(a,t.chainSymbol)}isUsdt(t){return t.toLowerCase()===er}async buildRawTransactionApprove(t){let{tokenAddress:a,spender:i,owner:r,amount:o}=t,c=await this.getContract(Cn,a).methods.approve(i,o==null?$i:Gt(o));return{from:r,to:a,value:"0",data:c.encodeABI()}}async sendRawTransaction(t,a){let i=t,r={maxPriorityFeePerGas:null,maxFeePerGas:null};a=="POL"?i.gas=tr:i.gas=await this.web3.eth.estimateGas(t);let{transactionHash:o}=await this.web3.eth.sendTransaction({...i,...r});return{txId:o}}getContract(t,a){return new this.web3.eth.Contract(t,a)}};import{AnchorProvider as nr}from"@project-serum/anchor";import{Connection as ar,PublicKey as qt}from"@solana/web3.js";var $t=class extends ce{constructor(t,a){super();this.solanaRpcUrl=t;this.api=a;this.chainType="SOLANA"}approve(t){throw new Q}buildRawTransactionApprove(t){throw new Q}buildAnchorProvider(t){let a=new ar(this.solanaRpcUrl,"confirmed"),i=new qt(t);return new nr(a,{publicKey:i},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(t){throw new Q}async getTokenBalance(t){let{account:a,token:i}=t;try{let r=await re(new qt(a),new qt(i.tokenAddress));return(await Ke(r,this.buildAnchorProvider(a))).amount.toString()}catch(r){if(r instanceof Error)return r.message.startsWith("Account does not exist"),"0";throw r}}async getNativeTokenBalance(t){return(await this.buildAnchorProvider(t.account).connection.getBalance(new qt(t.account))).toString()}};import{Horizon as Ma,NotFoundError as ir}from"stellar-sdk";import{HorizonApi as e}from"stellar-sdk/lib/horizon";var en=class extends ce{constructor(t,a,i){super();this.nodeRpcUrlsConfig=t;this.params=a;this.api=i;this.chainType="SRB"}getAllowance(){throw new Q}async getTokenBalance(t){if(!t.token.originTokenAddress)throw new k("OriginTokenAddress missing");let[a,i]=t.token.originTokenAddress.split(":"),r=new Ma.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),o;try{o=await r.loadAccount(t.account)}catch(m){if(m instanceof ir)return"0";throw m}let c=o.balances.find(m=>(m.asset_type==="credit_alphanum4"||m.asset_type==="credit_alphanum12")&&m.asset_code==a&&m.asset_issuer==i);return c?.balance?B(c.balance,U[X[t.token.chainSymbol].chainType]).toFixed():"0"}async getNativeTokenBalance(t){let o=(await new Ma.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(t.account)).balances.find(A=>A.asset_type==="native");return o?.balance?B(o.balance,U[X[t.chainSymbol].chainType]).toFixed():"0"}approve(){throw new Q}buildRawTransactionApprove(){throw new Q}};var ka=[{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 sr="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",dt=class extends ce{constructor(t,a){super();this.tronWeb=t;this.api=a;this.chainType="TRX"}async getAllowance(t){let{token:{tokenAddress:a},owner:i}=t;return(await(await this.getContract(a)).methods.allowance(i,t.spender).call()).toString()}async getTokenBalance(t){return(await(await this.getContract(t.token.tokenAddress)).balanceOf(t.account).call()).toString()}async getNativeTokenBalance(t){return(await this.tronWeb.trx.getBalance(t.account)).toString()}async approve(t){let a=await this.buildRawTransactionApprove(t);return await Zt(this.tronWeb,a)}async buildRawTransactionApprove(t){let{tokenAddress:a,spender:i,owner:r,amount:o}=t,A=o==null?sr:Gt(o),c=[{type:"address",value:i},{type:"uint256",value:A}];return this.buildRawTransaction(a,"approve(address,uint256)",c,"0",r)}async getContract(t){return await this.tronWeb.contract(ka,t)}async buildRawTransaction(t,a,i,r,o){let A=await this.tronWeb.transactionBuilder.triggerSmartContract(t,a,{callValue:r},i,o);if(!A?.result?.result)throw new k("Unknown error: "+JSON.stringify(A,null,2));return A.transaction}};var tn=class{constructor(n,t,a){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a}async getAllowance(n,t){let a=await this.getChainTokenService(n.token.chainSymbol,n.owner,t).getAllowance(n);return P(a,n.token.decimals).toFixed()}async checkAllowance(n,t){return v(n.amount),R("amount",n.amount,n.token.decimals),this.getChainTokenService(n.token.chainSymbol,n.owner,t).checkAllowance(this.prepareCheckAllowanceParams(n))}async approve(n,t){return t.amount&&(v(t.amount),R("amount",t.amount,t.token.decimals)),this.getChainTokenService(t.token.chainSymbol,t.owner,n).approve(this.prepareApproveParams(t))}async buildRawTransactionApprove(n,t){return n.amount&&(v(n.amount),R("amount",n.amount,n.token.decimals)),this.getChainTokenService(n.token.chainSymbol,n.owner,t).buildRawTransactionApprove(this.prepareApproveParams(n))}async getTokenBalance(n,t){let a=await this.getChainTokenService(n.token.chainSymbol,n.account,t).getTokenBalance(n);return n.token.decimals?P(a,n.token.decimals).toFixed():a}async getNativeTokenBalance(n,t){let a=await this.getChainTokenService(n.chainSymbol,n.account,t).getNativeTokenBalance(n);return{int:a,float:P(a,U[X[n.chainSymbol].chainType]).toFixed()}}getChainTokenService(n,t,a){switch(X[n].chainType){case"EVM":{if(a)return new pt(a,this.api);{let i=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new pt(new cr(i),this.api)}}case"TRX":{if(a)return new dt(a,this.api);{let i=this.nodeRpcUrlsConfig.getNodeRpcUrl(n),r=new Ar({fullHost:i});return r.setAddress(t),new dt(r,this.api)}}case"SOLANA":{let i=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new $t(i,this.api)}case"SRB":return new en(this.nodeRpcUrlsConfig,this.params,this.api)}}prepareCheckAllowanceParams(n){return{...n,amount:B(n.amount,n.token.decimals)}}prepareApproveParams(n){return{tokenAddress:n.token.tokenAddress,owner:n.owner,spender:n.spender,chainSymbol:n.token.chainSymbol,amount:n.amount==null?void 0:or(n.amount).toFixed()}}};var gt=class{constructor(n){this.nodeRpcUrls=n}getNodeRpcUrl(n){let t=this.nodeRpcUrls[n];if(t!==void 0)return t;throw new St(n)}},nn=class{constructor(n,t=yt){let a=new Ct(t),i=new Mt(a),r=new ht(i);this.api=new kt(r),this.tokenService=new tn(this.api,n,t),this.bridge=new _t(this.api,n,t,this.tokenService),this.pool=new Jt(this.api,n,t,this.tokenService),this.params=t}async chainDetailsMap(){return this.api.getChainDetailsMap()}async tokens(){return this.api.tokens()}async tokensByChain(n){return(await this.api.getChainDetailsMap())[n].tokens}async getTransferStatus(n,t){return this.api.getTransferStatus(n,t)}async getGasBalance(n,t){return this.api.getGasBalance(n,t)}async checkAddress(){return new Promise(n=>{n({status:"OK",gasBalance:null})})}async getPendingStatusInfo(n,t,a,i){v(n);let r;t=="float"?(R("amount",n,a.decimals),r=B(n,a.decimals).toFixed()):r=n;let o=ge(r,a,await N(this.api,a)),A=await N(this.api,i),c=this.getAmountFromVUsdFormatted(o,i,A),m,u=await this.api.getPendingInfo();for(let l in u[i.chainSymbol])l.toLowerCase()===i.tokenAddress.toLowerCase()&&(m=u[i.chainSymbol][l]);if(m){let l=kn(m.totalSentAmount,A),f=this.getAmountFromVUsdFormatted(o,i,l),y;return ye(f.int).gt(c.int)?y={min:c,max:f}:y={min:f,max:c},{pendingTxs:m.pendingTxs,pendingAmount:{int:Me(m.totalSentAmount,3,i.decimals).toFixed(0),float:P(m.totalSentAmount,3).toFixed()},estimatedAmount:y}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:c,max:c}}}async getTokenBalance(n,t){return this.tokenService.getTokenBalance(n,t)}async getNativeTokenBalance(n,t){return this.tokenService.getNativeTokenBalance(n,t)}async calculateFeePercentOnSourceChain(n,t){v(n),R("amountFloat",n,t.decimals);let a=B(n,t.decimals);if(a.eq(0))return 0;let i=ge(a,t,await N(this.api,t)),r=j(i,t.decimals);return rn(a,r)}async calculateFeePercentOnDestinationChain(n,t,a){v(n),R("amountFloat",n,t.decimals);let i=B(n,t.decimals);if(i.eq(0))return 0;let r=ge(i,t,await N(this.api,t)),o=et(r,a,await N(this.api,a)),A=j(r,a.decimals);return rn(A,o)}async getAmountToBeReceivedAndGasFeeOptions(n,t,a,i){return v(n),R("amountToSendFloat",n,t.decimals),{amountToSendFloat:ye(n).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(n,t,a,i),gasFeeOptions:await this.getGasFeeOptions(t,a,i)}}async getAmountToSendAndGasFeeOptions(n,t,a,i){return v(n),R("amountToBeReceivedFloat",n,a.decimals),{amountToSendFloat:await this.getAmountToSend(n,t,a,i),amountToBeReceivedFloat:ye(n).toFixed(),gasFeeOptions:await this.getGasFeeOptions(t,a,i)}}async getAmountToBeReceived(n,t,a,i){let r=await N(this.api,t),o=await N(this.api,a);return this.getAmountToBeReceivedFromPools(n,t,a,r,o,i)}async getAmountToBeReceivedFromChain(n,t,a,i,r,o){let A=await this.pool.getPoolInfoFromChain(t,r),c=await this.pool.getPoolInfoFromChain(a,o);return this.getAmountToBeReceivedFromPools(n,t,a,A,c,i)}getAmountToBeReceivedFromPools(n,t,a,i,r,o){v(n),R("amountToSendFloat",n,t.decimals);let A=B(n,t.decimals);if(o&&o==3){if(!t.cctpAddress||!a.cctpAddress||!t.cctpFeeShare)throw new ie("Such route does not support CCTP protocol");let m=A.mul(ye(1).minus(t.cctpFeeShare)).round(0,ye.roundUp),u=Me(m,t.decimals,a.decimals).round(0);return P(u,a.decimals).toFixed()}let c=ge(A,t,i);return this.getAmountFromVUsdFormatted(c,a,r).float}async getAmountToSend(n,t,a,i){let r=await N(this.api,t),o=await N(this.api,a);return this.getAmountToSendFromPools(n,t,a,r,o,i)}async getAmountToSendFromChain(n,t,a,i,r,o){let A=await this.pool.getPoolInfoFromChain(t,r),c=await this.pool.getPoolInfoFromChain(a,o);return this.getAmountToSendFromPools(n,t,a,A,c,i)}getAmountToSendFromPools(n,t,a,i,r,o){v(n),R("amountToBeReceivedFloat",n,a.decimals);let A=B(n,a.decimals);if(o&&o==3){if(!t.cctpAddress||!a.cctpAddress||!t.cctpFeeShare)throw new ie("Such route does not support CCTP protocol");let u=A.div(ye(1).minus(t.cctpFeeShare)).round(0,ye.roundDown),l=Me(u,a.decimals,t.decimals).round(0);return P(l,t.decimals).toFixed()}let c=Rn(A,a,r),m=vn(c,t,i);if(ye(m).lte(0))throw new Te;return P(m,t.decimals).toFixed()}async getGasFeeOptions(n,t,a){return dn(n.allbridgeChainId,n.chainType,t.allbridgeChainId,n.decimals,a,this.api)}getAverageTransferTime(n,t,a){return n.transferTime?.[t.chainSymbol]?.[a]??null}async getPoolInfoByToken(n){return await this.api.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}async refreshPoolInfo(n){if(n){let a=(n instanceof Array?n:[n]).map(i=>({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress}));return this.api.refreshPoolInfo(a)}return this.api.refreshPoolInfo()}aprInPercents(n){return xn(n)}async getExtraGasMaxLimits(n,t){return await gn(n,t,this.api)}async getVUsdFromAmount(n,t,a){v(n);let i;t=="float"?(R("amount",n,a.decimals),i=B(n,a.decimals).toFixed()):i=n;let r=ge(i,a,await N(this.api,a));return{int:r,float:P(r,3).toFixed()}}async getAmountFromVUsd(n,t){return this.getAmountFromVUsdFormatted(n,t,await N(this.api,t))}getAmountFromVUsdFormatted(n,t,a){v(n);let i=et(n,t,a);if(ye(i).lt(0))throw new Te;return{int:i,float:P(i,t.decimals).toFixed()}}async swapAndBridgeFeeCalculation(n,t,a){return Pa(n,{decimals:t.decimals,feeShare:t.feeShare,poolInfo:await N(this.api,t)},{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await N(this.api,a)})}async swapAndBridgeFeeCalculationReverse(n,t,a){let i=Sa(n,{decimals:t.decimals,feeShare:t.feeShare,poolInfo:await N(this.api,t)},{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await N(this.api,a)}),r=i.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(ye(r).lt(0))throw new Te;return i}async getSendAmountDetails(n,t,a,i){v(n);let r;return t=="float"?(R("amount",n,a.decimals),r=B(n,a.decimals).toFixed()):r=n,wa(r,a,await N(this.api,a),i,await N(this.api,i))}};function mr(s){return"solanaRpcUrl"in s}var va=class{constructor(n,t=yt){let a;mr(n)?a=new gt({SOL:n.solanaRpcUrl,TRX:n.tronRpcUrl}):a=new gt(n),this.service=new nn(a,t),this.bridge=this.service.bridge,this.pool=this.service.pool,this.utils=new zt(a,t),this.params=t}async chainDetailsMap(){return this.service.chainDetailsMap()}async tokens(){return this.service.tokens()}async tokensByChain(n){return this.service.tokensByChain(n)}async getTransferStatus(n,t){return this.service.getTransferStatus(n,t)}async getGasBalance(n,t){return this.service.getGasBalance(n,t)}async checkAddress(n,t,a){return await this.service.checkAddress()}async getPendingStatusInfo(n,t,a,i){return this.service.getPendingStatusInfo(n,t,a,i)}async getTokenBalance(n,t){return this.service.getTokenBalance(n,t)}async getNativeTokenBalance(n,t){return this.service.getNativeTokenBalance(n,t)}async calculateFeePercentOnSourceChain(n,t){return this.service.calculateFeePercentOnSourceChain(n,t)}async calculateFeePercentOnDestinationChain(n,t,a){return this.service.calculateFeePercentOnDestinationChain(n,t,a)}async getAmountToBeReceivedAndGasFeeOptions(n,t,a,i){return this.service.getAmountToBeReceivedAndGasFeeOptions(n,t,a,i)}async getAmountToSendAndGasFeeOptions(n,t,a,i){return this.service.getAmountToSendAndGasFeeOptions(n,t,a,i)}async getAmountToBeReceived(n,t,a,i){return this.service.getAmountToBeReceived(n,t,a,i)}async getAmountToBeReceivedFromChain(n,t,a,i,r,o){return this.service.getAmountToBeReceivedFromChain(n,t,a,i,r,o)}getAmountToBeReceivedFromPools(n,t,a,i,r,o){return this.service.getAmountToBeReceivedFromPools(n,t,a,i,r,o)}async getAmountToSend(n,t,a,i){return this.service.getAmountToSend(n,t,a,i)}async getAmountToSendFromChain(n,t,a,i,r,o){return this.service.getAmountToSendFromChain(n,t,a,i,r,o)}getAmountToSendFromPools(n,t,a,i,r,o){return this.service.getAmountToSendFromPools(n,t,a,i,r,o)}async getGasFeeOptions(n,t,a){return this.service.getGasFeeOptions(n,t,a)}getAverageTransferTime(n,t,a){return this.service.getAverageTransferTime(n,t,a)}async getPoolInfoByToken(n){return this.service.getPoolInfoByToken(n)}async refreshPoolInfo(n){return this.service.refreshPoolInfo(n)}aprInPercents(n){return this.service.aprInPercents(n)}async getExtraGasMaxLimits(n,t){return this.service.getExtraGasMaxLimits(n,t)}async getVUsdFromAmount(n,t,a){return this.service.getVUsdFromAmount(n,t,a)}async getAmountFromVUsd(n,t){return this.service.getAmountFromVUsd(n,t)}async swapAndBridgeFeeCalculation(n,t,a){return this.service.swapAndBridgeFeeCalculation(n,t,a)}async swapAndBridgeFeeCalculationReverse(n,t,a){return this.service.swapAndBridgeFeeCalculationReverse(n,t,a)}async getSendAmountDetails(n,t,a,i){return this.service.getSendAmountDetails(n,t,a,i)}};export{sn as AddressStatus,va as AllbridgeCoreSdk,Rt as AmountFormat,Oe as AmountNotEnoughError,Pt as ArgumentInvalidDecimalsError,ie as CCTPDoesNotSupportedError,de as ChainSymbol,E as ChainType,Ia as ErrorCode,bt as ExtraGasMaxLimitExceededError,Xe as FeePaymentMethod,Te as InsufficientPoolLiquidityError,Tt as InvalidAmountError,je as InvalidGasFeePaymentOptionError,Mn as InvalidMessengerOptionError,Ve as InvalidTxError,K as JupiterError,be as Messenger,Q as MethodNotSupportedError,St as NodeRpcUrlNotInitializedError,k as SdkError,D as SdkRootError,fn as SolanaAutoTxFee,qe as TimeoutError,wt as TxTooLargeError,ze as VerifyTxError,yt as mainnet,fr as nodeRpcUrlsDefault,gr as nodeUrlsDefault,ur as testnet,pr as testnetNodeRpcUrlsDefault,lr as testnetNodeUrlsDefault};
|
|
6
6
|
//# sourceMappingURL=index.js.map
|