@allbridge/bridge-core-sdk 3.15.2-alpha.1 → 3.15.2-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 +3 -3
- package/dist/browser/index.js.map +4 -4
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/index.js.map +4 -4
- package/dist/esm/index.js +3 -3
- package/dist/esm/index.js.map +4 -4
- package/dist/src/services/liquidity-pool/trx/index.d.ts +1 -0
- package/dist/src/services/liquidity-pool/trx/index.js +7 -1
- package/dist/src/services/liquidity-pool/trx/index.js.map +1 -1
- package/dist/src/services/token/trx/index.d.ts +1 -0
- package/dist/src/services/token/trx/index.js +7 -5
- package/dist/src/services/token/trx/index.js.map +1 -1
- package/dist/src/services/utils/srb/assembled-tx.js +2 -2
- package/dist/src/services/utils/srb/assembled-tx.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 +2 -2
- package/dist/src/services/models/abi/ERC20.json +0 -288
package/dist/cjs/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";var Ha=Object.create;var Ut=Object.defineProperty;var za=Object.getOwnPropertyDescriptor;var ja=Object.getOwnPropertyNames;var qa=Object.getPrototypeOf,$a=Object.prototype.hasOwnProperty;var ei=(i,e)=>{for(var t in e)Ut(i,t,{get:e[t],enumerable:!0})},Nn=(i,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of ja(e))!$a.call(i,a)&&a!==t&&Ut(i,a,{get:()=>e[a],enumerable:!(n=za(e,a))||n.enumerable});return i};var O=(i,e,t)=>(t=i!=null?Ha(qa(i)):{},Nn(e||!i||!i.__esModule?Ut(t,"default",{value:i,enumerable:!0}):t,i)),ti=i=>Nn(Ut({},"__esModule",{value:!0}),i);var Gi={};ei(Gi,{AddressStatus:()=>Vt,AllbridgeCoreSdk:()=>Un,AmountFormat:()=>bt,AmountNotEnoughError:()=>Ge,ArgumentInvalidDecimalsError:()=>pt,CCTPDoesNotSupportedError:()=>re,ChainSymbol:()=>me,ChainType:()=>N,ErrorCode:()=>Vn,ExtraGasMaxLimitExceededError:()=>lt,FeePaymentMethod:()=>Ke,InsufficientPoolLiquidityError:()=>we,InvalidAmountError:()=>ut,InvalidGasFeePaymentOptionError:()=>je,InvalidMessengerOptionError:()=>fn,InvalidTxError:()=>Ze,JupiterError:()=>Y,Messenger:()=>ke,MethodNotSupportedError:()=>J,NodeRpcUrlNotInitializedError:()=>dt,SdkError:()=>k,SdkRootError:()=>F,SolanaAutoTxFee:()=>Jt,TimeoutError:()=>$e,TxTooLargeError:()=>gt,VerifyTxError:()=>qe,mainnet:()=>mt,nodeRpcUrlsDefault:()=>si,nodeUrlsDefault:()=>ri,testnet:()=>ni,testnetNodeRpcUrlsDefault:()=>ii,testnetNodeUrlsDefault:()=>ai});module.exports=ti(Gi);var ni={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}}},ai={solanaRpcUrl:"https://api.devnet.solana.com",tronRpcUrl:"https://nile.trongrid.io"},ii={SOL:"https://api.devnet.solana.com",TRX:"https://nile.trongrid.io",SRB:"https://soroban-testnet.stellar.org",STLR:"https://horizon-testnet.stellar.org"};var mt={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7}}},ri={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},si={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org"};var he=require("big.js");var Nt=class{constructor(e){this.apiClient=e}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let e=await this.getChainDetailsMap();return Object.values(e).flatMap(t=>t.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(e,t){return this.apiClient.getGasBalance(e,t)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(e,t){return await this.apiClient.getTransferStatus(e,t)}async getReceiveTransactionCost(e){return await this.apiClient.getReceiveTransactionCost(e)}async getPoolInfoMap(e){return await this.apiClient.getPoolInfoMap(e)}};var zn=O(require("axios"));var On="3.15.2-alpha.1";var me=(p=>(p.GRL="GRL",p.SPL="SPL",p.HOL="HOL",p.BSC="BSC",p.ETH="ETH",p.BAS="BAS",p.SOL="SOL",p.TRX="TRX",p.POL="POL",p.MUM="MUM",p.AMO="AMO",p.ARB="ARB",p.CEL="CEL",p.AVA="AVA",p.SRB="SRB",p.STLR="STLR",p.OPT="OPT",p))(me||{}),N=(a=>(a.EVM="EVM",a.SOLANA="SOLANA",a.TRX="TRX",a.SRB="SRB",a))(N||{}),V={EVM:18,SOLANA:9,TRX:6,SRB:7},z={GRL:{chainSymbol:"GRL",chainId:"0x5",name:"Goerli",chainType:"EVM"},SPL:{chainSymbol:"SPL",chainId:"0xaa36a7",name:"Sepolia",chainType:"EVM"},HOL:{chainSymbol:"HOL",chainId:"0x4268",name:"Hole\u0161ky",chainType:"EVM"},BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},MUM:{chainSymbol:"MUM",chainId:"0x13881",name:"Mumbai",chainType:"EVM"},AMO:{chainSymbol:"AMO",chainId:"0x13882",name:"Amoy",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"}};var l=require("big.js"),Ot=O(require("bn.js"));var F=class extends Error{constructor(e,t){super(t),this.errorCode=e}},k=class extends F{constructor(e){super("SdkError",e)}},ut=class extends F{constructor(e){super("InvalidAmountError",e)}},Ge=class extends F{constructor(e){super("AmountNotEnoughError",e)}},we=class extends F{constructor(e){super("InsufficientPoolLiquidityError",e)}},Y=class extends F{constructor(e){super("JupiterError",e)}},je=class extends F{constructor(e){super("InvalidGasFeePaymentOptionError",e)}},fn=class extends F{constructor(e){super("InvalidMessengerOptionError",e)}},J=class extends F{constructor(e){super("MethodNotSupportedError",e)}},qe=class extends F{constructor(e){super("VerifyTxError",e)}},Ze=class extends F{constructor(e){super("InvalidTxError",e)}},lt=class extends F{constructor(e){super("ExtraGasMaxLimitExceededError",e)}},pt=class extends F{constructor(e,t,n){super("ArgumentInvalidDecimalsError",`Argument '${e}' decimals '${t}' cannot be greater than '${n}'`)}},$e=class extends F{constructor(e){super("TimeoutError",e)}},dt=class extends F{constructor(e){super("NodeRpcUrlNotInitializedError",`For chain '${e}' Node RPC URL not initialized`)}},re=class extends F{constructor(e){super("CCTPDoesNotSupportedError",e)}},gt=class extends F{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},Vn=(d=>(d.SDK_ERROR="SdkError",d.INVALID_AMOUNT_ERROR="InvalidAmountError",d.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",d.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",d.JUPITER_ERROR="JupiterError",d.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",d.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",d.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",d.VERIFY_TX_ERROR="VerifyTxError",d.INVALID_TX_ERROR="InvalidTxError",d.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",d.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",d.TIMEOUT_ERROR="TimeoutError",d.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",d.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",d.TX_TOO_LARGE="TxTooLargeError",d))(Vn||{});function yn(i,e){return(0,l.Big)(100).minus((0,l.Big)(100).times(e).div(i)).toNumber()}function _e(i,e){return Ee(i,e,3).round(0,l.Big.roundDown)}function ee(i,e){return Ee(i,3,e)}function Ee(i,e,t){let n=(0,l.Big)(t).minus(e).toNumber();return(0,l.Big)(i).times(ft(n))}function ft(i){return(0,l.Big)(10).pow(i)}function B(i,e){return(0,l.Big)(i).times(ft(e))}function b(i,e){let t=(0,l.Big)(i);return t.eq(0)?(0,l.Big)(0):(0,l.Big)(t).div(ft(e))}function te(i){return b((0,l.Big)(i.tokenBalance).minus(i.vUsdBalance).toFixed(),3).div(2).toFixed()}function Ce(i,{feeShare:e,decimals:t},n){let a=(0,l.Big)(i);if(a.lte(0))return"0";let r=a.times(e),s=a.minus(r),o=_e(s,t),A=(0,l.Big)(n.tokenBalance).plus(o),c=Be(A,n.aValue,n.dValue);return(0,l.Big)(n.vUsdBalance).minus(c).round(0,l.Big.roundDown).toFixed()}function yt(i,{feeShare:e,decimals:t},n){let a=(0,l.Big)(i);if(a.lte(0))return(0,l.Big)(0).toFixed();let r=a.plus(n.vUsdBalance),s=Be(r,n.aValue,n.dValue),o=ee((0,l.Big)(n.tokenBalance).minus(s),t),A=(0,l.Big)(o).times(e);return(0,l.Big)(o).minus(A).round(0,l.Big.roundDown).toFixed()}function Gn(i,e){let t=(0,l.Big)(i);if(t.lte(0))return e;let n=t.plus(e.vUsdBalance),a=Be(n,e.aValue,e.dValue);return{aValue:e.aValue,dValue:e.dValue,tokenBalance:a.toFixed(0),vUsdBalance:n.toFixed(0)}}function Zn(i,{feeShare:e,decimals:t},n){if((0,l.Big)(i).lte(0))return(0,l.Big)(0);let a=(0,l.Big)(n.vUsdBalance).minus(i);if(a.lte(0))throw new we;let r=Be(a,n.aValue,n.dValue),s=(0,l.Big)(r).minus(n.tokenBalance),o=ee(s,t),A=(0,l.Big)(e).div((0,l.Big)(1).minus(e)),c=(0,l.Big)(o).times(A).round(0,l.Big.roundUp);return(0,l.Big)(o).plus(c).round(0,l.Big.roundDown)}function _n(i,{feeShare:e,decimals:t},n){if((0,l.Big)(i).lte(0))return(0,l.Big)(0);let a=(0,l.Big)(e).div((0,l.Big)(1).minus(e)),r=(0,l.Big)(i).times(a).round(0,l.Big.roundUp),s=(0,l.Big)(i).plus(r),o=_e(s,t),A=(0,l.Big)(n.tokenBalance).minus(o);if(A.lte(0))throw new we;let c=Be(A,n.aValue,n.dValue);return(0,l.Big)(c).minus(n.vUsdBalance).round(0,l.Big.roundDown)}function Be(i,e,t){let n=(0,l.Big)(4).times(e).times((0,l.Big)(t).minus(i)).minus(t),a=(0,l.Big)(t).pow(3),r=n.pow(2),s=(0,l.Big)(i).times((0,l.Big)(i).times(r).plus((0,l.Big)(4).times(e).times(a))).sqrt().round(0,l.Big.roundDown),o=(0,l.Big)(8).times(e).times(i),A=n.times(i).plus(s).div(o).round(0,l.Big.roundDown);return A.eq(0)?(0,l.Big)(0):A.plus(1)}function Ln(i,e,t,n){let a=new Ot.default(i),r=new Ot.default(t),s=new Ot.default(e);return a.mul(r).shrn(n).sub(s).toString()}function Xn(i){return i*100>0?`${Number((0,l.Big)(i).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function Kn(i,e,t){let n=(0,l.Big)(e).times(t),a=(0,l.Big)(e).plus(t),r=(0,l.Big)(8).times(i).times(n).times(a),s=n.times((0,l.Big)(16).times(i).minus(4)).div(3),o=r.times(r),A=s.times(s).times(s),c=o.plus(A),m=(0,l.Big)(c).sqrt(),u=(0,l.Big)(Math.cbrt(+r.plus(m).toFixed())),g=(0,l.Big)(Math.cbrt(+r.minus(m).toFixed()));return u.plus(g).toFixed()}var Vt=(s=>(s.OK="OK",s.INVALID="INVALID",s.FORBIDDEN="FORBIDDEN",s.UNINITIALIZED="UNINITIALIZED",s.CONTRACT_ADDRESS="CONTRACT_ADDRESS",s.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",s))(Vt||{});var ke=(n=>(n[n.ALLBRIDGE=1]="ALLBRIDGE",n[n.WORMHOLE=2]="WORMHOLE",n[n.CCTP=3]="CCTP",n))(ke||{});function Qn(i){return Object.entries(i).reduce((e,t)=>{let n=t[0],a=t[1],r=ui(n,a);return r&&(e[n]=r),e},{})}function Yn(i){let e={};for(let[t,n]of Object.entries(i)){let a=t;for(let r of n.tokens){let s=et({chainSymbol:a,poolAddress:r.poolAddress}),o=te(r.poolInfo);e[s]={...r.poolInfo,imbalance:o}}}return e}function oi(i,e){let{name:t,...n}=i,{poolInfo:a,...r}=e;return{...r,...n,chainName:t}}function Ai(i){switch(i){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;default:return null}}function ci(i){return Object.entries(i).reduce((e,[t,n])=>(e[t]=mi(n),e),{})}function mi(i){return Object.entries(i).reduce((e,[t,n])=>{let a=Ai(t);return a&&(e[a]=n),e},{})}function ui(i,e){let t=z[i];if(!t)return null;let n={...t,allbridgeChainId:e.chainId,bridgeAddress:e.bridgeAddress,transferTime:ci(e.transferTime),txCostAmount:e.txCostAmount,confirmations:e.confirmations};return{...n,tokens:e.tokens.map(a=>oi(n,a))}}function et(i){return i.chainSymbol+"_"+i.poolAddress}function Jn(i){let e=[];for(let[t,n]of Object.entries(i)){let a=t;for(let r of n.tokens)e.push({chainSymbol:a,poolAddress:r.poolAddress})}return e}function Hn(i){let e={};for(let[t,n]of Object.entries(i)){let a=t;for(let[r,s]of Object.entries(n))s.imbalance=te(s),e[et({chainSymbol:a,poolAddress:r})]=s}return e}var Gt=class{constructor(e){this.api=zn.default.create({baseURL:e.coreApiUrl,headers:{Accept:"application/json",...e.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+On},params:e.coreApiQueryParams})}async getTokenInfo(){let{data:e}=await this.api.get("/token-info");return{chainDetailsMap:Qn(e),poolInfoMap:Yn(e)}}async getPendingInfo(){let{data:e}=await this.api.get("/pending-info");return e}async getGasBalance(e,t){let{data:n}=await this.api.get(`/check/${e}/${t}`);return n}async getTransferStatus(e,t){let{data:n}=await this.api.get(`/chain/${e}/${t}`);return n}async getReceiveTransactionCost(e){let{data:t}=await this.api.post("/receive-fee",e,{headers:{"Content-Type":"application/json"}});return{exchangeRate:t.exchangeRate,fee:t.fee,sourceNativeTokenPrice:t.sourceNativeTokenPrice}}async getPoolInfoMap(e){let t=e instanceof Array?e:[e],{data:n}=await this.api.post("/pool-info",{pools:t},{headers:{"Content-Type":"application/json"}});return Hn(n)}};var li=(i,e)=>i!==null&&Object.prototype.hasOwnProperty.call(i,e),jn="__cache__",hn=function(i){return typeof i!="string"?jn+JSON.stringify(i):jn+i},Tn=class{constructor(e={defaultTtl:60*1e3}){this.cache={},this.defaultTtl=e.defaultTtl||60*1e3}put(e,t,n){let a=(n?n.ttl:void 0)||this.defaultTtl,r=(n?n.callback:void 0)||function(){},s=hn(e),o=this.cache[s];o&&clearTimeout(o.handle);let A=setTimeout(()=>this.remove(e),a);this.cache[s]={handle:A,data:t,callback:r}}get(e){let t=this.cache[hn(e)];return t&&t.data}remove(e){let t=hn(e),n=this.cache[t];n&&(clearTimeout(n.handle),delete this.cache[t],n.callback(e,n.data))}clear(){for(let e in this.cache)li(this.cache,e)&&clearTimeout(this.cache[e].handle);this.cache={}}size(){return Object.keys(this.cache).length}},Le=Tn;var bn=20*1e3,pi=55*1e3,Zt=class{constructor(e){this.apiClient=e;this.tokenInfoCache=new Le({defaultTtl:pi}),this.receivedTransactionCache=new Le({defaultTtl:bn}),this.pendingInfoCache=new Le({defaultTtl:bn}),this.gasBalanceCache=new Le({defaultTtl:bn})}getTokenInfo(){let e="TOKEN_INFO_CACHE_KEY",t=this.tokenInfoCache.get(e);if(t)return t;let n=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(e,n),n}async getGasBalance(e,t){let n=`GAS_BALANCE_${e}_${t}`,a=this.gasBalanceCache.get(n);if(a)return a;let r=this.apiClient.getGasBalance(e,t);return this.gasBalanceCache.put(n,r),r}async getPendingInfo(){let e="PENDING_INFO_CACHE_KEY",t=this.pendingInfoCache.get(e);if(t)return t;let n=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(e,n),n}async getReceiveTransactionCost(e){let t=`RECEIVE_TX_COST_${e.sourceChainId}_${e.destinationChainId}_${e.messenger}`,n=this.receivedTransactionCache.get(t);if(n)return n;let a=await this.apiClient.getReceiveTransactionCost(e);return this.receivedTransactionCache.put(t,a),a}async getTransferStatus(e,t){return this.apiClient.getTransferStatus(e,t)}async getPoolInfoMap(e){return this.apiClient.getPoolInfoMap(e)}};var di=55*1e3,_t=class{constructor(e){this.client=e;this.poolInfoCache=new Pn}async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(e,t){return this.client.getTransferStatus(e,t)}getReceiveTransactionCost(e){return this.client.getReceiveTransactionCost(e)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(e,t){return this.client.getGasBalance(e,t)}async getPoolInfoByKey(e){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let t=this.poolInfoCache.get(e);if(t)return t;{let n=await this.client.getPoolInfoMap(e);return this.poolInfoCache.putAll(n),n[et(e)]}}async refreshPoolInfo(e){let t;if(e)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),t=await this.client.getPoolInfoMap(e);else{let n=await this.client.getChainDetailsMapAndPoolInfoMap();t=await this.client.getPoolInfoMap(Jn(n.chainDetailsMap))}this.poolInfoCache.putAll(t)}cachePut(e,t){this.poolInfoCache.put(et(e),t)}},Pn=class{constructor(){this.cache=new Le({defaultTtl:di})}putAll(e){for(let[t,n]of Object.entries(e))this.cache.put(t,n)}putAllIfNotExists(e){for(let[t,n]of Object.entries(e))this.cache.get(t)||this.cache.put(t,n)}put(e,t){this.cache.put(e,t)}get(e){let t=et(e);return this.cache.get(t)}};var Ia=O(require("tronweb")),xa=O(require("web3"));var Sn=require("big.js");async function G(i,e){return await i.getPoolInfoByKey({chainSymbol:e.chainSymbol,poolAddress:e.poolAddress})}function R(i){if((0,Sn.Big)(i).lte(0))throw new ut("Amount must be greater than zero")}function I(i,e,t){let n=(0,Sn.Big)(e).toFixed();if(n.split(".").length==2&&n.split(".")[1].length>t)throw new pt(i,n.split(".")[1].length,t)}async function Lt(i,e,t){return await Promise.race([i,new Promise((n,a)=>{setTimeout(()=>a(new $e(e)),t)})])}async function wn(i,e,t,n){if(t<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${t} was received.`);let a=0;for(;;)try{return await Lt(i(),e,n)}catch{if(++a>=t)throw new $e(e)}}async function qn(i,e,t,n=1.5,a=!1){let r=[],s=0;if(r.push(await i()),!e(r[r.length-1]))return r;let o=new Date(Date.now()+t*1e3).valueOf(),A=1e3,c=A;for(;Date.now()<o&&e(r[r.length-1]);)s++,a&&console.info(`Waiting ${A}ms before trying again (bringing the total wait time to ${c}ms so far, of total ${t*1e3}ms)`),await new Promise(m=>setTimeout(m,A)),A=A*n,new Date(Date.now()+A).valueOf()>o&&(A=o-Date.now(),a&&console.info(`was gonna wait too long; new waitTime: ${A}ms`)),c=A+c,r.push(await i(r[r.length-1])),a&&e(r[r.length-1])&&console.info(`${s}. Called ${i.name}; ${r.length} prev attempts. Most recent: ${JSON.stringify(r[r.length-1],null,2)}`);return r}var Kt=O(require("@project-serum/anchor")),xn=require("@solana/web3.js"),ga=require("big.js");var $n=[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];var ea=[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];var X=O(require("@project-serum/anchor")),K=require("@solana/web3.js");async function ue(i,e){return X.utils.token.associatedAddress({mint:e,owner:i})}async function Ue(i){let[e]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("config")],i);return e}async function ta(i,e){let[t]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("lock"),Uint8Array.from(i)],e);return t}async function ht(i,e){let[t]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([i])],e);return t}async function tt(i){let e=await Ue(i),[t]=await K.PublicKey.findProgramAddress([e.toBuffer()],i);return t}async function na(i,e){let[t]=await K.PublicKey.findProgramAddress([i.toBuffer()],e);return t}async function nt(i,e){let[t]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("token"),i.toBytes()],e);return t}async function aa(i,e,t){let[n]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([i]),e],t);return n}async function Cn(i,e){let[t]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([i])],e);return t}async function Bn(i,e){let[t]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([i])],e);return t}async function ia(i,e){let[t]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("sent_message"),i],e);return t}async function kn(i,e,t){let[n]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("user_deposit"),e.toBytes(),i.toBytes()],t);return n}async function ra(i,e){let[t]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("cctp_bridge"),i.toBytes()],e);return t}async function sa(i,e){let[t]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("token"),i.toBytes()],e);return t}function oa(i,e){let[t]=K.PublicKey.findProgramAddressSync([X.utils.bytes.utf8.encode("lock"),e.toBuffer()],i);return t}function Aa(i,e,t,n){let a=Xe("message_transmitter",t),r=Xe("token_messenger",n),s=Xe("__event_authority",n),o=Xe("token_minter",n),A=Xe("local_token",n,[e]),c=Xe("remote_token_messenger",n,[i.toString()]),m=Xe("sender_authority",n);return{messageTransmitterAccount:a,tokenMessenger:r,tokenMessengerEventAuthority:s,tokenMinter:o,localToken:A,remoteTokenMessengerKey:c,authorityPda:m}}function Xe(i,e,t=[]){let n=[Buffer.from(X.utils.bytes.utf8.encode(i))];for(let r of t)typeof r=="string"?n.push(Buffer.from(X.utils.bytes.utf8.encode(r))):Array.isArray(r)?n.push(Buffer.from(r)):Buffer.isBuffer(r)?n.push(r):n.push(r.toBuffer());return K.PublicKey.findProgramAddressSync(n,e)[0]}var ca=require("@project-serum/anchor"),Xt=require("@solana/web3.js");function Ne(i,e){let t=new Xt.Connection(i,"confirmed"),n=new Xt.PublicKey(e);return new ca.AnchorProvider(t,{publicKey:n},{preflightCommitment:"confirmed",commitment:"confirmed"})}var le=class{};var ma=require("@solana/web3.js"),Me=require("big.js"),Mn=O(require("randombytes")),ua=require("stellar-sdk"),la=O(require("tronweb"));function Ie(i,e,t){let n;switch(e){case"EVM":{n=yi(i);break}case"SOLANA":{n=new ma.PublicKey(i).toBuffer();break}case"TRX":{n=hi(i);break}case"SRB":{n=new ua.Address(i).toBuffer();break}}switch(t){case"EVM":return"0x"+n.toString("hex");case"SOLANA":return Array.from(n);case"TRX":return n.toJSON().data;case"SRB":return n.toJSON().data}}function pa(i){return Buffer.from(i.replace(/^0x/i,""),"hex")}function yi(i){let t=pa(i);return Buffer.concat([Buffer.alloc(32-t.length,0),t],32)}function hi(i){let e=Tt(i),t=pa(e);return Ti(t,32)}function Tt(i){return Buffer.from(la.utils.crypto.decodeBase58Address(i)).toString("hex").replace(/^41/,"0x")}function Ti(i,e){if(i.length>=e)return i;let t=Buffer.alloc(e,0);return i.copy(t,e-i.length),t}function at(){return(0,Mn.default)(32)}function vn(){let i=(0,Mn.default)(32).readBigInt64BE();return i<0?i*-1n:i}function Oe(i,e){let t={},n=e.sourceToken;return t.amount=B(e.amount,n.decimals).toFixed(),t.contractAddress=n.bridgeAddress,t.fromAccountAddress=e.fromAccountAddress,t.fromTokenAddress=Ie(n.tokenAddress,i,i),t.toAccountAddress=e.toAccountAddress,t.toTokenAddress=Ie(e.destinationToken.tokenAddress,i,i),t.minimumReceiveAmount=e.minimumReceiveAmount?B(e.minimumReceiveAmount,e.destinationToken.decimals).toFixed():"0",t}async function xe(i,e,t){let n={};n.fromChainId=e.sourceToken.allbridgeChainId,n.fromChainSymbol=e.sourceToken.chainSymbol;let a=z[e.destinationToken.chainSymbol].chainType;n.fromTokenAddress=e.sourceToken.tokenAddress,n.toChainId=e.destinationToken.allbridgeChainId,n.toTokenAddress=e.destinationToken.tokenAddress,e.gasFeePaymentMethod==="stablecoin"?n.gasFeePaymentMethod="stablecoin":n.gasFeePaymentMethod="native";let r=e.sourceToken;if(e.messenger===3){if(!r.cctpAddress||!e.destinationToken.cctpAddress)throw new re("Such route does not support CCTP protocol");n.contractAddress=r.cctpAddress}else n.contractAddress=r.bridgeAddress;n.messenger=e.messenger,n.fromAccountAddress=e.fromAccountAddress,n.amount=B(e.amount,r.decimals).toFixed();let{fee:s,feeFormat:o}=e;if(!s){let u=(await Rn(n.fromChainId,e.sourceToken.chainType,n.toChainId,r.decimals,n.messenger,t))[n.gasFeePaymentMethod];if(!u)throw new je;s=u.int,o="int"}if(o=="float")switch(n.gasFeePaymentMethod){case"native":n.fee=B(s,V[r.chainType]).toFixed(0);break;case"stablecoin":n.fee=B(s,r.decimals).toFixed(0);break}else n.fee=s;let{extraGas:A,extraGasFormat:c}=e;if(A&&+A>0){if(c=="float")switch(n.gasFeePaymentMethod){case"native":n.extraGas=B(A,V[r.chainType]).toFixed(0);break;case"stablecoin":n.extraGas=B(A,r.decimals).toFixed(0);break}else n.extraGas=A;await Pi(n.extraGas,n.gasFeePaymentMethod,r,e.destinationToken,t)}return n.fromTokenAddress=Ie(n.fromTokenAddress,i,i),n.toAccountAddress=Ie(e.toAccountAddress,a,i),n.toTokenAddress=Ie(n.toTokenAddress,a,i),n.gasFeePaymentMethod=="stablecoin"&&bi(n.amount,r.decimals,n.fee,n.extraGas),n}function bi(i,e,t,n){let a=(0,Me.Big)(i).minus(t).minus(n??0);if(a.lte(0))throw new Ge(`Amount not enough to pay fee, ${b((0,Me.Big)(a).minus(1).neg(),e).toFixed()} stables is missing`)}async function Rn(i,e,t,n,a,r){let s=await r.getReceiveTransactionCost({sourceChainId:i,destinationChainId:t,messenger:a}),o={native:{int:s.fee,float:b(s.fee,V[e]).toFixed()}};if(s.sourceNativeTokenPrice){let A=Ee(new Me.Big(s.fee).mul(s.sourceNativeTokenPrice),V[e],n).toFixed(0,Me.Big.roundUp);o.stablecoin={int:A,float:b(A,n).toFixed()}}return o}async function Pi(i,e,t,n,a){let s=(await In(t,n,a)).extraGasMax[e];if(!s)throw new je(`Impossible to pay extra gas by '${e}' payment method`);let o=s.int;if((0,Me.Big)(i).gt(o))throw new lt(`Extra gas ${i} in int format, exceeded limit ${o} for '${e}' payment method`)}async function In(i,e,t){let n={},a=await t.getReceiveTransactionCost({sourceChainId:i.allbridgeChainId,destinationChainId:e.allbridgeChainId,messenger:1}),r=e.txCostAmount.maxAmount,s=b(r,V[e.chainType]).toFixed(),o=(0,Me.Big)(s).div(a.exchangeRate).toFixed(V[i.chainType],Me.Big.roundDown),A=B(o,V[i.chainType]).toFixed(0);if(n.native={int:A,float:o},a.sourceNativeTokenPrice){let c=(0,Me.Big)(o).mul(a.sourceNativeTokenPrice).toFixed(i.decimals,Me.Big.roundDown);n.stablecoin={int:B(c,i.decimals).toFixed(0),float:c}}return{extraGasMax:n,destinationChain:{gasAmountMax:{int:r,float:s},swap:{int:e.txCostAmount.swap,float:b(e.txCostAmount.swap,V[e.chainType]).toFixed()},transfer:{int:e.txCostAmount.transfer,float:b(e.txCostAmount.transfer,V[e.chainType]).toFixed()}},exchangeRate:a.exchangeRate,sourceNativeTokenPrice:a.sourceNativeTokenPrice}}function da(i){return i.sourceToken.chainSymbol!==i.destinationToken.chainSymbol}var Pt=class extends le{constructor(t,n,a){super();this.web3=t;this.api=n;this.nodeRpcUrlsConfig=a;this.chainType="EVM"}async send(t){let n=await this.buildRawTransactionSend(t);return this.sendRawTransaction(n)}async buildRawTransactionSwap(t){let n=Oe(this.chainType,t);return await this.buildRawTransactionSwapFromParams(n)}async buildRawTransactionSwapFromParams(t){let{amount:n,contractAddress:a,fromAccountAddress:r,fromTokenAddress:s,toAccountAddress:o,toTokenAddress:A,minimumReceiveAmount:c}=t,u=this.getBridgeContract(a).methods.swap(n,s,A,o,c);return Promise.resolve({from:r,to:a,data:u.encodeABI()})}async buildRawTransactionSend(t){let n=await xe(this.chainType,t,this.api),{amount:a,contractAddress:r,fromAccountAddress:s,fromTokenAddress:o,toChainId:A,toAccountAddress:c,toTokenAddress:m,messenger:u,fee:g,gasFeePaymentMethod:f,extraGas:y}=n,h="0x"+at().toString("hex"),d,p,P=g;if(y&&(P=(0,ga.Big)(P).plus(y).toFixed()),u===3){let T=await this.buildRawTransactionCctpSend(t,n,P);d=T.sendMethod,p=T.value}else{let T=this.getBridgeContract(r);f==="stablecoin"?(d=T.methods.swapAndBridge(o,a,c,A,m,h,u,P),p="0"):(d=T.methods.swapAndBridge(o,a,c,A,m,h,u,0),p=P)}return Promise.resolve({from:s,to:r,value:p,data:d.encodeABI()})}async buildRawTransactionCctpSend(t,n,a){let{amount:r,contractAddress:s,toChainId:o,toAccountAddress:A,gasFeePaymentMethod:c}=n,m=this.getContract(ea,s),u,g;if(t.destinationToken.chainType==="SOLANA"){let f,y=new xn.PublicKey(t.toAccountAddress),h=new xn.PublicKey(t.destinationToken.tokenAddress),d=await ue(y,h),p=Ne(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),t.toAccountAddress);Kt.setProvider(p);let P=await Kt.Spl.token(p).account.token.fetchNullable(d);if(P?.authority.equals(y))f=Ie(d.toBase58(),"SOLANA",this.chainType);else{let T=await p.connection.getTokenAccountsByOwner(y,{mint:h});if(T.value.length===0&&!P)f=Ie(d.toBase58(),"SOLANA",this.chainType);else if(T.value.length>0)f=Ie(T.value[0].pubkey.toBase58(),"SOLANA",this.chainType);else throw new k("Associated account has wrong owner")}c==="stablecoin"?(u=m.methods.bridgeWithWalletAddress(r,f,A,o,a),g="0"):(u=m.methods.bridgeWithWalletAddress(r,f,A,o,0),g=a)}else c==="stablecoin"?(u=m.methods.bridge(r,A,o,a),g="0"):(u=m.methods.bridge(r,A,o,0),g=a);return{sendMethod:u,value:g}}async sendRawTransaction(t){let n=await this.web3.eth.estimateGas(t),a={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:r}=await this.web3.eth.sendTransaction({...t,gas:n,...a});return{txId:r}}getContract(t,n){return new this.web3.eth.Contract(t,n)}getBridgeContract(t){return this.getContract($n,t)}};var Qt=class{constructor(e,t,n,a){this.api=e;this.nodeRpcUrlsConfig=t;this.params=n;this.tokenService=a}async approve(e,t){let n,a;t?(n=e,a=t):a=e;let r=St(a.token,a.messenger);return this.tokenService.buildRawTransactionApprove({...a,spender:r},n)}async send(e,t){return R(e.amount),I("amount",e.amount,e.sourceToken.decimals),da(e)?Yt(e.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionSend(e):Yt(e.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionSwap(e)}};var x=require("@project-serum/anchor"),C=require("@solana/web3.js"),De=require("big.js");var wt={version:"0.1.0",name:"bridge",instructions:[{name:"initialize",accounts:[{name:"admin",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"initializePool",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"token",isMut:!0,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializePoolArgs"}}]},{name:"initDepositAccount",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"deposit",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdraw",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amountLp",type:"u64"}]},{name:"swapAndBridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"messenger",isMut:!1,isSigner:!1},{name:"messengerConfig",isMut:!0,isSigner:!1},{name:"sentMessageAccount",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swapAndBridgeWormhole",accounts:[{name:"user",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"wormholeMessenger",isMut:!1,isSigner:!1},{name:"wormholeMessengerConfig",isMut:!0,isSigner:!1},{name:"wormholeProgram",isMut:!1,isSigner:!1},{name:"bridge",isMut:!0,isSigner:!1},{name:"message",isMut:!0,isSigner:!0},{name:"sequence",isMut:!0,isSigner:!1},{name:"feeCollector",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"clock",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swap",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"sendMint",isMut:!1,isSigner:!1},{name:"receiveMint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"sendPool",isMut:!0,isSigner:!1},{name:"receivePool",isMut:!0,isSigner:!1},{name:"sendBridgeToken",isMut:!0,isSigner:!1},{name:"receiveBridgeToken",isMut:!0,isSigner:!1},{name:"sendUserToken",isMut:!0,isSigner:!1},{name:"receiveUserToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"},{name:"receiveAmountMin",type:"u64"}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"receiveAndSwap",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"receiveAndSwapWormhole",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"claimRewards",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setAdmin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAdmin",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"startBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"stopBridge",accounts:[{name:"stopAuthority",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"setRebalancer",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"rebalancer",isMut:!1,isSigner:!1}],args:[]},{name:"setStopAuthority",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAuthority",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"setAllbridgeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setWormholeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setPoolFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setBalanceRatioMin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"balanceRatioMinBp",type:"u16"}]},{name:"setPoolAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"addOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"removeOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"adjustTotalLpAmount",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[]}],accounts:[{name:"chainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"config",type:{kind:"struct",fields:[{name:"admin",type:"publicKey"},{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"rebalancer",type:"publicKey"},{name:"stopAuthority",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"canSwap",type:"bool"},{name:"canDeposit",type:"bool"},{name:"canWithdraw",type:"bool"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"sentTokenAddress",type:"publicKey"},{name:"amount",type:"u64"},{name:"vusdAmount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:"Messenger"}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"otherBridgeToken",type:{kind:"struct",fields:[]}},{name:"pool",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"tokenBalance",type:"u64"},{name:"vUsdBalance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"totalLpAmount",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"accRewardPerShareP",type:"u128"},{name:"adminFeeAmount",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"vUsdAmount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"userDeposit",type:{kind:"struct",fields:[{name:"userAddress",type:"publicKey"},{name:"mint",type:"publicKey"},{name:"lpAmount",type:"u64"},{name:"rewardDebt",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"vusdAmount",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"publicKey"},{name:"sourceChainId",type:"u8"},{name:"receiveToken",type:"publicKey"},{name:"messenger",type:{defined:"Messenger"}},{name:"hash",type:{array:["u8",32]}},{name:"receiveAmountMin",type:"u64"}]}},{name:"RewardError",type:{kind:"enum",variants:[{name:"FeeTooHigh"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}}],errors:[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"PoolInfo overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"}]};var fa={version:"0.1.0",name:"cctp_bridge",instructions:[{name:"initialize",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"bridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"messageSentEventData",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!0,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"cctpMessenger",isMut:!1,isSigner:!1},{name:"messageTransmitterProgram",isMut:!1,isSigner:!1},{name:"messageTransmitterAccount",isMut:!0,isSigner:!1},{name:"tokenMessenger",isMut:!1,isSigner:!1},{name:"tokenMinter",isMut:!1,isSigner:!1},{name:"localToken",isMut:!0,isSigner:!1},{name:"remoteTokenMessengerKey",isMut:!1,isSigner:!1},{name:"authorityPda",isMut:!1,isSigner:!1},{name:"eventAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"setAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setCctpTokenMessengerMinter",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]}],accounts:[{name:"cctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"admin",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"adminFeeShareBp",type:"u64"},{name:"adminFeeAmount",type:"u64"}]}},{name:"chainBridge",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"amount",type:"u64"},{name:"adminFee",type:"u64"},{name:"relayerFee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"slot",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gasOracleProgramId",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"}]}}],errors:[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}]};var ya=require("@project-serum/anchor"),ha=O(require("big.js")),Ct=O(require("web3"));async function it(i,e){return await ya.Spl.token(e).account.token.fetch(i)}async function Ta(i,e,t){let n=await e.account.pool.fetch(t),a=n.decimals,r=(0,ha.default)(n.feeShareBp.toString()).div(1e4).toFixed(),s={aValue:n.a.toString(),dValue:n.d.toString(),totalLpAmount:n.totalLpAmount.toString(),tokenBalance:n.tokenBalance.toString(),vUsdBalance:n.vUsdBalance.toString(),accRewardPerShareP:n.accRewardPerShareP.toString()};return Ce(i,{decimals:a,feeShare:r},s)}function ba(i){let e=i.amount,t="0x"+i.recipient.toString("hex"),n=i.sourceChainId,a=i.destinationChainId,r="0x"+i.receiveToken.toString("hex"),s="0x"+i.nonce.toString("hex"),o=1,A="0x"+i.chainBridge.toString("hex"),c=Ct.default.utils.encodePacked({t:"uint256",v:e},{t:"bytes32",v:t},{t:"uint256",v:n},{t:"bytes32",v:r},{t:"uint256",v:s},{t:"uint8",v:o});if(!c)throw new k("message cannot be undefined");let m=Ct.default.utils.keccak256(Buffer.from(c.replace("0x",""),"hex")),u=Buffer.from(m.replace("0x",""),"hex");u[0]=n,u[1]=a;let g=Ct.default.utils.encodePacked({t:"bytes32",v:"0x"+u.toString("hex")},{t:"bytes32",v:A});if(!g)throw new Ze("messageWithSigner cannot be undefined");let f=Ct.default.utils.keccak256(Buffer.from(g.replace("0x",""),"hex")),y=Buffer.from(f.replace("0x",""),"hex");return y[0]=u[0],y[1]=u[1],y}var ne=require("@solana/web3.js"),Pa=require("big.js");var Dn=require("@solana/web3.js");async function Qe(i,e){return await Promise.all(i.message.addressTableLookups.map(async t=>new Dn.AddressLookupTableAccount({key:t.accountKey,state:Dn.AddressLookupTableAccount.deserialize(await e.getAccountInfo(t.accountKey).then(n=>{if(!n)throw new k("Cannot get AccountInfo");return n.data}))})))}var Jt="AUTO";async function rt(i,e,t){let n=new ne.Connection(t,"confirmed"),a=(await n.simulateTransaction(i)).value.unitsConsumed;await wa(i.instructions,a,e,n)}async function Sa(i,e,t){let n=new ne.Connection(t,"confirmed"),a=await Qe(i,n),r=ne.TransactionMessage.decompile(i.message,{addressLookupTableAccounts:a});if(i.serialize().length>1232)throw new gt;await wa(r.instructions,769230,e,n),i.message=r.compileToV0Message(a)}async function wa(i,e,t,n){if(e>0){let a=Si(e,i);if(t?.solana){let r=t.solana;if(r===Jt)await Fn(i,n);else if("pricePerUnitInMicroLamports"in r)await Fn(i,n,r.pricePerUnitInMicroLamports);else{let s=(0,Pa.Big)(r.extraFeeInLamports).div(a).mul(ft(6)).toFixed(0);await Fn(i,n,s)}}}}function Si(i,e){let t=e.findIndex(r=>r.programId.equals(ne.ComputeBudgetProgram.programId)&&ne.ComputeBudgetInstruction.decodeInstructionType(r)==="SetComputeUnitLimit"),n=Number((i*1.3).toFixed(0)),a=ne.ComputeBudgetProgram.setComputeUnitLimit({units:n});return t>=0?e[t]=a:e.push(a),n.toString()}async function Fn(i,e,t){let n=i.findIndex(s=>s.programId.equals(ne.ComputeBudgetProgram.programId)&&ne.ComputeBudgetInstruction.decodeInstructionType(s)==="SetComputeUnitPrice"),a=BigInt(t||await wi(e)),r=ne.ComputeBudgetProgram.setComputeUnitPrice({microLamports:a});return n>=0?i[n]=r:i.push(r),a.toString()}async function wi(i){let e=await i.getRecentPrioritizationFees(),t=0;for(let n of e)t+=n.prioritizationFee;return(t/e.length).toFixed(0)}var Ca=require("@solana/spl-token"),Ye=require("@solana/web3.js"),st=O(require("axios"));var Ht=class{constructor(e){this.connection=new Ye.Connection(e)}async getJupiterSwapTx(e,t,n){let a;try{a=await st.default.get(`https://quote-api.jup.ag/v6/quote?inputMint=${t}
|
|
1
|
+
"use strict";var Ja=Object.create;var Ut=Object.defineProperty;var Ha=Object.getOwnPropertyDescriptor;var za=Object.getOwnPropertyNames;var ja=Object.getPrototypeOf,qa=Object.prototype.hasOwnProperty;var $a=(i,t)=>{for(var e in t)Ut(i,e,{get:t[e],enumerable:!0})},Nn=(i,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of za(t))!qa.call(i,a)&&a!==e&&Ut(i,a,{get:()=>t[a],enumerable:!(n=Ha(t,a))||n.enumerable});return i};var O=(i,t,e)=>(e=i!=null?Ja(ja(i)):{},Nn(t||!i||!i.__esModule?Ut(e,"default",{value:i,enumerable:!0}):e,i)),ei=i=>Nn(Ut({},"__esModule",{value:!0}),i);var Oi={};$a(Oi,{AddressStatus:()=>Vt,AllbridgeCoreSdk:()=>Un,AmountFormat:()=>bt,AmountNotEnoughError:()=>Ve,ArgumentInvalidDecimalsError:()=>pt,CCTPDoesNotSupportedError:()=>re,ChainSymbol:()=>me,ChainType:()=>N,ErrorCode:()=>Vn,ExtraGasMaxLimitExceededError:()=>lt,FeePaymentMethod:()=>Xe,InsufficientPoolLiquidityError:()=>we,InvalidAmountError:()=>ut,InvalidGasFeePaymentOptionError:()=>je,InvalidMessengerOptionError:()=>fn,InvalidTxError:()=>Ge,JupiterError:()=>Y,Messenger:()=>ke,MethodNotSupportedError:()=>J,NodeRpcUrlNotInitializedError:()=>dt,SdkError:()=>k,SdkRootError:()=>F,SolanaAutoTxFee:()=>Jt,TimeoutError:()=>$e,TxTooLargeError:()=>gt,VerifyTxError:()=>qe,mainnet:()=>mt,nodeRpcUrlsDefault:()=>ri,nodeUrlsDefault:()=>ii,testnet:()=>ti,testnetNodeRpcUrlsDefault:()=>ai,testnetNodeUrlsDefault:()=>ni});module.exports=ei(Oi);var ti={coreApiUrl:"https://core-dev.a11bd.net",coreApiQueryParams:{},coreApiHeaders:{},wormholeMessengerProgramId:"3u8hJUVTA4jH1wYAyUur7FFZVQ8H635K3tSHHF4ssjQ5",solanaLookUpTable:"C3jAxHRTZjM2Bs7EqPir4nvrT8zKtpcW7RvGR9R2qKtN",sorobanNetworkPassphrase:"Test SDF Network ; September 2015",tronJsonRpc:"https://nile.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{SPL:0,ARB:3,AMO:7}}},ni={solanaRpcUrl:"https://api.devnet.solana.com",tronRpcUrl:"https://nile.trongrid.io"},ai={SOL:"https://api.devnet.solana.com",TRX:"https://nile.trongrid.io",SRB:"https://soroban-testnet.stellar.org",STLR:"https://horizon-testnet.stellar.org"};var mt={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7}}},ii={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},ri={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org"};var he=require("big.js");var Nt=class{constructor(t){this.apiClient=t}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let t=await this.getChainDetailsMap();return Object.values(t).flatMap(e=>e.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(t,e){return this.apiClient.getGasBalance(t,e)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(t,e){return await this.apiClient.getTransferStatus(t,e)}async getReceiveTransactionCost(t){return await this.apiClient.getReceiveTransactionCost(t)}async getPoolInfoMap(t){return await this.apiClient.getPoolInfoMap(t)}};var zn=O(require("axios"));var On="3.15.2-beta.1";var me=(p=>(p.GRL="GRL",p.SPL="SPL",p.HOL="HOL",p.BSC="BSC",p.ETH="ETH",p.BAS="BAS",p.SOL="SOL",p.TRX="TRX",p.POL="POL",p.MUM="MUM",p.AMO="AMO",p.ARB="ARB",p.CEL="CEL",p.AVA="AVA",p.SRB="SRB",p.STLR="STLR",p.OPT="OPT",p))(me||{}),N=(a=>(a.EVM="EVM",a.SOLANA="SOLANA",a.TRX="TRX",a.SRB="SRB",a))(N||{}),V={EVM:18,SOLANA:9,TRX:6,SRB:7},z={GRL:{chainSymbol:"GRL",chainId:"0x5",name:"Goerli",chainType:"EVM"},SPL:{chainSymbol:"SPL",chainId:"0xaa36a7",name:"Sepolia",chainType:"EVM"},HOL:{chainSymbol:"HOL",chainId:"0x4268",name:"Hole\u0161ky",chainType:"EVM"},BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},MUM:{chainSymbol:"MUM",chainId:"0x13881",name:"Mumbai",chainType:"EVM"},AMO:{chainSymbol:"AMO",chainId:"0x13882",name:"Amoy",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"}};var l=require("big.js"),Ot=O(require("bn.js"));var F=class extends Error{constructor(t,e){super(e),this.errorCode=t}},k=class extends F{constructor(t){super("SdkError",t)}},ut=class extends F{constructor(t){super("InvalidAmountError",t)}},Ve=class extends F{constructor(t){super("AmountNotEnoughError",t)}},we=class extends F{constructor(t){super("InsufficientPoolLiquidityError",t)}},Y=class extends F{constructor(t){super("JupiterError",t)}},je=class extends F{constructor(t){super("InvalidGasFeePaymentOptionError",t)}},fn=class extends F{constructor(t){super("InvalidMessengerOptionError",t)}},J=class extends F{constructor(t){super("MethodNotSupportedError",t)}},qe=class extends F{constructor(t){super("VerifyTxError",t)}},Ge=class extends F{constructor(t){super("InvalidTxError",t)}},lt=class extends F{constructor(t){super("ExtraGasMaxLimitExceededError",t)}},pt=class extends F{constructor(t,e,n){super("ArgumentInvalidDecimalsError",`Argument '${t}' decimals '${e}' cannot be greater than '${n}'`)}},$e=class extends F{constructor(t){super("TimeoutError",t)}},dt=class extends F{constructor(t){super("NodeRpcUrlNotInitializedError",`For chain '${t}' Node RPC URL not initialized`)}},re=class extends F{constructor(t){super("CCTPDoesNotSupportedError",t)}},gt=class extends F{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},Vn=(d=>(d.SDK_ERROR="SdkError",d.INVALID_AMOUNT_ERROR="InvalidAmountError",d.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",d.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",d.JUPITER_ERROR="JupiterError",d.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",d.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",d.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",d.VERIFY_TX_ERROR="VerifyTxError",d.INVALID_TX_ERROR="InvalidTxError",d.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",d.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",d.TIMEOUT_ERROR="TimeoutError",d.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",d.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",d.TX_TOO_LARGE="TxTooLargeError",d))(Vn||{});function yn(i,t){return(0,l.Big)(100).minus((0,l.Big)(100).times(t).div(i)).toNumber()}function Ze(i,t){return Ee(i,t,3).round(0,l.Big.roundDown)}function ee(i,t){return Ee(i,3,t)}function Ee(i,t,e){let n=(0,l.Big)(e).minus(t).toNumber();return(0,l.Big)(i).times(ft(n))}function ft(i){return(0,l.Big)(10).pow(i)}function B(i,t){return(0,l.Big)(i).times(ft(t))}function b(i,t){let e=(0,l.Big)(i);return e.eq(0)?(0,l.Big)(0):(0,l.Big)(e).div(ft(t))}function te(i){return b((0,l.Big)(i.tokenBalance).minus(i.vUsdBalance).toFixed(),3).div(2).toFixed()}function Ce(i,{feeShare:t,decimals:e},n){let a=(0,l.Big)(i);if(a.lte(0))return"0";let r=a.times(t),s=a.minus(r),o=Ze(s,e),A=(0,l.Big)(n.tokenBalance).plus(o),c=Be(A,n.aValue,n.dValue);return(0,l.Big)(n.vUsdBalance).minus(c).round(0,l.Big.roundDown).toFixed()}function yt(i,{feeShare:t,decimals:e},n){let a=(0,l.Big)(i);if(a.lte(0))return(0,l.Big)(0).toFixed();let r=a.plus(n.vUsdBalance),s=Be(r,n.aValue,n.dValue),o=ee((0,l.Big)(n.tokenBalance).minus(s),e),A=(0,l.Big)(o).times(t);return(0,l.Big)(o).minus(A).round(0,l.Big.roundDown).toFixed()}function Gn(i,t){let e=(0,l.Big)(i);if(e.lte(0))return t;let n=e.plus(t.vUsdBalance),a=Be(n,t.aValue,t.dValue);return{aValue:t.aValue,dValue:t.dValue,tokenBalance:a.toFixed(0),vUsdBalance:n.toFixed(0)}}function Zn(i,{feeShare:t,decimals:e},n){if((0,l.Big)(i).lte(0))return(0,l.Big)(0);let a=(0,l.Big)(n.vUsdBalance).minus(i);if(a.lte(0))throw new we;let r=Be(a,n.aValue,n.dValue),s=(0,l.Big)(r).minus(n.tokenBalance),o=ee(s,e),A=(0,l.Big)(t).div((0,l.Big)(1).minus(t)),c=(0,l.Big)(o).times(A).round(0,l.Big.roundUp);return(0,l.Big)(o).plus(c).round(0,l.Big.roundDown)}function _n(i,{feeShare:t,decimals:e},n){if((0,l.Big)(i).lte(0))return(0,l.Big)(0);let a=(0,l.Big)(t).div((0,l.Big)(1).minus(t)),r=(0,l.Big)(i).times(a).round(0,l.Big.roundUp),s=(0,l.Big)(i).plus(r),o=Ze(s,e),A=(0,l.Big)(n.tokenBalance).minus(o);if(A.lte(0))throw new we;let c=Be(A,n.aValue,n.dValue);return(0,l.Big)(c).minus(n.vUsdBalance).round(0,l.Big.roundDown)}function Be(i,t,e){let n=(0,l.Big)(4).times(t).times((0,l.Big)(e).minus(i)).minus(e),a=(0,l.Big)(e).pow(3),r=n.pow(2),s=(0,l.Big)(i).times((0,l.Big)(i).times(r).plus((0,l.Big)(4).times(t).times(a))).sqrt().round(0,l.Big.roundDown),o=(0,l.Big)(8).times(t).times(i),A=n.times(i).plus(s).div(o).round(0,l.Big.roundDown);return A.eq(0)?(0,l.Big)(0):A.plus(1)}function Ln(i,t,e,n){let a=new Ot.default(i),r=new Ot.default(e),s=new Ot.default(t);return a.mul(r).shrn(n).sub(s).toString()}function Xn(i){return i*100>0?`${Number((0,l.Big)(i).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function Kn(i,t,e){let n=(0,l.Big)(t).times(e),a=(0,l.Big)(t).plus(e),r=(0,l.Big)(8).times(i).times(n).times(a),s=n.times((0,l.Big)(16).times(i).minus(4)).div(3),o=r.times(r),A=s.times(s).times(s),c=o.plus(A),m=(0,l.Big)(c).sqrt(),u=(0,l.Big)(Math.cbrt(+r.plus(m).toFixed())),g=(0,l.Big)(Math.cbrt(+r.minus(m).toFixed()));return u.plus(g).toFixed()}var Vt=(s=>(s.OK="OK",s.INVALID="INVALID",s.FORBIDDEN="FORBIDDEN",s.UNINITIALIZED="UNINITIALIZED",s.CONTRACT_ADDRESS="CONTRACT_ADDRESS",s.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",s))(Vt||{});var ke=(n=>(n[n.ALLBRIDGE=1]="ALLBRIDGE",n[n.WORMHOLE=2]="WORMHOLE",n[n.CCTP=3]="CCTP",n))(ke||{});function Qn(i){return Object.entries(i).reduce((t,e)=>{let n=e[0],a=e[1],r=mi(n,a);return r&&(t[n]=r),t},{})}function Yn(i){let t={};for(let[e,n]of Object.entries(i)){let a=e;for(let r of n.tokens){let s=et({chainSymbol:a,poolAddress:r.poolAddress}),o=te(r.poolInfo);t[s]={...r.poolInfo,imbalance:o}}}return t}function si(i,t){let{name:e,...n}=i,{poolInfo:a,...r}=t;return{...r,...n,chainName:e}}function oi(i){switch(i){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;default:return null}}function Ai(i){return Object.entries(i).reduce((t,[e,n])=>(t[e]=ci(n),t),{})}function ci(i){return Object.entries(i).reduce((t,[e,n])=>{let a=oi(e);return a&&(t[a]=n),t},{})}function mi(i,t){let e=z[i];if(!e)return null;let n={...e,allbridgeChainId:t.chainId,bridgeAddress:t.bridgeAddress,transferTime:Ai(t.transferTime),txCostAmount:t.txCostAmount,confirmations:t.confirmations};return{...n,tokens:t.tokens.map(a=>si(n,a))}}function et(i){return i.chainSymbol+"_"+i.poolAddress}function Jn(i){let t=[];for(let[e,n]of Object.entries(i)){let a=e;for(let r of n.tokens)t.push({chainSymbol:a,poolAddress:r.poolAddress})}return t}function Hn(i){let t={};for(let[e,n]of Object.entries(i)){let a=e;for(let[r,s]of Object.entries(n))s.imbalance=te(s),t[et({chainSymbol:a,poolAddress:r})]=s}return t}var Gt=class{constructor(t){this.api=zn.default.create({baseURL:t.coreApiUrl,headers:{Accept:"application/json",...t.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+On},params:t.coreApiQueryParams})}async getTokenInfo(){let{data:t}=await this.api.get("/token-info");return{chainDetailsMap:Qn(t),poolInfoMap:Yn(t)}}async getPendingInfo(){let{data:t}=await this.api.get("/pending-info");return t}async getGasBalance(t,e){let{data:n}=await this.api.get(`/check/${t}/${e}`);return n}async getTransferStatus(t,e){let{data:n}=await this.api.get(`/chain/${t}/${e}`);return n}async getReceiveTransactionCost(t){let{data:e}=await this.api.post("/receive-fee",t,{headers:{"Content-Type":"application/json"}});return{exchangeRate:e.exchangeRate,fee:e.fee,sourceNativeTokenPrice:e.sourceNativeTokenPrice}}async getPoolInfoMap(t){let e=t instanceof Array?t:[t],{data:n}=await this.api.post("/pool-info",{pools:e},{headers:{"Content-Type":"application/json"}});return Hn(n)}};var ui=(i,t)=>i!==null&&Object.prototype.hasOwnProperty.call(i,t),jn="__cache__",hn=function(i){return typeof i!="string"?jn+JSON.stringify(i):jn+i},Tn=class{constructor(t={defaultTtl:60*1e3}){this.cache={},this.defaultTtl=t.defaultTtl||60*1e3}put(t,e,n){let a=(n?n.ttl:void 0)||this.defaultTtl,r=(n?n.callback:void 0)||function(){},s=hn(t),o=this.cache[s];o&&clearTimeout(o.handle);let A=setTimeout(()=>this.remove(t),a);this.cache[s]={handle:A,data:e,callback:r}}get(t){let e=this.cache[hn(t)];return e&&e.data}remove(t){let e=hn(t),n=this.cache[e];n&&(clearTimeout(n.handle),delete this.cache[e],n.callback(t,n.data))}clear(){for(let t in this.cache)ui(this.cache,t)&&clearTimeout(this.cache[t].handle);this.cache={}}size(){return Object.keys(this.cache).length}},_e=Tn;var bn=20*1e3,li=55*1e3,Zt=class{constructor(t){this.apiClient=t;this.tokenInfoCache=new _e({defaultTtl:li}),this.receivedTransactionCache=new _e({defaultTtl:bn}),this.pendingInfoCache=new _e({defaultTtl:bn}),this.gasBalanceCache=new _e({defaultTtl:bn})}getTokenInfo(){let t="TOKEN_INFO_CACHE_KEY",e=this.tokenInfoCache.get(t);if(e)return e;let n=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(t,n),n}async getGasBalance(t,e){let n=`GAS_BALANCE_${t}_${e}`,a=this.gasBalanceCache.get(n);if(a)return a;let r=this.apiClient.getGasBalance(t,e);return this.gasBalanceCache.put(n,r),r}async getPendingInfo(){let t="PENDING_INFO_CACHE_KEY",e=this.pendingInfoCache.get(t);if(e)return e;let n=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(t,n),n}async getReceiveTransactionCost(t){let e=`RECEIVE_TX_COST_${t.sourceChainId}_${t.destinationChainId}_${t.messenger}`,n=this.receivedTransactionCache.get(e);if(n)return n;let a=await this.apiClient.getReceiveTransactionCost(t);return this.receivedTransactionCache.put(e,a),a}async getTransferStatus(t,e){return this.apiClient.getTransferStatus(t,e)}async getPoolInfoMap(t){return this.apiClient.getPoolInfoMap(t)}};var pi=55*1e3,_t=class{constructor(t){this.client=t;this.poolInfoCache=new Pn}async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(t,e){return this.client.getTransferStatus(t,e)}getReceiveTransactionCost(t){return this.client.getReceiveTransactionCost(t)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(t,e){return this.client.getGasBalance(t,e)}async getPoolInfoByKey(t){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let e=this.poolInfoCache.get(t);if(e)return e;{let n=await this.client.getPoolInfoMap(t);return this.poolInfoCache.putAll(n),n[et(t)]}}async refreshPoolInfo(t){let e;if(t)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),e=await this.client.getPoolInfoMap(t);else{let n=await this.client.getChainDetailsMapAndPoolInfoMap();e=await this.client.getPoolInfoMap(Jn(n.chainDetailsMap))}this.poolInfoCache.putAll(e)}cachePut(t,e){this.poolInfoCache.put(et(t),e)}},Pn=class{constructor(){this.cache=new _e({defaultTtl:pi})}putAll(t){for(let[e,n]of Object.entries(t))this.cache.put(e,n)}putAllIfNotExists(t){for(let[e,n]of Object.entries(t))this.cache.get(e)||this.cache.put(e,n)}put(t,e){this.cache.put(t,e)}get(t){let e=et(t);return this.cache.get(e)}};var Ia=O(require("tronweb")),xa=O(require("web3"));var Sn=require("big.js");async function G(i,t){return await i.getPoolInfoByKey({chainSymbol:t.chainSymbol,poolAddress:t.poolAddress})}function R(i){if((0,Sn.Big)(i).lte(0))throw new ut("Amount must be greater than zero")}function I(i,t,e){let n=(0,Sn.Big)(t).toFixed();if(n.split(".").length==2&&n.split(".")[1].length>e)throw new pt(i,n.split(".")[1].length,e)}async function Lt(i,t,e){return await Promise.race([i,new Promise((n,a)=>{setTimeout(()=>a(new $e(t)),e)})])}async function wn(i,t,e,n){if(e<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${e} was received.`);let a=0;for(;;)try{return await Lt(i(),t,n)}catch{if(++a>=e)throw new $e(t)}}async function qn(i,t,e,n=1.5,a=!1){let r=[],s=0;if(r.push(await i()),!t(r[r.length-1]))return r;let o=new Date(Date.now()+e*1e3).valueOf(),A=1e3,c=A;for(;Date.now()<o&&t(r[r.length-1]);)s++,a&&console.info(`Waiting ${A}ms before trying again (bringing the total wait time to ${c}ms so far, of total ${e*1e3}ms)`),await new Promise(m=>setTimeout(m,A)),A=A*n,new Date(Date.now()+A).valueOf()>o&&(A=o-Date.now(),a&&console.info(`was gonna wait too long; new waitTime: ${A}ms`)),c=A+c,r.push(await i(r[r.length-1])),a&&t(r[r.length-1])&&console.info(`${s}. Called ${i.name}; ${r.length} prev attempts. Most recent: ${JSON.stringify(r[r.length-1],null,2)}`);return r}var Kt=O(require("@project-serum/anchor")),xn=require("@solana/web3.js"),ga=require("big.js");var $n=[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];var ea=[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];var X=O(require("@project-serum/anchor")),K=require("@solana/web3.js");async function ue(i,t){return X.utils.token.associatedAddress({mint:t,owner:i})}async function Ue(i){let[t]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("config")],i);return t}async function ta(i,t){let[e]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("lock"),Uint8Array.from(i)],t);return e}async function ht(i,t){let[e]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([i])],t);return e}async function tt(i){let t=await Ue(i),[e]=await K.PublicKey.findProgramAddress([t.toBuffer()],i);return e}async function na(i,t){let[e]=await K.PublicKey.findProgramAddress([i.toBuffer()],t);return e}async function nt(i,t){let[e]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("token"),i.toBytes()],t);return e}async function aa(i,t,e){let[n]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([i]),t],e);return n}async function Cn(i,t){let[e]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([i])],t);return e}async function Bn(i,t){let[e]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([i])],t);return e}async function ia(i,t){let[e]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("sent_message"),i],t);return e}async function kn(i,t,e){let[n]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("user_deposit"),t.toBytes(),i.toBytes()],e);return n}async function ra(i,t){let[e]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("cctp_bridge"),i.toBytes()],t);return e}async function sa(i,t){let[e]=await K.PublicKey.findProgramAddress([X.utils.bytes.utf8.encode("token"),i.toBytes()],t);return e}function oa(i,t){let[e]=K.PublicKey.findProgramAddressSync([X.utils.bytes.utf8.encode("lock"),t.toBuffer()],i);return e}function Aa(i,t,e,n){let a=Le("message_transmitter",e),r=Le("token_messenger",n),s=Le("__event_authority",n),o=Le("token_minter",n),A=Le("local_token",n,[t]),c=Le("remote_token_messenger",n,[i.toString()]),m=Le("sender_authority",n);return{messageTransmitterAccount:a,tokenMessenger:r,tokenMessengerEventAuthority:s,tokenMinter:o,localToken:A,remoteTokenMessengerKey:c,authorityPda:m}}function Le(i,t,e=[]){let n=[Buffer.from(X.utils.bytes.utf8.encode(i))];for(let r of e)typeof r=="string"?n.push(Buffer.from(X.utils.bytes.utf8.encode(r))):Array.isArray(r)?n.push(Buffer.from(r)):Buffer.isBuffer(r)?n.push(r):n.push(r.toBuffer());return K.PublicKey.findProgramAddressSync(n,t)[0]}var ca=require("@project-serum/anchor"),Xt=require("@solana/web3.js");function Ne(i,t){let e=new Xt.Connection(i,"confirmed"),n=new Xt.PublicKey(t);return new ca.AnchorProvider(e,{publicKey:n},{preflightCommitment:"confirmed",commitment:"confirmed"})}var le=class{};var ma=require("@solana/web3.js"),Me=require("big.js"),Mn=O(require("randombytes")),ua=require("stellar-sdk"),la=O(require("tronweb"));function Ie(i,t,e){let n;switch(t){case"EVM":{n=fi(i);break}case"SOLANA":{n=new ma.PublicKey(i).toBuffer();break}case"TRX":{n=yi(i);break}case"SRB":{n=new ua.Address(i).toBuffer();break}}switch(e){case"EVM":return"0x"+n.toString("hex");case"SOLANA":return Array.from(n);case"TRX":return n.toJSON().data;case"SRB":return n.toJSON().data}}function pa(i){return Buffer.from(i.replace(/^0x/i,""),"hex")}function fi(i){let e=pa(i);return Buffer.concat([Buffer.alloc(32-e.length,0),e],32)}function yi(i){let t=Tt(i),e=pa(t);return hi(e,32)}function Tt(i){return Buffer.from(la.utils.crypto.decodeBase58Address(i)).toString("hex").replace(/^41/,"0x")}function hi(i,t){if(i.length>=t)return i;let e=Buffer.alloc(t,0);return i.copy(e,t-i.length),e}function at(){return(0,Mn.default)(32)}function vn(){let i=(0,Mn.default)(32).readBigInt64BE();return i<0?i*-1n:i}function Oe(i,t){let e={},n=t.sourceToken;return e.amount=B(t.amount,n.decimals).toFixed(),e.contractAddress=n.bridgeAddress,e.fromAccountAddress=t.fromAccountAddress,e.fromTokenAddress=Ie(n.tokenAddress,i,i),e.toAccountAddress=t.toAccountAddress,e.toTokenAddress=Ie(t.destinationToken.tokenAddress,i,i),e.minimumReceiveAmount=t.minimumReceiveAmount?B(t.minimumReceiveAmount,t.destinationToken.decimals).toFixed():"0",e}async function xe(i,t,e){let n={};n.fromChainId=t.sourceToken.allbridgeChainId,n.fromChainSymbol=t.sourceToken.chainSymbol;let a=z[t.destinationToken.chainSymbol].chainType;n.fromTokenAddress=t.sourceToken.tokenAddress,n.toChainId=t.destinationToken.allbridgeChainId,n.toTokenAddress=t.destinationToken.tokenAddress,t.gasFeePaymentMethod==="stablecoin"?n.gasFeePaymentMethod="stablecoin":n.gasFeePaymentMethod="native";let r=t.sourceToken;if(t.messenger===3){if(!r.cctpAddress||!t.destinationToken.cctpAddress)throw new re("Such route does not support CCTP protocol");n.contractAddress=r.cctpAddress}else n.contractAddress=r.bridgeAddress;n.messenger=t.messenger,n.fromAccountAddress=t.fromAccountAddress,n.amount=B(t.amount,r.decimals).toFixed();let{fee:s,feeFormat:o}=t;if(!s){let u=(await Rn(n.fromChainId,t.sourceToken.chainType,n.toChainId,r.decimals,n.messenger,e))[n.gasFeePaymentMethod];if(!u)throw new je;s=u.int,o="int"}if(o=="float")switch(n.gasFeePaymentMethod){case"native":n.fee=B(s,V[r.chainType]).toFixed(0);break;case"stablecoin":n.fee=B(s,r.decimals).toFixed(0);break}else n.fee=s;let{extraGas:A,extraGasFormat:c}=t;if(A&&+A>0){if(c=="float")switch(n.gasFeePaymentMethod){case"native":n.extraGas=B(A,V[r.chainType]).toFixed(0);break;case"stablecoin":n.extraGas=B(A,r.decimals).toFixed(0);break}else n.extraGas=A;await bi(n.extraGas,n.gasFeePaymentMethod,r,t.destinationToken,e)}return n.fromTokenAddress=Ie(n.fromTokenAddress,i,i),n.toAccountAddress=Ie(t.toAccountAddress,a,i),n.toTokenAddress=Ie(n.toTokenAddress,a,i),n.gasFeePaymentMethod=="stablecoin"&&Ti(n.amount,r.decimals,n.fee,n.extraGas),n}function Ti(i,t,e,n){let a=(0,Me.Big)(i).minus(e).minus(n??0);if(a.lte(0))throw new Ve(`Amount not enough to pay fee, ${b((0,Me.Big)(a).minus(1).neg(),t).toFixed()} stables is missing`)}async function Rn(i,t,e,n,a,r){let s=await r.getReceiveTransactionCost({sourceChainId:i,destinationChainId:e,messenger:a}),o={native:{int:s.fee,float:b(s.fee,V[t]).toFixed()}};if(s.sourceNativeTokenPrice){let A=Ee(new Me.Big(s.fee).mul(s.sourceNativeTokenPrice),V[t],n).toFixed(0,Me.Big.roundUp);o.stablecoin={int:A,float:b(A,n).toFixed()}}return o}async function bi(i,t,e,n,a){let s=(await In(e,n,a)).extraGasMax[t];if(!s)throw new je(`Impossible to pay extra gas by '${t}' payment method`);let o=s.int;if((0,Me.Big)(i).gt(o))throw new lt(`Extra gas ${i} in int format, exceeded limit ${o} for '${t}' payment method`)}async function In(i,t,e){let n={},a=await e.getReceiveTransactionCost({sourceChainId:i.allbridgeChainId,destinationChainId:t.allbridgeChainId,messenger:1}),r=t.txCostAmount.maxAmount,s=b(r,V[t.chainType]).toFixed(),o=(0,Me.Big)(s).div(a.exchangeRate).toFixed(V[i.chainType],Me.Big.roundDown),A=B(o,V[i.chainType]).toFixed(0);if(n.native={int:A,float:o},a.sourceNativeTokenPrice){let c=(0,Me.Big)(o).mul(a.sourceNativeTokenPrice).toFixed(i.decimals,Me.Big.roundDown);n.stablecoin={int:B(c,i.decimals).toFixed(0),float:c}}return{extraGasMax:n,destinationChain:{gasAmountMax:{int:r,float:s},swap:{int:t.txCostAmount.swap,float:b(t.txCostAmount.swap,V[t.chainType]).toFixed()},transfer:{int:t.txCostAmount.transfer,float:b(t.txCostAmount.transfer,V[t.chainType]).toFixed()}},exchangeRate:a.exchangeRate,sourceNativeTokenPrice:a.sourceNativeTokenPrice}}function da(i){return i.sourceToken.chainSymbol!==i.destinationToken.chainSymbol}var Pt=class extends le{constructor(e,n,a){super();this.web3=e;this.api=n;this.nodeRpcUrlsConfig=a;this.chainType="EVM"}async send(e){let n=await this.buildRawTransactionSend(e);return this.sendRawTransaction(n)}async buildRawTransactionSwap(e){let n=Oe(this.chainType,e);return await this.buildRawTransactionSwapFromParams(n)}async buildRawTransactionSwapFromParams(e){let{amount:n,contractAddress:a,fromAccountAddress:r,fromTokenAddress:s,toAccountAddress:o,toTokenAddress:A,minimumReceiveAmount:c}=e,u=this.getBridgeContract(a).methods.swap(n,s,A,o,c);return Promise.resolve({from:r,to:a,data:u.encodeABI()})}async buildRawTransactionSend(e){let n=await xe(this.chainType,e,this.api),{amount:a,contractAddress:r,fromAccountAddress:s,fromTokenAddress:o,toChainId:A,toAccountAddress:c,toTokenAddress:m,messenger:u,fee:g,gasFeePaymentMethod:f,extraGas:y}=n,h="0x"+at().toString("hex"),d,p,P=g;if(y&&(P=(0,ga.Big)(P).plus(y).toFixed()),u===3){let T=await this.buildRawTransactionCctpSend(e,n,P);d=T.sendMethod,p=T.value}else{let T=this.getBridgeContract(r);f==="stablecoin"?(d=T.methods.swapAndBridge(o,a,c,A,m,h,u,P),p="0"):(d=T.methods.swapAndBridge(o,a,c,A,m,h,u,0),p=P)}return Promise.resolve({from:s,to:r,value:p,data:d.encodeABI()})}async buildRawTransactionCctpSend(e,n,a){let{amount:r,contractAddress:s,toChainId:o,toAccountAddress:A,gasFeePaymentMethod:c}=n,m=this.getContract(ea,s),u,g;if(e.destinationToken.chainType==="SOLANA"){let f,y=new xn.PublicKey(e.toAccountAddress),h=new xn.PublicKey(e.destinationToken.tokenAddress),d=await ue(y,h),p=Ne(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),e.toAccountAddress);Kt.setProvider(p);let P=await Kt.Spl.token(p).account.token.fetchNullable(d);if(P?.authority.equals(y))f=Ie(d.toBase58(),"SOLANA",this.chainType);else{let T=await p.connection.getTokenAccountsByOwner(y,{mint:h});if(T.value.length===0&&!P)f=Ie(d.toBase58(),"SOLANA",this.chainType);else if(T.value.length>0)f=Ie(T.value[0].pubkey.toBase58(),"SOLANA",this.chainType);else throw new k("Associated account has wrong owner")}c==="stablecoin"?(u=m.methods.bridgeWithWalletAddress(r,f,A,o,a),g="0"):(u=m.methods.bridgeWithWalletAddress(r,f,A,o,0),g=a)}else c==="stablecoin"?(u=m.methods.bridge(r,A,o,a),g="0"):(u=m.methods.bridge(r,A,o,0),g=a);return{sendMethod:u,value:g}}async sendRawTransaction(e){let n=await this.web3.eth.estimateGas(e),a={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:r}=await this.web3.eth.sendTransaction({...e,gas:n,...a});return{txId:r}}getContract(e,n){return new this.web3.eth.Contract(e,n)}getBridgeContract(e){return this.getContract($n,e)}};var Qt=class{constructor(t,e,n,a){this.api=t;this.nodeRpcUrlsConfig=e;this.params=n;this.tokenService=a}async approve(t,e){let n,a;e?(n=t,a=e):a=t;let r=St(a.token,a.messenger);return this.tokenService.buildRawTransactionApprove({...a,spender:r},n)}async send(t,e){return R(t.amount),I("amount",t.amount,t.sourceToken.decimals),da(t)?Yt(t.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,e).buildRawTransactionSend(t):Yt(t.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,e).buildRawTransactionSwap(t)}};var x=require("@project-serum/anchor"),C=require("@solana/web3.js"),De=require("big.js");var wt={version:"0.1.0",name:"bridge",instructions:[{name:"initialize",accounts:[{name:"admin",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"initializePool",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"token",isMut:!0,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializePoolArgs"}}]},{name:"initDepositAccount",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"deposit",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdraw",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amountLp",type:"u64"}]},{name:"swapAndBridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"messenger",isMut:!1,isSigner:!1},{name:"messengerConfig",isMut:!0,isSigner:!1},{name:"sentMessageAccount",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swapAndBridgeWormhole",accounts:[{name:"user",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"wormholeMessenger",isMut:!1,isSigner:!1},{name:"wormholeMessengerConfig",isMut:!0,isSigner:!1},{name:"wormholeProgram",isMut:!1,isSigner:!1},{name:"bridge",isMut:!0,isSigner:!1},{name:"message",isMut:!0,isSigner:!0},{name:"sequence",isMut:!0,isSigner:!1},{name:"feeCollector",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"clock",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swap",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"sendMint",isMut:!1,isSigner:!1},{name:"receiveMint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"sendPool",isMut:!0,isSigner:!1},{name:"receivePool",isMut:!0,isSigner:!1},{name:"sendBridgeToken",isMut:!0,isSigner:!1},{name:"receiveBridgeToken",isMut:!0,isSigner:!1},{name:"sendUserToken",isMut:!0,isSigner:!1},{name:"receiveUserToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"},{name:"receiveAmountMin",type:"u64"}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"receiveAndSwap",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"receiveAndSwapWormhole",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"claimRewards",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setAdmin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAdmin",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"startBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"stopBridge",accounts:[{name:"stopAuthority",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"setRebalancer",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"rebalancer",isMut:!1,isSigner:!1}],args:[]},{name:"setStopAuthority",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAuthority",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"setAllbridgeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setWormholeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setPoolFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setBalanceRatioMin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"balanceRatioMinBp",type:"u16"}]},{name:"setPoolAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"addOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"removeOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"adjustTotalLpAmount",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[]}],accounts:[{name:"chainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"config",type:{kind:"struct",fields:[{name:"admin",type:"publicKey"},{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"rebalancer",type:"publicKey"},{name:"stopAuthority",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"canSwap",type:"bool"},{name:"canDeposit",type:"bool"},{name:"canWithdraw",type:"bool"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"sentTokenAddress",type:"publicKey"},{name:"amount",type:"u64"},{name:"vusdAmount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:"Messenger"}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"otherBridgeToken",type:{kind:"struct",fields:[]}},{name:"pool",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"tokenBalance",type:"u64"},{name:"vUsdBalance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"totalLpAmount",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"accRewardPerShareP",type:"u128"},{name:"adminFeeAmount",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"vUsdAmount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"userDeposit",type:{kind:"struct",fields:[{name:"userAddress",type:"publicKey"},{name:"mint",type:"publicKey"},{name:"lpAmount",type:"u64"},{name:"rewardDebt",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"vusdAmount",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"publicKey"},{name:"sourceChainId",type:"u8"},{name:"receiveToken",type:"publicKey"},{name:"messenger",type:{defined:"Messenger"}},{name:"hash",type:{array:["u8",32]}},{name:"receiveAmountMin",type:"u64"}]}},{name:"RewardError",type:{kind:"enum",variants:[{name:"FeeTooHigh"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}}],errors:[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"PoolInfo overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"}]};var fa={version:"0.1.0",name:"cctp_bridge",instructions:[{name:"initialize",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"bridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"messageSentEventData",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!0,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"cctpMessenger",isMut:!1,isSigner:!1},{name:"messageTransmitterProgram",isMut:!1,isSigner:!1},{name:"messageTransmitterAccount",isMut:!0,isSigner:!1},{name:"tokenMessenger",isMut:!1,isSigner:!1},{name:"tokenMinter",isMut:!1,isSigner:!1},{name:"localToken",isMut:!0,isSigner:!1},{name:"remoteTokenMessengerKey",isMut:!1,isSigner:!1},{name:"authorityPda",isMut:!1,isSigner:!1},{name:"eventAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"setAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setCctpTokenMessengerMinter",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]}],accounts:[{name:"cctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"admin",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"adminFeeShareBp",type:"u64"},{name:"adminFeeAmount",type:"u64"}]}},{name:"chainBridge",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"amount",type:"u64"},{name:"adminFee",type:"u64"},{name:"relayerFee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"slot",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gasOracleProgramId",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"}]}}],errors:[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}]};var ya=require("@project-serum/anchor"),ha=O(require("big.js")),Ct=O(require("web3"));async function it(i,t){return await ya.Spl.token(t).account.token.fetch(i)}async function Ta(i,t,e){let n=await t.account.pool.fetch(e),a=n.decimals,r=(0,ha.default)(n.feeShareBp.toString()).div(1e4).toFixed(),s={aValue:n.a.toString(),dValue:n.d.toString(),totalLpAmount:n.totalLpAmount.toString(),tokenBalance:n.tokenBalance.toString(),vUsdBalance:n.vUsdBalance.toString(),accRewardPerShareP:n.accRewardPerShareP.toString()};return Ce(i,{decimals:a,feeShare:r},s)}function ba(i){let t=i.amount,e="0x"+i.recipient.toString("hex"),n=i.sourceChainId,a=i.destinationChainId,r="0x"+i.receiveToken.toString("hex"),s="0x"+i.nonce.toString("hex"),o=1,A="0x"+i.chainBridge.toString("hex"),c=Ct.default.utils.encodePacked({t:"uint256",v:t},{t:"bytes32",v:e},{t:"uint256",v:n},{t:"bytes32",v:r},{t:"uint256",v:s},{t:"uint8",v:o});if(!c)throw new k("message cannot be undefined");let m=Ct.default.utils.keccak256(Buffer.from(c.replace("0x",""),"hex")),u=Buffer.from(m.replace("0x",""),"hex");u[0]=n,u[1]=a;let g=Ct.default.utils.encodePacked({t:"bytes32",v:"0x"+u.toString("hex")},{t:"bytes32",v:A});if(!g)throw new Ge("messageWithSigner cannot be undefined");let f=Ct.default.utils.keccak256(Buffer.from(g.replace("0x",""),"hex")),y=Buffer.from(f.replace("0x",""),"hex");return y[0]=u[0],y[1]=u[1],y}var ne=require("@solana/web3.js"),Pa=require("big.js");var Dn=require("@solana/web3.js");async function Ke(i,t){return await Promise.all(i.message.addressTableLookups.map(async e=>new Dn.AddressLookupTableAccount({key:e.accountKey,state:Dn.AddressLookupTableAccount.deserialize(await t.getAccountInfo(e.accountKey).then(n=>{if(!n)throw new k("Cannot get AccountInfo");return n.data}))})))}var Jt="AUTO";async function rt(i,t,e){let n=new ne.Connection(e,"confirmed"),a=(await n.simulateTransaction(i)).value.unitsConsumed;await wa(i.instructions,a,t,n)}async function Sa(i,t,e){let n=new ne.Connection(e,"confirmed"),a=await Ke(i,n),r=ne.TransactionMessage.decompile(i.message,{addressLookupTableAccounts:a});if(i.serialize().length>1232)throw new gt;await wa(r.instructions,769230,t,n),i.message=r.compileToV0Message(a)}async function wa(i,t,e,n){if(t>0){let a=Pi(t,i);if(e?.solana){let r=e.solana;if(r===Jt)await Fn(i,n);else if("pricePerUnitInMicroLamports"in r)await Fn(i,n,r.pricePerUnitInMicroLamports);else{let s=(0,Pa.Big)(r.extraFeeInLamports).div(a).mul(ft(6)).toFixed(0);await Fn(i,n,s)}}}}function Pi(i,t){let e=t.findIndex(r=>r.programId.equals(ne.ComputeBudgetProgram.programId)&&ne.ComputeBudgetInstruction.decodeInstructionType(r)==="SetComputeUnitLimit"),n=Number((i*1.3).toFixed(0)),a=ne.ComputeBudgetProgram.setComputeUnitLimit({units:n});return e>=0?t[e]=a:t.push(a),n.toString()}async function Fn(i,t,e){let n=i.findIndex(s=>s.programId.equals(ne.ComputeBudgetProgram.programId)&&ne.ComputeBudgetInstruction.decodeInstructionType(s)==="SetComputeUnitPrice"),a=BigInt(e||await Si(t)),r=ne.ComputeBudgetProgram.setComputeUnitPrice({microLamports:a});return n>=0?i[n]=r:i.push(r),a.toString()}async function Si(i){let t=await i.getRecentPrioritizationFees(),e=0;for(let n of t)e+=n.prioritizationFee;return(e/t.length).toFixed(0)}var Ca=require("@solana/spl-token"),Qe=require("@solana/web3.js"),st=O(require("axios"));var Ht=class{constructor(t){this.connection=new Qe.Connection(t)}async getJupiterSwapTx(t,e,n){let a;try{a=await st.default.get(`https://quote-api.jup.ag/v6/quote?inputMint=${e}
|
|
2
2
|
&outputMint=${Ca.NATIVE_MINT.toString()}
|
|
3
3
|
&amount=${n}
|
|
4
4
|
&slippageBps=100
|
|
5
|
-
&onlyDirectRoutes=true`)}catch(A){throw A instanceof st.AxiosError&&A.response&&A.response.data&&A.response.data.error?new Y(A.response.data.error):new Y("Cannot get route")}let r;try{r=await st.default.post("https://quote-api.jup.ag/v6/swap",JSON.stringify({quoteResponse:a.data,userPublicKey:e,wrapAndUnwrapSol:!0}))}catch(A){throw A instanceof st.AxiosError&&A.response&&A.response.data&&A.response.data.error?new Y(A.response.data.error):new Y("Cannot get swap transaction")}let s;if(r?.data?.swapTransaction)s=r.data.swapTransaction;else throw new Y("Cannot get swap transaction");let o=Buffer.from(s,"base64");return{tx:Ye.VersionedTransaction.deserialize(o)}}async amendJupiterWithSdkTx(e,t){try{let n=await Qe(e,this.connection),a=await Qe(t,this.connection),r=Ye.TransactionMessage.decompile(e.message,{addressLookupTableAccounts:n}),s=Ye.TransactionMessage.decompile(t.message,{addressLookupTableAccounts:a});return s.instructions.shift(),r.instructions.push(...s.instructions),n.push(...a),e.message=r.compileToV0Message(n),t.message.header.numRequiredSignatures===2&&e.signatures.length===1&&e.signatures.push(t.signatures[0]),e}catch(n){throw n instanceof Error&&n.message?new Y(`Some error occurred during creation final swap and bridge transaction. ${n.message}`):new Y("Some error occurred during creation final swap and bridge transaction")}}};var Wn=1e6,zt=class extends le{constructor(t,n,a){super();this.solanaRpcUrl=t;this.params=n;this.api=a;this.chainType="SOLANA";this.jupiterService=new Ht(t)}async buildRawTransactionSwap(t){let n=Oe(this.chainType,t);return await this.buildSwapTransaction(n,t.sourceToken.poolAddress,t.destinationToken.poolAddress,t.txFeeParams)}async buildSwapTransaction(t,n,a,r){let{fromAccountAddress:s,amount:o,contractAddress:A,fromTokenAddress:c,toTokenAddress:m,toAccountAddress:u,minimumReceiveAmount:g}=t,f=s,y=A,h=c,d=m,p=a,P=u,T=new C.PublicKey(f),_=Ne(this.solanaRpcUrl,T.toString()),v=new x.Program(wt,y,_),S=await tt(v.programId),q=await Ue(v.programId),U=new C.PublicKey(h),Te=await nt(U,v.programId),be=new C.PublicKey(n),Re=await ue(T,U),oe=new C.PublicKey(P),H=new C.PublicKey(d),ie=await nt(H,v.programId),Ae=new C.PublicKey(p),$=await ue(oe,H),Pe=[x.web3.ComputeBudgetProgram.setComputeUnitLimit({units:Wn})];try{await it($,_)}catch{let Ja=await x.Spl.associatedToken(_).methods.create().accounts({mint:H,owner:oe,associatedAccount:$}).instruction();Pe.push(Ja)}let Se=await v.methods.swap(new x.BN(o),new x.BN(g||0)).accounts({payer:T,config:q,bridgeAuthority:S,user:T,sendBridgeToken:Te,sendMint:U,sendPool:be,sendUserToken:Re,receiveBridgeToken:ie,receiveMint:H,receivePool:Ae,receiveUserToken:$}).preInstructions(Pe).transaction(),ce=_.connection;return Se.recentBlockhash=(await ce.getLatestBlockhash()).blockhash,Se.feePayer=T,await rt(Se,r,this.solanaRpcUrl),await this.convertToVersionedTransaction(Se,ce)}async buildRawTransactionSend(t){let n=await xe(this.chainType,t,this.api),a=this.addPoolAddress(t,n),r=a.gasFeePaymentMethod=="stablecoin",s;if(r)try{let c=(0,De.Big)(a.fee);a.extraGas&&(c=c.plus(a.extraGas)),a=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(t.sourceToken.decimals,a);let{tx:m}=await this.jupiterService.getJupiterSwapTx(t.fromAccountAddress,t.sourceToken.tokenAddress,c.toFixed(0));if(s=m,a.amount=(0,De.Big)(a.amount).minus(c).toFixed(0),(0,De.Big)(a.amount).lte(0))throw new Ge(`Amount not enough to pay fee, ${b((0,De.Big)(a.amount).minus(1).neg(),t.sourceToken.decimals).toFixed()} stables is missing`)}catch(c){throw c instanceof F?c:c instanceof Error&&c.message?new Y(`Some error occurred during creation Jupiter swap transaction. ${c.message}`):new Y("Some error occurred during creation Jupiter swap transaction")}let o,A;switch(n.messenger){case 1:{let c=await this.prepareSwapAndBridgeData(a);o=await this.buildSwapAndBridgeAllbridgeTransaction(c);break}case 2:{let c=await this.prepareSwapAndBridgeData(a),{transaction:m,messageAccount:u}=await this.buildSwapAndBridgeWormholeTransaction(c);o=m,A=u;break}case 3:{let c=await this.prepareSwapAndBridgeCctpData(a),{transaction:m,messageSentEventDataKeypair:u}=await this.buildSwapAndBridgeCctpTransaction(t.destinationToken.chainSymbol,c);o=m,A=u;break}}if(r){if(!s)throw new Y("Swap tx is absent");o=await this.jupiterService.amendJupiterWithSdkTx(s,o)}return await Sa(o,t.txFeeParams,this.solanaRpcUrl),A&&o.sign([A]),o}addPoolAddress(t,n){return{...n,poolAddress:t.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(t,n){if(n.gasFeePaymentMethod=="stablecoin"){let a=(await this.api.getReceiveTransactionCost({sourceChainId:n.fromChainId,destinationChainId:n.toChainId,messenger:n.messenger})).sourceNativeTokenPrice;n.fee=(0,De.Big)(n.fee).div(a).mul((0,De.Big)(10).pow(V.SOLANA-t)).toFixed(0),n.extraGas&&(n.extraGas=(0,De.Big)(n.extraGas).div(a).mul((0,De.Big)(10).pow(V.SOLANA-t)).toFixed(0)),n.gasFeePaymentMethod="native"}return n}getExtraGasInstruction(t,n,a){return x.web3.SystemProgram.transfer({fromPubkey:n,toPubkey:a,lamports:+t})}async prepareSwapAndBridgeData(t){let{amount:n,contractAddress:a,fromChainId:r,fromAccountAddress:s,fromTokenAddress:o,toChainId:A,toAccountAddress:c,toTokenAddress:m,poolAddress:u,extraGas:g}=t,f=o,y=s,h=A,d=m,p=c,P=a,T=r,_=Ne(this.solanaRpcUrl,y),v=new x.Program(wt,P,_),S=Array.from(at()),q=new C.PublicKey(u),U=await Ta(n,v,q),Te=await ta(S,v.programId),be=await tt(v.programId),Re=await ue(new C.PublicKey(y),new C.PublicKey(f)),oe=await nt(new C.PublicKey(f),v.programId),H=await Cn(h,v.programId),ie=await aa(h,Buffer.from(d),v.programId),Ae=await Ue(v.programId),$=await v.account.config.fetch(Ae),Pe=await ht(h,$.gasOracleProgramId),Se=await ht(T,$.gasOracleProgramId),ce=ba({amount:U,recipient:Buffer.from(p),nonce:Buffer.from(S),receiveToken:Buffer.from(d),destinationChainId:h,sourceChainId:T,chainBridge:(await tt(v.programId)).toBuffer()}),w={};return w.bridge=v,w.amount=new x.BN(n),w.vusdAmount=new x.BN(U),w.nonce=S,w.recipient=Array.from(p),w.receiveToken=Array.from(d),w.poolAccount=q,w.lockAccount=Te,w.bridgeAuthority=be,w.userToken=Re,w.bridgeTokenAccount=oe,w.chainBridgeAccount=H,w.otherBridgeTokenAccount=ie,w.userAccount=new C.PublicKey(y),w.destinationChainId=h,w.mint=new C.PublicKey(f),w.config=Ae,w.configAccountInfo=$,w.gasPrice=Pe,w.thisGasPrice=Se,w.message=ce,g&&(w.extraGasInstruction=this.getExtraGasInstruction(g,w.userAccount,Ae)),w}async buildSwapAndBridgeAllbridgeTransaction(t){let{bridge:n,vusdAmount:a,nonce:r,recipient:s,receiveToken:o,poolAccount:A,lockAccount:c,bridgeAuthority:m,userToken:u,bridgeTokenAccount:g,chainBridgeAccount:f,otherBridgeTokenAccount:y,userAccount:h,destinationChainId:d,mint:p,config:P,configAccountInfo:T,gasPrice:_,thisGasPrice:v,message:S,extraGasInstruction:q}=t,U=T.allbridgeMessengerProgramId,Te=await Bn(d,U),be=await Ue(U),Re=await ia(S,U),oe=[];q&&oe.push(q);let H=await n.methods.swapAndBridge({vusdAmount:a,nonce:r,destinationChainId:d,recipient:s,receiveToken:o}).accounts({mint:p,user:h,config:P,lock:c,pool:A,gasPrice:_,thisGasPrice:v,bridgeAuthority:m,userToken:u,bridgeToken:g,chainBridge:f,messenger:U,messengerGasUsage:Te,messengerConfig:be,sentMessageAccount:Re,otherBridgeToken:y}).preInstructions([x.web3.ComputeBudgetProgram.setComputeUnitLimit({units:Wn})]).postInstructions(oe).transaction(),ie=Ne(this.solanaRpcUrl,h.toString()).connection;return H.recentBlockhash=(await ie.getLatestBlockhash()).blockhash,H.feePayer=h,await this.convertToVersionedTransaction(H,ie)}async convertToVersionedTransaction(t,n){let a=await n.getAddressLookupTable(new C.PublicKey(this.params.solanaLookUpTable)).then(s=>s.value);if(!a)throw new k("Cannot find allbridgeLookupTableAccount");let r=new x.web3.TransactionMessage({payerKey:t.feePayer,recentBlockhash:t.recentBlockhash,instructions:t.instructions}).compileToV0Message([a]);return new x.web3.VersionedTransaction(r)}async buildSwapAndBridgeWormholeTransaction(t){let{bridge:n,vusdAmount:a,nonce:r,recipient:s,receiveToken:o,poolAccount:A,lockAccount:c,bridgeAuthority:m,userToken:u,bridgeTokenAccount:g,chainBridgeAccount:f,otherBridgeTokenAccount:y,userAccount:h,destinationChainId:d,mint:p,config:P,configAccountInfo:T,gasPrice:_,thisGasPrice:v,message:S,extraGasInstruction:q}=t,U=this.params.wormholeMessengerProgramId,[Te]=C.PublicKey.findProgramAddressSync([Buffer.from("Bridge")],new C.PublicKey(U)),[be]=C.PublicKey.findProgramAddressSync([Buffer.from("fee_collector")],new C.PublicKey(U)),[Re]=C.PublicKey.findProgramAddressSync([Buffer.from("Sequence"),m.toBuffer()],new C.PublicKey(U)),oe=await Bn(d,T.wormholeMessengerProgramId),H=await Ue(T.wormholeMessengerProgramId),ie=C.Keypair.generate(),Ae=Ne(this.solanaRpcUrl,h.toString()),$=await Ae.connection.getAccountInfo(Te);if($==null)throw new k("Cannot fetch wormhole bridge account info");let Pe=new x.BN($.data.slice(16,24),"le").toString(),Se=C.SystemProgram.transfer({fromPubkey:h,toPubkey:be,lamports:+Pe}),ce=[];q&&ce.push(q);let w={mint:p,user:h,config:P,lock:c,pool:A,gasPrice:_,thisGasPrice:v,bridgeAuthority:m,userToken:u,bridgeToken:g,chainBridge:f,otherBridgeToken:y,messengerGasUsage:oe,wormholeProgram:U,bridge:Te,message:ie.publicKey,wormholeMessenger:T.wormholeMessengerProgramId,sequence:Re,feeCollector:be,wormholeMessengerConfig:H,clock:x.web3.SYSVAR_CLOCK_PUBKEY},Et=await n.methods.swapAndBridgeWormhole({vusdAmount:a,nonce:r,destinationChainId:d,recipient:s,receiveToken:o}).accounts(w).preInstructions([x.web3.ComputeBudgetProgram.setComputeUnitLimit({units:Wn}),Se]).postInstructions(ce).signers([ie]).transaction();return Et.recentBlockhash=(await Ae.connection.getLatestBlockhash()).blockhash,Et.feePayer=h,{transaction:await this.convertToVersionedTransaction(Et,Ae.connection),messageAccount:ie}}async prepareSwapAndBridgeCctpData(t){let{contractAddress:n,amount:a,fromAccountAddress:r,fromTokenAddress:s,toChainId:o,toAccountAddress:A,toTokenAddress:c,extraGas:m}=t,u=n;if(!u)throw new re("Such route does not support CCTP protocol");let g=4,f=r,y=c,h=A,d=Ne(this.solanaRpcUrl,f),p=new x.Program(fa,u,d),P=new C.PublicKey(s),T=await ra(P,p.programId),_=new C.PublicKey(f),v=await p.account.cctpBridge.fetch(T),S={};return S.cctpBridge=p,S.cctpBridgeAccount=T,S.cctpAddressAccount=new C.PublicKey(u),S.amount=new x.BN(a),S.recipient=Array.from(h),S.receiveToken=Array.from(y),S.userToken=await ue(_,P),S.bridgeAuthority=await na(T,p.programId),S.bridgeTokenAccount=await sa(P,p.programId),S.chainBridgeAccount=await Cn(o,p.programId),S.userAccount=_,S.destinationChainId=o,S.mint=P,S.gasPrice=await ht(o,v.gasOracleProgramId),S.thisGasPrice=await ht(g,v.gasOracleProgramId),S.provider=d,m&&(S.extraGasInstruction=this.getExtraGasInstruction(m,S.userAccount,T)),S}async buildSwapAndBridgeCctpTransaction(t,n){let{cctpBridge:a,cctpBridgeAccount:r,amount:s,recipient:o,receiveToken:A,bridgeAuthority:c,userToken:m,bridgeTokenAccount:u,chainBridgeAccount:g,userAccount:f,destinationChainId:y,mint:h,gasPrice:d,thisGasPrice:p,extraGasInstruction:P,provider:T}=n,_=this.params.cctpParams.cctpDomains[t],v=this.params.cctpParams.cctpTransmitterProgramId,S=this.params.cctpParams.cctpTokenMessengerMinter;if(_==null||!v||!S)throw new k("CCTP is not configured");let q=new C.PublicKey(v),U=new C.PublicKey(S),{messageTransmitterAccount:Te,tokenMessenger:be,tokenMessengerEventAuthority:Re,tokenMinter:oe,localToken:H,remoteTokenMessengerKey:ie,authorityPda:Ae}=Aa(_,h,q,U),$=[];P&&$.push(P);let Pe=C.Keypair.generate(),Se=oa(a.programId,Pe.publicKey),ce=await a.methods.bridge({amount:s,destinationChainId:y,recipient:o,receiveToken:A}).accounts({mint:h,user:f,cctpBridge:r,messageSentEventData:Pe.publicKey,lock:Se,cctpMessenger:U,messageTransmitterProgram:q,messageTransmitterAccount:Te,tokenMessenger:be,tokenMinter:oe,localToken:H,remoteTokenMessengerKey:ie,authorityPda:Ae,eventAuthority:Re,bridgeToken:u,gasPrice:d,thisGasPrice:p,chainBridge:g,userToken:m,bridgeAuthority:c}).preInstructions([x.web3.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions($).transaction(),w=T.connection;return ce.recentBlockhash=(await w.getLatestBlockhash()).blockhash,ce.feePayer=f,{transaction:await this.convertToVersionedTransaction(ce,w),messageSentEventDataKeypair:Pe}}send(t){throw new J}};var ka=require("big.js"),jt=require("stellar-sdk");var Je=require("stellar-sdk");var Q=require("stellar-sdk");var pe=class{constructor(e){this.value=e}unwrapErr(){throw new Error("No error")}unwrap(){return this.value}isOk(){return!0}isErr(){return!this.isOk()}},se=class{constructor(e){this.error=e}unwrapErr(){return this.error}unwrap(){throw new Error(this.error.message)}isOk(){return!1}isErr(){return!this.isOk()}},Ci=/Error\(Contract, #(\d+)\)/,Bi="GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF",W=class i{constructor(e){this.options=e;this.simulate=async()=>(this.simulation=await this.server.simulateTransaction(this.raw),Q.SorobanRpc.Api.isSimulationSuccess(this.simulation)&&(this.raw=Q.SorobanRpc.assembleTransaction(this.raw,this.simulation).build()),this);this.getAccount=()=>new Q.Account(Bi,"0");this.server=new Q.SorobanRpc.Server(this.options.rpcUrl,{allowHttp:this.options.rpcUrl.startsWith("http://")})}static async fromSimulation(e){let t=new i(e),n=new Q.Contract(e.contractId);return t.raw=new Q.TransactionBuilder(t.getAccount(),{fee:e.fee?.toString(10)??Q.BASE_FEE,networkPassphrase:e.networkPassphrase}).addOperation(n.call(e.method,...e.args??[])).setTimeout(Q.TimeoutInfinite).build(),await t.simulate()}get simulationData(){if(this.simulationResult&&this.simulationTransactionData)return{result:this.simulationResult,transactionData:this.simulationTransactionData};let e=this.simulation;if(Q.SorobanRpc.Api.isSimulationError(e))throw new Error(`Transaction simulation failed: "${e.error}"`);if(!e.result)throw new Error(`Expected an invocation simulation, but got no 'result' field. Simulation: ${JSON.stringify(e,null,2)}`);return this.simulationResult=e.result,this.simulationTransactionData=e.transactionData.build(),{result:this.simulationResult,transactionData:this.simulationTransactionData}}get result(){try{return this.options.parseResultXdr(this.simulationData.result.retval)}catch(e){let t=this.parseError(e.toString());if(t)return t;throw e}}parseError(e){if(!this.options.errorTypes)return;let t=e.match(Ci);if(!t)return;let n=parseInt(t[1],10),a=this.options.errorTypes[n];if(a.message)return new se(a)}};var Z=require("stellar-sdk");var Fe=class i{constructor(e){this.options=e;this.simulate=async()=>(this.simulation=await this.server.simulateTransaction(this.raw),Z.SorobanRpc.Api.isSimulationSuccess(this.simulation)&&(this.raw=Z.SorobanRpc.assembleTransaction(this.raw,this.simulation).build()),this);this.server=new Z.SorobanRpc.Server(this.options.rpcUrl,{allowHttp:this.options.rpcUrl.startsWith("http://")})}static async xdrFromSimulation(e){let t=new i(e),n=new Z.Contract(e.contractId);t.raw=new Z.TransactionBuilder(await t.server.getAccount(e.account),{fee:e.fee?.toString(10)??Z.BASE_FEE,networkPassphrase:e.networkPassphrase}).addOperation(n.call(e.method,...e.args??[])).setTimeout(Z.TimeoutInfinite).build();let a=await t.simulate(),r=a.raw.operations[0];return a.raw=new Z.TransactionBuilder(await t.server.getAccount(e.account),{fee:a.raw.fee,networkPassphrase:e.networkPassphrase}).setTimeout(Z.TimeoutInfinite).addOperation(Z.Operation.invokeHostFunction({...r,auth:r.auth??[]})).build(),await a.simulate(),a.raw.toXDR()}};var Ba={0:{message:""},1:{message:""},2:{message:""},3:{message:""},4:{message:""},5:{message:""},6:{message:""},7:{message:""},8:{message:""},9:{message:""},103:{message:""},104:{message:""},105:{message:""},106:{message:""},107:{message:""},108:{message:""},109:{message:""},203:{message:""},204:{message:""},205:{message:""},206:{message:""},207:{message:""},208:{message:""},209:{message:""},210:{message:""},211:{message:""},212:{message:""},214:{message:""},215:{message:""},216:{message:""},217:{message:""},218:{message:""},300:{message:""},301:{message:""},302:{message:""},303:{message:""},400:{message:""}},Bt=class{constructor(e){this.options=e;this.parsers={swapAndBridge:e=>e instanceof se?e:new pe(this.spec.funcResToNative("swap_and_bridge",e)),swap:e=>e instanceof se?e:new pe(this.spec.funcResToNative("swap",e))};this.swapAndBridge=async({sender:e,token:t,amount:n,recipient:a,destination_chain_id:r,receive_token:s,nonce:o,gas_amount:A,fee_token_amount:c},m={})=>await Fe.xdrFromSimulation({method:"swap_and_bridge",args:this.spec.funcArgsToScVals("swap_and_bridge",{sender:new Je.Address(e),token:new Je.Address(t),amount:n,recipient:a,destination_chain_id:r,receive_token:s,nonce:o,gas_amount:A,fee_token_amount:c}),account:e,...m,...this.options,errorTypes:Ba,parseResultXdr:this.parsers.swapAndBridge});this.swap=async({sender:e,amount:t,token:n,receive_token:a,recipient:r,receive_amount_min:s},o={})=>await Fe.xdrFromSimulation({method:"swap",args:this.spec.funcArgsToScVals("swap",{sender:new Je.Address(e),amount:t,token:n,receive_token:a,recipient:new Je.Address(r),receive_amount_min:s}),account:e,...o,...this.options,errorTypes:Ba,parseResultXdr:this.parsers.swap});this.spec=new Je.ContractSpec(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJY2xhaW1hYmxlAAAAAAAAAQAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACWNsYWltYWJsZQAAAAAAAAEAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAJQAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"])}};var qt=class extends le{constructor(t,n,a){super();this.nodeRpcUrlsConfig=t;this.params=n;this.api=a;this.chainType="SRB"}async buildRawTransactionSend(t){let n=await xe(this.chainType,t,this.api);return await this.buildRawTransactionSendFromParams(n)}async buildRawTransactionSendFromParams(t){let{amount:n,contractAddress:a,fromAccountAddress:r,fromTokenAddress:s,toChainId:o,toAccountAddress:A,toTokenAddress:c,fee:m,gasFeePaymentMethod:u,extraGas:g}=t,f=m;g&&(f=(0,ka.Big)(f).plus(g).toFixed());let y=this.getContract(Bt,a),h;return u==="stablecoin"?h=await y.swapAndBridge({sender:r,token:jt.Address.contract(Buffer.from(s)).toString(),amount:BigInt(n),recipient:Buffer.from(A),destination_chain_id:+o,receive_token:Buffer.from(c),nonce:vn(),gas_amount:BigInt(0),fee_token_amount:BigInt(f)}):h=await y.swapAndBridge({sender:r,token:jt.Address.contract(Buffer.from(s)).toString(),amount:BigInt(n),recipient:Buffer.from(A),destination_chain_id:+o,receive_token:Buffer.from(c),nonce:vn(),gas_amount:BigInt(f),fee_token_amount:BigInt(0)}),h}async buildRawTransactionSwap(t){let n=Oe(this.chainType,t);return await this.buildRawTransactionSwapFromParams(n)}async buildRawTransactionSwapFromParams(t){let{amount:n,contractAddress:a,fromAccountAddress:r,fromTokenAddress:s,toAccountAddress:o,toTokenAddress:A,minimumReceiveAmount:c}=t;return await this.getContract(Bt,a).swap({sender:r,amount:BigInt(n),token:jt.Address.contract(Buffer.from(s)).toBuffer(),receive_token:Buffer.from(A),recipient:o,receive_amount_min:BigInt(c)})}send(t){throw new J}getContract(t,n){let a={contractId:n,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new t(a)}};var Ra=require("big.js");var Ma=O(require("bn.js"));function $t(i){return"0x"+new Ma.default(i).toString("hex")}function va(i){return new Promise(e=>setTimeout(()=>e(),i))}var ot=i=>(...e)=>new Promise((t,n)=>i(...e,(a,r)=>a?n(a):t(r)));async function en(i,e){let t=await i.trx.sign(e);if(!t.signature)throw new Ze("Transaction was not signed properly");let a=(await i.trx.sendRawTransaction(t)).txid;return await ki(i,a),{txId:a}}async function ki(i,e,t=1e4){let n=Date.now();for(;;){if(Date.now()-n>t)throw new qe("Transaction not found");let a=await i.trx.getUnconfirmedTransactionInfo(e);if(!a?.receipt){await va(2e3);continue}if(a.receipt.result==="SUCCESS")return a;throw new qe(`Transaction status is ${a.receipt.result}`)}}var kt=class extends le{constructor(t,n){super();this.tronWeb=t;this.api=n;this.chainType="TRX"}async send(t){let n=await xe(this.chainType,t,this.api),a=await this.buildRawTransactionSendFromParams(n);return await en(this.tronWeb,a)}async buildRawTransactionSwap(t){let n=Oe(this.chainType,t);return await this.buildRawTransactionSwapFromParams(n)}async buildRawTransactionSwapFromParams(t){let{amount:n,contractAddress:a,fromAccountAddress:r,fromTokenAddress:s,toAccountAddress:o,toTokenAddress:A,minimumReceiveAmount:c}=t,m=[{type:"uint256",value:n},{type:"bytes32",value:s},{type:"bytes32",value:A},{type:"address",value:o},{type:"uint256",value:c}];return this.buildRawTransaction(a,"swap(uint256,bytes32,bytes32,address,uint256)",m,"0",r)}async buildRawTransactionSend(t){let n=await xe(this.chainType,t,this.api);return this.buildRawTransactionSendFromParams(n)}async buildRawTransactionSendFromParams(t){let{amount:n,contractAddress:a,fromAccountAddress:r,fromTokenAddress:s,toChainId:o,toAccountAddress:A,toTokenAddress:c,messenger:m,fee:u,gasFeePaymentMethod:g,extraGas:f}=t,y=u;f&&(y=(0,Ra.Big)(y).plus(f).toFixed());let h=at().toJSON().data,d,p,P;return m==3?(g==="stablecoin"?(d=[{type:"uint256",value:n},{type:"bytes32",value:A},{type:"uint256",value:o},{type:"uint256",value:y}],p="0"):(d=[{type:"uint256",value:n},{type:"bytes32",value:A},{type:"uint256",value:o},{type:"uint256",value:0}],p=y),P="bridge(uint256,bytes32,uint256,uint256)"):(g==="stablecoin"?(d=[{type:"bytes32",value:s},{type:"uint256",value:n},{type:"bytes32",value:A},{type:"uint256",value:o},{type:"bytes32",value:c},{type:"uint256",value:h},{type:"uint8",value:m},{type:"uint256",value:y}],p="0"):(d=[{type:"bytes32",value:s},{type:"uint256",value:n},{type:"bytes32",value:A},{type:"uint256",value:o},{type:"bytes32",value:c},{type:"uint256",value:h},{type:"uint8",value:m},{type:"uint256",value:0}],p=y),P="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)"),this.buildRawTransaction(a,P,d,p,r)}async buildRawTransaction(t,n,a,r,s){let o=await this.tronWeb.transactionBuilder.triggerSmartContract(t,n,{callValue:r},a,s);if(!o?.result?.result)throw new k("Unknown error: "+JSON.stringify(o,null,2));return o.transaction}};var tn=class{constructor(e,t,n,a){this.api=e;this.nodeRpcUrlsConfig=t;this.params=n;this.tokenService=a;this.rawTxBuilder=new Qt(e,t,n,a)}async getAllowance(e,t){let n,a;t?(n=e,a=t):a=e;let r=St(a.token,a.messenger);return await this.tokenService.getAllowance({...a,spender:r},n)}async checkAllowance(e,t){let n,a;t?(n=e,a=t):a=e;let r=St(a.token,a.messenger);return this.tokenService.checkAllowance({...a,spender:r},n)}async approve(e,t){let n=St(t.token,t.messenger);return this.tokenService.approve(e,{...t,spender:n})}async send(e,t){return R(t.amount),I("amount",t.amount,t.sourceToken.decimals),Yt(t.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,e).send(t)}};function St(i,e){if(e&&e==3){if(i.cctpAddress)return i.cctpAddress;throw new re("Such route does not support CCTP protocol")}else return i.bridgeAddress}function Yt(i,e,t,n,a){switch(z[i].chainType){case"EVM":{if(a)return new Pt(a,e,t);{let r=t.getNodeRpcUrl(i);return new Pt(new xa.default(r),e,t)}}case"TRX":{if(a)return new kt(a,e);{let r=t.getNodeRpcUrl(i);return new kt(new Ia.default({fullHost:r}),e)}}case"SOLANA":return new zt(t.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:n.wormholeMessengerProgramId,solanaLookUpTable:n.solanaLookUpTable,cctpParams:n.cctpParams},e);case"SRB":return new qt(t,n,e)}}var Ea=require("big.js"),Ua=O(require("tronweb")),Na=O(require("web3"));var ve=require("big.js");function Da(i,e,t,n,a){let r=B(i,3),s=(0,ve.Big)(r),o=(0,ve.Big)(t),A=(0,ve.Big)(n).plus(a),c,m;if(o.eq(0)||A.eq(0)){let g=s.div(2);c=(0,ve.Big)(n).plus(g),m=(0,ve.Big)(a).plus(g)}else c=(0,ve.Big)(n).plus(s.mul(n).div(A)),m=(0,ve.Big)(a).plus(s.mul(a).div(A));return(0,ve.Big)(Kn(e,c.toFixed(),m.toFixed())).minus(o).toFixed()}function Fa(i){let e=B(i,3);return(0,ve.Big)(e).round().toFixed()}var Ve=[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];var ae=class{constructor(e){this.lpAmount=e.lpAmount,this.rewardDebt=e.rewardDebt}get userLiquidity(){return b(this.lpAmount,3).toFixed()}earned(e,t){let n=Ln(this.lpAmount,this.rewardDebt,e.accRewardPerShareP,e.p);return t?b(n,t).toFixed():n}};var de=class{};var Mt=class extends de{constructor(t,n){super();this.web3=t;this.api=n;this.chainType="EVM";this.P=52}async getUserBalanceInfo(t,n){let a;try{a=await Lt(this.getUserBalanceInfoByBatch(t,n),`Cannot get UserBalanceInfo for ${n.name} on ${n.chainSymbol}`,5e3)}catch{a=await wn(()=>this.getUserBalanceInfoPerProperty(t,n),`Cannot get UserBalanceInfo for ${n.name} on ${n.chainSymbol}`,5,2e3)}return a}async getUserBalanceInfoByBatch(t,n){let a=new this.web3.BatchRequest,r=new this.web3.eth.Contract(Ve,n.poolAddress),s=["userRewardDebt","balanceOf"].map(c=>ot(m=>a.add(r.methods[c](t).call.request({},m)))());a.execute();let[o,A]=await Promise.all(s);return new ae({lpAmount:A,rewardDebt:o})}async getUserBalanceInfoPerProperty(t,n){let a=await this.getPoolContract(n.poolAddress).methods.userRewardDebt(t).call(),r=await this.getPoolContract(n.poolAddress).methods.balanceOf(t).call();return new ae({lpAmount:r,rewardDebt:a})}async getPoolInfoFromChain(t){let n;try{n=await Lt(this.getPoolInfoByBatch(t),`Cannot get PoolInfo for ${t.name} on ${t.chainSymbol}`,5e3)}catch{n=await wn(()=>this.getPoolInfoPerProperty(t),`Cannot get PoolInfo for ${t.name} on ${t.chainSymbol}`,5,2e3)}return n}async getPoolInfoByBatch(t){let n=new this.web3.BatchRequest,a=new this.web3.eth.Contract(Ve,t.poolAddress),r=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(h=>ot(d=>n.add(a.methods[h]().call.request({},d)))());n.execute();let[s,o,A,c,m,u]=await Promise.all(r),g=A.toString(),f=c.toString(),y=te({tokenBalance:g,vUsdBalance:f});return{aValue:s.toString(),dValue:o.toString(),tokenBalance:g,vUsdBalance:f,totalLpAmount:m.toString(),accRewardPerShareP:u.toString(),p:this.P,imbalance:y}}async getPoolInfoPerProperty(t){let n=this.getPoolContract(t.poolAddress),a=await n.methods.a().call(),r=await n.methods.d().call(),s=await n.methods.tokenBalance().call(),o=await n.methods.vUsdBalance().call(),A=await n.methods.totalSupply().call(),c=await n.methods.accRewardPerShareP().call(),m=te({tokenBalance:s,vUsdBalance:o});return{aValue:a,dValue:r,tokenBalance:s,vUsdBalance:o,totalLpAmount:A,accRewardPerShareP:c,p:this.P,imbalance:m}}async buildRawTransactionDeposit(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,n){return new this.web3.eth.Contract(t,n)}getPoolContract(t){return this.getContract(Ve,t)}};var nn=class{constructor(e,t,n,a){this.api=e;this.nodeRpcUrlsConfig=t;this.params=n;this.tokenService=a}async approve(e,t){if(t){let n=e,a=t;return this.tokenService.buildRawTransactionApprove({...a,spender:a.token.poolAddress},n)}else{let n=e;return this.tokenService.buildRawTransactionApprove({...n,spender:n.token.poolAddress})}}async deposit(e,t){return R(e.amount),I("amount",e.amount,e.token.decimals),e.amount=B(e.amount,e.token.decimals).toFixed(),At(e.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionDeposit(e)}async withdraw(e,t){return R(e.amount),I("amount",e.amount,e.token.decimals),e.amount=B(e.amount,3).toFixed(),At(e.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionWithdraw(e)}async claimRewards(e,t){return At(e.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionClaimRewards(e)}};var fe=require("@project-serum/anchor"),ge=require("@solana/web3.js");var an=class extends de{constructor(t,n){super();this.solanaRpcUrl=t;this.api=n;this.chainType="SOLANA";this.P=48}async getUserBalanceInfo(t,n){let a=this.buildAnchorProvider(t),r=this.getBridge(n.bridgeAddress,a),s=new ge.PublicKey(n.poolAddress),o=await r.account.pool.fetch(s);try{let A=await kn(new ge.PublicKey(t),o.mint,r.programId),{lpAmount:c,rewardDebt:m}=await r.account.userDeposit.fetch(A);return new ae({lpAmount:c.toString(),rewardDebt:m.toString()})}catch{return new ae({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(t){let n=this.buildAnchorProvider(t.bridgeAddress),a=await this.getBridge(t.bridgeAddress,n).account.pool.fetch(t.poolAddress),r=a.vUsdBalance.toString(),s=a.tokenBalance.toString(),o=te({tokenBalance:s,vUsdBalance:r});return{dValue:a.d.toString(),aValue:a.a.toString(),totalLpAmount:a.totalLpAmount.toString(),vUsdBalance:r,tokenBalance:s,accRewardPerShareP:a.accRewardPerShareP.toString(),p:this.P,imbalance:o}}async buildRawTransactionDeposit(t){let{bridge:n,accounts:a,preInstructions:r}=await this.prepareDataForTransaction(t),s=await n.methods.deposit(new fe.BN(t.amount)).accounts(a).preInstructions(r).transaction();return s.recentBlockhash=(await this.buildAnchorProvider(t.accountAddress).connection.getLatestBlockhash()).blockhash,s.feePayer=new ge.PublicKey(t.accountAddress),await rt(s,t.txFeeParams,this.solanaRpcUrl),s}async buildRawTransactionWithdraw(t){let{bridge:n,accounts:a,preInstructions:r}=await this.prepareDataForTransaction(t),s=await n.methods.withdraw(new fe.BN(t.amount)).accounts(a).preInstructions(r).transaction();return s.recentBlockhash=(await this.buildAnchorProvider(t.accountAddress).connection.getLatestBlockhash()).blockhash,s.feePayer=new ge.PublicKey(t.accountAddress),await rt(s,t.txFeeParams,this.solanaRpcUrl),s}async buildRawTransactionClaimRewards(t){let{bridge:n,accounts:a,preInstructions:r}=await this.prepareDataForTransaction(t),s=await n.methods.claimRewards().accounts(a).preInstructions(r).transaction();return s.recentBlockhash=(await this.buildAnchorProvider(t.accountAddress).connection.getLatestBlockhash()).blockhash,s.feePayer=new ge.PublicKey(t.accountAddress),await rt(s,t.txFeeParams,this.solanaRpcUrl),s}async prepareDataForTransaction(t){let n=this.buildAnchorProvider(t.accountAddress),a=this.getBridge(t.token.bridgeAddress,n),{accounts:r,preInstructions:s}=await this._getLPTransactionData(a,t.token.poolAddress,t.accountAddress,n);return{bridge:a,accounts:r,preInstructions:s}}getBridge(t,n){return new fe.Program(wt,t,n)}buildAnchorProvider(t){let n=new ge.Connection(this.solanaRpcUrl,"confirmed"),a=new ge.PublicKey(t);return new fe.AnchorProvider(n,{publicKey:a},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(t,n,a,r){let s=new ge.PublicKey(a),o=await Ue(t.programId),A=await tt(t.programId),c=new ge.PublicKey(n),u=(await t.account.pool.fetch(c)).mint,g=await ue(s,u),f=await nt(u,t.programId),y=await kn(s,u,t.programId),h=[fe.web3.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await it(g,r)}catch{let T=await fe.Spl.associatedToken(r).methods.create().accounts({mint:u,owner:s,associatedAccount:g}).instruction();h.push(T)}try{await t.account.userDeposit.fetch(y)}catch{let P=await t.methods.initDepositAccount().accounts({mint:u,user:s,userDeposit:y}).instruction();h.push(P)}return{accounts:{mint:u,user:s,config:o,pool:c,bridgeAuthority:A,userDeposit:y,userToken:g,bridgeToken:f},preInstructions:h}}};var He=require("stellar-sdk");var vt={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:""}},rn=class{constructor(e){this.options=e;this.parsers={deposit:e=>e instanceof se?e:new pe(this.spec.funcResToNative("deposit",e)),withdraw:e=>e instanceof se?e:new pe(this.spec.funcResToNative("withdraw",e)),claimRewards:e=>e instanceof se?e:new pe(this.spec.funcResToNative("claim_rewards",e)),getPool:e=>e instanceof se?e:new pe(this.spec.funcResToNative("get_pool",e)),getUserDeposit:e=>e instanceof se?e:new pe(this.spec.funcResToNative("get_user_deposit",e))};this.depositXdr=async({sender:e,amount:t},n={})=>await Fe.xdrFromSimulation({method:"deposit",args:this.spec.funcArgsToScVals("deposit",{sender:new He.Address(e),amount:t}),account:e,...n,...this.options,errorTypes:vt,parseResultXdr:this.parsers.deposit});this.withdrawXdr=async({sender:e,amount_lp:t},n={})=>await Fe.xdrFromSimulation({method:"withdraw",args:this.spec.funcArgsToScVals("withdraw",{sender:new He.Address(e),amount_lp:t}),account:e,...n,...this.options,errorTypes:vt,parseResultXdr:this.parsers.withdraw});this.claimRewardsXdr=async({sender:e},t={})=>await Fe.xdrFromSimulation({method:"claim_rewards",args:this.spec.funcArgsToScVals("claim_rewards",{sender:new He.Address(e)}),account:e,...t,...this.options,errorTypes:vt,parseResultXdr:this.parsers.claimRewards});this.getPool=async(e={})=>await W.fromSimulation({method:"get_pool",args:this.spec.funcArgsToScVals("get_pool",{}),...e,...this.options,errorTypes:vt,parseResultXdr:this.parsers.getPool});this.getUserDeposit=async({user:e},t={})=>await W.fromSimulation({method:"get_user_deposit",args:this.spec.funcArgsToScVals("get_user_deposit",{user:new He.Address(e)}),...t,...this.options,errorTypes:vt,parseResultXdr:this.parsers.getUserDeposit});this.spec=new He.ContractSpec(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAUAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAAAAAAJY2xhaW1hYmxlAAAAAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANY2xhaW1fYmFsYW5jZQAAAAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAVZ2V0X2NsYWltYWJsZV9iYWxhbmNlAAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAADkJhbGFuY2VDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAgAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAATAAAAAQAAAAAAAAAQQ2xhaW1hYmxlQmFsYW5jZQAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAAEENsYWltYWJsZUJhbGFuY2UAAAABAAAAAAAAAAZhbW91bnQAAAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAJQAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"])}};var sn=class extends de{constructor(t,n,a){super();this.nodeRpcUrlsConfig=t;this.params=n;this.api=a;this.chainType="SRB";this.P=48}async getUserBalanceInfo(t,n){let r=(await this.getContract(n.poolAddress).getUserDeposit({user:t})).result;if(r.isErr())throw new k;let s=r.unwrap();return new ae({lpAmount:s.lp_amount.toString(),rewardDebt:s.reward_debt.toString()})}async getPoolInfoFromChain(t){let a=(await this.getContract(t.poolAddress).getPool()).result;if(a.isErr())throw new k;let r=a.unwrap();return{aValue:r.a.toString(),accRewardPerShareP:r.acc_reward_per_share_p.toString(),dValue:r.d.toString(),tokenBalance:r.token_balance.toString(),p:this.P,totalLpAmount:r.total_lp_amount.toString(),vUsdBalance:r.v_usd_balance.toString(),imbalance:te({tokenBalance:r.token_balance.toString(),vUsdBalance:r.v_usd_balance.toString()})}}async buildRawTransactionDeposit(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 n={contractId:t,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new rn(n)}};var Wa=O(require("web3"));var Rt=class extends de{constructor(t,n,a){super();this.tronWeb=t;this.api=n;this.chainType="TRX";this.P=52;a&&(this.web3=new Wa.default(a))}async getUserBalanceInfo(t,n){let a;if(this.web3)try{a=await this.getUserBalanceInfoByBatch(this.web3,t,n)}catch{a=await this.getUserBalanceInfoPerProperty(t,n)}else a=await this.getUserBalanceInfoPerProperty(t,n);return a}async getUserBalanceInfoByBatch(t,n,a){let r=new t.BatchRequest,s=new t.eth.Contract(Ve,Tt(a.poolAddress)),o=Tt(n),A=["userRewardDebt","balanceOf"].map(u=>ot(g=>r.add(s.methods[u](o).call.request({},g)))());r.execute();let[c,m]=await Promise.all(A);return new ae({lpAmount:m,rewardDebt:c})}async getUserBalanceInfoPerProperty(t,n){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(t);let a=await this.getContract(n.poolAddress),r=(await a.methods.userRewardDebt(t).call()).toString(),s=(await a.methods.balanceOf(t).call()).toString();return new ae({lpAmount:s,rewardDebt:r})}async getPoolInfoFromChain(t){let n;if(this.web3)try{n=await this.getPoolInfoByBatch(this.web3,t)}catch{n=await this.getPoolInfoPerProperty(t)}else n=await this.getPoolInfoPerProperty(t);return n}async getPoolInfoByBatch(t,n){let a=new t.BatchRequest,r=new t.eth.Contract(Ve,Tt(n.poolAddress)),s=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(d=>ot(p=>a.add(r.methods[d]().call.request({},p)))());a.execute();let[o,A,c,m,u,g]=await Promise.all(s),f=c.toString(),y=m.toString(),h=te({tokenBalance:f,vUsdBalance:y});return{aValue:o.toString(),dValue:A.toString(),tokenBalance:f,vUsdBalance:y,totalLpAmount:u.toString(),accRewardPerShareP:g.toString(),p:this.P,imbalance:h}}async getPoolInfoPerProperty(t){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(t.poolAddress);let n=await this.getContract(t.poolAddress),[a,r,s,o,A,c]=await Promise.all([n.methods.a().call(),n.methods.d().call(),n.methods.tokenBalance().call(),n.methods.vUsdBalance().call(),n.methods.totalSupply().call(),n.methods.accRewardPerShareP().call()]),m=s.toString(),u=o.toString(),g=te({tokenBalance:m,vUsdBalance:u});return{aValue:a.toString(),dValue:r.toString(),tokenBalance:m,vUsdBalance:u,totalLpAmount:A.toString(),accRewardPerShareP:c.toString(),p:this.P,imbalance:g}}buildRawTransactionDeposit(t){let{amount:n,accountAddress:a}=t,r=[{type:"uint256",value:n}];return this.buildRawTransaction(t.token.poolAddress,"deposit(uint256)",r,"0",a)}buildRawTransactionWithdraw(t){let{amount:n,accountAddress:a}=t,r=[{type:"uint256",value:n}];return this.buildRawTransaction(t.token.poolAddress,"withdraw(uint256)",r,"0",a)}buildRawTransactionClaimRewards(t){let{accountAddress:n}=t,a=[];return this.buildRawTransaction(t.token.poolAddress,"claimRewards()",a,"0",n)}async buildRawTransaction(t,n,a,r,s){let o=await this.tronWeb.transactionBuilder.triggerSmartContract(t,n,{callValue:r},a,s);if(!o?.result?.result)throw new k("Unknown error: "+JSON.stringify(o,null,2));return o.transaction}async getContract(t){return await this.tronWeb.contract(Ve,t)}};var on=class{constructor(e,t,n,a){this.api=e;this.nodeRpcUrlsConfig=t;this.params=n;this.tokenService=a;this.rawTxBuilder=new nn(e,t,this.params,a)}async getAllowance(e,t){if(t){let n=e,a=t;return await this.tokenService.getAllowance({...a,spender:a.token.poolAddress},n)}else{let n=e;return await this.tokenService.getAllowance({...n,spender:n.token.poolAddress})}}async checkAllowance(e,t){if(t){let n=e,a=t;return this.tokenService.checkAllowance({...a,spender:a.token.poolAddress},n)}else{let n=e;return this.tokenService.checkAllowance({...n,spender:n.token.poolAddress})}}async approve(e,t){return this.tokenService.approve(e,{...t,spender:t.token.poolAddress})}async getAmountToBeDeposited(e,t,n){R(e),I("amount",e,t.decimals);let a=await this.getPoolInfoFromChain(t,n),{vUsdBalance:r,tokenBalance:s,aValue:o,dValue:A}=a,c=Da(e,o,A,s,r);return b(c,3).toFixed()}async getAmountToBeWithdrawn(e,t,n,a){R(e),I("amount",e,n.decimals);let r=await this.getPoolInfoFromChain(n,a),s=Fa(e),o=ee(s,n.decimals),c=(await this.getUserBalanceInfo(t,n,a)).earned(r)||"0",m=(0,Ea.Big)(o).plus(c).toFixed();return b(m,n.decimals).toFixed()}async getUserBalanceInfo(e,t,n){return At(t.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,n).getUserBalanceInfo(e,t)}async getPoolInfoFromChain(e,t){let n=await At(e.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).getPoolInfoFromChain(e);return this.api.cachePut({chainSymbol:e.chainSymbol,poolAddress:e.poolAddress},n),n}};function At(i,e,t,n,a){switch(z[i].chainType){case"EVM":{if(a)return new Mt(a,e);{let r=t.getNodeRpcUrl(i);return new Mt(new Na.default(r),e)}}case"TRX":{let r=t.getNodeRpcUrl(i),s=n.tronJsonRpc;if(a)return new Rt(a,e,s);{let o=new Ua.default({fullHost:r});return new Rt(o,e,s)}}case"SOLANA":{let r=t.getNodeRpcUrl(i);return new an(r,e)}case"SRB":return new sn(t,n,e)}}var D=require("big.js");function Ga(i,e,t){let n=vi(i,{decimals:e.decimals,feeShare:e.feeShare},e.poolInfo),a=Ri(n.amountIncludingCommissionInSystemPrecision,{decimals:t.decimals,feeShare:t.feeShare},t.poolInfo);return{swapToVUsdCalcResult:n,swapFromVUsdCalcResult:a}}function Za(i,e,t){let n=Ii(i,{decimals:t.decimals,feeShare:t.feeShare},t.poolInfo),a=xi(n.amountIncludingCommissionInSystemPrecision,{decimals:e.decimals,feeShare:e.feeShare},e.poolInfo);return{swapToVUsdCalcResult:n,swapFromVUsdCalcResult:a}}function vi(i,{feeShare:e,decimals:t},n){let a=(0,D.Big)(i),r=a.times(e),s=a.minus(r);return{bridgeFeeInTokenPrecision:r.round().toFixed(),amountIncludingCommissionInSystemPrecision:Oa(_e(s,t),n),amountExcludingCommissionInSystemPrecision:Oa(_e(a,t),n)}}function Oa(i,e){if(i.eq(0))return"0";let t=(0,D.Big)(e.tokenBalance).plus(i),n=Be(t.toFixed(),e.aValue,e.dValue);return(0,D.Big)(e.vUsdBalance).minus(n).round().toFixed()}function Ri(i,{feeShare:e,decimals:t},n){if((0,D.Big)(i).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let r=(0,D.Big)(i).plus(n.vUsdBalance),s=Be(r,n.aValue,n.dValue),o=ee((0,D.Big)(n.tokenBalance).minus(s),t),A=(0,D.Big)(o).times(e),c=(0,D.Big)(o).minus(A).round();return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInTokenPrecision:c.toFixed(),amountExcludingCommissionInTokenPrecision:o.toFixed()}}function Ii(i,{feeShare:e,decimals:t},n){let a=(0,D.Big)(e).div((0,D.Big)(1).minus(e)),r=(0,D.Big)(i).times(a),s=(0,D.Big)(i).plus(r);return{bridgeFeeInTokenPrecision:r.round().toFixed(),amountIncludingCommissionInSystemPrecision:Va(_e(s,t),n),amountExcludingCommissionInSystemPrecision:Va(_e(i,t),n)}}function Va(i,e){let t=(0,D.Big)(e.tokenBalance).minus(i),n=Be(t.toFixed(),e.aValue,e.dValue);return(0,D.Big)(n).minus(e.vUsdBalance).round().toFixed()}function xi(i,{feeShare:e,decimals:t},n){if((0,D.Big)(i).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let a=(0,D.Big)(n.vUsdBalance).minus(i),r=Be(a.toFixed(),n.aValue,n.dValue),s=(0,D.Big)(r).minus(n.tokenBalance),o=ee(s.toFixed(),t),A=(0,D.Big)(e).div((0,D.Big)(1).minus(e)),c=(0,D.Big)(o).times(A),m=(0,D.Big)(o).plus(c);return{bridgeFeeInTokenPrecision:c.round().toFixed(),amountIncludingCommissionInTokenPrecision:m.round().toFixed(),amountExcludingCommissionInTokenPrecision:o.toFixed()}}var We=require("big.js");function _a(i,e,t,n,a){let r=Ce(i,e,t),s=ee(r,e.decimals),o=yt(r,n,a),A=(0,We.Big)(i).times(e.feeShare),c=(0,We.Big)(o).div((0,We.Big)(1).minus(n.feeShare)).minus(o);return{sourceLPSwap:{fee:b(A,e.decimals).neg().round(e.decimals,We.Big.roundUp).toFixed(),swap:b((0,We.Big)(i).minus(s).minus(A),e.decimals).neg().round(e.decimals,We.Big.roundUp).toFixed()},destLPSwap:{fee:b(c,n.decimals).neg().round(n.decimals,We.Big.roundUp).toFixed(),swap:b(ee(r,n.decimals).minus(o).minus(c),n.decimals).neg().round(n.decimals,We.Big.roundUp).toFixed()}}}var ct=require("@solana/web3.js");var An=class{constructor(e,t){this.nodeRpcUrlsConfig=e;this.params=t}async addMemoToTx(e,t){if(t.length>28)throw new k("InvalidArgumentException memo cannot be more than 28 characters");let n=new ct.Connection(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),a=await Qe(e,n),r=ct.TransactionMessage.decompile(e.message,{addressLookupTableAccounts:a});r.instructions[r.instructions.length-1].keys.push({pubkey:new ct.PublicKey(Buffer.from(t)),isSigner:!1,isWritable:!1}),e.message=r.compileToV0Message(a)}};var M=require("stellar-sdk"),Jc=require("stellar-sdk/lib/horizon");var E=require("stellar-sdk");var j={},It=class{constructor(e){this.options=e;this.parsers={initialize:()=>{},mint:()=>{},setAdmin:()=>{},allowance:e=>this.spec.funcResToNative("allowance",e),approve:()=>{},balance:e=>this.spec.funcResToNative("balance",e),spendableBalance:e=>this.spec.funcResToNative("spendable_balance",e),transfer:()=>{},transferFrom:()=>{},burn:()=>{},burnFrom:()=>{},decimals:e=>this.spec.funcResToNative("decimals",e),name:e=>this.spec.funcResToNative("name",e),symbol:e=>this.spec.funcResToNative("symbol",e)};this.initialize=async({admin:e,decimal:t,name:n,symbol:a},r={})=>await W.fromSimulation({method:"initialize",args:this.spec.funcArgsToScVals("initialize",{admin:new E.Address(e),decimal:t,name:n,symbol:a}),...r,...this.options,errorTypes:j,parseResultXdr:this.parsers.initialize});this.mint=async({to:e,amount:t},n={})=>await W.fromSimulation({method:"mint",args:this.spec.funcArgsToScVals("mint",{to:new E.Address(e),amount:t}),...n,...this.options,errorTypes:j,parseResultXdr:this.parsers.mint});this.setAdmin=async({new_admin:e},t={})=>await W.fromSimulation({method:"set_admin",args:this.spec.funcArgsToScVals("set_admin",{new_admin:new E.Address(e)}),...t,...this.options,errorTypes:j,parseResultXdr:this.parsers.setAdmin});this.allowance=async({from:e,spender:t},n={})=>await W.fromSimulation({method:"allowance",args:this.spec.funcArgsToScVals("allowance",{from:new E.Address(e),spender:new E.Address(t)}),...n,...this.options,errorTypes:j,parseResultXdr:this.parsers.allowance});this.approve=async({from:e,spender:t,amount:n,expiration_ledger:a},r={})=>await W.fromSimulation({method:"approve",args:this.spec.funcArgsToScVals("approve",{from:new E.Address(e),spender:new E.Address(t),amount:n,expiration_ledger:a}),...r,...this.options,errorTypes:j,parseResultXdr:this.parsers.approve});this.balance=async({id:e},t={})=>await W.fromSimulation({method:"balance",args:this.spec.funcArgsToScVals("balance",{id:new E.Address(e)}),...t,...this.options,errorTypes:j,parseResultXdr:this.parsers.balance});this.spendableBalance=async({id:e},t={})=>await W.fromSimulation({method:"spendable_balance",args:this.spec.funcArgsToScVals("spendable_balance",{id:new E.Address(e)}),...t,...this.options,errorTypes:j,parseResultXdr:this.parsers.spendableBalance});this.transfer=async({from:e,to:t,amount:n},a={})=>await W.fromSimulation({method:"transfer",args:this.spec.funcArgsToScVals("transfer",{from:new E.Address(e),to:new E.Address(t),amount:n}),...a,...this.options,errorTypes:j,parseResultXdr:this.parsers.transfer});this.transferFrom=async({spender:e,from:t,to:n,amount:a},r={})=>await W.fromSimulation({method:"transfer_from",args:this.spec.funcArgsToScVals("transfer_from",{spender:new E.Address(e),from:new E.Address(t),to:new E.Address(n),amount:a}),...r,...this.options,errorTypes:j,parseResultXdr:this.parsers.transferFrom});this.burn=async({from:e,amount:t},n={})=>await W.fromSimulation({method:"burn",args:this.spec.funcArgsToScVals("burn",{from:new E.Address(e),amount:t}),...n,...this.options,errorTypes:j,parseResultXdr:this.parsers.burn});this.burnFrom=async({spender:e,from:t,amount:n},a={})=>await W.fromSimulation({method:"burn_from",args:this.spec.funcArgsToScVals("burn_from",{spender:new E.Address(e),from:new E.Address(t),amount:n}),...a,...this.options,errorTypes:j,parseResultXdr:this.parsers.burnFrom});this.decimals=async(e={})=>await W.fromSimulation({method:"decimals",args:this.spec.funcArgsToScVals("decimals",{}),...e,...this.options,errorTypes:j,parseResultXdr:this.parsers.decimals});this.name=async(e={})=>await W.fromSimulation({method:"name",args:this.spec.funcArgsToScVals("name",{}),...e,...this.options,errorTypes:j,parseResultXdr:this.parsers.name});this.symbol=async(e={})=>await W.fromSimulation({method:"symbol",args:this.spec.funcArgsToScVals("symbol",{}),...e,...this.options,errorTypes:j,parseResultXdr:this.parsers.symbol});this.spec=new E.ContractSpec(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAdkZWNpbWFsAAAAAAQAAAAAAAAABG5hbWUAAAAQAAAAAAAAAAZzeW1ib2wAAAAAABAAAAAA","AAAAAAAAAAAAAAAEbWludAAAAAIAAAAAAAAAAnRvAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAA","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAA=","AAAAAAAAAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAAAAAAAHYXBwcm92ZQAAAAAEAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAAAAAAEWV4cGlyYXRpb25fbGVkZ2VyAAAAAAAABAAAAAA=","AAAAAAAAAAAAAAAHYmFsYW5jZQAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAL","AAAAAAAAAAAAAAARc3BlbmRhYmxlX2JhbGFuY2UAAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAL","AAAAAAAAAAAAAAAIdHJhbnNmZXIAAAADAAAAAAAAAARmcm9tAAAAEwAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAAAAAAANdHJhbnNmZXJfZnJvbQAAAAAAAAQAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAEZnJvbQAAABMAAAAAAAAAAnRvAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAA","AAAAAAAAAAAAAAAEYnVybgAAAAIAAAAAAAAABGZyb20AAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAA","AAAAAAAAAAAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAAAAAAAIZGVjaW1hbHMAAAAAAAAAAQAAAAQ=","AAAAAAAAAAAAAAAEbmFtZQAAAAAAAAABAAAAEA==","AAAAAAAAAAAAAAAGc3ltYm9sAAAAAAAAAAAAAQAAABA=","AAAAAQAAAAAAAAAAAAAAEEFsbG93YW5jZURhdGFLZXkAAAACAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAHc3BlbmRlcgAAAAAT","AAAAAQAAAAAAAAAAAAAADkFsbG93YW5jZVZhbHVlAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAAAAAAEWV4cGlyYXRpb25fbGVkZ2VyAAAAAAAABA==","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAABQAAAAEAAAAAAAAACUFsbG93YW5jZQAAAAAAAAEAAAfQAAAAEEFsbG93YW5jZURhdGFLZXkAAAABAAAAAAAAAAdCYWxhbmNlAAAAAAEAAAATAAAAAQAAAAAAAAAFTm9uY2UAAAAAAAABAAAAEwAAAAEAAAAAAAAABVN0YXRlAAAAAAAAAQAAABMAAAAAAAAAAAAAAAVBZG1pbgAAAA==","AAAAAQAAAAAAAAAAAAAADVRva2VuTWV0YWRhdGEAAAAAAAADAAAAAAAAAAdkZWNpbWFsAAAAAAQAAAAAAAAABG5hbWUAAAAQAAAAAAAAAAZzeW1ib2wAAAAAABA="])}};var Di=100,Fi=180,cn=class{constructor(e,t){this.nodeRpcUrlsConfig=e;this.params=t}async buildChangeTrustLineXdrTx(e){let n=await new M.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(e.sender),r=(await this.getContract(It,e.tokenAddress).name()).result,[s,o]=r.split(":"),A=new M.Asset(s,o),c=M.Operation.changeTrust({asset:A,limit:e.limit});return new M.TransactionBuilder(n,{fee:Di.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(c).setTimeout(Fi).build().toXDR()}async getBalanceLine(e,t){let a=(await this.getContract(It,t).name()).result,[r,s]=a.split(":"),o=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new M.Horizon.Server(o).loadAccount(e)).balances.find(u=>(u.asset_type==="credit_alphanum4"||u.asset_type==="credit_alphanum12")&&u.asset_code==r&&u.asset_issuer==s)}async submitTransactionStellar(e){let t=new M.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),n=M.TransactionBuilder.fromXDR(e,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await t.submitTransaction(n)}async simulateAndCheckRestoreTxRequiredSoroban(e,t){let n=new M.SorobanRpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),a=await n.getAccount(t),r=M.TransactionBuilder.fromXDR(e,this.params.sorobanNetworkPassphrase),s=await n.simulateTransaction(r);if(M.SorobanRpc.Api.isSimulationRestore(s))return new M.TransactionBuilder(a,{fee:(+M.BASE_FEE+ +s.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(s.restorePreamble.transactionData.build()).addOperation(M.Operation.restoreFootprint({})).setTimeout(M.TimeoutInfinite).build().toXDR()}async sendTransactionSoroban(e){let t=new M.SorobanRpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),n=M.TransactionBuilder.fromXDR(e,this.params.sorobanNetworkPassphrase);return t.sendTransaction(n)}async confirmTx(e,t=15){let n=new M.SorobanRpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),a=await qn(()=>n.getTransaction(e),r=>r.status===M.SorobanRpc.Api.GetTransactionStatus.NOT_FOUND,t);return a[a.length-1]}getContract(e,t){let n={contractId:t,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new e(n)}};var mn=class{constructor(e,t){this.nodeRpcUrlsConfig=e;this.srb=new cn(e,t),this.sol=new An(e,t)}};var Ke=(t=>(t.WITH_NATIVE_CURRENCY="native",t.WITH_STABLECOIN="stablecoin",t))(Ke||{}),bt=(t=>(t.INT="int",t.FLOAT="float",t))(bt||{});var Ka=require("big.js"),Qa=O(require("tronweb")),Ya=O(require("web3"));var un=O(require("erc-20-abi"));var En=require("big.js"),ye=class{async checkAllowance(e){let t=await this.getAllowance(e);return(0,En.Big)(t).gte((0,En.Big)(e.amount))}};var Wi="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Ei="0xdac17f958d2ee523a2206206994597c13d831ec7",Ui=1e5,xt=class extends ye{constructor(t,n){super();this.web3=t;this.api=n;this.chainType="EVM"}getAllowance(t){let n=t.token.tokenAddress,a=t.owner,r=t.spender;return this.getAllowanceByTokenAddress(n,a,r)}getAllowanceByTokenAddress(t,n,a){return this.getContract(un.default,t).methods.allowance(n,a).call()}async getTokenBalance(t){return await this.getContract(un.default,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 n=await this.buildRawTransactionApprove(t);return await this.sendRawTransaction(n,t.chainSymbol)}isUsdt(t){return t.toLowerCase()===Ei}async buildRawTransactionApprove(t){let{tokenAddress:n,spender:a,owner:r,amount:s}=t,A=await this.getContract(un.default,n).methods.approve(a,s==null?Wi:$t(s));return{from:r,to:n,value:"0",data:A.encodeABI()}}async sendRawTransaction(t,n){let a=t,r={maxPriorityFeePerGas:null,maxFeePerGas:null};n=="POL"?a.gas=Ui:a.gas=await this.web3.eth.estimateGas(t);let{transactionHash:s}=await this.web3.eth.sendTransaction({...a,...r});return{txId:s}}getContract(t,n){return new this.web3.eth.Contract(t,n)}};var La=require("@project-serum/anchor"),ze=require("@solana/web3.js");var ln=class extends ye{constructor(t,n){super();this.solanaRpcUrl=t;this.api=n;this.chainType="SOLANA"}approve(t){throw new J}buildRawTransactionApprove(t){throw new J}buildAnchorProvider(t){let n=new ze.Connection(this.solanaRpcUrl,"confirmed"),a=new ze.PublicKey(t);return new La.AnchorProvider(n,{publicKey:a},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(t){throw new J}async getTokenBalance(t){let{account:n,token:a}=t;try{let r=await ue(new ze.PublicKey(n),new ze.PublicKey(a.tokenAddress));return(await it(r,this.buildAnchorProvider(n))).amount.toString()}catch(r){if(r instanceof Error)return r.message.startsWith("Account does not exist"),"0";throw r}}async getNativeTokenBalance(t){return(await this.buildAnchorProvider(t.account).connection.getBalance(new ze.PublicKey(t.account))).toString()}};var Dt=require("stellar-sdk"),Bl=require("stellar-sdk/lib/horizon");var pn=class extends ye{constructor(t,n,a){super();this.nodeRpcUrlsConfig=t;this.params=n;this.api=a;this.chainType="SRB"}getAllowance(){throw new J}async getTokenBalance(t){if(!t.token.originTokenAddress)throw new k("OriginTokenAddress missing");let[n,a]=t.token.originTokenAddress.split(":"),r=new Dt.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),s;try{s=await r.loadAccount(t.account)}catch(c){if(c instanceof Dt.NotFoundError)return"0";throw c}let A=s.balances.find(c=>(c.asset_type==="credit_alphanum4"||c.asset_type==="credit_alphanum12")&&c.asset_code==n&&c.asset_issuer==a);return A?.balance?B(A.balance,V[z[t.token.chainSymbol].chainType]).toFixed():"0"}async getNativeTokenBalance(t){let s=(await new Dt.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(t.account)).balances.find(o=>o.asset_type==="native");return s?.balance?B(s.balance,V[z[t.chainSymbol].chainType]).toFixed():"0"}approve(){throw new J}buildRawTransactionApprove(){throw new J}};var Xa=[{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 Oi="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Ft=class extends ye{constructor(t,n){super();this.tronWeb=t;this.api=n;this.chainType="TRX"}async getAllowance(t){let{token:{tokenAddress:n},owner:a}=t;return(await(await this.getContract(n)).methods.allowance(a,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 n=await this.buildRawTransactionApprove(t);return await en(this.tronWeb,n)}async buildRawTransactionApprove(t){let{tokenAddress:n,spender:a,owner:r,amount:s}=t,o=s==null?Oi:$t(s),A=[{type:"address",value:a},{type:"uint256",value:o}];return this.buildRawTransaction(n,"approve(address,uint256)",A,"0",r)}async getContract(t){return await this.tronWeb.contract(Xa,t)}async buildRawTransaction(t,n,a,r,s){let o=await this.tronWeb.transactionBuilder.triggerSmartContract(t,n,{callValue:r},a,s);if(!o?.result?.result)throw new k("Unknown error: "+JSON.stringify(o,null,2));return o.transaction}};var dn=class{constructor(e,t,n){this.api=e;this.nodeRpcUrlsConfig=t;this.params=n}async getAllowance(e,t){let n=await this.getChainTokenService(e.token.chainSymbol,e.owner,t).getAllowance(e);return b(n,e.token.decimals).toFixed()}async checkAllowance(e,t){return R(e.amount),I("amount",e.amount,e.token.decimals),this.getChainTokenService(e.token.chainSymbol,e.owner,t).checkAllowance(this.prepareCheckAllowanceParams(e))}async approve(e,t){return t.amount&&(R(t.amount),I("amount",t.amount,t.token.decimals)),this.getChainTokenService(t.token.chainSymbol,t.owner,e).approve(this.prepareApproveParams(t))}async buildRawTransactionApprove(e,t){return e.amount&&(R(e.amount),I("amount",e.amount,e.token.decimals)),this.getChainTokenService(e.token.chainSymbol,e.owner,t).buildRawTransactionApprove(this.prepareApproveParams(e))}async getTokenBalance(e,t){let n=await this.getChainTokenService(e.token.chainSymbol,e.account,t).getTokenBalance(e);return e.token.decimals?b(n,e.token.decimals).toFixed():n}async getNativeTokenBalance(e,t){let n=await this.getChainTokenService(e.chainSymbol,e.account,t).getNativeTokenBalance(e);return{int:n,float:b(n,V[z[e.chainSymbol].chainType]).toFixed()}}getChainTokenService(e,t,n){switch(z[e].chainType){case"EVM":{if(n)return new xt(n,this.api);{let a=this.nodeRpcUrlsConfig.getNodeRpcUrl(e);return new xt(new Ya.default(a),this.api)}}case"TRX":{if(n)return new Ft(n,this.api);{let a=this.nodeRpcUrlsConfig.getNodeRpcUrl(e),r=new Qa.default({fullHost:a});return r.setAddress(t),new Ft(r,this.api)}}case"SOLANA":{let a=this.nodeRpcUrlsConfig.getNodeRpcUrl(e);return new ln(a,this.api)}case"SRB":return new pn(this.nodeRpcUrlsConfig,this.params,this.api)}}prepareCheckAllowanceParams(e){return{...e,amount:B(e.amount,e.token.decimals)}}prepareApproveParams(e){return{tokenAddress:e.token.tokenAddress,owner:e.owner,spender:e.spender,chainSymbol:e.token.chainSymbol,amount:e.amount==null?void 0:(0,Ka.Big)(e.amount).toFixed()}}};var Wt=class{constructor(e){this.nodeRpcUrls=e}getNodeRpcUrl(e){let t=this.nodeRpcUrls[e];if(t!==void 0)return t;throw new dt(e)}},gn=class{constructor(e,t=mt){let n=new Gt(t),a=new Zt(n),r=new Nt(a);this.api=new _t(r),this.tokenService=new dn(this.api,e,t),this.bridge=new tn(this.api,e,t,this.tokenService),this.pool=new on(this.api,e,t,this.tokenService),this.params=t}async chainDetailsMap(){return this.api.getChainDetailsMap()}async tokens(){return this.api.tokens()}async tokensByChain(e){return(await this.api.getChainDetailsMap())[e].tokens}async getTransferStatus(e,t){return this.api.getTransferStatus(e,t)}async getGasBalance(e,t){return this.api.getGasBalance(e,t)}async checkAddress(){return new Promise(e=>{e({status:"OK",gasBalance:null})})}async getPendingStatusInfo(e,t,n,a){R(e);let r;t=="float"?(I("amount",e,n.decimals),r=B(e,n.decimals).toFixed()):r=e;let s=Ce(r,n,await G(this.api,n)),o=await G(this.api,a),A=this.getAmountFromVUsdFormatted(s,a,o),c,m=await this.api.getPendingInfo();for(let u in m[a.chainSymbol])u.toLowerCase()===a.tokenAddress.toLowerCase()&&(c=m[a.chainSymbol][u]);if(c){let u=Gn(c.totalSentAmount,o),g=this.getAmountFromVUsdFormatted(s,a,u),f;return(0,he.Big)(g.int).gt(A.int)?f={min:A,max:g}:f={min:g,max:A},{pendingTxs:c.pendingTxs,pendingAmount:{int:Ee(c.totalSentAmount,3,a.decimals).toFixed(0),float:b(c.totalSentAmount,3).toFixed()},estimatedAmount:f}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:A,max:A}}}async getTokenBalance(e,t){return this.tokenService.getTokenBalance(e,t)}async getNativeTokenBalance(e,t){return this.tokenService.getNativeTokenBalance(e,t)}async calculateFeePercentOnSourceChain(e,t){R(e),I("amountFloat",e,t.decimals);let n=B(e,t.decimals);if(n.eq(0))return 0;let a=Ce(n,t,await G(this.api,t)),r=ee(a,t.decimals);return yn(n,r)}async calculateFeePercentOnDestinationChain(e,t,n){R(e),I("amountFloat",e,t.decimals);let a=B(e,t.decimals);if(a.eq(0))return 0;let r=Ce(a,t,await G(this.api,t)),s=yt(r,n,await G(this.api,n)),o=ee(r,n.decimals);return yn(o,s)}async getAmountToBeReceivedAndGasFeeOptions(e,t,n,a){return R(e),I("amountToSendFloat",e,t.decimals),{amountToSendFloat:(0,he.Big)(e).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(e,t,n,a),gasFeeOptions:await this.getGasFeeOptions(t,n,a)}}async getAmountToSendAndGasFeeOptions(e,t,n,a){return R(e),I("amountToBeReceivedFloat",e,n.decimals),{amountToSendFloat:await this.getAmountToSend(e,t,n,a),amountToBeReceivedFloat:(0,he.Big)(e).toFixed(),gasFeeOptions:await this.getGasFeeOptions(t,n,a)}}async getAmountToBeReceived(e,t,n,a){let r=await G(this.api,t),s=await G(this.api,n);return this.getAmountToBeReceivedFromPools(e,t,n,r,s,a)}async getAmountToBeReceivedFromChain(e,t,n,a,r,s){let o=await this.pool.getPoolInfoFromChain(t,r),A=await this.pool.getPoolInfoFromChain(n,s);return this.getAmountToBeReceivedFromPools(e,t,n,o,A,a)}getAmountToBeReceivedFromPools(e,t,n,a,r,s){R(e),I("amountToSendFloat",e,t.decimals);let o=B(e,t.decimals);if(s&&s==3){if(!t.cctpAddress||!n.cctpAddress||!t.cctpFeeShare)throw new re("Such route does not support CCTP protocol");let c=o.mul((0,he.Big)(1).minus(t.cctpFeeShare)).round(0,he.Big.roundUp),m=Ee(c,t.decimals,n.decimals).round(0);return b(m,n.decimals).toFixed()}let A=Ce(o,t,a);return this.getAmountFromVUsdFormatted(A,n,r).float}async getAmountToSend(e,t,n,a){let r=await G(this.api,t),s=await G(this.api,n);return this.getAmountToSendFromPools(e,t,n,r,s,a)}async getAmountToSendFromChain(e,t,n,a,r,s){let o=await this.pool.getPoolInfoFromChain(t,r),A=await this.pool.getPoolInfoFromChain(n,s);return this.getAmountToSendFromPools(e,t,n,o,A,a)}getAmountToSendFromPools(e,t,n,a,r,s){R(e),I("amountToBeReceivedFloat",e,n.decimals);let o=B(e,n.decimals);if(s&&s==3){if(!t.cctpAddress||!n.cctpAddress||!t.cctpFeeShare)throw new re("Such route does not support CCTP protocol");let m=o.div((0,he.Big)(1).minus(t.cctpFeeShare)).round(0,he.Big.roundDown),u=Ee(m,n.decimals,t.decimals).round(0);return b(u,t.decimals).toFixed()}let A=_n(o,n,r),c=Zn(A,t,a);if((0,he.Big)(c).lte(0))throw new we;return b(c,t.decimals).toFixed()}async getGasFeeOptions(e,t,n){return Rn(e.allbridgeChainId,e.chainType,t.allbridgeChainId,e.decimals,n,this.api)}getAverageTransferTime(e,t,n){return e.transferTime?.[t.chainSymbol]?.[n]??null}async getPoolInfoByToken(e){return await this.api.getPoolInfoByKey({chainSymbol:e.chainSymbol,poolAddress:e.poolAddress})}async refreshPoolInfo(e){if(e){let n=(e instanceof Array?e:[e]).map(a=>({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress}));return this.api.refreshPoolInfo(n)}return this.api.refreshPoolInfo()}aprInPercents(e){return Xn(e)}async getExtraGasMaxLimits(e,t){return await In(e,t,this.api)}async getVUsdFromAmount(e,t,n){R(e);let a;t=="float"?(I("amount",e,n.decimals),a=B(e,n.decimals).toFixed()):a=e;let r=Ce(a,n,await G(this.api,n));return{int:r,float:b(r,3).toFixed()}}async getAmountFromVUsd(e,t){return this.getAmountFromVUsdFormatted(e,t,await G(this.api,t))}getAmountFromVUsdFormatted(e,t,n){R(e);let a=yt(e,t,n);if((0,he.Big)(a).lt(0))throw new we;return{int:a,float:b(a,t.decimals).toFixed()}}async swapAndBridgeFeeCalculation(e,t,n){return Ga(e,{decimals:t.decimals,feeShare:t.feeShare,poolInfo:await G(this.api,t)},{decimals:n.decimals,feeShare:n.feeShare,poolInfo:await G(this.api,n)})}async swapAndBridgeFeeCalculationReverse(e,t,n){let a=Za(e,{decimals:t.decimals,feeShare:t.feeShare,poolInfo:await G(this.api,t)},{decimals:n.decimals,feeShare:n.feeShare,poolInfo:await G(this.api,n)}),r=a.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if((0,he.Big)(r).lt(0))throw new we;return a}async getSendAmountDetails(e,t,n,a){R(e);let r;return t=="float"?(I("amount",e,n.decimals),r=B(e,n.decimals).toFixed()):r=e,_a(r,n,await G(this.api,n),a,await G(this.api,a))}};function Vi(i){return"solanaRpcUrl"in i}var Un=class{constructor(e,t=mt){let n;Vi(e)?n=new Wt({SOL:e.solanaRpcUrl,TRX:e.tronRpcUrl}):n=new Wt(e),this.service=new gn(n,t),this.bridge=this.service.bridge,this.pool=this.service.pool,this.utils=new mn(n,t),this.params=t}async chainDetailsMap(){return this.service.chainDetailsMap()}async tokens(){return this.service.tokens()}async tokensByChain(e){return this.service.tokensByChain(e)}async getTransferStatus(e,t){return this.service.getTransferStatus(e,t)}async getGasBalance(e,t){return this.service.getGasBalance(e,t)}async checkAddress(e,t,n){return await this.service.checkAddress()}async getPendingStatusInfo(e,t,n,a){return this.service.getPendingStatusInfo(e,t,n,a)}async getTokenBalance(e,t){return this.service.getTokenBalance(e,t)}async getNativeTokenBalance(e,t){return this.service.getNativeTokenBalance(e,t)}async calculateFeePercentOnSourceChain(e,t){return this.service.calculateFeePercentOnSourceChain(e,t)}async calculateFeePercentOnDestinationChain(e,t,n){return this.service.calculateFeePercentOnDestinationChain(e,t,n)}async getAmountToBeReceivedAndGasFeeOptions(e,t,n,a){return this.service.getAmountToBeReceivedAndGasFeeOptions(e,t,n,a)}async getAmountToSendAndGasFeeOptions(e,t,n,a){return this.service.getAmountToSendAndGasFeeOptions(e,t,n,a)}async getAmountToBeReceived(e,t,n,a){return this.service.getAmountToBeReceived(e,t,n,a)}async getAmountToBeReceivedFromChain(e,t,n,a,r,s){return this.service.getAmountToBeReceivedFromChain(e,t,n,a,r,s)}getAmountToBeReceivedFromPools(e,t,n,a,r,s){return this.service.getAmountToBeReceivedFromPools(e,t,n,a,r,s)}async getAmountToSend(e,t,n,a){return this.service.getAmountToSend(e,t,n,a)}async getAmountToSendFromChain(e,t,n,a,r,s){return this.service.getAmountToSendFromChain(e,t,n,a,r,s)}getAmountToSendFromPools(e,t,n,a,r,s){return this.service.getAmountToSendFromPools(e,t,n,a,r,s)}async getGasFeeOptions(e,t,n){return this.service.getGasFeeOptions(e,t,n)}getAverageTransferTime(e,t,n){return this.service.getAverageTransferTime(e,t,n)}async getPoolInfoByToken(e){return this.service.getPoolInfoByToken(e)}async refreshPoolInfo(e){return this.service.refreshPoolInfo(e)}aprInPercents(e){return this.service.aprInPercents(e)}async getExtraGasMaxLimits(e,t){return this.service.getExtraGasMaxLimits(e,t)}async getVUsdFromAmount(e,t,n){return this.service.getVUsdFromAmount(e,t,n)}async getAmountFromVUsd(e,t){return this.service.getAmountFromVUsd(e,t)}async swapAndBridgeFeeCalculation(e,t,n){return this.service.swapAndBridgeFeeCalculation(e,t,n)}async swapAndBridgeFeeCalculationReverse(e,t,n){return this.service.swapAndBridgeFeeCalculationReverse(e,t,n)}async getSendAmountDetails(e,t,n,a){return this.service.getSendAmountDetails(e,t,n,a)}};0&&(module.exports={AddressStatus,AllbridgeCoreSdk,AmountFormat,AmountNotEnoughError,ArgumentInvalidDecimalsError,CCTPDoesNotSupportedError,ChainSymbol,ChainType,ErrorCode,ExtraGasMaxLimitExceededError,FeePaymentMethod,InsufficientPoolLiquidityError,InvalidAmountError,InvalidGasFeePaymentOptionError,InvalidMessengerOptionError,InvalidTxError,JupiterError,Messenger,MethodNotSupportedError,NodeRpcUrlNotInitializedError,SdkError,SdkRootError,SolanaAutoTxFee,TimeoutError,TxTooLargeError,VerifyTxError,mainnet,nodeRpcUrlsDefault,nodeUrlsDefault,testnet,testnetNodeRpcUrlsDefault,testnetNodeUrlsDefault});
|
|
5
|
+
&onlyDirectRoutes=true`)}catch(A){throw A instanceof st.AxiosError&&A.response&&A.response.data&&A.response.data.error?new Y(A.response.data.error):new Y("Cannot get route")}let r;try{r=await st.default.post("https://quote-api.jup.ag/v6/swap",JSON.stringify({quoteResponse:a.data,userPublicKey:t,wrapAndUnwrapSol:!0}))}catch(A){throw A instanceof st.AxiosError&&A.response&&A.response.data&&A.response.data.error?new Y(A.response.data.error):new Y("Cannot get swap transaction")}let s;if(r?.data?.swapTransaction)s=r.data.swapTransaction;else throw new Y("Cannot get swap transaction");let o=Buffer.from(s,"base64");return{tx:Qe.VersionedTransaction.deserialize(o)}}async amendJupiterWithSdkTx(t,e){try{let n=await Ke(t,this.connection),a=await Ke(e,this.connection),r=Qe.TransactionMessage.decompile(t.message,{addressLookupTableAccounts:n}),s=Qe.TransactionMessage.decompile(e.message,{addressLookupTableAccounts:a});return s.instructions.shift(),r.instructions.push(...s.instructions),n.push(...a),t.message=r.compileToV0Message(n),e.message.header.numRequiredSignatures===2&&t.signatures.length===1&&t.signatures.push(e.signatures[0]),t}catch(n){throw n instanceof Error&&n.message?new Y(`Some error occurred during creation final swap and bridge transaction. ${n.message}`):new Y("Some error occurred during creation final swap and bridge transaction")}}};var Wn=1e6,zt=class extends le{constructor(e,n,a){super();this.solanaRpcUrl=e;this.params=n;this.api=a;this.chainType="SOLANA";this.jupiterService=new Ht(e)}async buildRawTransactionSwap(e){let n=Oe(this.chainType,e);return await this.buildSwapTransaction(n,e.sourceToken.poolAddress,e.destinationToken.poolAddress,e.txFeeParams)}async buildSwapTransaction(e,n,a,r){let{fromAccountAddress:s,amount:o,contractAddress:A,fromTokenAddress:c,toTokenAddress:m,toAccountAddress:u,minimumReceiveAmount:g}=e,f=s,y=A,h=c,d=m,p=a,P=u,T=new C.PublicKey(f),_=Ne(this.solanaRpcUrl,T.toString()),v=new x.Program(wt,y,_),S=await tt(v.programId),q=await Ue(v.programId),U=new C.PublicKey(h),Te=await nt(U,v.programId),be=new C.PublicKey(n),Re=await ue(T,U),oe=new C.PublicKey(P),H=new C.PublicKey(d),ie=await nt(H,v.programId),Ae=new C.PublicKey(p),$=await ue(oe,H),Pe=[x.web3.ComputeBudgetProgram.setComputeUnitLimit({units:Wn})];try{await it($,_)}catch{let Ya=await x.Spl.associatedToken(_).methods.create().accounts({mint:H,owner:oe,associatedAccount:$}).instruction();Pe.push(Ya)}let Se=await v.methods.swap(new x.BN(o),new x.BN(g||0)).accounts({payer:T,config:q,bridgeAuthority:S,user:T,sendBridgeToken:Te,sendMint:U,sendPool:be,sendUserToken:Re,receiveBridgeToken:ie,receiveMint:H,receivePool:Ae,receiveUserToken:$}).preInstructions(Pe).transaction(),ce=_.connection;return Se.recentBlockhash=(await ce.getLatestBlockhash()).blockhash,Se.feePayer=T,await rt(Se,r,this.solanaRpcUrl),await this.convertToVersionedTransaction(Se,ce)}async buildRawTransactionSend(e){let n=await xe(this.chainType,e,this.api),a=this.addPoolAddress(e,n),r=a.gasFeePaymentMethod=="stablecoin",s;if(r)try{let c=(0,De.Big)(a.fee);a.extraGas&&(c=c.plus(a.extraGas)),a=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(e.sourceToken.decimals,a);let{tx:m}=await this.jupiterService.getJupiterSwapTx(e.fromAccountAddress,e.sourceToken.tokenAddress,c.toFixed(0));if(s=m,a.amount=(0,De.Big)(a.amount).minus(c).toFixed(0),(0,De.Big)(a.amount).lte(0))throw new Ve(`Amount not enough to pay fee, ${b((0,De.Big)(a.amount).minus(1).neg(),e.sourceToken.decimals).toFixed()} stables is missing`)}catch(c){throw c instanceof F?c:c instanceof Error&&c.message?new Y(`Some error occurred during creation Jupiter swap transaction. ${c.message}`):new Y("Some error occurred during creation Jupiter swap transaction")}let o,A;switch(n.messenger){case 1:{let c=await this.prepareSwapAndBridgeData(a);o=await this.buildSwapAndBridgeAllbridgeTransaction(c);break}case 2:{let c=await this.prepareSwapAndBridgeData(a),{transaction:m,messageAccount:u}=await this.buildSwapAndBridgeWormholeTransaction(c);o=m,A=u;break}case 3:{let c=await this.prepareSwapAndBridgeCctpData(a),{transaction:m,messageSentEventDataKeypair:u}=await this.buildSwapAndBridgeCctpTransaction(e.destinationToken.chainSymbol,c);o=m,A=u;break}}if(r){if(!s)throw new Y("Swap tx is absent");o=await this.jupiterService.amendJupiterWithSdkTx(s,o)}return await Sa(o,e.txFeeParams,this.solanaRpcUrl),A&&o.sign([A]),o}addPoolAddress(e,n){return{...n,poolAddress:e.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(e,n){if(n.gasFeePaymentMethod=="stablecoin"){let a=(await this.api.getReceiveTransactionCost({sourceChainId:n.fromChainId,destinationChainId:n.toChainId,messenger:n.messenger})).sourceNativeTokenPrice;n.fee=(0,De.Big)(n.fee).div(a).mul((0,De.Big)(10).pow(V.SOLANA-e)).toFixed(0),n.extraGas&&(n.extraGas=(0,De.Big)(n.extraGas).div(a).mul((0,De.Big)(10).pow(V.SOLANA-e)).toFixed(0)),n.gasFeePaymentMethod="native"}return n}getExtraGasInstruction(e,n,a){return x.web3.SystemProgram.transfer({fromPubkey:n,toPubkey:a,lamports:+e})}async prepareSwapAndBridgeData(e){let{amount:n,contractAddress:a,fromChainId:r,fromAccountAddress:s,fromTokenAddress:o,toChainId:A,toAccountAddress:c,toTokenAddress:m,poolAddress:u,extraGas:g}=e,f=o,y=s,h=A,d=m,p=c,P=a,T=r,_=Ne(this.solanaRpcUrl,y),v=new x.Program(wt,P,_),S=Array.from(at()),q=new C.PublicKey(u),U=await Ta(n,v,q),Te=await ta(S,v.programId),be=await tt(v.programId),Re=await ue(new C.PublicKey(y),new C.PublicKey(f)),oe=await nt(new C.PublicKey(f),v.programId),H=await Cn(h,v.programId),ie=await aa(h,Buffer.from(d),v.programId),Ae=await Ue(v.programId),$=await v.account.config.fetch(Ae),Pe=await ht(h,$.gasOracleProgramId),Se=await ht(T,$.gasOracleProgramId),ce=ba({amount:U,recipient:Buffer.from(p),nonce:Buffer.from(S),receiveToken:Buffer.from(d),destinationChainId:h,sourceChainId:T,chainBridge:(await tt(v.programId)).toBuffer()}),w={};return w.bridge=v,w.amount=new x.BN(n),w.vusdAmount=new x.BN(U),w.nonce=S,w.recipient=Array.from(p),w.receiveToken=Array.from(d),w.poolAccount=q,w.lockAccount=Te,w.bridgeAuthority=be,w.userToken=Re,w.bridgeTokenAccount=oe,w.chainBridgeAccount=H,w.otherBridgeTokenAccount=ie,w.userAccount=new C.PublicKey(y),w.destinationChainId=h,w.mint=new C.PublicKey(f),w.config=Ae,w.configAccountInfo=$,w.gasPrice=Pe,w.thisGasPrice=Se,w.message=ce,g&&(w.extraGasInstruction=this.getExtraGasInstruction(g,w.userAccount,Ae)),w}async buildSwapAndBridgeAllbridgeTransaction(e){let{bridge:n,vusdAmount:a,nonce:r,recipient:s,receiveToken:o,poolAccount:A,lockAccount:c,bridgeAuthority:m,userToken:u,bridgeTokenAccount:g,chainBridgeAccount:f,otherBridgeTokenAccount:y,userAccount:h,destinationChainId:d,mint:p,config:P,configAccountInfo:T,gasPrice:_,thisGasPrice:v,message:S,extraGasInstruction:q}=e,U=T.allbridgeMessengerProgramId,Te=await Bn(d,U),be=await Ue(U),Re=await ia(S,U),oe=[];q&&oe.push(q);let H=await n.methods.swapAndBridge({vusdAmount:a,nonce:r,destinationChainId:d,recipient:s,receiveToken:o}).accounts({mint:p,user:h,config:P,lock:c,pool:A,gasPrice:_,thisGasPrice:v,bridgeAuthority:m,userToken:u,bridgeToken:g,chainBridge:f,messenger:U,messengerGasUsage:Te,messengerConfig:be,sentMessageAccount:Re,otherBridgeToken:y}).preInstructions([x.web3.ComputeBudgetProgram.setComputeUnitLimit({units:Wn})]).postInstructions(oe).transaction(),ie=Ne(this.solanaRpcUrl,h.toString()).connection;return H.recentBlockhash=(await ie.getLatestBlockhash()).blockhash,H.feePayer=h,await this.convertToVersionedTransaction(H,ie)}async convertToVersionedTransaction(e,n){let a=await n.getAddressLookupTable(new C.PublicKey(this.params.solanaLookUpTable)).then(s=>s.value);if(!a)throw new k("Cannot find allbridgeLookupTableAccount");let r=new x.web3.TransactionMessage({payerKey:e.feePayer,recentBlockhash:e.recentBlockhash,instructions:e.instructions}).compileToV0Message([a]);return new x.web3.VersionedTransaction(r)}async buildSwapAndBridgeWormholeTransaction(e){let{bridge:n,vusdAmount:a,nonce:r,recipient:s,receiveToken:o,poolAccount:A,lockAccount:c,bridgeAuthority:m,userToken:u,bridgeTokenAccount:g,chainBridgeAccount:f,otherBridgeTokenAccount:y,userAccount:h,destinationChainId:d,mint:p,config:P,configAccountInfo:T,gasPrice:_,thisGasPrice:v,message:S,extraGasInstruction:q}=e,U=this.params.wormholeMessengerProgramId,[Te]=C.PublicKey.findProgramAddressSync([Buffer.from("Bridge")],new C.PublicKey(U)),[be]=C.PublicKey.findProgramAddressSync([Buffer.from("fee_collector")],new C.PublicKey(U)),[Re]=C.PublicKey.findProgramAddressSync([Buffer.from("Sequence"),m.toBuffer()],new C.PublicKey(U)),oe=await Bn(d,T.wormholeMessengerProgramId),H=await Ue(T.wormholeMessengerProgramId),ie=C.Keypair.generate(),Ae=Ne(this.solanaRpcUrl,h.toString()),$=await Ae.connection.getAccountInfo(Te);if($==null)throw new k("Cannot fetch wormhole bridge account info");let Pe=new x.BN($.data.slice(16,24),"le").toString(),Se=C.SystemProgram.transfer({fromPubkey:h,toPubkey:be,lamports:+Pe}),ce=[];q&&ce.push(q);let w={mint:p,user:h,config:P,lock:c,pool:A,gasPrice:_,thisGasPrice:v,bridgeAuthority:m,userToken:u,bridgeToken:g,chainBridge:f,otherBridgeToken:y,messengerGasUsage:oe,wormholeProgram:U,bridge:Te,message:ie.publicKey,wormholeMessenger:T.wormholeMessengerProgramId,sequence:Re,feeCollector:be,wormholeMessengerConfig:H,clock:x.web3.SYSVAR_CLOCK_PUBKEY},Et=await n.methods.swapAndBridgeWormhole({vusdAmount:a,nonce:r,destinationChainId:d,recipient:s,receiveToken:o}).accounts(w).preInstructions([x.web3.ComputeBudgetProgram.setComputeUnitLimit({units:Wn}),Se]).postInstructions(ce).signers([ie]).transaction();return Et.recentBlockhash=(await Ae.connection.getLatestBlockhash()).blockhash,Et.feePayer=h,{transaction:await this.convertToVersionedTransaction(Et,Ae.connection),messageAccount:ie}}async prepareSwapAndBridgeCctpData(e){let{contractAddress:n,amount:a,fromAccountAddress:r,fromTokenAddress:s,toChainId:o,toAccountAddress:A,toTokenAddress:c,extraGas:m}=e,u=n;if(!u)throw new re("Such route does not support CCTP protocol");let g=4,f=r,y=c,h=A,d=Ne(this.solanaRpcUrl,f),p=new x.Program(fa,u,d),P=new C.PublicKey(s),T=await ra(P,p.programId),_=new C.PublicKey(f),v=await p.account.cctpBridge.fetch(T),S={};return S.cctpBridge=p,S.cctpBridgeAccount=T,S.cctpAddressAccount=new C.PublicKey(u),S.amount=new x.BN(a),S.recipient=Array.from(h),S.receiveToken=Array.from(y),S.userToken=await ue(_,P),S.bridgeAuthority=await na(T,p.programId),S.bridgeTokenAccount=await sa(P,p.programId),S.chainBridgeAccount=await Cn(o,p.programId),S.userAccount=_,S.destinationChainId=o,S.mint=P,S.gasPrice=await ht(o,v.gasOracleProgramId),S.thisGasPrice=await ht(g,v.gasOracleProgramId),S.provider=d,m&&(S.extraGasInstruction=this.getExtraGasInstruction(m,S.userAccount,T)),S}async buildSwapAndBridgeCctpTransaction(e,n){let{cctpBridge:a,cctpBridgeAccount:r,amount:s,recipient:o,receiveToken:A,bridgeAuthority:c,userToken:m,bridgeTokenAccount:u,chainBridgeAccount:g,userAccount:f,destinationChainId:y,mint:h,gasPrice:d,thisGasPrice:p,extraGasInstruction:P,provider:T}=n,_=this.params.cctpParams.cctpDomains[e],v=this.params.cctpParams.cctpTransmitterProgramId,S=this.params.cctpParams.cctpTokenMessengerMinter;if(_==null||!v||!S)throw new k("CCTP is not configured");let q=new C.PublicKey(v),U=new C.PublicKey(S),{messageTransmitterAccount:Te,tokenMessenger:be,tokenMessengerEventAuthority:Re,tokenMinter:oe,localToken:H,remoteTokenMessengerKey:ie,authorityPda:Ae}=Aa(_,h,q,U),$=[];P&&$.push(P);let Pe=C.Keypair.generate(),Se=oa(a.programId,Pe.publicKey),ce=await a.methods.bridge({amount:s,destinationChainId:y,recipient:o,receiveToken:A}).accounts({mint:h,user:f,cctpBridge:r,messageSentEventData:Pe.publicKey,lock:Se,cctpMessenger:U,messageTransmitterProgram:q,messageTransmitterAccount:Te,tokenMessenger:be,tokenMinter:oe,localToken:H,remoteTokenMessengerKey:ie,authorityPda:Ae,eventAuthority:Re,bridgeToken:u,gasPrice:d,thisGasPrice:p,chainBridge:g,userToken:m,bridgeAuthority:c}).preInstructions([x.web3.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions($).transaction(),w=T.connection;return ce.recentBlockhash=(await w.getLatestBlockhash()).blockhash,ce.feePayer=f,{transaction:await this.convertToVersionedTransaction(ce,w),messageSentEventDataKeypair:Pe}}send(e){throw new J}};var ka=require("big.js"),jt=require("stellar-sdk");var Ye=require("stellar-sdk");var Q=require("stellar-sdk");var pe=class{constructor(t){this.value=t}unwrapErr(){throw new Error("No error")}unwrap(){return"value"in this.value?this.value.value:this.value}isOk(){return!0}isErr(){return!this.isOk()}},se=class{constructor(t){this.error=t}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()}},wi=/Error\(Contract, #(\d+)\)/,Ci="GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF",W=class i{constructor(t){this.options=t;this.simulate=async()=>(this.simulation=await this.server.simulateTransaction(this.raw),Q.SorobanRpc.Api.isSimulationSuccess(this.simulation)&&(this.raw=Q.SorobanRpc.assembleTransaction(this.raw,this.simulation).build()),this);this.getAccount=()=>new Q.Account(Ci,"0");this.server=new Q.SorobanRpc.Server(this.options.rpcUrl,{allowHttp:this.options.rpcUrl.startsWith("http://")})}static async fromSimulation(t){let e=new i(t),n=new Q.Contract(t.contractId);return e.raw=new Q.TransactionBuilder(e.getAccount(),{fee:t.fee?.toString(10)??Q.BASE_FEE,networkPassphrase:t.networkPassphrase}).addOperation(n.call(t.method,...t.args??[])).setTimeout(Q.TimeoutInfinite).build(),await e.simulate()}get simulationData(){if(this.simulationResult&&this.simulationTransactionData)return{result:this.simulationResult,transactionData:this.simulationTransactionData};let t=this.simulation;if(Q.SorobanRpc.Api.isSimulationError(t))throw new Error(`Transaction simulation failed: "${t.error}"`);if(!t.result)throw new Error(`Expected an invocation simulation, but got no 'result' field. Simulation: ${JSON.stringify(t,null,2)}`);return this.simulationResult=t.result,this.simulationTransactionData=t.transactionData.build(),{result:this.simulationResult,transactionData:this.simulationTransactionData}}get result(){try{return this.options.parseResultXdr(this.simulationData.result.retval)}catch(t){let e=this.parseError(t.toString());if(e)return e;throw t}}parseError(t){if(!this.options.errorTypes)return;let e=t.match(wi);if(!e)return;let n=parseInt(e[1],10),a=this.options.errorTypes[n];if(a.message)return new se(a)}};var Z=require("stellar-sdk");var Fe=class i{constructor(t){this.options=t;this.simulate=async()=>(this.simulation=await this.server.simulateTransaction(this.raw),Z.SorobanRpc.Api.isSimulationSuccess(this.simulation)&&(this.raw=Z.SorobanRpc.assembleTransaction(this.raw,this.simulation).build()),this);this.server=new Z.SorobanRpc.Server(this.options.rpcUrl,{allowHttp:this.options.rpcUrl.startsWith("http://")})}static async xdrFromSimulation(t){let e=new i(t),n=new Z.Contract(t.contractId);e.raw=new Z.TransactionBuilder(await e.server.getAccount(t.account),{fee:t.fee?.toString(10)??Z.BASE_FEE,networkPassphrase:t.networkPassphrase}).addOperation(n.call(t.method,...t.args??[])).setTimeout(Z.TimeoutInfinite).build();let a=await e.simulate(),r=a.raw.operations[0];return a.raw=new Z.TransactionBuilder(await e.server.getAccount(t.account),{fee:a.raw.fee,networkPassphrase:t.networkPassphrase}).setTimeout(Z.TimeoutInfinite).addOperation(Z.Operation.invokeHostFunction({...r,auth:r.auth??[]})).build(),await a.simulate(),a.raw.toXDR()}};var Ba={0:{message:""},1:{message:""},2:{message:""},3:{message:""},4:{message:""},5:{message:""},6:{message:""},7:{message:""},8:{message:""},9:{message:""},103:{message:""},104:{message:""},105:{message:""},106:{message:""},107:{message:""},108:{message:""},109:{message:""},203:{message:""},204:{message:""},205:{message:""},206:{message:""},207:{message:""},208:{message:""},209:{message:""},210:{message:""},211:{message:""},212:{message:""},214:{message:""},215:{message:""},216:{message:""},217:{message:""},218:{message:""},300:{message:""},301:{message:""},302:{message:""},303:{message:""},400:{message:""}},Bt=class{constructor(t){this.options=t;this.parsers={swapAndBridge:t=>t instanceof se?t:new pe(this.spec.funcResToNative("swap_and_bridge",t)),swap:t=>t instanceof se?t:new pe(this.spec.funcResToNative("swap",t))};this.swapAndBridge=async({sender:t,token:e,amount:n,recipient:a,destination_chain_id:r,receive_token:s,nonce:o,gas_amount:A,fee_token_amount:c},m={})=>await Fe.xdrFromSimulation({method:"swap_and_bridge",args:this.spec.funcArgsToScVals("swap_and_bridge",{sender:new Ye.Address(t),token:new Ye.Address(e),amount:n,recipient:a,destination_chain_id:r,receive_token:s,nonce:o,gas_amount:A,fee_token_amount:c}),account:t,...m,...this.options,errorTypes:Ba,parseResultXdr:this.parsers.swapAndBridge});this.swap=async({sender:t,amount:e,token:n,receive_token:a,recipient:r,receive_amount_min:s},o={})=>await Fe.xdrFromSimulation({method:"swap",args:this.spec.funcArgsToScVals("swap",{sender:new Ye.Address(t),amount:e,token:n,receive_token:a,recipient:new Ye.Address(r),receive_amount_min:s}),account:t,...o,...this.options,errorTypes:Ba,parseResultXdr:this.parsers.swap});this.spec=new Ye.ContractSpec(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJY2xhaW1hYmxlAAAAAAAAAQAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACWNsYWltYWJsZQAAAAAAAAEAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAJQAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"])}};var qt=class extends le{constructor(e,n,a){super();this.nodeRpcUrlsConfig=e;this.params=n;this.api=a;this.chainType="SRB"}async buildRawTransactionSend(e){let n=await xe(this.chainType,e,this.api);return await this.buildRawTransactionSendFromParams(n)}async buildRawTransactionSendFromParams(e){let{amount:n,contractAddress:a,fromAccountAddress:r,fromTokenAddress:s,toChainId:o,toAccountAddress:A,toTokenAddress:c,fee:m,gasFeePaymentMethod:u,extraGas:g}=e,f=m;g&&(f=(0,ka.Big)(f).plus(g).toFixed());let y=this.getContract(Bt,a),h;return u==="stablecoin"?h=await y.swapAndBridge({sender:r,token:jt.Address.contract(Buffer.from(s)).toString(),amount:BigInt(n),recipient:Buffer.from(A),destination_chain_id:+o,receive_token:Buffer.from(c),nonce:vn(),gas_amount:BigInt(0),fee_token_amount:BigInt(f)}):h=await y.swapAndBridge({sender:r,token:jt.Address.contract(Buffer.from(s)).toString(),amount:BigInt(n),recipient:Buffer.from(A),destination_chain_id:+o,receive_token:Buffer.from(c),nonce:vn(),gas_amount:BigInt(f),fee_token_amount:BigInt(0)}),h}async buildRawTransactionSwap(e){let n=Oe(this.chainType,e);return await this.buildRawTransactionSwapFromParams(n)}async buildRawTransactionSwapFromParams(e){let{amount:n,contractAddress:a,fromAccountAddress:r,fromTokenAddress:s,toAccountAddress:o,toTokenAddress:A,minimumReceiveAmount:c}=e;return await this.getContract(Bt,a).swap({sender:r,amount:BigInt(n),token:jt.Address.contract(Buffer.from(s)).toBuffer(),receive_token:Buffer.from(A),recipient:o,receive_amount_min:BigInt(c)})}send(e){throw new J}getContract(e,n){let a={contractId:n,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new e(a)}};var Ra=require("big.js");var Ma=O(require("bn.js"));function $t(i){return"0x"+new Ma.default(i).toString("hex")}function va(i){return new Promise(t=>setTimeout(()=>t(),i))}var ot=i=>(...t)=>new Promise((e,n)=>i(...t,(a,r)=>a?n(a):e(r)));async function en(i,t){let e=await i.trx.sign(t);if(!e.signature)throw new Ge("Transaction was not signed properly");let a=(await i.trx.sendRawTransaction(e)).txid;return await Bi(i,a),{txId:a}}async function Bi(i,t,e=1e4){let n=Date.now();for(;;){if(Date.now()-n>e)throw new qe("Transaction not found");let a=await i.trx.getUnconfirmedTransactionInfo(t);if(!a?.receipt){await va(2e3);continue}if(a.receipt.result==="SUCCESS")return a;throw new qe(`Transaction status is ${a.receipt.result}`)}}var kt=class extends le{constructor(e,n){super();this.tronWeb=e;this.api=n;this.chainType="TRX"}async send(e){let n=await xe(this.chainType,e,this.api),a=await this.buildRawTransactionSendFromParams(n);return await en(this.tronWeb,a)}async buildRawTransactionSwap(e){let n=Oe(this.chainType,e);return await this.buildRawTransactionSwapFromParams(n)}async buildRawTransactionSwapFromParams(e){let{amount:n,contractAddress:a,fromAccountAddress:r,fromTokenAddress:s,toAccountAddress:o,toTokenAddress:A,minimumReceiveAmount:c}=e,m=[{type:"uint256",value:n},{type:"bytes32",value:s},{type:"bytes32",value:A},{type:"address",value:o},{type:"uint256",value:c}];return this.buildRawTransaction(a,"swap(uint256,bytes32,bytes32,address,uint256)",m,"0",r)}async buildRawTransactionSend(e){let n=await xe(this.chainType,e,this.api);return this.buildRawTransactionSendFromParams(n)}async buildRawTransactionSendFromParams(e){let{amount:n,contractAddress:a,fromAccountAddress:r,fromTokenAddress:s,toChainId:o,toAccountAddress:A,toTokenAddress:c,messenger:m,fee:u,gasFeePaymentMethod:g,extraGas:f}=e,y=u;f&&(y=(0,Ra.Big)(y).plus(f).toFixed());let h=at().toJSON().data,d,p,P;return m==3?(g==="stablecoin"?(d=[{type:"uint256",value:n},{type:"bytes32",value:A},{type:"uint256",value:o},{type:"uint256",value:y}],p="0"):(d=[{type:"uint256",value:n},{type:"bytes32",value:A},{type:"uint256",value:o},{type:"uint256",value:0}],p=y),P="bridge(uint256,bytes32,uint256,uint256)"):(g==="stablecoin"?(d=[{type:"bytes32",value:s},{type:"uint256",value:n},{type:"bytes32",value:A},{type:"uint256",value:o},{type:"bytes32",value:c},{type:"uint256",value:h},{type:"uint8",value:m},{type:"uint256",value:y}],p="0"):(d=[{type:"bytes32",value:s},{type:"uint256",value:n},{type:"bytes32",value:A},{type:"uint256",value:o},{type:"bytes32",value:c},{type:"uint256",value:h},{type:"uint8",value:m},{type:"uint256",value:0}],p=y),P="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)"),this.buildRawTransaction(a,P,d,p,r)}async buildRawTransaction(e,n,a,r,s){let o=await this.tronWeb.transactionBuilder.triggerSmartContract(e,n,{callValue:r},a,s);if(!o?.result?.result)throw new k("Unknown error: "+JSON.stringify(o,null,2));return o.transaction}};var tn=class{constructor(t,e,n,a){this.api=t;this.nodeRpcUrlsConfig=e;this.params=n;this.tokenService=a;this.rawTxBuilder=new Qt(t,e,n,a)}async getAllowance(t,e){let n,a;e?(n=t,a=e):a=t;let r=St(a.token,a.messenger);return await this.tokenService.getAllowance({...a,spender:r},n)}async checkAllowance(t,e){let n,a;e?(n=t,a=e):a=t;let r=St(a.token,a.messenger);return this.tokenService.checkAllowance({...a,spender:r},n)}async approve(t,e){let n=St(e.token,e.messenger);return this.tokenService.approve(t,{...e,spender:n})}async send(t,e){return R(e.amount),I("amount",e.amount,e.sourceToken.decimals),Yt(e.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).send(e)}};function St(i,t){if(t&&t==3){if(i.cctpAddress)return i.cctpAddress;throw new re("Such route does not support CCTP protocol")}else return i.bridgeAddress}function Yt(i,t,e,n,a){switch(z[i].chainType){case"EVM":{if(a)return new Pt(a,t,e);{let r=e.getNodeRpcUrl(i);return new Pt(new xa.default(r),t,e)}}case"TRX":{if(a)return new kt(a,t);{let r=e.getNodeRpcUrl(i);return new kt(new Ia.default({fullHost:r}),t)}}case"SOLANA":return new zt(e.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:n.wormholeMessengerProgramId,solanaLookUpTable:n.solanaLookUpTable,cctpParams:n.cctpParams},t);case"SRB":return new qt(e,n,t)}}var Ea=require("big.js"),Ua=O(require("tronweb")),Na=O(require("web3"));var ve=require("big.js");function Da(i,t,e,n,a){let r=B(i,3),s=(0,ve.Big)(r),o=(0,ve.Big)(e),A=(0,ve.Big)(n).plus(a),c,m;if(o.eq(0)||A.eq(0)){let g=s.div(2);c=(0,ve.Big)(n).plus(g),m=(0,ve.Big)(a).plus(g)}else c=(0,ve.Big)(n).plus(s.mul(n).div(A)),m=(0,ve.Big)(a).plus(s.mul(a).div(A));return(0,ve.Big)(Kn(t,c.toFixed(),m.toFixed())).minus(o).toFixed()}function Fa(i){let t=B(i,3);return(0,ve.Big)(t).round().toFixed()}var Je=[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}];var ae=class{constructor(t){this.lpAmount=t.lpAmount,this.rewardDebt=t.rewardDebt}get userLiquidity(){return b(this.lpAmount,3).toFixed()}earned(t,e){let n=Ln(this.lpAmount,this.rewardDebt,t.accRewardPerShareP,t.p);return e?b(n,e).toFixed():n}};var de=class{};var Mt=class extends de{constructor(e,n){super();this.web3=e;this.api=n;this.chainType="EVM";this.P=52}async getUserBalanceInfo(e,n){let a;try{a=await Lt(this.getUserBalanceInfoByBatch(e,n),`Cannot get UserBalanceInfo for ${n.name} on ${n.chainSymbol}`,5e3)}catch{a=await wn(()=>this.getUserBalanceInfoPerProperty(e,n),`Cannot get UserBalanceInfo for ${n.name} on ${n.chainSymbol}`,5,2e3)}return a}async getUserBalanceInfoByBatch(e,n){let a=new this.web3.BatchRequest,r=new this.web3.eth.Contract(Je,n.poolAddress),s=["userRewardDebt","balanceOf"].map(c=>ot(m=>a.add(r.methods[c](e).call.request({},m)))());a.execute();let[o,A]=await Promise.all(s);return new ae({lpAmount:A,rewardDebt:o})}async getUserBalanceInfoPerProperty(e,n){let a=await this.getPoolContract(n.poolAddress).methods.userRewardDebt(e).call(),r=await this.getPoolContract(n.poolAddress).methods.balanceOf(e).call();return new ae({lpAmount:r,rewardDebt:a})}async getPoolInfoFromChain(e){let n;try{n=await Lt(this.getPoolInfoByBatch(e),`Cannot get PoolInfo for ${e.name} on ${e.chainSymbol}`,5e3)}catch{n=await wn(()=>this.getPoolInfoPerProperty(e),`Cannot get PoolInfo for ${e.name} on ${e.chainSymbol}`,5,2e3)}return n}async getPoolInfoByBatch(e){let n=new this.web3.BatchRequest,a=new this.web3.eth.Contract(Je,e.poolAddress),r=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(h=>ot(d=>n.add(a.methods[h]().call.request({},d)))());n.execute();let[s,o,A,c,m,u]=await Promise.all(r),g=A.toString(),f=c.toString(),y=te({tokenBalance:g,vUsdBalance:f});return{aValue:s.toString(),dValue:o.toString(),tokenBalance:g,vUsdBalance:f,totalLpAmount:m.toString(),accRewardPerShareP:u.toString(),p:this.P,imbalance:y}}async getPoolInfoPerProperty(e){let n=this.getPoolContract(e.poolAddress),a=await n.methods.a().call(),r=await n.methods.d().call(),s=await n.methods.tokenBalance().call(),o=await n.methods.vUsdBalance().call(),A=await n.methods.totalSupply().call(),c=await n.methods.accRewardPerShareP().call(),m=te({tokenBalance:s,vUsdBalance:o});return{aValue:a,dValue:r,tokenBalance:s,vUsdBalance:o,totalLpAmount:A,accRewardPerShareP:c,p:this.P,imbalance:m}}async buildRawTransactionDeposit(e){return Promise.resolve({...this.buildTxParams(e),data:this.getPoolContract(e.token.poolAddress).methods.deposit(e.amount).encodeABI()})}async buildRawTransactionWithdraw(e){return Promise.resolve({...this.buildTxParams(e),data:this.getPoolContract(e.token.poolAddress).methods.withdraw(e.amount).encodeABI()})}async buildRawTransactionClaimRewards(e){return Promise.resolve({...this.buildTxParams(e),data:this.getPoolContract(e.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(e){return{from:e.accountAddress,to:e.token.poolAddress,value:"0"}}getContract(e,n){return new this.web3.eth.Contract(e,n)}getPoolContract(e){return this.getContract(Je,e)}};var nn=class{constructor(t,e,n,a){this.api=t;this.nodeRpcUrlsConfig=e;this.params=n;this.tokenService=a}async approve(t,e){if(e){let n=t,a=e;return this.tokenService.buildRawTransactionApprove({...a,spender:a.token.poolAddress},n)}else{let n=t;return this.tokenService.buildRawTransactionApprove({...n,spender:n.token.poolAddress})}}async deposit(t,e){return R(t.amount),I("amount",t.amount,t.token.decimals),t.amount=B(t.amount,t.token.decimals).toFixed(),At(t.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,e).buildRawTransactionDeposit(t)}async withdraw(t,e){return R(t.amount),I("amount",t.amount,t.token.decimals),t.amount=B(t.amount,3).toFixed(),At(t.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,e).buildRawTransactionWithdraw(t)}async claimRewards(t,e){return At(t.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,e).buildRawTransactionClaimRewards(t)}};var fe=require("@project-serum/anchor"),ge=require("@solana/web3.js");var an=class extends de{constructor(e,n){super();this.solanaRpcUrl=e;this.api=n;this.chainType="SOLANA";this.P=48}async getUserBalanceInfo(e,n){let a=this.buildAnchorProvider(e),r=this.getBridge(n.bridgeAddress,a),s=new ge.PublicKey(n.poolAddress),o=await r.account.pool.fetch(s);try{let A=await kn(new ge.PublicKey(e),o.mint,r.programId),{lpAmount:c,rewardDebt:m}=await r.account.userDeposit.fetch(A);return new ae({lpAmount:c.toString(),rewardDebt:m.toString()})}catch{return new ae({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(e){let n=this.buildAnchorProvider(e.bridgeAddress),a=await this.getBridge(e.bridgeAddress,n).account.pool.fetch(e.poolAddress),r=a.vUsdBalance.toString(),s=a.tokenBalance.toString(),o=te({tokenBalance:s,vUsdBalance:r});return{dValue:a.d.toString(),aValue:a.a.toString(),totalLpAmount:a.totalLpAmount.toString(),vUsdBalance:r,tokenBalance:s,accRewardPerShareP:a.accRewardPerShareP.toString(),p:this.P,imbalance:o}}async buildRawTransactionDeposit(e){let{bridge:n,accounts:a,preInstructions:r}=await this.prepareDataForTransaction(e),s=await n.methods.deposit(new fe.BN(e.amount)).accounts(a).preInstructions(r).transaction();return s.recentBlockhash=(await this.buildAnchorProvider(e.accountAddress).connection.getLatestBlockhash()).blockhash,s.feePayer=new ge.PublicKey(e.accountAddress),await rt(s,e.txFeeParams,this.solanaRpcUrl),s}async buildRawTransactionWithdraw(e){let{bridge:n,accounts:a,preInstructions:r}=await this.prepareDataForTransaction(e),s=await n.methods.withdraw(new fe.BN(e.amount)).accounts(a).preInstructions(r).transaction();return s.recentBlockhash=(await this.buildAnchorProvider(e.accountAddress).connection.getLatestBlockhash()).blockhash,s.feePayer=new ge.PublicKey(e.accountAddress),await rt(s,e.txFeeParams,this.solanaRpcUrl),s}async buildRawTransactionClaimRewards(e){let{bridge:n,accounts:a,preInstructions:r}=await this.prepareDataForTransaction(e),s=await n.methods.claimRewards().accounts(a).preInstructions(r).transaction();return s.recentBlockhash=(await this.buildAnchorProvider(e.accountAddress).connection.getLatestBlockhash()).blockhash,s.feePayer=new ge.PublicKey(e.accountAddress),await rt(s,e.txFeeParams,this.solanaRpcUrl),s}async prepareDataForTransaction(e){let n=this.buildAnchorProvider(e.accountAddress),a=this.getBridge(e.token.bridgeAddress,n),{accounts:r,preInstructions:s}=await this._getLPTransactionData(a,e.token.poolAddress,e.accountAddress,n);return{bridge:a,accounts:r,preInstructions:s}}getBridge(e,n){return new fe.Program(wt,e,n)}buildAnchorProvider(e){let n=new ge.Connection(this.solanaRpcUrl,"confirmed"),a=new ge.PublicKey(e);return new fe.AnchorProvider(n,{publicKey:a},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(e,n,a,r){let s=new ge.PublicKey(a),o=await Ue(e.programId),A=await tt(e.programId),c=new ge.PublicKey(n),u=(await e.account.pool.fetch(c)).mint,g=await ue(s,u),f=await nt(u,e.programId),y=await kn(s,u,e.programId),h=[fe.web3.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await it(g,r)}catch{let T=await fe.Spl.associatedToken(r).methods.create().accounts({mint:u,owner:s,associatedAccount:g}).instruction();h.push(T)}try{await e.account.userDeposit.fetch(y)}catch{let P=await e.methods.initDepositAccount().accounts({mint:u,user:s,userDeposit:y}).instruction();h.push(P)}return{accounts:{mint:u,user:s,config:o,pool:c,bridgeAuthority:A,userDeposit:y,userToken:g,bridgeToken:f},preInstructions:h}}};var He=require("stellar-sdk");var vt={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:""}},rn=class{constructor(t){this.options=t;this.parsers={deposit:t=>t instanceof se?t:new pe(this.spec.funcResToNative("deposit",t)),withdraw:t=>t instanceof se?t:new pe(this.spec.funcResToNative("withdraw",t)),claimRewards:t=>t instanceof se?t:new pe(this.spec.funcResToNative("claim_rewards",t)),getPool:t=>t instanceof se?t:new pe(this.spec.funcResToNative("get_pool",t)),getUserDeposit:t=>t instanceof se?t:new pe(this.spec.funcResToNative("get_user_deposit",t))};this.depositXdr=async({sender:t,amount:e},n={})=>await Fe.xdrFromSimulation({method:"deposit",args:this.spec.funcArgsToScVals("deposit",{sender:new He.Address(t),amount:e}),account:t,...n,...this.options,errorTypes:vt,parseResultXdr:this.parsers.deposit});this.withdrawXdr=async({sender:t,amount_lp:e},n={})=>await Fe.xdrFromSimulation({method:"withdraw",args:this.spec.funcArgsToScVals("withdraw",{sender:new He.Address(t),amount_lp:e}),account:t,...n,...this.options,errorTypes:vt,parseResultXdr:this.parsers.withdraw});this.claimRewardsXdr=async({sender:t},e={})=>await Fe.xdrFromSimulation({method:"claim_rewards",args:this.spec.funcArgsToScVals("claim_rewards",{sender:new He.Address(t)}),account:t,...e,...this.options,errorTypes:vt,parseResultXdr:this.parsers.claimRewards});this.getPool=async(t={})=>await W.fromSimulation({method:"get_pool",args:this.spec.funcArgsToScVals("get_pool",{}),...t,...this.options,errorTypes:vt,parseResultXdr:this.parsers.getPool});this.getUserDeposit=async({user:t},e={})=>await W.fromSimulation({method:"get_user_deposit",args:this.spec.funcArgsToScVals("get_user_deposit",{user:new He.Address(t)}),...e,...this.options,errorTypes:vt,parseResultXdr:this.parsers.getUserDeposit});this.spec=new He.ContractSpec(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAUAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAAAAAAJY2xhaW1hYmxlAAAAAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANY2xhaW1fYmFsYW5jZQAAAAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAVZ2V0X2NsYWltYWJsZV9iYWxhbmNlAAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAADkJhbGFuY2VDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAgAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAATAAAAAQAAAAAAAAAQQ2xhaW1hYmxlQmFsYW5jZQAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAAEENsYWltYWJsZUJhbGFuY2UAAAABAAAAAAAAAAZhbW91bnQAAAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAJQAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"])}};var sn=class extends de{constructor(e,n,a){super();this.nodeRpcUrlsConfig=e;this.params=n;this.api=a;this.chainType="SRB";this.P=48}async getUserBalanceInfo(e,n){let r=(await this.getContract(n.poolAddress).getUserDeposit({user:e})).result;if(r.isErr())throw new k;let s=r.unwrap();return new ae({lpAmount:s.lp_amount.toString(),rewardDebt:s.reward_debt.toString()})}async getPoolInfoFromChain(e){let a=(await this.getContract(e.poolAddress).getPool()).result;if(a.isErr())throw new k;let r=a.unwrap();return{aValue:r.a.toString(),accRewardPerShareP:r.acc_reward_per_share_p.toString(),dValue:r.d.toString(),tokenBalance:r.token_balance.toString(),p:this.P,totalLpAmount:r.total_lp_amount.toString(),vUsdBalance:r.v_usd_balance.toString(),imbalance:te({tokenBalance:r.token_balance.toString(),vUsdBalance:r.v_usd_balance.toString()})}}async buildRawTransactionDeposit(e){return await this.getContract(e.token.poolAddress).depositXdr({sender:e.accountAddress,amount:BigInt(e.amount)})}async buildRawTransactionWithdraw(e){return await this.getContract(e.token.poolAddress).withdrawXdr({sender:e.accountAddress,amount_lp:BigInt(e.amount)})}async buildRawTransactionClaimRewards(e){return await this.getContract(e.token.poolAddress).claimRewardsXdr({sender:e.accountAddress})}getContract(e){let n={contractId:e,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new rn(n)}};var Wa=O(require("web3"));var Rt=class i extends de{constructor(e,n,a){super();this.tronWeb=e;this.api=n;this.chainType="TRX";this.P=52;a&&(this.web3=new Wa.default(a))}static{this.contracts=new Map}async getUserBalanceInfo(e,n){let a;if(this.web3)try{a=await this.getUserBalanceInfoByBatch(this.web3,e,n)}catch{a=await this.getUserBalanceInfoPerProperty(e,n)}else a=await this.getUserBalanceInfoPerProperty(e,n);return a}async getUserBalanceInfoByBatch(e,n,a){let r=new e.BatchRequest,s=new e.eth.Contract(Je,Tt(a.poolAddress)),o=Tt(n),A=["userRewardDebt","balanceOf"].map(u=>ot(g=>r.add(s.methods[u](o).call.request({},g)))());r.execute();let[c,m]=await Promise.all(A);return new ae({lpAmount:m,rewardDebt:c})}async getUserBalanceInfoPerProperty(e,n){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(e);let a=await this.getContract(n.poolAddress),r=(await a.methods.userRewardDebt(e).call()).toString(),s=(await a.methods.balanceOf(e).call()).toString();return new ae({lpAmount:s,rewardDebt:r})}async getPoolInfoFromChain(e){let n;if(this.web3)try{n=await this.getPoolInfoByBatch(this.web3,e)}catch{n=await this.getPoolInfoPerProperty(e)}else n=await this.getPoolInfoPerProperty(e);return n}async getPoolInfoByBatch(e,n){let a=new e.BatchRequest,r=new e.eth.Contract(Je,Tt(n.poolAddress)),s=["a","d","tokenBalance","vUsdBalance","totalSupply","accRewardPerShareP"].map(d=>ot(p=>a.add(r.methods[d]().call.request({},p)))());a.execute();let[o,A,c,m,u,g]=await Promise.all(s),f=c.toString(),y=m.toString(),h=te({tokenBalance:f,vUsdBalance:y});return{aValue:o.toString(),dValue:A.toString(),tokenBalance:f,vUsdBalance:y,totalLpAmount:u.toString(),accRewardPerShareP:g.toString(),p:this.P,imbalance:h}}async getPoolInfoPerProperty(e){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(e.poolAddress);let n=await this.getContract(e.poolAddress),[a,r,s,o,A,c]=await Promise.all([n.methods.a().call(),n.methods.d().call(),n.methods.tokenBalance().call(),n.methods.vUsdBalance().call(),n.methods.totalSupply().call(),n.methods.accRewardPerShareP().call()]),m=s.toString(),u=o.toString(),g=te({tokenBalance:m,vUsdBalance:u});return{aValue:a.toString(),dValue:r.toString(),tokenBalance:m,vUsdBalance:u,totalLpAmount:A.toString(),accRewardPerShareP:c.toString(),p:this.P,imbalance:g}}buildRawTransactionDeposit(e){let{amount:n,accountAddress:a}=e,r=[{type:"uint256",value:n}];return this.buildRawTransaction(e.token.poolAddress,"deposit(uint256)",r,"0",a)}buildRawTransactionWithdraw(e){let{amount:n,accountAddress:a}=e,r=[{type:"uint256",value:n}];return this.buildRawTransaction(e.token.poolAddress,"withdraw(uint256)",r,"0",a)}buildRawTransactionClaimRewards(e){let{accountAddress:n}=e,a=[];return this.buildRawTransaction(e.token.poolAddress,"claimRewards()",a,"0",n)}async buildRawTransaction(e,n,a,r,s){let o=await this.tronWeb.transactionBuilder.triggerSmartContract(e,n,{callValue:r},a,s);if(!o?.result?.result)throw new k("Unknown error: "+JSON.stringify(o,null,2));return o.transaction}async getContract(e){if(i.contracts.has(e))return i.contracts.get(e);let n=await this.tronWeb.contract().at(e);return i.contracts.set(e,n),n}};var on=class{constructor(t,e,n,a){this.api=t;this.nodeRpcUrlsConfig=e;this.params=n;this.tokenService=a;this.rawTxBuilder=new nn(t,e,this.params,a)}async getAllowance(t,e){if(e){let n=t,a=e;return await this.tokenService.getAllowance({...a,spender:a.token.poolAddress},n)}else{let n=t;return await this.tokenService.getAllowance({...n,spender:n.token.poolAddress})}}async checkAllowance(t,e){if(e){let n=t,a=e;return this.tokenService.checkAllowance({...a,spender:a.token.poolAddress},n)}else{let n=t;return this.tokenService.checkAllowance({...n,spender:n.token.poolAddress})}}async approve(t,e){return this.tokenService.approve(t,{...e,spender:e.token.poolAddress})}async getAmountToBeDeposited(t,e,n){R(t),I("amount",t,e.decimals);let a=await this.getPoolInfoFromChain(e,n),{vUsdBalance:r,tokenBalance:s,aValue:o,dValue:A}=a,c=Da(t,o,A,s,r);return b(c,3).toFixed()}async getAmountToBeWithdrawn(t,e,n,a){R(t),I("amount",t,n.decimals);let r=await this.getPoolInfoFromChain(n,a),s=Fa(t),o=ee(s,n.decimals),c=(await this.getUserBalanceInfo(e,n,a)).earned(r)||"0",m=(0,Ea.Big)(o).plus(c).toFixed();return b(m,n.decimals).toFixed()}async getUserBalanceInfo(t,e,n){return At(e.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,n).getUserBalanceInfo(t,e)}async getPoolInfoFromChain(t,e){let n=await At(t.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,e).getPoolInfoFromChain(t);return this.api.cachePut({chainSymbol:t.chainSymbol,poolAddress:t.poolAddress},n),n}};function At(i,t,e,n,a){switch(z[i].chainType){case"EVM":{if(a)return new Mt(a,t);{let r=e.getNodeRpcUrl(i);return new Mt(new Na.default(r),t)}}case"TRX":{let r=e.getNodeRpcUrl(i),s=n.tronJsonRpc;if(a)return new Rt(a,t,s);{let o=new Ua.default({fullHost:r});return new Rt(o,t,s)}}case"SOLANA":{let r=e.getNodeRpcUrl(i);return new an(r,t)}case"SRB":return new sn(e,n,t)}}var D=require("big.js");function Ga(i,t,e){let n=Mi(i,{decimals:t.decimals,feeShare:t.feeShare},t.poolInfo),a=vi(n.amountIncludingCommissionInSystemPrecision,{decimals:e.decimals,feeShare:e.feeShare},e.poolInfo);return{swapToVUsdCalcResult:n,swapFromVUsdCalcResult:a}}function Za(i,t,e){let n=Ri(i,{decimals:e.decimals,feeShare:e.feeShare},e.poolInfo),a=Ii(n.amountIncludingCommissionInSystemPrecision,{decimals:t.decimals,feeShare:t.feeShare},t.poolInfo);return{swapToVUsdCalcResult:n,swapFromVUsdCalcResult:a}}function Mi(i,{feeShare:t,decimals:e},n){let a=(0,D.Big)(i),r=a.times(t),s=a.minus(r);return{bridgeFeeInTokenPrecision:r.round().toFixed(),amountIncludingCommissionInSystemPrecision:Oa(Ze(s,e),n),amountExcludingCommissionInSystemPrecision:Oa(Ze(a,e),n)}}function Oa(i,t){if(i.eq(0))return"0";let e=(0,D.Big)(t.tokenBalance).plus(i),n=Be(e.toFixed(),t.aValue,t.dValue);return(0,D.Big)(t.vUsdBalance).minus(n).round().toFixed()}function vi(i,{feeShare:t,decimals:e},n){if((0,D.Big)(i).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let r=(0,D.Big)(i).plus(n.vUsdBalance),s=Be(r,n.aValue,n.dValue),o=ee((0,D.Big)(n.tokenBalance).minus(s),e),A=(0,D.Big)(o).times(t),c=(0,D.Big)(o).minus(A).round();return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInTokenPrecision:c.toFixed(),amountExcludingCommissionInTokenPrecision:o.toFixed()}}function Ri(i,{feeShare:t,decimals:e},n){let a=(0,D.Big)(t).div((0,D.Big)(1).minus(t)),r=(0,D.Big)(i).times(a),s=(0,D.Big)(i).plus(r);return{bridgeFeeInTokenPrecision:r.round().toFixed(),amountIncludingCommissionInSystemPrecision:Va(Ze(s,e),n),amountExcludingCommissionInSystemPrecision:Va(Ze(i,e),n)}}function Va(i,t){let e=(0,D.Big)(t.tokenBalance).minus(i),n=Be(e.toFixed(),t.aValue,t.dValue);return(0,D.Big)(n).minus(t.vUsdBalance).round().toFixed()}function Ii(i,{feeShare:t,decimals:e},n){if((0,D.Big)(i).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let a=(0,D.Big)(n.vUsdBalance).minus(i),r=Be(a.toFixed(),n.aValue,n.dValue),s=(0,D.Big)(r).minus(n.tokenBalance),o=ee(s.toFixed(),e),A=(0,D.Big)(t).div((0,D.Big)(1).minus(t)),c=(0,D.Big)(o).times(A),m=(0,D.Big)(o).plus(c);return{bridgeFeeInTokenPrecision:c.round().toFixed(),amountIncludingCommissionInTokenPrecision:m.round().toFixed(),amountExcludingCommissionInTokenPrecision:o.toFixed()}}var We=require("big.js");function _a(i,t,e,n,a){let r=Ce(i,t,e),s=ee(r,t.decimals),o=yt(r,n,a),A=(0,We.Big)(i).times(t.feeShare),c=(0,We.Big)(o).div((0,We.Big)(1).minus(n.feeShare)).minus(o);return{sourceLPSwap:{fee:b(A,t.decimals).neg().round(t.decimals,We.Big.roundUp).toFixed(),swap:b((0,We.Big)(i).minus(s).minus(A),t.decimals).neg().round(t.decimals,We.Big.roundUp).toFixed()},destLPSwap:{fee:b(c,n.decimals).neg().round(n.decimals,We.Big.roundUp).toFixed(),swap:b(ee(r,n.decimals).minus(o).minus(c),n.decimals).neg().round(n.decimals,We.Big.roundUp).toFixed()}}}var ct=require("@solana/web3.js");var An=class{constructor(t,e){this.nodeRpcUrlsConfig=t;this.params=e}async addMemoToTx(t,e){if(e.length>28)throw new k("InvalidArgumentException memo cannot be more than 28 characters");let n=new ct.Connection(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),a=await Ke(t,n),r=ct.TransactionMessage.decompile(t.message,{addressLookupTableAccounts:a});r.instructions[r.instructions.length-1].keys.push({pubkey:new ct.PublicKey(Buffer.from(e)),isSigner:!1,isWritable:!1}),t.message=r.compileToV0Message(a)}};var M=require("stellar-sdk"),Qc=require("stellar-sdk/lib/horizon");var E=require("stellar-sdk");var j={},It=class{constructor(t){this.options=t;this.parsers={initialize:()=>{},mint:()=>{},setAdmin:()=>{},allowance:t=>this.spec.funcResToNative("allowance",t),approve:()=>{},balance:t=>this.spec.funcResToNative("balance",t),spendableBalance:t=>this.spec.funcResToNative("spendable_balance",t),transfer:()=>{},transferFrom:()=>{},burn:()=>{},burnFrom:()=>{},decimals:t=>this.spec.funcResToNative("decimals",t),name:t=>this.spec.funcResToNative("name",t),symbol:t=>this.spec.funcResToNative("symbol",t)};this.initialize=async({admin:t,decimal:e,name:n,symbol:a},r={})=>await W.fromSimulation({method:"initialize",args:this.spec.funcArgsToScVals("initialize",{admin:new E.Address(t),decimal:e,name:n,symbol:a}),...r,...this.options,errorTypes:j,parseResultXdr:this.parsers.initialize});this.mint=async({to:t,amount:e},n={})=>await W.fromSimulation({method:"mint",args:this.spec.funcArgsToScVals("mint",{to:new E.Address(t),amount:e}),...n,...this.options,errorTypes:j,parseResultXdr:this.parsers.mint});this.setAdmin=async({new_admin:t},e={})=>await W.fromSimulation({method:"set_admin",args:this.spec.funcArgsToScVals("set_admin",{new_admin:new E.Address(t)}),...e,...this.options,errorTypes:j,parseResultXdr:this.parsers.setAdmin});this.allowance=async({from:t,spender:e},n={})=>await W.fromSimulation({method:"allowance",args:this.spec.funcArgsToScVals("allowance",{from:new E.Address(t),spender:new E.Address(e)}),...n,...this.options,errorTypes:j,parseResultXdr:this.parsers.allowance});this.approve=async({from:t,spender:e,amount:n,expiration_ledger:a},r={})=>await W.fromSimulation({method:"approve",args:this.spec.funcArgsToScVals("approve",{from:new E.Address(t),spender:new E.Address(e),amount:n,expiration_ledger:a}),...r,...this.options,errorTypes:j,parseResultXdr:this.parsers.approve});this.balance=async({id:t},e={})=>await W.fromSimulation({method:"balance",args:this.spec.funcArgsToScVals("balance",{id:new E.Address(t)}),...e,...this.options,errorTypes:j,parseResultXdr:this.parsers.balance});this.spendableBalance=async({id:t},e={})=>await W.fromSimulation({method:"spendable_balance",args:this.spec.funcArgsToScVals("spendable_balance",{id:new E.Address(t)}),...e,...this.options,errorTypes:j,parseResultXdr:this.parsers.spendableBalance});this.transfer=async({from:t,to:e,amount:n},a={})=>await W.fromSimulation({method:"transfer",args:this.spec.funcArgsToScVals("transfer",{from:new E.Address(t),to:new E.Address(e),amount:n}),...a,...this.options,errorTypes:j,parseResultXdr:this.parsers.transfer});this.transferFrom=async({spender:t,from:e,to:n,amount:a},r={})=>await W.fromSimulation({method:"transfer_from",args:this.spec.funcArgsToScVals("transfer_from",{spender:new E.Address(t),from:new E.Address(e),to:new E.Address(n),amount:a}),...r,...this.options,errorTypes:j,parseResultXdr:this.parsers.transferFrom});this.burn=async({from:t,amount:e},n={})=>await W.fromSimulation({method:"burn",args:this.spec.funcArgsToScVals("burn",{from:new E.Address(t),amount:e}),...n,...this.options,errorTypes:j,parseResultXdr:this.parsers.burn});this.burnFrom=async({spender:t,from:e,amount:n},a={})=>await W.fromSimulation({method:"burn_from",args:this.spec.funcArgsToScVals("burn_from",{spender:new E.Address(t),from:new E.Address(e),amount:n}),...a,...this.options,errorTypes:j,parseResultXdr:this.parsers.burnFrom});this.decimals=async(t={})=>await W.fromSimulation({method:"decimals",args:this.spec.funcArgsToScVals("decimals",{}),...t,...this.options,errorTypes:j,parseResultXdr:this.parsers.decimals});this.name=async(t={})=>await W.fromSimulation({method:"name",args:this.spec.funcArgsToScVals("name",{}),...t,...this.options,errorTypes:j,parseResultXdr:this.parsers.name});this.symbol=async(t={})=>await W.fromSimulation({method:"symbol",args:this.spec.funcArgsToScVals("symbol",{}),...t,...this.options,errorTypes:j,parseResultXdr:this.parsers.symbol});this.spec=new E.ContractSpec(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAdkZWNpbWFsAAAAAAQAAAAAAAAABG5hbWUAAAAQAAAAAAAAAAZzeW1ib2wAAAAAABAAAAAA","AAAAAAAAAAAAAAAEbWludAAAAAIAAAAAAAAAAnRvAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAA","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAA=","AAAAAAAAAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAAAAAAAHYXBwcm92ZQAAAAAEAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAAAAAAEWV4cGlyYXRpb25fbGVkZ2VyAAAAAAAABAAAAAA=","AAAAAAAAAAAAAAAHYmFsYW5jZQAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAL","AAAAAAAAAAAAAAARc3BlbmRhYmxlX2JhbGFuY2UAAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAL","AAAAAAAAAAAAAAAIdHJhbnNmZXIAAAADAAAAAAAAAARmcm9tAAAAEwAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAAAAAAANdHJhbnNmZXJfZnJvbQAAAAAAAAQAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAEZnJvbQAAABMAAAAAAAAAAnRvAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAA","AAAAAAAAAAAAAAAEYnVybgAAAAIAAAAAAAAABGZyb20AAAATAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAA","AAAAAAAAAAAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAAAAAAAIZGVjaW1hbHMAAAAAAAAAAQAAAAQ=","AAAAAAAAAAAAAAAEbmFtZQAAAAAAAAABAAAAEA==","AAAAAAAAAAAAAAAGc3ltYm9sAAAAAAAAAAAAAQAAABA=","AAAAAQAAAAAAAAAAAAAAEEFsbG93YW5jZURhdGFLZXkAAAACAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAHc3BlbmRlcgAAAAAT","AAAAAQAAAAAAAAAAAAAADkFsbG93YW5jZVZhbHVlAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAsAAAAAAAAAEWV4cGlyYXRpb25fbGVkZ2VyAAAAAAAABA==","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAABQAAAAEAAAAAAAAACUFsbG93YW5jZQAAAAAAAAEAAAfQAAAAEEFsbG93YW5jZURhdGFLZXkAAAABAAAAAAAAAAdCYWxhbmNlAAAAAAEAAAATAAAAAQAAAAAAAAAFTm9uY2UAAAAAAAABAAAAEwAAAAEAAAAAAAAABVN0YXRlAAAAAAAAAQAAABMAAAAAAAAAAAAAAAVBZG1pbgAAAA==","AAAAAQAAAAAAAAAAAAAADVRva2VuTWV0YWRhdGEAAAAAAAADAAAAAAAAAAdkZWNpbWFsAAAAAAQAAAAAAAAABG5hbWUAAAAQAAAAAAAAAAZzeW1ib2wAAAAAABA="])}};var xi=100,Di=180,cn=class{constructor(t,e){this.nodeRpcUrlsConfig=t;this.params=e}async buildChangeTrustLineXdrTx(t){let n=await new M.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(t.sender),r=(await this.getContract(It,t.tokenAddress).name()).result,[s,o]=r.split(":"),A=new M.Asset(s,o),c=M.Operation.changeTrust({asset:A,limit:t.limit});return new M.TransactionBuilder(n,{fee:xi.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(c).setTimeout(Di).build().toXDR()}async getBalanceLine(t,e){let a=(await this.getContract(It,e).name()).result,[r,s]=a.split(":"),o=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new M.Horizon.Server(o).loadAccount(t)).balances.find(u=>(u.asset_type==="credit_alphanum4"||u.asset_type==="credit_alphanum12")&&u.asset_code==r&&u.asset_issuer==s)}async submitTransactionStellar(t){let e=new M.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),n=M.TransactionBuilder.fromXDR(t,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await e.submitTransaction(n)}async simulateAndCheckRestoreTxRequiredSoroban(t,e){let n=new M.SorobanRpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),a=await n.getAccount(e),r=M.TransactionBuilder.fromXDR(t,this.params.sorobanNetworkPassphrase),s=await n.simulateTransaction(r);if(M.SorobanRpc.Api.isSimulationRestore(s))return new M.TransactionBuilder(a,{fee:(+M.BASE_FEE+ +s.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(s.restorePreamble.transactionData.build()).addOperation(M.Operation.restoreFootprint({})).setTimeout(M.TimeoutInfinite).build().toXDR()}async sendTransactionSoroban(t){let e=new M.SorobanRpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),n=M.TransactionBuilder.fromXDR(t,this.params.sorobanNetworkPassphrase);return e.sendTransaction(n)}async confirmTx(t,e=15){let n=new M.SorobanRpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),a=await qn(()=>n.getTransaction(t),r=>r.status===M.SorobanRpc.Api.GetTransactionStatus.NOT_FOUND,e);return a[a.length-1]}getContract(t,e){let n={contractId:e,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new t(n)}};var mn=class{constructor(t,e){this.nodeRpcUrlsConfig=t;this.srb=new cn(t,e),this.sol=new An(t,e)}};var Xe=(e=>(e.WITH_NATIVE_CURRENCY="native",e.WITH_STABLECOIN="stablecoin",e))(Xe||{}),bt=(e=>(e.INT="int",e.FLOAT="float",e))(bt||{});var Xa=require("big.js"),Ka=O(require("tronweb")),Qa=O(require("web3"));var un=O(require("erc-20-abi"));var En=require("big.js"),ye=class{async checkAllowance(t){let e=await this.getAllowance(t);return(0,En.Big)(e).gte((0,En.Big)(t.amount))}};var Fi="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Wi="0xdac17f958d2ee523a2206206994597c13d831ec7",Ei=1e5,xt=class extends ye{constructor(e,n){super();this.web3=e;this.api=n;this.chainType="EVM"}getAllowance(e){let n=e.token.tokenAddress,a=e.owner,r=e.spender;return this.getAllowanceByTokenAddress(n,a,r)}getAllowanceByTokenAddress(e,n,a){return this.getContract(un.default,e).methods.allowance(n,a).call()}async getTokenBalance(e){return await this.getContract(un.default,e.token.tokenAddress).methods.balanceOf(e.account).call()}async getNativeTokenBalance(e){return await this.web3.eth.getBalance(e.account)}async approve(e){if(this.isUsdt(e.tokenAddress)&&await this.getAllowanceByTokenAddress(e.tokenAddress,e.owner,e.spender)!=="0"){let r=await this.buildRawTransactionApprove({...e,amount:"0"});await this.sendRawTransaction(r,e.chainSymbol)}let n=await this.buildRawTransactionApprove(e);return await this.sendRawTransaction(n,e.chainSymbol)}isUsdt(e){return e.toLowerCase()===Wi}async buildRawTransactionApprove(e){let{tokenAddress:n,spender:a,owner:r,amount:s}=e,A=await this.getContract(un.default,n).methods.approve(a,s==null?Fi:$t(s));return{from:r,to:n,value:"0",data:A.encodeABI()}}async sendRawTransaction(e,n){let a=e,r={maxPriorityFeePerGas:null,maxFeePerGas:null};n=="POL"?a.gas=Ei:a.gas=await this.web3.eth.estimateGas(e);let{transactionHash:s}=await this.web3.eth.sendTransaction({...a,...r});return{txId:s}}getContract(e,n){return new this.web3.eth.Contract(e,n)}};var La=require("@project-serum/anchor"),ze=require("@solana/web3.js");var ln=class extends ye{constructor(e,n){super();this.solanaRpcUrl=e;this.api=n;this.chainType="SOLANA"}approve(e){throw new J}buildRawTransactionApprove(e){throw new J}buildAnchorProvider(e){let n=new ze.Connection(this.solanaRpcUrl,"confirmed"),a=new ze.PublicKey(e);return new La.AnchorProvider(n,{publicKey:a},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(e){throw new J}async getTokenBalance(e){let{account:n,token:a}=e;try{let r=await ue(new ze.PublicKey(n),new ze.PublicKey(a.tokenAddress));return(await it(r,this.buildAnchorProvider(n))).amount.toString()}catch(r){if(r instanceof Error)return r.message.startsWith("Account does not exist"),"0";throw r}}async getNativeTokenBalance(e){return(await this.buildAnchorProvider(e.account).connection.getBalance(new ze.PublicKey(e.account))).toString()}};var Dt=require("stellar-sdk"),Pl=require("stellar-sdk/lib/horizon");var pn=class extends ye{constructor(e,n,a){super();this.nodeRpcUrlsConfig=e;this.params=n;this.api=a;this.chainType="SRB"}getAllowance(){throw new J}async getTokenBalance(e){if(!e.token.originTokenAddress)throw new k("OriginTokenAddress missing");let[n,a]=e.token.originTokenAddress.split(":"),r=new Dt.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),s;try{s=await r.loadAccount(e.account)}catch(c){if(c instanceof Dt.NotFoundError)return"0";throw c}let A=s.balances.find(c=>(c.asset_type==="credit_alphanum4"||c.asset_type==="credit_alphanum12")&&c.asset_code==n&&c.asset_issuer==a);return A?.balance?B(A.balance,V[z[e.token.chainSymbol].chainType]).toFixed():"0"}async getNativeTokenBalance(e){let s=(await new Dt.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(e.account)).balances.find(o=>o.asset_type==="native");return s?.balance?B(s.balance,V[z[e.chainSymbol].chainType]).toFixed():"0"}approve(){throw new J}buildRawTransactionApprove(){throw new J}};var Ui="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Ft=class i extends ye{constructor(e,n){super();this.tronWeb=e;this.api=n;this.chainType="TRX"}static{this.contracts=new Map}async getAllowance(e){let{token:{tokenAddress:n},owner:a}=e;return(await(await this.getContract(n)).methods.allowance(a,e.spender).call()).toString()}async getTokenBalance(e){return(await(await this.getContract(e.token.tokenAddress)).balanceOf(e.account).call()).toString()}async getNativeTokenBalance(e){return(await this.tronWeb.trx.getBalance(e.account)).toString()}async approve(e){let n=await this.buildRawTransactionApprove(e);return await en(this.tronWeb,n)}async buildRawTransactionApprove(e){let{tokenAddress:n,spender:a,owner:r,amount:s}=e,o=s==null?Ui:$t(s),A=[{type:"address",value:a},{type:"uint256",value:o}];return this.buildRawTransaction(n,"approve(address,uint256)",A,"0",r)}async getContract(e){if(i.contracts.has(e))return i.contracts.get(e);let n=await this.tronWeb.contract().at(e);return i.contracts.set(e,n),n}async buildRawTransaction(e,n,a,r,s){let o=await this.tronWeb.transactionBuilder.triggerSmartContract(e,n,{callValue:r},a,s);if(!o?.result?.result)throw new k("Unknown error: "+JSON.stringify(o,null,2));return o.transaction}};var dn=class{constructor(t,e,n){this.api=t;this.nodeRpcUrlsConfig=e;this.params=n}async getAllowance(t,e){let n=await this.getChainTokenService(t.token.chainSymbol,t.owner,e).getAllowance(t);return b(n,t.token.decimals).toFixed()}async checkAllowance(t,e){return R(t.amount),I("amount",t.amount,t.token.decimals),this.getChainTokenService(t.token.chainSymbol,t.owner,e).checkAllowance(this.prepareCheckAllowanceParams(t))}async approve(t,e){return e.amount&&(R(e.amount),I("amount",e.amount,e.token.decimals)),this.getChainTokenService(e.token.chainSymbol,e.owner,t).approve(this.prepareApproveParams(e))}async buildRawTransactionApprove(t,e){return t.amount&&(R(t.amount),I("amount",t.amount,t.token.decimals)),this.getChainTokenService(t.token.chainSymbol,t.owner,e).buildRawTransactionApprove(this.prepareApproveParams(t))}async getTokenBalance(t,e){let n=await this.getChainTokenService(t.token.chainSymbol,t.account,e).getTokenBalance(t);return t.token.decimals?b(n,t.token.decimals).toFixed():n}async getNativeTokenBalance(t,e){let n=await this.getChainTokenService(t.chainSymbol,t.account,e).getNativeTokenBalance(t);return{int:n,float:b(n,V[z[t.chainSymbol].chainType]).toFixed()}}getChainTokenService(t,e,n){switch(z[t].chainType){case"EVM":{if(n)return new xt(n,this.api);{let a=this.nodeRpcUrlsConfig.getNodeRpcUrl(t);return new xt(new Qa.default(a),this.api)}}case"TRX":{if(n)return new Ft(n,this.api);{let a=this.nodeRpcUrlsConfig.getNodeRpcUrl(t),r=new Ka.default({fullHost:a});return r.setAddress(e),new Ft(r,this.api)}}case"SOLANA":{let a=this.nodeRpcUrlsConfig.getNodeRpcUrl(t);return new ln(a,this.api)}case"SRB":return new pn(this.nodeRpcUrlsConfig,this.params,this.api)}}prepareCheckAllowanceParams(t){return{...t,amount:B(t.amount,t.token.decimals)}}prepareApproveParams(t){return{tokenAddress:t.token.tokenAddress,owner:t.owner,spender:t.spender,chainSymbol:t.token.chainSymbol,amount:t.amount==null?void 0:(0,Xa.Big)(t.amount).toFixed()}}};var Wt=class{constructor(t){this.nodeRpcUrls=t}getNodeRpcUrl(t){let e=this.nodeRpcUrls[t];if(e!==void 0)return e;throw new dt(t)}},gn=class{constructor(t,e=mt){let n=new Gt(e),a=new Zt(n),r=new Nt(a);this.api=new _t(r),this.tokenService=new dn(this.api,t,e),this.bridge=new tn(this.api,t,e,this.tokenService),this.pool=new on(this.api,t,e,this.tokenService),this.params=e}async chainDetailsMap(){return this.api.getChainDetailsMap()}async tokens(){return this.api.tokens()}async tokensByChain(t){return(await this.api.getChainDetailsMap())[t].tokens}async getTransferStatus(t,e){return this.api.getTransferStatus(t,e)}async getGasBalance(t,e){return this.api.getGasBalance(t,e)}async checkAddress(){return new Promise(t=>{t({status:"OK",gasBalance:null})})}async getPendingStatusInfo(t,e,n,a){R(t);let r;e=="float"?(I("amount",t,n.decimals),r=B(t,n.decimals).toFixed()):r=t;let s=Ce(r,n,await G(this.api,n)),o=await G(this.api,a),A=this.getAmountFromVUsdFormatted(s,a,o),c,m=await this.api.getPendingInfo();for(let u in m[a.chainSymbol])u.toLowerCase()===a.tokenAddress.toLowerCase()&&(c=m[a.chainSymbol][u]);if(c){let u=Gn(c.totalSentAmount,o),g=this.getAmountFromVUsdFormatted(s,a,u),f;return(0,he.Big)(g.int).gt(A.int)?f={min:A,max:g}:f={min:g,max:A},{pendingTxs:c.pendingTxs,pendingAmount:{int:Ee(c.totalSentAmount,3,a.decimals).toFixed(0),float:b(c.totalSentAmount,3).toFixed()},estimatedAmount:f}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:A,max:A}}}async getTokenBalance(t,e){return this.tokenService.getTokenBalance(t,e)}async getNativeTokenBalance(t,e){return this.tokenService.getNativeTokenBalance(t,e)}async calculateFeePercentOnSourceChain(t,e){R(t),I("amountFloat",t,e.decimals);let n=B(t,e.decimals);if(n.eq(0))return 0;let a=Ce(n,e,await G(this.api,e)),r=ee(a,e.decimals);return yn(n,r)}async calculateFeePercentOnDestinationChain(t,e,n){R(t),I("amountFloat",t,e.decimals);let a=B(t,e.decimals);if(a.eq(0))return 0;let r=Ce(a,e,await G(this.api,e)),s=yt(r,n,await G(this.api,n)),o=ee(r,n.decimals);return yn(o,s)}async getAmountToBeReceivedAndGasFeeOptions(t,e,n,a){return R(t),I("amountToSendFloat",t,e.decimals),{amountToSendFloat:(0,he.Big)(t).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(t,e,n,a),gasFeeOptions:await this.getGasFeeOptions(e,n,a)}}async getAmountToSendAndGasFeeOptions(t,e,n,a){return R(t),I("amountToBeReceivedFloat",t,n.decimals),{amountToSendFloat:await this.getAmountToSend(t,e,n,a),amountToBeReceivedFloat:(0,he.Big)(t).toFixed(),gasFeeOptions:await this.getGasFeeOptions(e,n,a)}}async getAmountToBeReceived(t,e,n,a){let r=await G(this.api,e),s=await G(this.api,n);return this.getAmountToBeReceivedFromPools(t,e,n,r,s,a)}async getAmountToBeReceivedFromChain(t,e,n,a,r,s){let o=await this.pool.getPoolInfoFromChain(e,r),A=await this.pool.getPoolInfoFromChain(n,s);return this.getAmountToBeReceivedFromPools(t,e,n,o,A,a)}getAmountToBeReceivedFromPools(t,e,n,a,r,s){R(t),I("amountToSendFloat",t,e.decimals);let o=B(t,e.decimals);if(s&&s==3){if(!e.cctpAddress||!n.cctpAddress||!e.cctpFeeShare)throw new re("Such route does not support CCTP protocol");let c=o.mul((0,he.Big)(1).minus(e.cctpFeeShare)).round(0,he.Big.roundUp),m=Ee(c,e.decimals,n.decimals).round(0);return b(m,n.decimals).toFixed()}let A=Ce(o,e,a);return this.getAmountFromVUsdFormatted(A,n,r).float}async getAmountToSend(t,e,n,a){let r=await G(this.api,e),s=await G(this.api,n);return this.getAmountToSendFromPools(t,e,n,r,s,a)}async getAmountToSendFromChain(t,e,n,a,r,s){let o=await this.pool.getPoolInfoFromChain(e,r),A=await this.pool.getPoolInfoFromChain(n,s);return this.getAmountToSendFromPools(t,e,n,o,A,a)}getAmountToSendFromPools(t,e,n,a,r,s){R(t),I("amountToBeReceivedFloat",t,n.decimals);let o=B(t,n.decimals);if(s&&s==3){if(!e.cctpAddress||!n.cctpAddress||!e.cctpFeeShare)throw new re("Such route does not support CCTP protocol");let m=o.div((0,he.Big)(1).minus(e.cctpFeeShare)).round(0,he.Big.roundDown),u=Ee(m,n.decimals,e.decimals).round(0);return b(u,e.decimals).toFixed()}let A=_n(o,n,r),c=Zn(A,e,a);if((0,he.Big)(c).lte(0))throw new we;return b(c,e.decimals).toFixed()}async getGasFeeOptions(t,e,n){return Rn(t.allbridgeChainId,t.chainType,e.allbridgeChainId,t.decimals,n,this.api)}getAverageTransferTime(t,e,n){return t.transferTime?.[e.chainSymbol]?.[n]??null}async getPoolInfoByToken(t){return await this.api.getPoolInfoByKey({chainSymbol:t.chainSymbol,poolAddress:t.poolAddress})}async refreshPoolInfo(t){if(t){let n=(t instanceof Array?t:[t]).map(a=>({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress}));return this.api.refreshPoolInfo(n)}return this.api.refreshPoolInfo()}aprInPercents(t){return Xn(t)}async getExtraGasMaxLimits(t,e){return await In(t,e,this.api)}async getVUsdFromAmount(t,e,n){R(t);let a;e=="float"?(I("amount",t,n.decimals),a=B(t,n.decimals).toFixed()):a=t;let r=Ce(a,n,await G(this.api,n));return{int:r,float:b(r,3).toFixed()}}async getAmountFromVUsd(t,e){return this.getAmountFromVUsdFormatted(t,e,await G(this.api,e))}getAmountFromVUsdFormatted(t,e,n){R(t);let a=yt(t,e,n);if((0,he.Big)(a).lt(0))throw new we;return{int:a,float:b(a,e.decimals).toFixed()}}async swapAndBridgeFeeCalculation(t,e,n){return Ga(t,{decimals:e.decimals,feeShare:e.feeShare,poolInfo:await G(this.api,e)},{decimals:n.decimals,feeShare:n.feeShare,poolInfo:await G(this.api,n)})}async swapAndBridgeFeeCalculationReverse(t,e,n){let a=Za(t,{decimals:e.decimals,feeShare:e.feeShare,poolInfo:await G(this.api,e)},{decimals:n.decimals,feeShare:n.feeShare,poolInfo:await G(this.api,n)}),r=a.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if((0,he.Big)(r).lt(0))throw new we;return a}async getSendAmountDetails(t,e,n,a){R(t);let r;return e=="float"?(I("amount",t,n.decimals),r=B(t,n.decimals).toFixed()):r=t,_a(r,n,await G(this.api,n),a,await G(this.api,a))}};function Ni(i){return"solanaRpcUrl"in i}var Un=class{constructor(t,e=mt){let n;Ni(t)?n=new Wt({SOL:t.solanaRpcUrl,TRX:t.tronRpcUrl}):n=new Wt(t),this.service=new gn(n,e),this.bridge=this.service.bridge,this.pool=this.service.pool,this.utils=new mn(n,e),this.params=e}async chainDetailsMap(){return this.service.chainDetailsMap()}async tokens(){return this.service.tokens()}async tokensByChain(t){return this.service.tokensByChain(t)}async getTransferStatus(t,e){return this.service.getTransferStatus(t,e)}async getGasBalance(t,e){return this.service.getGasBalance(t,e)}async checkAddress(t,e,n){return await this.service.checkAddress()}async getPendingStatusInfo(t,e,n,a){return this.service.getPendingStatusInfo(t,e,n,a)}async getTokenBalance(t,e){return this.service.getTokenBalance(t,e)}async getNativeTokenBalance(t,e){return this.service.getNativeTokenBalance(t,e)}async calculateFeePercentOnSourceChain(t,e){return this.service.calculateFeePercentOnSourceChain(t,e)}async calculateFeePercentOnDestinationChain(t,e,n){return this.service.calculateFeePercentOnDestinationChain(t,e,n)}async getAmountToBeReceivedAndGasFeeOptions(t,e,n,a){return this.service.getAmountToBeReceivedAndGasFeeOptions(t,e,n,a)}async getAmountToSendAndGasFeeOptions(t,e,n,a){return this.service.getAmountToSendAndGasFeeOptions(t,e,n,a)}async getAmountToBeReceived(t,e,n,a){return this.service.getAmountToBeReceived(t,e,n,a)}async getAmountToBeReceivedFromChain(t,e,n,a,r,s){return this.service.getAmountToBeReceivedFromChain(t,e,n,a,r,s)}getAmountToBeReceivedFromPools(t,e,n,a,r,s){return this.service.getAmountToBeReceivedFromPools(t,e,n,a,r,s)}async getAmountToSend(t,e,n,a){return this.service.getAmountToSend(t,e,n,a)}async getAmountToSendFromChain(t,e,n,a,r,s){return this.service.getAmountToSendFromChain(t,e,n,a,r,s)}getAmountToSendFromPools(t,e,n,a,r,s){return this.service.getAmountToSendFromPools(t,e,n,a,r,s)}async getGasFeeOptions(t,e,n){return this.service.getGasFeeOptions(t,e,n)}getAverageTransferTime(t,e,n){return this.service.getAverageTransferTime(t,e,n)}async getPoolInfoByToken(t){return this.service.getPoolInfoByToken(t)}async refreshPoolInfo(t){return this.service.refreshPoolInfo(t)}aprInPercents(t){return this.service.aprInPercents(t)}async getExtraGasMaxLimits(t,e){return this.service.getExtraGasMaxLimits(t,e)}async getVUsdFromAmount(t,e,n){return this.service.getVUsdFromAmount(t,e,n)}async getAmountFromVUsd(t,e){return this.service.getAmountFromVUsd(t,e)}async swapAndBridgeFeeCalculation(t,e,n){return this.service.swapAndBridgeFeeCalculation(t,e,n)}async swapAndBridgeFeeCalculationReverse(t,e,n){return this.service.swapAndBridgeFeeCalculationReverse(t,e,n)}async getSendAmountDetails(t,e,n,a){return this.service.getSendAmountDetails(t,e,n,a)}};0&&(module.exports={AddressStatus,AllbridgeCoreSdk,AmountFormat,AmountNotEnoughError,ArgumentInvalidDecimalsError,CCTPDoesNotSupportedError,ChainSymbol,ChainType,ErrorCode,ExtraGasMaxLimitExceededError,FeePaymentMethod,InsufficientPoolLiquidityError,InvalidAmountError,InvalidGasFeePaymentOptionError,InvalidMessengerOptionError,InvalidTxError,JupiterError,Messenger,MethodNotSupportedError,NodeRpcUrlNotInitializedError,SdkError,SdkRootError,SolanaAutoTxFee,TimeoutError,TxTooLargeError,VerifyTxError,mainnet,nodeRpcUrlsDefault,nodeUrlsDefault,testnet,testnetNodeRpcUrlsDefault,testnetNodeUrlsDefault});
|
|
6
6
|
//# sourceMappingURL=index.js.map
|