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