@allbridge/bridge-core-sdk 3.22.1-alpha.1 → 3.23.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/index.js +1 -1
- package/dist/browser/index.js.map +4 -4
- package/dist/cjs/index.js +1 -5
- package/dist/cjs/index.js.map +4 -4
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +4 -4
- package/dist/src/chains/chain.enums.d.ts +5 -1
- package/dist/src/chains/chain.enums.js +4 -0
- package/dist/src/chains/chain.enums.js.map +1 -1
- package/dist/src/chains/index.js +6 -0
- package/dist/src/chains/index.js.map +1 -1
- package/dist/src/services/bridge/evm/index.js +1 -1
- package/dist/src/services/bridge/evm/index.js.map +1 -1
- package/dist/src/services/bridge/get-cctp-sol-token-recipient-address.js +3 -3
- package/dist/src/services/bridge/get-cctp-sol-token-recipient-address.js.map +1 -1
- package/dist/src/services/bridge/index.d.ts +2 -2
- package/dist/src/services/bridge/index.js +4 -6
- package/dist/src/services/bridge/index.js.map +1 -1
- package/dist/src/services/bridge/raw-bridge-transaction-builder.js +2 -2
- package/dist/src/services/bridge/raw-bridge-transaction-builder.js.map +1 -1
- package/dist/src/services/bridge/sol/index.js +1 -1
- package/dist/src/services/bridge/sol/index.js.map +1 -1
- package/dist/src/services/bridge/srb/index.js +1 -1
- package/dist/src/services/bridge/srb/index.js.map +1 -1
- package/dist/src/services/bridge/sui/index.js +1 -1
- package/dist/src/services/bridge/sui/index.js.map +1 -1
- package/dist/src/services/bridge/trx/index.js +1 -1
- package/dist/src/services/bridge/trx/index.js.map +1 -1
- package/dist/src/services/bridge/utils.d.ts +10 -10
- package/dist/src/services/bridge/utils.js +14 -15
- package/dist/src/services/bridge/utils.js.map +1 -1
- package/dist/src/services/liquidity-pool/index.d.ts +1 -1
- package/dist/src/services/liquidity-pool/index.js +5 -7
- package/dist/src/services/liquidity-pool/index.js.map +1 -1
- package/dist/src/services/liquidity-pool/raw-pool-transaction-builder.js +3 -3
- package/dist/src/services/liquidity-pool/raw-pool-transaction-builder.js.map +1 -1
- package/dist/src/services/liquidity-pool/trx/index.d.ts +3 -2
- package/dist/src/services/liquidity-pool/trx/index.js +107 -77
- package/dist/src/services/liquidity-pool/trx/index.js.map +1 -1
- package/dist/src/services/token/index.js +9 -11
- package/dist/src/services/token/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 +3 -2
- package/dist/src/utils/tronweb/lazy-load-tronweb-import.d.ts +0 -1
- package/dist/src/utils/tronweb/lazy-load-tronweb-import.js +0 -35
- package/dist/src/utils/tronweb/lazy-load-tronweb-import.js.map +0 -1
package/dist/esm/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var mi=Object.create;var Ur=Object.defineProperty;var ui=Object.getOwnPropertyDescriptor;var li=Object.getOwnPropertyNames;var di=Object.getPrototypeOf,pi=Object.prototype.hasOwnProperty;var gi=(s,a)=>()=>(s&&(a=s(s=0)),a);var tr=(s,a)=>()=>(a||s((a={exports:{}}).exports,a),a.exports);var fi=(s,a,r,i)=>{if(a&&typeof a=="object"||typeof a=="function")for(let o of li(a))!pi.call(s,o)&&o!==r&&Ur(s,o,{get:()=>a[o],enumerable:!(i=ui(a,o))||i.enumerable});return s};var Pe=(s,a,r)=>(r=s!=null?mi(di(s)):{},fi(a||!s||!s.__esModule?Ur(r,"default",{value:s,enumerable:!0}):r,s));import{bcs as oe}from"@mysten/sui/bcs";function ns(s,a=["<",">"]){let[r,i]=a,o=[],A="",c=0;for(let m=0;m<s.length;m++){let u=s[m];if(u===r&&c++,u===i&&c--,c===0&&u===","){o.push(A.trim()),A="";continue}A+=u}return o.push(A.trim()),o}function ee(s){if(typeof s!="string")throw new Error(`Illegal type passed as a name of the type: ${s}`);let[a,r]=["<",">"],i=s.indexOf(a),o=Array.from(s).reverse().indexOf(r);if(i===-1&&o===-1)return{typeName:s,typeArgs:[]};if(i===-1||o===-1)throw new Error(`Unclosed generic in name '${s}'`);let A=s.slice(0,i),c=ns(s.slice(i+1,s.length-o-1),[a,r]);return{typeName:A,typeArgs:c}}function va(s){return!s||typeof s!="object"||Array.isArray(s)?!1:"GasCoin"in s||"Input"in s||"Result"in s||"NestedResult"in s}function C(s,a){return va(a)?a:s.object(a)}function ye(s,a,r){if(va(a))return C(s,a);function i(l){let{typeName:d,typeArgs:p}=ee(l);switch(d){case"bool":return oe.Bool;case"u8":return oe.U8;case"u16":return oe.U16;case"u32":return oe.U32;case"u64":return oe.U64;case"u128":return oe.U128;case"u256":return oe.U256;case"address":return oe.Address;case"0x1::string::String":case"0x1::ascii::String":return oe.String;case"0x2::object::ID":return oe.Address;case"0x1::option::Option":return oe.option(i(p[0]));case"vector":return oe.vector(i(p[0]));default:throw new Error(`invalid primitive type ${l}`)}}function o(l){for(let d of l){if(typeof d>"u"||d===null)return!0;if(Array.isArray(d))return o(d)}return!1}function A(l){for(let d of l){if(!Array.isArray(d)){if(d===null)continue;switch(typeof d){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return A(d)}return!0}function c(l){for(let d of l){if(!Array.isArray(d))switch(typeof d){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return c(d)}return!1}let{typeName:m,typeArgs:u}=ee(r);switch(m){case"0x1::option::Option":if(a===null)return s.pure.option("bool",null);if(A([a]))return s.pure(i(r).serialize(a));if(c([a]))throw new Error("mixing primitive and TransactionArgument values is not supported");return s.moveCall({target:"0x1::option::some",typeArguments:[u[0]],arguments:[ye(s,a,u[0])]});case"vector":if(!Array.isArray(a))throw new Error("expected an array for vector type");if(a.length===0)return s.pure(oe.vector(oe.Bool).serialize([]));if(o(a))throw new Error("the provided array contains undefined or null values");if(A(a))return s.pure(i(r).serialize(a));if(c(a))throw new Error("mixing primitive and TransactionArgument values is not supported");return s.makeMoveVec({type:u[0],elements:a});default:return s.pure(i(r).serialize(a))}}function rs(s){let a=s.split("0x").join("");for(let r=0;r<a.length;r++)if(a[r]!=="0")return`0x${a.substring(r)}`;return"0x0"}function P(s){let{typeName:a,typeArgs:r}=ee(s);switch(a){case"bool":case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"address":case"signer":return a;case"vector":return`vector<${P(r[0])}>`;default:{let i=a.split("::");i[0]=rs(i[0]);let o=i.join("::");return r.length>0?`${o}<${r.map(A=>P(A)).join(",")}>`:o}}}function M(s,...a){return a.length>0?`${s}<${a.join(", ")}>`:s}var H=gi(()=>{"use strict"});var qe=tr(($m,ka)=>{"use strict";H();var Tr=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},as=new Tr;ka.exports=as});var wr=tr((Xm,Da)=>{"use strict";H();var Pr=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},is=new Pr;Da.exports=is});var Ir=tr((Qm,Ua)=>{"use strict";H();var Br=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},ss=new Br;Ua.exports=ss});var Kt={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://lite-api.jup.ag/swap/v1",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,SUI:8}},cachePoolInfoChainSec:20},fo={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},yo={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org",SUI:"https://fullnode.mainnet.sui.io"};import{Big as Ae}from"big.js";var J=class extends Error{errorCode;constructor(a,r){super(r),this.errorCode=a}},y=class extends J{constructor(a){super("SdkError",a)}},$e=class extends J{constructor(a){super("InvalidAmountError",a)}},dt=class extends J{constructor(a){super("AmountNotEnoughError",a)}},_e=class extends J{constructor(a){super("InsufficientPoolLiquidityError",a)}},Q=class extends J{constructor(a){super("JupiterError",a)}},vt=class extends J{constructor(a){super("InvalidGasFeePaymentOptionError",a)}},Er=class extends J{constructor(a){super("InvalidMessengerOptionError",a)}},Y=class extends J{constructor(a){super("MethodNotSupportedError",a)}},kt=class extends J{constructor(a){super("VerifyTxError",a)}},pt=class extends J{constructor(a){super("InvalidTxError",a)}},Ht=class extends J{constructor(a){super("ExtraGasMaxLimitExceededError",a)}},Qt=class extends J{constructor(a,r,i){super("ArgumentInvalidDecimalsError",`Argument '${a}' decimals '${r}' cannot be greater than '${i}'`)}},Ft=class extends J{constructor(a){super("TimeoutError",a)}},zt=class extends J{constructor(a){super("NodeRpcUrlNotInitializedError",`For chain '${a}' Node RPC URL not initialized`)}},ne=class extends J{constructor(a){super("CCTPDoesNotSupportedError",a)}},qt=class extends J{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},yi=(T=>(T.SDK_ERROR="SdkError",T.INVALID_AMOUNT_ERROR="InvalidAmountError",T.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",T.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",T.JUPITER_ERROR="JupiterError",T.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",T.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",T.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",T.VERIFY_TX_ERROR="VerifyTxError",T.INVALID_TX_ERROR="InvalidTxError",T.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",T.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",T.TIMEOUT_ERROR="TimeoutError",T.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",T.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",T.TX_TOO_LARGE="TxTooLargeError",T))(yi||{});var fe=(g=>(g.BSC="BSC",g.ETH="ETH",g.BAS="BAS",g.SOL="SOL",g.TRX="TRX",g.POL="POL",g.ARB="ARB",g.CEL="CEL",g.AVA="AVA",g.SRB="SRB",g.STLR="STLR",g.OPT="OPT",g.SUI="SUI",g))(fe||{}),Z=(A=>(A.EVM="EVM",A.SOLANA="SOLANA",A.TRX="TRX",A.SRB="SRB",A.SUI="SUI",A))(Z||{});var hi={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9},Ti={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"},SUI:{chainSymbol:"SUI",name:"Sui",chainType:"SUI"}},N=(()=>{let s={...Ti};return{addChainsProperties(a){s={...s,...a}},getChainProperty(a){let r=s[a];if(!r)throw new y(`Cannot find chain properties for ${a}`);return r},getChainsProperties(){return s},getChainDecimalsByType(a){return hi[a]}}})();import Bi from"axios";var Vr="3.22.1-alpha.1";import{Big as b}from"big.js";import nr from"bn.js";function rr(s,a){return b(100).minus(b(100).times(a).div(s)).toNumber()}function it(s,a){return Ne(s,a,3).round(0,b.roundDown)}function ue(s,a){return Ne(s,3,a)}function Ne(s,a,r){let i=b(r).minus(a).toNumber();return b(s).times(xt(i))}function xt(s){return b(10).pow(s)}function D(s,a){return b(s).times(xt(a))}function x(s,a){let r=b(s);return r.eq(0)?b(0):b(r).div(xt(a))}function re(s){return x(b(s.tokenBalance).minus(s.vUsdBalance).toFixed(),3).div(2).toFixed()}function We(s,{feeShare:a,decimals:r},i){let o=b(s);if(o.lte(0))return"0";let A=o.times(a),c=o.minus(A),m=it(c,r),u=b(i.tokenBalance).plus(m),l=De(u,i.aValue,i.dValue);return b(i.vUsdBalance).minus(l).round(0,b.roundDown).toFixed()}function Mt(s,{feeShare:a,decimals:r},i){let o=b(s);if(o.lte(0))return b(0).toFixed();let A=o.plus(i.vUsdBalance),c=De(A,i.aValue,i.dValue),m=ue(b(i.tokenBalance).minus(c),r),u=b(m).times(a);return b(m).minus(u).round(0,b.roundDown).toFixed()}function Zr(s,a){let r=b(s);if(r.lte(0))return a;let i=r.plus(a.vUsdBalance),o=De(i,a.aValue,a.dValue);return{aValue:a.aValue,dValue:a.dValue,tokenBalance:o.toFixed(0),vUsdBalance:i.toFixed(0)}}function jr(s,{feeShare:a,decimals:r},i){if(b(s).lte(0))return b(0);let o=b(i.vUsdBalance).minus(s);if(o.lte(0))throw new _e;let A=De(o,i.aValue,i.dValue),c=b(A).minus(i.tokenBalance),m=ue(c,r),u=b(a).div(b(1).minus(a)),l=b(m).times(u).round(0,b.roundUp);return b(m).plus(l).round(0,b.roundDown)}function $r(s,{feeShare:a,decimals:r},i){if(b(s).lte(0))return b(0);let o=b(a).div(b(1).minus(a)),A=b(s).times(o).round(0,b.roundUp),c=b(s).plus(A),m=it(c,r),u=b(i.tokenBalance).minus(m);if(u.lte(0))throw new _e;let l=De(u,i.aValue,i.dValue);return b(l).minus(i.vUsdBalance).round(0,b.roundDown)}function De(s,a,r){let i=b(4).times(a).times(b(r).minus(s)).minus(r),o=b(r).pow(3),A=i.pow(2),c=b(s).times(b(s).times(A).plus(b(4).times(a).times(o))).sqrt().round(0,b.roundDown),m=b(8).times(a).times(s),u=i.times(s).plus(c).div(m).round(0,b.roundDown);return u.eq(0)?b(0):u.plus(1)}function _r(s,a,r,i){let o=new nr(s),A=new nr(r),c=new nr(a);return o.mul(A).shrn(i).sub(c).toString()}function Jr(s){return b(s).gt(0)?`${Number(b(s).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function Lr(s,a,r){let i=b(a).times(r),o=b(a).plus(r),A=b(8).times(s).times(i).times(o),c=i.times(b(16).times(s).minus(4)).div(3),m=A.times(A),u=c.times(c).times(c),l=m.plus(u),d=b(l).sqrt(),p=b(Math.cbrt(+A.plus(d).toFixed())),f=b(Math.cbrt(+A.minus(d).toFixed()));return p.plus(f).toFixed()}var ar=(c=>(c.OK="OK",c.INVALID="INVALID",c.FORBIDDEN="FORBIDDEN",c.UNINITIALIZED="UNINITIALIZED",c.CONTRACT_ADDRESS="CONTRACT_ADDRESS",c.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",c))(ar||{});var Ge=(o=>(o[o.ALLBRIDGE=1]="ALLBRIDGE",o[o.WORMHOLE=2]="WORMHOLE",o[o.CCTP=3]="CCTP",o[o.CCTP_V2=4]="CCTP_V2",o))(Ge||{});function Xr(s){return Object.entries(s).reduce((a,r)=>{let i=r[0],o=r[1],A=Ci(i,o);return A&&(a[i]=A),a},{})}function Yr(s){let a={};for(let[r,i]of Object.entries(s)){let o=r;for(let A of i.tokens){let c=gt({chainSymbol:o,poolAddress:A.poolAddress}),m=re(A.poolInfo);a[c]={...A.poolInfo,imbalance:m}}}return a}function bi(s,a){let{name:r,...i}=s,{poolInfo:o,...A}=a;return{...A,...i,chainName:r}}function Si(s){switch(s){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4}}function Pi(s){return Object.entries(s).reduce((a,[r,i])=>(a[r]=wi(i),a),{})}function wi(s){return Object.entries(s).reduce((a,[r,i])=>{let o=Si(r);return o&&(a[o]=i),a},{})}function Ci(s,a){let r=N.getChainsProperties()[s];if(!r)return null;let i={...r,allbridgeChainId:a.chainId,bridgeAddress:a.bridgeAddress,transferTime:Pi(a.transferTime),txCostAmount:a.txCostAmount,confirmations:a.confirmations,suiAddresses:a.suiAddresses};return{...i,tokens:a.tokens.map(o=>bi(i,o))}}function gt(s){return s.chainSymbol+"_"+s.poolAddress}function Kr(s){let a=[];for(let[r,i]of Object.entries(s)){let o=r;for(let A of i.tokens)a.push({chainSymbol:o,poolAddress:A.poolAddress})}return a}function Hr(s){let a={};for(let[r,i]of Object.entries(s)){let o=r;for(let[A,c]of Object.entries(i))c.imbalance=re(c),a[gt({chainSymbol:o,poolAddress:A})]=c}return a}var en=class{api;constructor(a){this.api=Bi.create({baseURL:a.coreApiUrl,headers:{Accept:"application/json",...a.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+Vr},params:a.coreApiQueryParams})}async getTokenInfo(){let{data:a}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:Xr(a),poolInfoMap:Yr(a)}}async getPendingInfo(){let{data:a}=await this.api.get("/pending-info");return a}async getGasBalance(a,r){let{data:i}=await this.api.get(`/check/${a}/${r}`);return i}async getTransferStatus(a,r){let{data:i}=await this.api.get(`/chain/${a}/${r}`);return i}async getReceiveTransactionCost(a){let{data:r}=await this.api.post("/receive-fee",a,{headers:{"Content-Type":"application/json"}});return{exchangeRate:r.exchangeRate,fee:r.fee,sourceNativeTokenPrice:r.sourceNativeTokenPrice}}async getPoolInfoMap(a){let r=a instanceof Array?a:[a],{data:i}=await this.api.post("/pool-info",{pools:r},{headers:{"Content-Type":"application/json"}});return Hr(i)}};import tn from"timed-cache";var ir=20*1e3,Ii=55*1e3,nn=class{constructor(a){this.apiClient=a;this.tokenInfoCache=new tn({defaultTtl:Ii}),this.receivedTransactionCache=new tn({defaultTtl:ir}),this.pendingInfoCache=new tn({defaultTtl:ir}),this.gasBalanceCache=new tn({defaultTtl:ir})}tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let a="TOKEN_INFO_CACHE_KEY",r=this.tokenInfoCache.get(a);if(r)return r;let i=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(a,i),i}async getGasBalance(a,r){let i=`GAS_BALANCE_${a}_${r}`,o=this.gasBalanceCache.get(i);if(o)return o;let A=this.apiClient.getGasBalance(a,r);return this.gasBalanceCache.put(i,A),A}async getPendingInfo(){let a="PENDING_INFO_CACHE_KEY",r=this.pendingInfoCache.get(a);if(r)return r;let i=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(a,i),i}async getReceiveTransactionCost(a){let r=`RECEIVE_TX_COST_${a.sourceChainId}_${a.destinationChainId}_${a.messenger}`,i=this.receivedTransactionCache.get(r);if(i)return i;let o=await this.apiClient.getReceiveTransactionCost(a);return this.receivedTransactionCache.put(r,o),o}async getTransferStatus(a,r){return this.apiClient.getTransferStatus(a,r)}async getPoolInfoMap(a){return this.apiClient.getPoolInfoMap(a)}};var rn=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(r=>r.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(a,r){return this.apiClient.getGasBalance(a,r)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(a,r){return await this.apiClient.getTransferStatus(a,r)}async getReceiveTransactionCost(a){return await this.apiClient.getReceiveTransactionCost(a)}async getPoolInfoMap(a){return await this.apiClient.getPoolInfoMap(a)}};var an=class{constructor(a,r){this.client=a;this.isStaging=r.coreApiQueryParams?.staging==="true"}isStaging;async getChainDetailsMap(a){let r=await this.client.getChainDetailsMap(),i={};for(let o in r){let A=r[o];A&&(i[o]={...A,tokens:Qr(A.tokens,a,this.isStaging)})}return i}async tokens(a){return Qr(await this.client.tokens(),a,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(a,r){return this.client.getGasBalance(a,r)}async getTransferStatus(a,r){return await this.client.getTransferStatus(a,r)}async getReceiveTransactionCost(a){return await this.client.getReceiveTransactionCost(a)}cachePut(a,r){return this.client.cachePut(a,r)}getPoolInfoByKey(a){return this.client.getPoolInfoByKey(a)}refreshPoolInfo(a){return this.client.refreshPoolInfo(a)}};function Qr(s,a,r){return s.filter(i=>r?!0:i.flags[a]).map(Ri)}function Ri(s){let{flags:a,...r}=s;return r}import vi from"timed-cache";var ki=55*1e3,sn=class{constructor(a){this.client=a;this.poolInfoCache=new sr}poolInfoCache;async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(a,r){return this.client.getTransferStatus(a,r)}getReceiveTransactionCost(a){return this.client.getReceiveTransactionCost(a)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(a,r){return this.client.getGasBalance(a,r)}async getPoolInfoByKey(a){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let r=this.poolInfoCache.get(a);if(r)return r;{let i=await this.client.getPoolInfoMap(a);this.poolInfoCache.putAll(i);let o=i[gt(a)];if(o)return o;throw new y("Cannot find pool info for "+a.poolAddress+" on chain "+a.chainSymbol)}}async refreshPoolInfo(a){let r;if(a)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),r=await this.client.getPoolInfoMap(a);else{let i=await this.client.getChainDetailsMapAndPoolInfoMap();r=await this.client.getPoolInfoMap(Kr(i.chainDetailsMap))}this.poolInfoCache.putAll(r)}cachePut(a,r){this.poolInfoCache.put(gt(a),r)}},sr=class{cache;constructor(){this.cache=new vi({defaultTtl:ki})}putAll(a){for(let[r,i]of Object.entries(a))this.cache.put(r,i)}putAllIfNotExists(a){for(let[r,i]of Object.entries(a))this.cache.get(r)||this.cache.put(r,i)}put(a,r){this.cache.put(a,r)}get(a){let r=gt(a);return this.cache.get(r)}};import{Web3 as hs}from"web3";var or;async function we(){return or||(or=(await import("tronweb")).default),or}import{Big as zr}from"big.js";async function K(s,a){return await s.getPoolInfoByKey({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress})}function U(s){if(zr(s).lte(0))throw new $e("Amount must be greater than zero")}function E(s,a,r){let i=zr(a).toFixed(),[o,A]=i.split(".");if(A&&A.length>r)throw new Qt(s,A.length,r)}async function on(s,a,r){return await Promise.race([s,new Promise((i,o)=>{setTimeout(()=>o(new Ft(a)),r)})])}async function Ar(s,a,r,i){if(r<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${r} was received.`);let o=0;for(;;)try{return await on(s(),a,i)}catch{if(++o>=r)throw new Ft(a)}}async function qr(s,a,r,i=1.5,o=!1){let A=[],c=0,m=await s();if(A.push(m),!a(m))return A;let u=new Date(Date.now()+r*1e3).valueOf(),l=1e3,d=l;for(;Date.now()<u;){let p=A[A.length-1];if(p===void 0||!a(p))break;c++,o&&console.info(`Waiting ${l}ms before trying again (bringing the total wait time to ${d}ms so far, of total ${r*1e3}ms)`),await new Promise(g=>setTimeout(g,l)),l=l*i,new Date(Date.now()+l).valueOf()>u&&(l=u-Date.now(),o&&console.info(`was gonna wait too long; new waitTime: ${l}ms`)),d=l+d;let f=await s(p);A.push(f),o&&a(f)&&console.info(`${c}. Called ${s.name}; ${A.length} prev attempts. Most recent: ${JSON.stringify(A[A.length-1],null,2)}`)}return A}import{Big as Zi}from"big.js";var Fi={abi:[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},ea=Fi;var xi={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},ta=xi;import*as un from"@project-serum/anchor";import{PublicKey as pa}from"@solana/web3.js";import*as q from"@project-serum/anchor";import{PublicKey as ae}from"@solana/web3.js";async function Ce(s,a){return q.utils.token.associatedAddress({mint:a,owner:s})}async function He(s){let[a]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("config")],s);return a}async function na(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("lock"),Uint8Array.from(s)],a);return r}async function Ot(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([s])],a);return r}async function ft(s){let a=await He(s),[r]=await ae.findProgramAddress([a.toBuffer()],s);return r}async function ra(s,a){let[r]=await ae.findProgramAddress([s.toBuffer()],a);return r}async function yt(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("token"),s.toBytes()],a);return r}async function aa(s,a,r){let[i]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([s]),a],r);return i}async function cr(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([s])],a);return r}async function mr(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([s])],a);return r}async function ia(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("sent_message"),s],a);return r}async function ur(s,a,r){let[i]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("user_deposit"),a.toBytes(),s.toBytes()],r);return i}async function sa(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("cctp_bridge"),s.toBytes()],a);return r}async function oa(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("token"),s.toBytes()],a);return r}function Aa(s,a){let[r]=ae.findProgramAddressSync([q.utils.bytes.utf8.encode("lock"),a.toBuffer()],s);return r}function ca(s,a,r,i){let o=st("message_transmitter",r),A=st("token_messenger",i),c=st("__event_authority",i),m=st("token_minter",i),u=st("local_token",i,[a]),l=st("remote_token_messenger",i,[s.toString()]),d=st("sender_authority",i);return{messageTransmitterAccount:o,tokenMessenger:A,tokenMessengerEventAuthority:c,tokenMinter:m,localToken:u,remoteTokenMessengerKey:l,authorityPda:d}}function st(s,a,r=[]){let i=[Buffer.from(q.utils.bytes.utf8.encode(s))];for(let A of r)typeof A=="string"?i.push(Buffer.from(q.utils.bytes.utf8.encode(A))):Array.isArray(A)||Buffer.isBuffer(A)?i.push(Buffer.from(Uint8Array.from(A))):i.push(Buffer.from(Uint8Array.from(A.toBuffer())));return ae.findProgramAddressSync(i,a)[0]}import{AnchorProvider as Mi}from"@project-serum/anchor";import{Connection as Oi,PublicKey as Ni}from"@solana/web3.js";function Qe(s,a){let r=new Oi(s,"confirmed"),i=new Ni(a);return new Mi(r,{publicKey:i},{preflightCommitment:"confirmed",commitment:"confirmed"})}import{PublicKey as Wi}from"@solana/web3.js";import{Address as Di}from"@stellar/stellar-sdk";import{Big as Je}from"big.js";import ua from"randombytes";async function Le(s,a,r){let i;switch(a){case"EVM":{i=ma(s);break}case"SOLANA":{i=new Wi(s).toBuffer();break}case"TRX":{i=await Gi(s);break}case"SRB":{i=new Di(s).toBuffer();break}case"SUI":{i=ma(s);break}}switch(r){case"EVM":return"0x"+i.toString("hex");case"SOLANA":return Array.from(i);case"TRX":return i;case"SRB":return i.toJSON().data;case"SUI":return"0x"+i.toString("hex")}}function Be(s){return s.replace(/^0x/i,"")}function la(s){return Buffer.from(s.replace(/^0x/i,""),"hex")}function ma(s){let r=la(s);return Buffer.concat([Buffer.alloc(32-r.length,0),r],32)}async function Gi(s){let a=await An(s),r=la(a);return Ui(r,32)}async function An(s){let a=await we(),r=a.utils.crypto.decodeBase58Address(s);return r?a.utils.bytes.byteArray2hexStr(r).replace(/^41/,"0x"):""}function Ui(s,a){if(s.length>=a)return s;let r=Buffer.alloc(a,0);return s.copy(r,a-s.length),r}function cn(){return ua(32)}function Ue(){let s=ua(32).readBigInt64BE();return s<0?s*-1n:s}async function Ee(s,a){let r={},i=a.sourceToken;if(r.amount=D(a.amount,i.decimals).toFixed(),r.contractAddress=i.bridgeAddress,r.fromAccountAddress=a.fromAccountAddress,s==="SUI"){if(!i.originTokenAddress)throw new y("SUI sourceToken must contain 'originTokenAddress'");r.fromTokenAddress=i.originTokenAddress}else r.fromTokenAddress=await Le(i.tokenAddress,s,s);if(r.toAccountAddress=a.toAccountAddress,s==="SUI"){if(!a.destinationToken.originTokenAddress)throw new y("SUI destinationToken must contain 'originTokenAddress'");r.toTokenAddress=a.destinationToken.originTokenAddress}else r.toTokenAddress=await Le(a.destinationToken.tokenAddress,s,s);return r.minimumReceiveAmount=a.minimumReceiveAmount?D(a.minimumReceiveAmount,a.destinationToken.decimals).toFixed():"0",r}async function Ie(s,a,r){let i={};i.fromChainId=a.sourceToken.allbridgeChainId,i.fromChainSymbol=a.sourceToken.chainSymbol;let o=N.getChainProperty(a.destinationToken.chainSymbol).chainType;if(s==="SUI"){if(!a.sourceToken.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");i.fromTokenAddress=a.sourceToken.originTokenAddress}else 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 A=a.sourceToken;if(a.messenger===3){if(!A.cctpAddress||!a.destinationToken.cctpAddress)throw new ne("Such route does not support CCTP protocol");i.contractAddress=A.cctpAddress}else if(a.messenger===4){if(!A.cctpV2Address||!a.destinationToken.cctpV2Address)throw new ne("Such route does not support CCTP V2 protocol");i.contractAddress=A.cctpV2Address}else i.contractAddress=A.bridgeAddress;i.messenger=a.messenger,i.fromAccountAddress=a.fromAccountAddress,i.amount=D(a.amount,A.decimals).toFixed();let{fee:c,feeFormat:m}=a;if(!c){let p=(await lr(i.fromChainId,a.sourceToken.chainType,i.toChainId,A.decimals,i.messenger,r))[i.gasFeePaymentMethod];if(!p)throw new vt;c=p.int,m="int"}if(m=="float")switch(i.gasFeePaymentMethod){case"native":i.fee=D(c,N.getChainDecimalsByType(A.chainType)).toFixed(0);break;case"stablecoin":i.fee=D(c,A.decimals).toFixed(0);break}else i.fee=c;let{extraGas:u,extraGasFormat:l}=a;if(u&&+u>0){if(l=="float")switch(i.gasFeePaymentMethod){case"native":i.extraGas=D(u,N.getChainDecimalsByType(A.chainType)).toFixed(0);break;case"stablecoin":i.extraGas=D(u,A.decimals).toFixed(0);break}else i.extraGas=u;await Vi(i.extraGas,i.gasFeePaymentMethod,A,a.destinationToken,r)}return s!=="SUI"&&(i.fromTokenAddress=await Le(i.fromTokenAddress,s,s)),i.toAccountAddress=await Le(a.toAccountAddress,o,s),i.toTokenAddress=await Le(i.toTokenAddress,o,s),i.gasFeePaymentMethod=="stablecoin"&&Ei(i.amount,A.decimals,i.fee,i.extraGas),i}function Ei(s,a,r,i){let o=Je(s).minus(r).minus(i??0);if(o.lte(0))throw new dt(`Amount not enough to pay fee, ${x(Je(o).minus(1).neg(),a).toFixed()} stables is missing`)}async function lr(s,a,r,i,o,A){let c=await A.getReceiveTransactionCost({sourceChainId:s,destinationChainId:r,messenger:o}),m={native:{int:c.fee,float:x(c.fee,N.getChainDecimalsByType(a)).toFixed()}};if(c.sourceNativeTokenPrice){let u=Ne(new Je(c.fee).mul(c.sourceNativeTokenPrice),N.getChainDecimalsByType(a),i).toFixed(0,Je.roundUp);m.stablecoin={int:u,float:x(u,i).toFixed()}}return m}async function Vi(s,a,r,i,o){let c=(await dr(r,i,o)).extraGasMax[a];if(!c)throw new vt(`Impossible to pay extra gas by '${a}' payment method`);let m=c.int;if(Je(s).gt(m))throw new Ht(`Extra gas ${s} in int format, exceeded limit ${m} for '${a}' payment method`)}async function dr(s,a,r){let i={},o=await r.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:a.allbridgeChainId,messenger:1}),A=a.txCostAmount.maxAmount,c=x(A,N.getChainDecimalsByType(a.chainType)).toFixed(),m=Je(c).div(o.exchangeRate).toFixed(N.getChainDecimalsByType(s.chainType),Je.roundDown),u=D(m,N.getChainDecimalsByType(s.chainType)).toFixed(0);if(i.native={int:u,float:m},o.sourceNativeTokenPrice){let l=Je(m).mul(o.sourceNativeTokenPrice).toFixed(s.decimals,Je.roundDown);i.stablecoin={int:D(l,s.decimals).toFixed(0),float:l}}return{extraGasMax:i,destinationChain:{gasAmountMax:{int:A,float:c},swap:{int:a.txCostAmount.swap,float:x(a.txCostAmount.swap,N.getChainDecimalsByType(a.chainType)).toFixed()},transfer:{int:a.txCostAmount.transfer,float:x(a.txCostAmount.transfer,N.getChainDecimalsByType(a.chainType)).toFixed()}},exchangeRate:o.exchangeRate,sourceNativeTokenPrice:o.sourceNativeTokenPrice}}function da(s){return s.sourceToken.chainSymbol!==s.destinationToken.chainSymbol}async function ln(s,a,r,i){let o,A=new pa(a),c=new pa(r),m=await Ce(A,c),u=Qe(i,a);un.setProvider(u);let l=await un.Spl.token(u).account.token.fetchNullable(m);if(l?.authority.equals(A))o=await Le(m.toBase58(),"SOLANA",s);else{let d=await u.connection.getTokenAccountsByOwner(A,{mint:c});if(d.value.length===0&&!l)o=await Le(m.toBase58(),"SOLANA",s);else if(d.value.length>0){let p=d.value[0];if(!p?.pubkey)throw new y("First token account or its public key is undefined");o=await Le(p.pubkey.toBase58(),"SOLANA",s)}else throw new y("Associated account has wrong owner")}return o}var le=class{};var Nt=class extends le{constructor(r,i,o){super();this.web3=r;this.api=i;this.nodeRpcUrlsConfig=o}chainType="EVM";async send(r){let i=await this.buildRawTransactionSend(r);return this.sendRawTransaction(i)}async buildRawTransactionSwap(r){let i=await Ee(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=r,p=this.getBridgeContract(o).methods.swap(i,c,u,m,l);return Promise.resolve({from:A,to:o,data:p.encodeABI()})}async buildRawTransactionSend(r){let i=await Ie(this.chainType,r,this.api),{amount:o,contractAddress:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,toTokenAddress:d,messenger:p,fee:f,gasFeePaymentMethod:g,extraGas:h}=i,S="0x"+cn().toString("hex"),T,w,I=f;if(h&&(I=Zi(I).plus(h).toFixed()),p===3||p===4){let F=await this.buildRawTransactionCctpSend(r,i,I);T=F.sendMethod,w=F.value}else{let F=this.getBridgeContract(A);g==="stablecoin"?(T=F.methods.swapAndBridge(m,o,l,u,d,S,p,I),w="0"):(T=F.methods.swapAndBridge(m,o,l,u,d,S,p,0),w=I)}return Promise.resolve({from:c,to:A,value:w,data:T.encodeABI()})}async buildRawTransactionCctpSend(r,i,o){let{amount:A,contractAddress:c,toChainId:m,toAccountAddress:u,gasFeePaymentMethod:l}=i,d=this.getCctpBridgeContract(c),p,f;if(r.destinationToken.chainType==="SOLANA"){let g=await ln(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));l==="stablecoin"?(p=d.methods.bridgeWithWalletAddress(A,g,u,m,o),f="0"):(p=d.methods.bridgeWithWalletAddress(A,g,u,m,0),f=o)}else l==="stablecoin"?(p=d.methods.bridge(A,u,m,o),f="0"):(p=d.methods.bridge(A,u,m,0),f=o);return{sendMethod:p,value:f}}async sendRawTransaction(r){let i=await this.web3.eth.estimateGas(r),o={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:A}=await this.web3.eth.sendTransaction({...r,gas:i,...o});return{txId:A.toString()}}getBridgeContract(r){return new this.web3.eth.Contract(ea.abi,r)}getCctpBridgeContract(r){return new this.web3.eth.Contract(ta.abi,r)}};var dn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o}async approve(a,r){let i,o;r?(i=a,o=r):o=a;let A=Wt(o.token,o.messenger);return this.tokenService.buildRawTransactionApprove({...o,spender:A},i)}async send(a,r){return U(a.amount),E("amount",a.amount,a.sourceToken.decimals),da(a)?(await pn(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r)).buildRawTransactionSend(a):(await pn(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r)).buildRawTransactionSwap(a)}};import{BN as bt,Program as fr,Spl as Qi,web3 as ze}from"@project-serum/anchor";import{Keypair as Ia,PublicKey as V,SystemProgram as zi}from"@solana/web3.js";import{Big as Re}from"big.js";var Dt={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 ga={version:"0.1.0",name:"cctp_bridge",instructions:[{name:"initialize",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"bridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"messageSentEventData",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!0,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"cctpMessenger",isMut:!1,isSigner:!1},{name:"messageTransmitterProgram",isMut:!1,isSigner:!1},{name:"messageTransmitterAccount",isMut:!0,isSigner:!1},{name:"tokenMessenger",isMut:!1,isSigner:!1},{name:"tokenMinter",isMut:!1,isSigner:!1},{name:"localToken",isMut:!0,isSigner:!1},{name:"remoteTokenMessengerKey",isMut:!1,isSigner:!1},{name:"authorityPda",isMut:!1,isSigner:!1},{name:"eventAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"setAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setCctpTokenMessengerMinter",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]}],accounts:[{name:"cctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"admin",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"adminFeeShareBp",type:"u64"},{name:"adminFeeAmount",type:"u64"}]}},{name:"chainBridge",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"amount",type:"u64"},{name:"adminFee",type:"u64"},{name:"relayerFee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"slot",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gasOracleProgramId",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"}]}}],errors:[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}]};import{Spl as ji}from"@project-serum/anchor";import $i from"big.js";import{Web3 as gn}from"web3";async function ht(s,a){return await ji.token(a).account.token.fetch(s)}async function fa(s,a,r){let i=await a.account.pool.fetch(r),o=i.decimals,A=$i(i.feeShareBp.toString()).div(1e4).toFixed(),c={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 We(s,{decimals:o,feeShare:A},c)}function ya(s){let a=s.amount,r="0x"+s.recipient.toString("hex"),i=s.sourceChainId,o=s.destinationChainId,A="0x"+s.receiveToken.toString("hex"),c="0x"+s.nonce.toString("hex"),m=1,u="0x"+s.chainBridge.toString("hex"),l=gn.utils.encodePacked({t:"uint256",v:a},{t:"bytes32",v:r},{t:"uint256",v:i},{t:"bytes32",v:A},{t:"uint256",v:c},{t:"uint8",v:m});if(!l)throw new y("message cannot be undefined");let d=gn.utils.keccak256(Buffer.from(l.replace("0x",""),"hex")),p=Buffer.from(d.replace("0x",""),"hex");p[0]=i,p[1]=o;let f=gn.utils.encodePacked({t:"bytes32",v:"0x"+p.toString("hex")},{t:"bytes32",v:u});if(!f)throw new pt("messageWithSigner cannot be undefined");let g=gn.utils.keccak256(Buffer.from(f.replace("0x",""),"hex")),h=Buffer.from(g.replace("0x",""),"hex");return h[0]=p[0],h[1]=p[1],h}import{ComputeBudgetInstruction as Ta,ComputeBudgetProgram as fn,Connection as ba,TransactionMessage as _i}from"@solana/web3.js";import{Big as Ji}from"big.js";import{AddressLookupTableAccount as ha}from"@solana/web3.js";async function At(s,a){return await Promise.all(s.message.addressTableLookups.map(async r=>new ha({key:r.accountKey,state:ha.deserialize(await a.getAccountInfo(r.accountKey).then(i=>{if(!i)throw new y("Cannot get AccountInfo");return i.data}))})))}var pr="AUTO";async function Tt(s,a,r){let i=new ba(r,"confirmed"),o=(await i.simulateTransaction(s)).value.unitsConsumed;await Pa(s.instructions,o,a,i)}async function Sa(s,a,r){let i=new ba(r,"confirmed"),o=await At(s,i),A=_i.decompile(s.message,{addressLookupTableAccounts:o});if(s.serialize().length>1232)throw new qt;await Pa(A.instructions,769230,a,i),s.message=A.compileToV0Message(o)}async function Pa(s,a,r,i){if(a>0){let o=Li(a,s);if(r?.solana){let A=r.solana;if(A===pr)await gr(s,i);else if("pricePerUnitInMicroLamports"in A)await gr(s,i,A.pricePerUnitInMicroLamports);else{let c=Ji(A.extraFeeInLamports).div(o).mul(xt(6)).toFixed(0);await gr(s,i,c)}}}}function Li(s,a){let r=a.findIndex(A=>A.programId.equals(fn.programId)&&Ta.decodeInstructionType(A)==="SetComputeUnitLimit"),i=Number((s*1.3).toFixed(0)),o=fn.setComputeUnitLimit({units:i});return r>=0?a[r]=o:a.push(o),i.toString()}async function gr(s,a,r){let i=s.findIndex(c=>c.programId.equals(fn.programId)&&Ta.decodeInstructionType(c)==="SetComputeUnitPrice"),o=BigInt(r||await Xi(a)),A=fn.setComputeUnitPrice({microLamports:o});return i>=0?s[i]=A:s.push(A),o.toString()}async function Xi(s){let a=await s.getRecentPrioritizationFees(),r=0;for(let i of a)r+=i.prioritizationFee;return(r/a.length).toFixed(0)}import{NATIVE_MINT as Yi}from"@solana/spl-token";import{Connection as Ki,TransactionMessage as wa,VersionedTransaction as Hi}from"@solana/web3.js";import Ca,{AxiosError as Ba}from"axios";var yn=class{connection;jupiterUrl;apiKeyHeader;maxAccounts;constructor(a,r){this.connection=new Ki(a),this.jupiterUrl=r.jupiterUrl.replace(/\/$/,""),this.apiKeyHeader=r.jupiterApiKeyHeader,this.maxAccounts=r.jupiterMaxAccounts}async getJupiterSwapTx(a,r,i,o){let A;try{let p=o?"ExactOut":"ExactIn",f=`${this.jupiterUrl}/quote?inputMint=${r}&outputMint=${Yi.toString()}&amount=${i}&swapMode=${p}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(f+=`&maxAccounts=${this.maxAccounts}`),A=await Ca.get(f,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(p){throw p instanceof Ba&&p.response&&p.response.data&&p.response.data.error?new Q(p.response.data.error):new Q("Cannot get route")}let c;if(o&&A?.data?.inAmount)c=A.data.inAmount;else if(o)throw new Q("Cannot get inAmount");let m;try{m=await Ca.post(`${this.jupiterUrl}/swap`,{quoteResponse:A.data,userPublicKey:a,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(p){throw p instanceof Ba&&p.response&&p.response.data&&p.response.data.error?new Q(p.response.data.error):new Q("Cannot get swap transaction")}let u;if(m?.data?.swapTransaction)u=m.data.swapTransaction;else throw new Q("Cannot get swap transaction");let l=Buffer.from(u,"base64"),d=Hi.deserialize(l);return o?{tx:d,amountIn:c}:{tx:d}}async amendJupiterWithSdkTx(a,r){try{let i=await At(a,this.connection),o=await At(r,this.connection),A=wa.decompile(a.message,{addressLookupTableAccounts:i}),c=wa.decompile(r.message,{addressLookupTableAccounts:o});if(c.instructions.shift(),A.instructions.push(...c.instructions),i.push(...o),a.message=A.compileToV0Message(i),r.message.header.numRequiredSignatures===2&&a.signatures.length===1){let m=r.signatures[0];if(!m)throw new y("Signature is undefined");a.signatures.push(m)}return a}catch(i){throw i instanceof Error&&i.message?new Q(`Some error occurred during creation final swap and bridge transaction. ${i.message}`):new Q("Some error occurred during creation final swap and bridge transaction")}}};var yr=1e6,Ra=1.1,hn=class extends le{constructor(r,i,o){super();this.solanaRpcUrl=r;this.params=i;this.api=o;this.jupiterService=new yn(r,i.jupiterParams)}chainType="SOLANA";jupiterService;async buildRawTransactionSwap(r){let i=await Ee(this.chainType,r);return await this.buildSwapTransaction(i,r.sourceToken.poolAddress,r.destinationToken.poolAddress,r.txFeeParams)}async buildSwapTransaction(r,i,o,A){let{fromAccountAddress:c,amount:m,contractAddress:u,fromTokenAddress:l,toTokenAddress:d,toAccountAddress:p,minimumReceiveAmount:f}=r,g=c,h=u,S=l,T=d,w=o,I=p,F=new V(g),X=Qe(this.solanaRpcUrl,F.toString()),G=new fr(Dt,h,X),O=await ft(G.programId),ce=await He(G.programId),L=new V(S),Fe=await yt(L,G.programId),xe=new V(i),je=await Ce(F,L),Te=new V(I),se=new V(T),ge=await yt(se,G.programId),be=new V(w),me=await Ce(Te,se),Me=[ze.ComputeBudgetProgram.setComputeUnitLimit({units:yr})];try{await ht(me,X)}catch{let ci=await Qi.associatedToken(X).methods.create().accounts({mint:se,owner:Te,associatedAccount:me}).instruction();Me.push(ci)}let Oe=await G.methods.swap(new bt(m),new bt(f||0)).accounts({payer:F,config:ce,bridgeAuthority:O,user:F,sendBridgeToken:Fe,sendMint:L,sendPool:xe,sendUserToken:je,receiveBridgeToken:ge,receiveMint:se,receivePool:be,receiveUserToken:me}).preInstructions(Me).transaction(),Se=X.connection;return Oe.recentBlockhash=(await Se.getLatestBlockhash()).blockhash,Oe.feePayer=F,await Tt(Oe,A,this.solanaRpcUrl),await this.convertToVersionedTransaction(Oe,Se)}async buildRawTransactionSend(r){let i=await Ie(this.chainType,r,this.api),o=this.addPoolAddress(r,i),A=o.gasFeePaymentMethod=="stablecoin",c;if(A)try{let{tx:l,solTxSendUpdatedParams:d}=await this.processJup(o,r,!0);c=l,o={...o,...d}}catch{try{let{tx:d,solTxSendUpdatedParams:p}=await this.processJup(o,r,!1);c=d,o={...o,...p}}catch(d){throw d instanceof J?d:d instanceof Error&&d.message?new Q(`Some error occurred during creation Jupiter swap transaction. ${d.message}`):new Q("Some error occurred during creation Jupiter swap transaction")}}let m,u;switch(i.messenger){case 1:{let l=await this.prepareSwapAndBridgeData(o);m=await this.buildSwapAndBridgeAllbridgeTransaction(l);break}case 2:{let l=await this.prepareSwapAndBridgeData(o),{transaction:d,messageAccount:p}=await this.buildSwapAndBridgeWormholeTransaction(l);m=d,u=p;break}case 3:case 4:{let l=await this.prepareSwapAndBridgeCctpData(o),{transaction:d,messageSentEventDataKeypair:p}=await this.buildSwapAndBridgeCctpTransaction(r.destinationToken.chainSymbol,l);m=d,u=p;break}}if(A){if(!c)throw new Q("Swap tx is absent");m=await this.jupiterService.amendJupiterWithSdkTx(c,m)}return await Sa(m,r.txFeeParams,this.solanaRpcUrl),u&&m.sign([u]),m}async processJup(r,i,o){let{fee:A,extraGas:c,gasFeePaymentMethod:m}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(i.sourceToken.decimals,r),u=o?Re(A):Re(r.fee);c&&(u=u.plus(c)),o||(u=u.mul(Ra));let{tx:l,amountIn:d}=await this.jupiterService.getJupiterSwapTx(i.fromAccountAddress,i.sourceToken.tokenAddress,u.toFixed(0),o),p;if(o){if(!d)throw new Q("Cannot get inAmount");p=Re(r.amount).minus(Re(d).mul(Ra)).toFixed(0)}else p=Re(r.amount).minus(u).toFixed(0);if(Re(p).lte(0))throw new dt(`Amount not enough to pay fee, ${x(Re(p).minus(1).neg(),i.sourceToken.decimals).toFixed()} stables is missing`);return{tx:l,solTxSendUpdatedParams:{amount:p,fee:A,extraGas:c,gasFeePaymentMethod:m}}}addPoolAddress(r,i){return{...i,poolAddress:r.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(r,i){if(i.gasFeePaymentMethod=="stablecoin"){let o=(await this.api.getReceiveTransactionCost({sourceChainId:i.fromChainId,destinationChainId:i.toChainId,messenger:i.messenger})).sourceNativeTokenPrice,A=Re(i.fee).div(o).mul(Re(10).pow(N.getChainDecimalsByType("SOLANA")-r)).toFixed(0),c;return i.extraGas&&(c=Re(i.extraGas).div(o).mul(Re(10).pow(N.getChainDecimalsByType("SOLANA")-r)).toFixed(0)),{fee:A,extraGas:c,gasFeePaymentMethod:"native"}}return{fee:i.fee,extraGas:i.extraGas,gasFeePaymentMethod:"native"}}getExtraGasInstruction(r,i,o){return ze.SystemProgram.transfer({fromPubkey:i,toPubkey:o,lamports:+r})}async prepareSwapAndBridgeData(r){let{amount:i,contractAddress:o,fromChainId:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,toTokenAddress:d,poolAddress:p,extraGas:f}=r,g=m,h=c,S=u,T=d,w=l,I=o,F=A,X=Qe(this.solanaRpcUrl,h),G=new fr(Dt,I,X),O=Array.from(cn()),ce=new V(p),L=await fa(i,G,ce),Fe=await na(O,G.programId),xe=await ft(G.programId),je=await Ce(new V(h),new V(g)),Te=await yt(new V(g),G.programId),se=await cr(S,G.programId),ge=await aa(S,Buffer.from(T),G.programId),be=await He(G.programId),me=await G.account.config.fetch(be),Me=await Ot(S,me.gasOracleProgramId),Oe=await Ot(F,me.gasOracleProgramId),Se=ya({amount:L,recipient:Buffer.from(w),nonce:Buffer.from(O),receiveToken:Buffer.from(T),destinationChainId:S,sourceChainId:F,chainBridge:(await ft(G.programId)).toBuffer()}),W={};return W.bridge=G,W.amount=new bt(i),W.vusdAmount=new bt(L),W.nonce=O,W.recipient=Array.from(w),W.receiveToken=Array.from(T),W.poolAccount=ce,W.lockAccount=Fe,W.bridgeAuthority=xe,W.userToken=je,W.bridgeTokenAccount=Te,W.chainBridgeAccount=se,W.otherBridgeTokenAccount=ge,W.userAccount=new V(h),W.destinationChainId=S,W.mint=new V(g),W.config=be,W.configAccountInfo=me,W.gasPrice=Me,W.thisGasPrice=Oe,W.message=Se,f&&(W.extraGasInstruction=this.getExtraGasInstruction(f,W.userAccount,be)),W}async buildSwapAndBridgeAllbridgeTransaction(r){let{bridge:i,vusdAmount:o,nonce:A,recipient:c,receiveToken:m,poolAccount:u,lockAccount:l,bridgeAuthority:d,userToken:p,bridgeTokenAccount:f,chainBridgeAccount:g,otherBridgeTokenAccount:h,userAccount:S,destinationChainId:T,mint:w,config:I,configAccountInfo:F,gasPrice:X,thisGasPrice:G,message:O,extraGasInstruction:ce}=r,L=F.allbridgeMessengerProgramId,Fe=await mr(T,L),xe=await He(L),je=await ia(O,L),Te=[];ce&&Te.push(ce);let se=await i.methods.swapAndBridge({vusdAmount:o,nonce:A,destinationChainId:T,recipient:c,receiveToken:m}).accounts({mint:w,user:S,config:I,lock:l,pool:u,gasPrice:X,thisGasPrice:G,bridgeAuthority:d,userToken:p,bridgeToken:f,chainBridge:g,messenger:L,messengerGasUsage:Fe,messengerConfig:xe,sentMessageAccount:je,otherBridgeToken:h}).preInstructions([ze.ComputeBudgetProgram.setComputeUnitLimit({units:yr})]).postInstructions(Te).transaction(),ge=Qe(this.solanaRpcUrl,S.toString()).connection;return se.recentBlockhash=(await ge.getLatestBlockhash()).blockhash,se.feePayer=S,await this.convertToVersionedTransaction(se,ge)}async convertToVersionedTransaction(r,i){let o=await i.getAddressLookupTable(new V(this.params.solanaLookUpTable)).then(c=>c.value);if(!o)throw new y("Cannot find allbridgeLookupTableAccount");let A=new ze.TransactionMessage({payerKey:r.feePayer,recentBlockhash:r.recentBlockhash,instructions:r.instructions}).compileToV0Message([o]);return new ze.VersionedTransaction(A)}async buildSwapAndBridgeWormholeTransaction(r){let{bridge:i,vusdAmount:o,nonce:A,recipient:c,receiveToken:m,poolAccount:u,lockAccount:l,bridgeAuthority:d,userToken:p,bridgeTokenAccount:f,chainBridgeAccount:g,otherBridgeTokenAccount:h,userAccount:S,destinationChainId:T,mint:w,config:I,configAccountInfo:F,gasPrice:X,thisGasPrice:G,message:O,extraGasInstruction:ce}=r,L=this.params.wormholeMessengerProgramId,[Fe]=V.findProgramAddressSync([Buffer.from("Bridge")],new V(L)),[xe]=V.findProgramAddressSync([Buffer.from("fee_collector")],new V(L)),[je]=V.findProgramAddressSync([Buffer.from("Sequence"),d.toBuffer()],new V(L)),Te=await mr(T,F.wormholeMessengerProgramId),se=await He(F.wormholeMessengerProgramId),ge=Ia.generate(),be=Qe(this.solanaRpcUrl,S.toString()),me=await be.connection.getAccountInfo(Fe);if(me==null)throw new y("Cannot fetch wormhole bridge account info");let Me=new bt(me.data.slice(16,24),"le").toString(),Oe=zi.transfer({fromPubkey:S,toPubkey:xe,lamports:+Me}),Se=[];ce&&Se.push(ce);let W={mint:w,user:S,config:I,lock:l,pool:u,gasPrice:X,thisGasPrice:G,bridgeAuthority:d,userToken:p,bridgeToken:f,chainBridge:g,otherBridgeToken:h,messengerGasUsage:Te,wormholeProgram:L,bridge:Fe,message:ge.publicKey,wormholeMessenger:F.wormholeMessengerProgramId,sequence:je,feeCollector:xe,wormholeMessengerConfig:se,clock:ze.SYSVAR_CLOCK_PUBKEY},Yt=await i.methods.swapAndBridgeWormhole({vusdAmount:o,nonce:A,destinationChainId:T,recipient:c,receiveToken:m}).accounts(W).preInstructions([ze.ComputeBudgetProgram.setComputeUnitLimit({units:yr}),Oe]).postInstructions(Se).signers([ge]).transaction();return Yt.recentBlockhash=(await be.connection.getLatestBlockhash()).blockhash,Yt.feePayer=S,{transaction:await this.convertToVersionedTransaction(Yt,be.connection),messageAccount:ge}}async prepareSwapAndBridgeCctpData(r){let{contractAddress:i,amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,extraGas:d}=r,p=i;if(!p)throw new ne("Such route does not support CCTP protocol");let f=4,g=A,h=l,S=u,T=Qe(this.solanaRpcUrl,g),w=new fr(ga,p,T),I=new V(c),F=await sa(I,w.programId),X=new V(g),G=await w.account.cctpBridge.fetch(F),O={};return O.cctpBridge=w,O.cctpBridgeAccount=F,O.cctpAddressAccount=new V(p),O.amount=new bt(o),O.recipient=Array.from(S),O.receiveToken=Array.from(h),O.userToken=await Ce(X,I),O.bridgeAuthority=await ra(F,w.programId),O.bridgeTokenAccount=await oa(I,w.programId),O.chainBridgeAccount=await cr(m,w.programId),O.userAccount=X,O.destinationChainId=m,O.mint=I,O.gasPrice=await Ot(m,G.gasOracleProgramId),O.thisGasPrice=await Ot(f,G.gasOracleProgramId),O.provider=T,d&&(O.extraGasInstruction=this.getExtraGasInstruction(d,O.userAccount,F)),O}async buildSwapAndBridgeCctpTransaction(r,i){let{cctpBridge:o,cctpBridgeAccount:A,amount:c,recipient:m,receiveToken:u,bridgeAuthority:l,userToken:d,bridgeTokenAccount:p,chainBridgeAccount:f,userAccount:g,destinationChainId:h,mint:S,gasPrice:T,thisGasPrice:w,extraGasInstruction:I,provider:F}=i,X=this.params.cctpParams.cctpDomains[r],G=this.params.cctpParams.cctpTransmitterProgramId,O=this.params.cctpParams.cctpTokenMessengerMinter;if(X==null||!G||!O)throw new y("CCTP is not configured");let ce=new V(G),L=new V(O),{messageTransmitterAccount:Fe,tokenMessenger:xe,tokenMessengerEventAuthority:je,tokenMinter:Te,localToken:se,remoteTokenMessengerKey:ge,authorityPda:be}=ca(X,S,ce,L),me=[];I&&me.push(I);let Me=Ia.generate(),Oe=Aa(o.programId,Me.publicKey),Se=await o.methods.bridge({amount:c,destinationChainId:h,recipient:m,receiveToken:u}).accounts({mint:S,user:g,cctpBridge:A,messageSentEventData:Me.publicKey,lock:Oe,cctpMessenger:L,messageTransmitterProgram:ce,messageTransmitterAccount:Fe,tokenMessenger:xe,tokenMinter:Te,localToken:se,remoteTokenMessengerKey:ge,authorityPda:be,eventAuthority:je,bridgeToken:p,gasPrice:T,thisGasPrice:w,chainBridge:f,userToken:d,bridgeAuthority:l}).preInstructions([ze.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(me).transaction(),W=F.connection;return Se.recentBlockhash=(await W.getLatestBlockhash()).blockhash,Se.feePayer=g,{transaction:await this.convertToVersionedTransaction(Se,W),messageSentEventDataKeypair:Me}}send(r){throw new Y}};import{Address as hr,contract as Sb}from"@stellar/stellar-sdk";import{Big as ts}from"big.js";import{contract as n}from"@stellar/stellar-sdk";var qi=n.Spec,es=n.Client;var Gt=class extends es{constructor(r){super(new qi(["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"]),r);this.options=r}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 Tn=class extends le{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";async buildRawTransactionSend(r){let i=await Ie(this.chainType,r,this.api);return await this.buildRawTransactionSendFromParams(i)}async buildRawTransactionSendFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:f}=r,g=d;f&&(g=ts(g).plus(f).toFixed());let h=this.getContract(Gt,o,A),S;return p==="stablecoin"?S=await h.swap_and_bridge({sender:A,token:hr.contract(Buffer.from(c)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(l),nonce:Ue(),gas_amount:BigInt(0),fee_token_amount:BigInt(g)}):S=await h.swap_and_bridge({sender:A,token:hr.contract(Buffer.from(c)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(l),nonce:Ue(),gas_amount:BigInt(g),fee_token_amount:BigInt(0)}),S.toXDR()}async buildRawTransactionSwap(r){let i=await Ee(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=r;return(await this.getContract(Gt,o,A).swap({sender:A,amount:BigInt(i),token:hr.contract(Buffer.from(c)).toBuffer(),receive_token:Buffer.from(u),recipient:m,receive_amount_min:BigInt(l)})).toXDR()}send(r){throw new Y}getContract(r,i,o){let A={publicKey:o,contractId:i,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new r(A)}};import{SuiClient as ps}from"@mysten/sui/client";import{coinWithBalance as $,Transaction as Bn}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as ja}from"@mysten/sui/utils";import{Big as Fr}from"big.js";var xr=Pe(qe());var Xe=Pe(qe());H();function Fa(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::swap`,typeArguments:a,arguments:[C(s,r.bridge),C(s,r.coin),ye(s,r.receiveAmountMin,"u64")]})}function xa(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::deposit`,typeArguments:[a],arguments:[C(s,r.bridge),C(s,r.userDeposit),C(s,r.coin)]})}function Ma(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::withdraw`,typeArguments:[a],arguments:[C(s,r.bridge),C(s,r.userDeposit),ye(s,r.amountLp,"u64")]})}function Oa(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::claim_reward`,typeArguments:[a],arguments:[C(s,r.bridge),C(s,r.userDeposit)]})}function Na(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::pool`,typeArguments:[a],arguments:[C(s,r)]})}function br(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::swap_and_bridge_wormhole`,typeArguments:[a],arguments:[C(s,r.bridge),C(s,r.messenger),C(s,r.wormholeState),C(s,r.theClock),C(s,r.gasOracle),C(s,r.amount),C(s,r.recipient),ye(s,r.destinationChainId,"u8"),C(s,r.receiveToken),ye(s,r.nonce,"u256"),C(s,r.feeSuiCoin),C(s,r.feeTokenCoin)]})}function Wa(s,a){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::new_user_deposit`,typeArguments:[a],arguments:[]})}function Sr(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::swap_and_bridge`,typeArguments:[a],arguments:[C(s,r.bridge),C(s,r.messenger),C(s,r.gasOracle),C(s,r.amount),C(s,r.recipient),ye(s,r.destinationChainId,"u8"),C(s,r.receiveToken),ye(s,r.nonce,"u256"),C(s,r.feeSuiCoin),C(s,r.feeTokenCoin)]})}var $a=Pe(wr());var Ga=Pe(wr());H();function Cr(s,a,r){return s.moveCall({target:`${Ga.PUBLISHED_AT}::cctp_bridge_interface::bridge`,typeArguments:[a],arguments:[C(s,r.cctpBridge),C(s,r.gasOracle),C(s,r.tokenMessengerMinterState),C(s,r.messageTransmitterState),C(s,r.treasury),C(s,r.denyList),C(s,r.amount),C(s,r.feeSuiCoin),C(s,r.feeTokenCoin),ye(s,r.destinationChainId,"u8"),C(s,r.recipient),C(s,r.recipientWalletAddress)]})}var _a=Pe(Ir());var Za=Pe(Ir());H();import{bcs as et}from"@mysten/sui/bcs";import{fromHEX as As,toHEX as cs}from"@mysten/sui/utils";import{bcs as os}from"@mysten/sui/bcs";H();var Rr=class s{__VectorClass=!0;static $typeName="vector";static $numTypeParams=1;static $isPhantom=[!1];$typeName="vector";$fullTypeName;$typeArgs;$isPhantom=[!1];elements;constructor(a,r){this.$fullTypeName=M(this.$typeName,...a),this.$typeArgs=a,this.elements=r}static reified(a){return{typeName:s.$typeName,fullTypeName:M(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs(Ut(a)),fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),new:r=>new s([B(a)],r),kind:"VectorClassReified"}}static get r(){return s.reified}static get bcs(){return os.vector}static fromFields(a,r){return s.reified(a).new(r.map(i=>k(a,i)))}static fromFieldsWithTypes(a,r){return s.reified(a).new(r.map(i=>R(a,i)))}static fromBcs(a,r){return s.fromFields(a,s.bcs(Ut(a)).parse(r))}toJSONField(){return this.elements.map(a=>ct(this.$typeArgs[0],a))}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,elements:this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new(r.map(i=>v(a,i)))}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a vector json object");return s.fromJSONField(a,r.elements)}};function St(s){return Rr.r(s)}function j(s){return typeof s=="string"?{phantomType:s,kind:"PhantomReified"}:{phantomType:s.fullTypeName,kind:"PhantomReified"}}var ms=et.bytes(32).transform({input:s=>As(s),output:s=>cs(s)});function Ut(s){switch(s){case"bool":return et.bool();case"u8":return et.u8();case"u16":return et.u16();case"u32":return et.u32();case"u64":return et.u64();case"u128":return et.u128();case"u256":return et.u256();case"address":return ms;default:return s.bcs}}function B(s){switch(s){case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"bool":case"address":return s}switch(s.kind){case"PhantomReified":return s.phantomType;case"StructClassReified":return s.fullTypeName;case"VectorClassReified":return s.fullTypeName}throw new Error("unreachable")}function k(s,a){switch(s){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return`0x${a}`}if(s.kind==="VectorClassReified")return s.fromFields(a).elements;switch(s.typeName){case"0x1::string::String":case"0x1::ascii::String":return new TextDecoder().decode(Uint8Array.from(a.bytes)).toString();case"0x2::url::Url":return new TextDecoder().decode(Uint8Array.from(a.url.bytes)).toString();case"0x2::object::ID":return`0x${a.bytes}`;case"0x2::object::UID":return`0x${a.id.bytes}`;case"0x1::option::Option":return a.vec.length===0?null:s.fromFields(a).vec[0];default:return s.fromFields(a)}}function R(s,a){switch(s){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return a}if(s.kind==="VectorClassReified")return s.fromFieldsWithTypes(a).elements;switch(s.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":return a;case"0x2::object::UID":return a.id;case"0x2::balance::Balance":return s.fromFields({value:BigInt(a)});case"0x1::option::Option":return a===null?null:R(s.reifiedTypeArgs[0],a);default:return s.fromFieldsWithTypes(a)}}function ve(s,a,r){if(r.length!==a.length)throw new Error(`provided item has mismatching number of type argments ${s} (expected ${r.length}, got ${a.length}))`);for(let i=0;i<a.length;i++)if(P(a[i])!==P(B(r[i])))throw new Error(`provided item has mismatching type argments ${s} (expected ${B(r[i])}, got ${a[i]}))`)}function Ve(s,a){let{typeArgs:r}=ee(s.type);ve(s.type,r,a)}function ct(s,a){let{typeName:r,typeArgs:i}=ee(s);switch(r){case"bool":return a;case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return a.toString();case"address":case"signer":return a;case"vector":return a.map(o=>ct(i[0],o));case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return a;case"0x1::option::Option":return a===null?null:ct(i[0],a);default:return a.toJSONField()}}function v(s,a){switch(s){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return a}if(s.kind==="VectorClassReified")return s.fromJSONField(a).elements;switch(s.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return a;case"0x1::option::Option":return a===null?null:v(s.reifiedTypeArgs[0],a);default:return s.fromJSONField(a)}}H();var bn="0x1";import{bcs as Ru}from"@mysten/sui/bcs";import{fromB64 as ku}from"@mysten/sui/utils";H();import{bcs as vr}from"@mysten/sui/bcs";import{fromB64 as us}from"@mysten/sui/utils";function Sn(s){return s=P(s),s===`${bn}::string::String`}var Pn=class s{__StructClass=!0;static get $typeName(){return`${bn}::string::String`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;bytes;constructor(a,r){this.$fullTypeName=M(s.$typeName,...a),this.$typeArgs=a,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:M(s.$typeName),typeArgs:[],isPhantom:s.$isPhantom,reifiedTypeArgs:[],fromFields:a=>s.fromFields(a),fromFieldsWithTypes:a=>s.fromFieldsWithTypes(a),fromBcs:a=>s.fromBcs(a),bcs:s.bcs,fromJSONField:a=>s.fromJSONField(a),fromJSON:a=>s.fromJSON(a),fromSuiParsedData:a=>s.fromSuiParsedData(a),fromSuiObjectData:a=>s.fromSuiObjectData(a),fetch:async(a,r)=>s.fetch(a,r),new:a=>new s([],a),kind:"StructClassReified"}}static get r(){return s.reified()}static phantom(){return j(s.reified())}static get p(){return s.phantom()}static get bcs(){return vr.struct("String",{bytes:vr.vector(vr.u8())})}static fromFields(a){return s.reified().new({bytes:k(St("u8"),a.bytes)})}static fromFieldsWithTypes(a){if(!Sn(a.type))throw new Error("not a String type");return s.reified().new({bytes:R(St("u8"),a.fields.bytes)})}static fromBcs(a){return s.fromFields(s.bcs.parse(a))}toJSONField(){return{bytes:ct("vector<u8>",this.bytes)}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return s.reified().new({bytes:v(St("u8"),a.bytes)})}static fromJSON(a){if(a.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(a)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!Sn(a.type))throw new Error(`object at ${a.fields.id} is not a String object`);return s.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!Sn(a.bcs.type))throw new Error("object at is not a String object");return s.fromBcs(us(a.bcs.bcsBytes))}if(a.content)return s.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r){let i=await a.getObject({id:r,options:{showBcs:!0}});if(i.error)throw new Error(`error fetching String object at id ${r}: ${i.error.code}`);if(i.data?.bcs?.dataType!=="moveObject"||!Sn(i.data.bcs.type))throw new Error(`object at id ${r} is not a String object`);return s.fromSuiObjectData(i.data)}};H();H();var tt="0x2";import{bcs as kr}from"@mysten/sui/bcs";import{fromB64 as Va,fromHEX as ls,toHEX as ds}from"@mysten/sui/utils";function wn(s){return s=P(s),s===`${tt}::object::ID`}var mt=class s{__StructClass=!0;static get $typeName(){return`${tt}::object::ID`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;bytes;constructor(a,r){this.$fullTypeName=M(s.$typeName,...a),this.$typeArgs=a,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:M(s.$typeName),typeArgs:[],isPhantom:s.$isPhantom,reifiedTypeArgs:[],fromFields:a=>s.fromFields(a),fromFieldsWithTypes:a=>s.fromFieldsWithTypes(a),fromBcs:a=>s.fromBcs(a),bcs:s.bcs,fromJSONField:a=>s.fromJSONField(a),fromJSON:a=>s.fromJSON(a),fromSuiParsedData:a=>s.fromSuiParsedData(a),fromSuiObjectData:a=>s.fromSuiObjectData(a),fetch:async(a,r)=>s.fetch(a,r),new:a=>new s([],a),kind:"StructClassReified"}}static get r(){return s.reified()}static phantom(){return j(s.reified())}static get p(){return s.phantom()}static get bcs(){return kr.struct("ID",{bytes:kr.bytes(32).transform({input:a=>ls(a),output:a=>ds(a)})})}static fromFields(a){return s.reified().new({bytes:k("address",a.bytes)})}static fromFieldsWithTypes(a){if(!wn(a.type))throw new Error("not a ID type");return s.reified().new({bytes:R("address",a.fields.bytes)})}static fromBcs(a){return s.fromFields(s.bcs.parse(a))}toJSONField(){return{bytes:this.bytes}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return s.reified().new({bytes:v("address",a.bytes)})}static fromJSON(a){if(a.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(a)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!wn(a.type))throw new Error(`object at ${a.fields.id} is not a ID object`);return s.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!wn(a.bcs.type))throw new Error("object at is not a ID object");return s.fromBcs(Va(a.bcs.bcsBytes))}if(a.content)return s.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r){let i=await a.getObject({id:r,options:{showBcs:!0}});if(i.error)throw new Error(`error fetching ID object at id ${r}: ${i.error.code}`);if(i.data?.bcs?.dataType!=="moveObject"||!wn(i.data.bcs.type))throw new Error(`object at id ${r} is not a ID object`);return s.fromSuiObjectData(i.data)}};function Cn(s){return s=P(s),s===`${tt}::object::UID`}var he=class s{__StructClass=!0;static get $typeName(){return`${tt}::object::UID`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;constructor(a,r){this.$fullTypeName=M(s.$typeName,...a),this.$typeArgs=a,this.id=r.id}static reified(){return{typeName:s.$typeName,fullTypeName:M(s.$typeName),typeArgs:[],isPhantom:s.$isPhantom,reifiedTypeArgs:[],fromFields:a=>s.fromFields(a),fromFieldsWithTypes:a=>s.fromFieldsWithTypes(a),fromBcs:a=>s.fromBcs(a),bcs:s.bcs,fromJSONField:a=>s.fromJSONField(a),fromJSON:a=>s.fromJSON(a),fromSuiParsedData:a=>s.fromSuiParsedData(a),fromSuiObjectData:a=>s.fromSuiObjectData(a),fetch:async(a,r)=>s.fetch(a,r),new:a=>new s([],a),kind:"StructClassReified"}}static get r(){return s.reified()}static phantom(){return j(s.reified())}static get p(){return s.phantom()}static get bcs(){return kr.struct("UID",{id:mt.bcs})}static fromFields(a){return s.reified().new({id:k(mt.reified(),a.id)})}static fromFieldsWithTypes(a){if(!Cn(a.type))throw new Error("not a UID type");return s.reified().new({id:R(mt.reified(),a.fields.id)})}static fromBcs(a){return s.fromFields(s.bcs.parse(a))}toJSONField(){return{id:this.id}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return s.reified().new({id:v(mt.reified(),a.id)})}static fromJSON(a){if(a.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(a)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!Cn(a.type))throw new Error(`object at ${a.fields.id} is not a UID object`);return s.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!Cn(a.bcs.type))throw new Error("object at is not a UID object");return s.fromBcs(Va(a.bcs.bcsBytes))}if(a.content)return s.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r){let i=await a.getObject({id:r,options:{showBcs:!0}});if(i.error)throw new Error(`error fetching UID object at id ${r}: ${i.error.code}`);if(i.data?.bcs?.dataType!=="moveObject"||!Cn(i.data.bcs.type))throw new Error(`object at id ${r} is not a UID object`);return s.fromSuiObjectData(i.data)}};function ke(s,a){return s.moveCall({target:`${Za.PUBLISHED_AT}::bytes32::from_hex`,arguments:[ye(s,a,`${Pn.$typeName}`)]})}async function Ze(s,a,r=[]){let i=await s(a),o=r.concat(i.data);return i.hasNextPage&&i.nextCursor?Ze(s,i.nextCursor,o):o}var In=class extends le{constructor(r,i){super();this.nodeRpcUrlsConfig=r;this.api=i;this.client=new ps({url:r.getNodeRpcUrl(this.chainSymbol)})}chainType="SUI";chainSymbol="SUI";client;send(){throw new y("Method send not implemented.")}async buildRawTransactionSwap(r){let i=r.sourceToken.suiAddresses;if(!i)throw new y("SUI token must contain 'suiAddresses'");(0,xr.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin);let o=await Ee(this.chainType,r);return await this.buildRawTransactionSwapFromParams(o,i)}async buildRawTransactionSwapFromParams(r,i){let{amount:o,fromAccountAddress:A,fromTokenAddress:c,toTokenAddress:m,minimumReceiveAmount:u}=r,l=new Bn;l.setSender(A);let d={bridge:i.bridgeObjectAddress,coin:$({balance:BigInt(o),type:c}),receiveAmountMin:BigInt(u)},p=Fa(l,[c,m],d),f=await Ze(g=>this.client.getCoins({owner:r.toAccountAddress,coinType:m,cursor:g}));return f.length===0||!f[0]?l.transferObjects([p],r.toAccountAddress):l.mergeCoins(f[0].coinObjectId,[p]),await l.toJSON({client:this.client})}async buildRawTransactionSend(r){let i=await Ie(this.chainType,r,this.api),{messenger:o}=i,A=r.sourceToken.suiAddresses;if(!A)throw new y("SUI token must contain 'suiAddresses'");switch((0,xr.setAddress)(A.bridgeAddress,A.bridgeAddressOrigin),(0,_a.setAddress)(A.utilsAddress),o){case 1:return this.buildRawTransactionAllbridgeSend(i,A);case 2:return this.buildRawTransactionWormholeSend(i,A);case 3:case 4:return this.buildRawTransactionCctpSend(r,i,A)}}async buildRawTransactionAllbridgeSend(r,i){let{amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:f}=r,g=d;f&&(g=Fr(g).plus(f).toFixed());let h=new Bn;if(h.setSender(A),p==="stablecoin"){let S=BigInt(o)-BigInt(g),T={bridge:i.bridgeObjectAddress,messenger:i.allbridgeMessengerObjectAddress,amount:$({balance:S,type:c}),destinationChainId:m,nonce:Ue(),recipient:ke(h,Be(u)),receiveToken:ke(h,Be(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(g),type:c}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};Sr(h,c,T)}else{let S=g==="0"?$({balance:BigInt(g),useGasCoin:!1}):$({balance:BigInt(g)}),T={bridge:i.bridgeObjectAddress,messenger:i.allbridgeMessengerObjectAddress,amount:$({balance:BigInt(o),type:c}),destinationChainId:m,nonce:Ue(),recipient:ke(h,Be(u)),receiveToken:ke(h,Be(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:c}),feeSuiCoin:S};Sr(h,c,T)}return await h.toJSON({client:this.client})}async buildRawTransactionWormholeSend(r,i){let{amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:f}=r,g=d;f&&(g=Fr(g).plus(f).toFixed());let h=new Bn;if(h.setSender(A),p==="stablecoin"){let S=BigInt(o)-BigInt(g),T={bridge:i.bridgeObjectAddress,messenger:i.wormholeMessengerObjectAddress,wormholeState:i.wormholeStateObjectAddress,theClock:ja,amount:$({balance:S,type:c}),destinationChainId:m,nonce:Ue(),recipient:ke(h,Be(u)),receiveToken:ke(h,Be(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(g),type:c}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};br(h,c,T)}else{let S=g==="0"?$({balance:BigInt(g),useGasCoin:!1}):$({balance:BigInt(g)}),T={bridge:i.bridgeObjectAddress,messenger:i.wormholeMessengerObjectAddress,wormholeState:i.wormholeStateObjectAddress,theClock:ja,amount:$({balance:BigInt(o),type:c}),destinationChainId:m,nonce:Ue(),recipient:ke(h,Be(u)),receiveToken:ke(h,Be(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:c}),feeSuiCoin:S};br(h,c,T)}return await h.toJSON({client:this.client})}async buildRawTransactionCctpSend(r,i,o){let{amount:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:f}=i;(0,$a.setAddress)(o.cctpAddress,o.cctpAddressOrigin);let g=d;f&&(g=Fr(g).plus(f).toFixed());let h=new Bn;h.setSender(c);let S=ke(h,Be(l)),T;if(r.destinationToken.chainType==="SOLANA"){let w=await ln(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));T=ke(h,Be(w))}else T=S;if(p==="stablecoin"){let w=BigInt(A)-BigInt(g),I={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:$({balance:w,type:m}),destinationChainId:u,recipient:T,recipientWalletAddress:S,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(g),type:m}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};Cr(h,m,I)}else{let w=g==="0"?$({balance:BigInt(g),useGasCoin:!1}):$({balance:BigInt(g)}),I={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:$({balance:BigInt(A),type:m}),destinationChainId:u,recipient:T,recipientWalletAddress:S,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:m}),feeSuiCoin:w};Cr(h,m,I)}return await h.toJSON({client:this.client})}};import{Big as ys}from"big.js";import gs from"bn.js";function Rn(s){return"0x"+new gs(s).toString("hex")}function Ja(s){return new Promise(a=>setTimeout(()=>a(),s))}async function vn(s,a){let r=await s.trx.sign(a);if(!r.signature)throw new pt("Transaction was not signed properly");let o=(await s.trx.sendRawTransaction(r)).transaction.txID;return await fs(s,o),{txId:o}}async function fs(s,a,r=1e4){let i=Date.now();for(;;){if(Date.now()-i>r)throw new kt("Transaction not found");let o=await s.trx.getUnconfirmedTransactionInfo(a);if(!o?.receipt){await Ja(2e3);continue}if(o.receipt.result==="SUCCESS")return o;throw new kt(`Transaction status is ${o.receipt.result}`)}}var Et=class extends le{constructor(r,i){super();this.tronWeb=r;this.api=i}chainType="TRX";async send(r){let i=await Ie(this.chainType,r,this.api),o=await this.buildRawTransactionSendFromParams(i);return await vn(this.tronWeb,o)}async buildRawTransactionSwap(r){let i=await Ee(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=r,d=[{type:"uint256",value:i},{type:"bytes32",value:c},{type:"bytes32",value:u},{type:"address",value:m},{type:"uint256",value:l}];return this.buildRawTransaction(o,"swap(uint256,bytes32,bytes32,address,uint256)",d,"0",A)}async buildRawTransactionSend(r){let i=await Ie(this.chainType,r,this.api);return this.buildRawTransactionSendFromParams(i)}async buildRawTransactionSendFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,messenger:d,fee:p,gasFeePaymentMethod:f,extraGas:g}=r,h=p;g&&(h=ys(h).plus(g).toFixed());let S=Ue().toString(),T,w,I;return d==3||d==4?(f==="stablecoin"?(T=[{type:"uint256",value:i},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"uint256",value:h}],w="0"):(T=[{type:"uint256",value:i},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"uint256",value:0}],w=h),I="bridge(uint256,bytes32,uint256,uint256)"):(f==="stablecoin"?(T=[{type:"bytes32",value:c},{type:"uint256",value:i},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"bytes32",value:l},{type:"uint256",value:S},{type:"uint8",value:d},{type:"uint256",value:h}],w="0"):(T=[{type:"bytes32",value:c},{type:"uint256",value:i},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"bytes32",value:l},{type:"uint256",value:S},{type:"uint8",value:d},{type:"uint256",value:0}],w=h),I="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)"),this.buildRawTransaction(o,I,T,w,A)}async buildRawTransaction(r,i,o,A,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+A},o,c);if(!m?.result?.result)throw new y("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var kn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new dn(a,r,i,o)}rawTxBuilder;async getAllowance(a,r){let i,o;r?(i=a,o=r):o=a;let A=Wt(o.token,o.messenger);return await this.tokenService.getAllowance({...o,spender:A},i)}async checkAllowance(a,r){let i,o;r?(i=a,o=r):o=a;let A=Wt(o.token,o.messenger);return this.tokenService.checkAllowance({...o,spender:A},i)}async approve(a,r){let i=Wt(r.token,r.messenger);return this.tokenService.approve(a,{...r,spender:i})}async send(a,r){return U(r.amount),E("amount",r.amount,r.sourceToken.decimals),(await pn(r.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a)).send(r)}};function Wt(s,a){if(a&&a==3){if(s.cctpAddress)return s.cctpAddress;throw new ne("Such route does not support CCTP protocol")}else if(a&&a==4){if(s.cctpV2Address)return s.cctpV2Address;throw new ne("Such route does not support CCTP V2 protocol")}else return s.bridgeAddress}async function pn(s,a,r,i,o){switch(N.getChainProperty(s).chainType){case"EVM":{if(o)return new Nt(o,a,r);{let A=r.getNodeRpcUrl(s);return new Nt(new hs(A),a,r)}}case"TRX":if(o){let A=await we();return new Et(o,a)}else{let A=r.getNodeRpcUrl(s);return new Et(new(await we())({fullHost:A,solidityNode:A,eventServer:A}),a)}case"SOLANA":return new hn(r.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:i.wormholeMessengerProgramId,solanaLookUpTable:i.solanaLookUpTable,cctpParams:i.cctpParams,jupiterParams:{jupiterUrl:i.jupiterUrl,jupiterApiKeyHeader:i.jupiterApiKeyHeader,jupiterMaxAccounts:i.jupiterMaxAccounts}},a);case"SRB":return new Tn(r,i,a);case"SUI":return new In(r,a)}}import{Big as Ws}from"big.js";import Ds from"timed-cache";import{FMT_BYTES as Gs,FMT_NUMBER as Us,Web3 as Es}from"web3";import{Big as Ye}from"big.js";function La(s,a,r,i,o){let A=D(s,3),c=Ye(A),m=Ye(r),u=Ye(i).plus(o),l,d;if(m.eq(0)||u.eq(0)){let f=c.div(2);l=Ye(i).plus(f),d=Ye(o).plus(f)}else l=Ye(i).plus(c.mul(i).div(u)),d=Ye(o).plus(c.mul(o).div(u));return Ye(Lr(a,l.toFixed(),d.toFixed())).minus(m).toFixed()}function Xa(s){let a=D(s,3);return Ye(a).round().toFixed()}import{Web3 as nt}from"web3";var Ts={abi:[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Pt=Ts;var ie=class{lpAmount;rewardDebt;constructor(a){this.lpAmount=a.lpAmount,this.rewardDebt=a.rewardDebt}get userLiquidity(){return x(this.lpAmount,3).toFixed()}earned(a,r){let i=_r(this.lpAmount,this.rewardDebt,a.accRewardPerShareP,a.p);return r?x(i,r).toFixed():i}};var de=class{};var Vt=class extends de{constructor(r,i){super();this.web3=r;this.api=i}chainType="EVM";P=52;async getUserBalanceInfo(r,i){let o;try{o=await on(this.getUserBalanceInfoByBatch(r,i),`Cannot get UserBalanceInfo for ${i.name} on ${i.chainSymbol}`,5e3)}catch{o=await Ar(()=>this.getUserBalanceInfoPerProperty(r,i),`Cannot get UserBalanceInfo for ${i.name} on ${i.chainSymbol}`,5,2e3)}return o}async getPoolInfoFromChain(r){let i;try{i=await on(this.getPoolInfoByBatch(r),`Cannot get PoolInfo for ${r.name} on ${r.chainSymbol}`,5e3)}catch{i=await Ar(()=>this.getPoolInfoPerProperty(r),`Cannot get PoolInfo for ${r.name} on ${r.chainSymbol}`,5,2e3)}return i}async getUserBalanceInfoByBatch(r,i){let o=new this.web3.eth.BatchRequest,A=this.getPoolContract(i.poolAddress),c=A.methods.userRewardDebt(r).encodeABI(),m=A.methods.balanceOf(r).encodeABI();o.add({method:"eth_call",params:[{to:i.poolAddress,data:c},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:m},"latest"]});let[u,l]=await o.execute();if(u&&l&&!u.error&&!l.error)return new ie({lpAmount:nt.utils.toBigInt(l.result).toString(),rewardDebt:nt.utils.toBigInt(u.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(r,i){let o=(await this.getPoolContract(i.poolAddress).methods.userRewardDebt(r).call()).toString(),A=(await this.getPoolContract(i.poolAddress).methods.balanceOf(r).call()).toString();return new ie({lpAmount:A,rewardDebt:o})}async getPoolInfoByBatch(r){let i=new this.web3.eth.BatchRequest,o=this.getPoolContract(r.poolAddress),A=o.methods.a().encodeABI(),c=o.methods.d().encodeABI(),m=o.methods.tokenBalance().encodeABI(),u=o.methods.vUsdBalance().encodeABI(),l=o.methods.totalSupply().encodeABI(),d=o.methods.accRewardPerShareP().encodeABI();i.add({method:"eth_call",params:[{to:r.poolAddress,data:A},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:c},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:m},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:u},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:l},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:d},"latest"]});let[p,f,g,h,S,T]=await i.execute();if(p&&f&&g&&h&&S&&T&&!p.error&&!f.error&&!g.error&&!h.error&&!S.error&&!T.error){let w=nt.utils.toBigInt(g.result).toString(),I=nt.utils.toBigInt(h.result).toString(),F=re({tokenBalance:w,vUsdBalance:I});return{aValue:nt.utils.toBigInt(p.result).toString(),dValue:nt.utils.toBigInt(f.result).toString(),tokenBalance:w,vUsdBalance:I,totalLpAmount:nt.utils.toBigInt(S.result).toString(),accRewardPerShareP:nt.utils.toBigInt(T.result).toString(),p:this.P,imbalance:F}}throw new Error("Batched failed")}async getPoolInfoPerProperty(r){let i=this.getPoolContract(r.poolAddress),o=(await i.methods.a().call()).toString(),A=(await i.methods.d().call()).toString(),c=(await i.methods.tokenBalance().call()).toString(),m=(await i.methods.vUsdBalance().call()).toString(),u=(await i.methods.totalSupply().call()).toString(),l=(await i.methods.accRewardPerShareP().call()).toString(),d=re({tokenBalance:c,vUsdBalance:m});return{aValue:o,dValue:A,tokenBalance:c,vUsdBalance:m,totalLpAmount:u,accRewardPerShareP:l,p:this.P,imbalance:d}}async buildRawTransactionDeposit(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.deposit(r.amount).encodeABI()})}async buildRawTransactionWithdraw(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.withdraw(r.amount).encodeABI()})}async buildRawTransactionClaimRewards(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(r){return{from:r.accountAddress,to:r.token.poolAddress,value:"0"}}getPoolContract(r){return new this.web3.eth.Contract(Pt.abi,r)}};var Fn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o}async approve(a,r){if(r){let i=a,o=r;return this.tokenService.buildRawTransactionApprove({...o,spender:o.token.poolAddress},i)}else{let i=a;return this.tokenService.buildRawTransactionApprove({...i,spender:i.token.poolAddress})}}async deposit(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),a.amount=D(a.amount,a.token.decimals).toFixed(),(await wt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r)).buildRawTransactionDeposit(a)}async withdraw(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),a.amount=D(a.amount,3).toFixed(),(await wt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r)).buildRawTransactionWithdraw(a)}async claimRewards(a,r){return(await wt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r)).buildRawTransactionClaimRewards(a)}};import{AnchorProvider as bs,BN as Ya,Program as Ss,Spl as Ps,web3 as ws}from"@project-serum/anchor";import{Connection as Cs,PublicKey as rt}from"@solana/web3.js";var xn=class extends de{constructor(r,i){super();this.solanaRpcUrl=r;this.api=i}chainType="SOLANA";P=48;async getUserBalanceInfo(r,i){let o=this.buildAnchorProvider(r),A=this.getBridge(i.bridgeAddress,o),c=new rt(i.poolAddress),m=await A.account.pool.fetch(c);try{let u=await ur(new rt(r),m.mint,A.programId),{lpAmount:l,rewardDebt:d}=await A.account.userDeposit.fetch(u);return new ie({lpAmount:l.toString(),rewardDebt:d.toString()})}catch{return new ie({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(r){let i=this.buildAnchorProvider(r.bridgeAddress),o=await this.getBridge(r.bridgeAddress,i).account.pool.fetch(r.poolAddress),A=o.vUsdBalance.toString(),c=o.tokenBalance.toString(),m=re({tokenBalance:c,vUsdBalance:A});return{dValue:o.d.toString(),aValue:o.a.toString(),totalLpAmount:o.totalLpAmount.toString(),vUsdBalance:A,tokenBalance:c,accRewardPerShareP:o.accRewardPerShareP.toString(),p:this.P,imbalance:m}}async buildRawTransactionDeposit(r){let{bridge:i,accounts:o,preInstructions:A}=await this.prepareDataForTransaction(r),c=await i.methods.deposit(new Ya(r.amount)).accounts(o).preInstructions(A).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new rt(r.accountAddress),await Tt(c,r.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionWithdraw(r){let{bridge:i,accounts:o,preInstructions:A}=await this.prepareDataForTransaction(r),c=await i.methods.withdraw(new Ya(r.amount)).accounts(o).preInstructions(A).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new rt(r.accountAddress),await Tt(c,r.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionClaimRewards(r){let{bridge:i,accounts:o,preInstructions:A}=await this.prepareDataForTransaction(r),c=await i.methods.claimRewards().accounts(o).preInstructions(A).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new rt(r.accountAddress),await Tt(c,r.txFeeParams,this.solanaRpcUrl),c}async prepareDataForTransaction(r){let i=this.buildAnchorProvider(r.accountAddress),o=this.getBridge(r.token.bridgeAddress,i),{accounts:A,preInstructions:c}=await this._getLPTransactionData(o,r.token.poolAddress,r.accountAddress,i);return{bridge:o,accounts:A,preInstructions:c}}getBridge(r,i){return new Ss(Dt,r,i)}buildAnchorProvider(r){let i=new Cs(this.solanaRpcUrl,"confirmed"),o=new rt(r);return new bs(i,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(r,i,o,A){let c=new rt(o),m=await He(r.programId),u=await ft(r.programId),l=new rt(i),p=(await r.account.pool.fetch(l)).mint,f=await Ce(c,p),g=await yt(p,r.programId),h=await ur(c,p,r.programId),S=[ws.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await ht(f,A)}catch{let F=await Ps.associatedToken(A).methods.create().accounts({mint:p,owner:c,associatedAccount:f}).instruction();S.push(F)}try{await r.account.userDeposit.fetch(h)}catch{let I=await r.methods.initDepositAccount().accounts({mint:p,user:c,userDeposit:h}).instruction();S.push(I)}return{accounts:{mint:p,user:c,config:m,pool:l,bridgeAuthority:u,userDeposit:h,userToken:f,bridgeToken:g},preInstructions:S}}};import{contract as Pb}from"@stellar/stellar-sdk";import{contract as t}from"@stellar/stellar-sdk";var Bs=t.Spec,Is=t.Client;var Mn=class extends Is{constructor(r){super(new Bs(["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"]),r);this.options=r}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}};import{contract as tp,rpc as Rs}from"@stellar/stellar-sdk";var Ka=Rs.Api;function Ct(s){let{simulation:a,options:r}=s;if(!a)throw new Error("Soroban assembled transaction does not have simulation");if(Ka.isSimulationSuccess(a))return a.result==null?void 0:r.parseResultXdr(a.result.retval);throw new Error(a.error)}function Bt(s){let{simulation:a}=s;if(!a)throw new Error("Soroban assembled transaction does not have simulation");return Ka.isSimulationError(a)}var On=class extends de{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";P=48;async getUserBalanceInfo(r,i){let A=await this.getContract(i.poolAddress).get_user_deposit({user:r});if(Bt(A))throw new y;let c=Ct(A);if(!c)throw new y;let m=c.unwrap();return new ie({lpAmount:m.lp_amount.toString(),rewardDebt:m.reward_debt.toString()})}async getPoolInfoFromChain(r){let o=await this.getContract(r.poolAddress).get_pool();if(Bt(o))throw new y;let A=Ct(o);if(!A)throw new y;let c=A.unwrap();return{aValue:c.a.toString(),accRewardPerShareP:c.acc_reward_per_share_p.toString(),dValue:c.d.toString(),tokenBalance:c.token_balance.toString(),p:this.P,totalLpAmount:c.total_lp_amount.toString(),vUsdBalance:c.v_usd_balance.toString(),imbalance:re({tokenBalance:c.token_balance.toString(),vUsdBalance:c.v_usd_balance.toString()})}}async buildRawTransactionDeposit(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).deposit({sender:r.accountAddress,amount:BigInt(r.amount)})).toXDR()}async buildRawTransactionWithdraw(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).withdraw({sender:r.accountAddress,amount_lp:BigInt(r.amount)})).toXDR()}async buildRawTransactionClaimRewards(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).claim_rewards({sender:r.accountAddress})).toXDR()}getContract(r,i){let o={publicKey:i,contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new Mn(o)}};import{SuiClient as Ns}from"@mysten/sui/client";import{Transaction as jn}from"@mysten/sui/transactions";var Rt=Pe(qe());H();H();import{bcs as Ha}from"@mysten/sui/bcs";import{fromB64 as vs}from"@mysten/sui/utils";function Nn(s){return s=P(s),s.startsWith(`${tt}::balance::Balance<`)}var te=class s{__StructClass=!0;static get $typeName(){return`${tt}::balance::Balance`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;value;constructor(a,r){this.$fullTypeName=M(s.$typeName,...a),this.$typeArgs=a,this.value=r.value}static reified(a){return{typeName:s.$typeName,fullTypeName:M(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([B(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return j(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Ha.struct("Balance",{value:Ha.u64()})}static fromFields(a,r){return s.reified(a).new({value:k("u64",r.value)})}static fromFieldsWithTypes(a,r){if(!Nn(r.type))throw new Error("not a Balance type");return Ve(r,[a]),s.reified(a).new({value:R("u64",r.fields.value)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{value:this.value.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({value:v("u64",r.value)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return ve(M(s.$typeName,B(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Nn(r.type))throw new Error(`object at ${r.fields.id} is not a Balance object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Nn(r.bcs.type))throw new Error("object at is not a Balance object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(B(a));if(o!==P(B(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,vs(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching Balance object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Nn(o.data.bcs.type))throw new Error(`object at id ${i} is not a Balance object`);return s.fromSuiObjectData(r,o.data)}};var Nr=Pe(qe());H();var Mr=Pe(qe());import{bcs as Wn}from"@mysten/sui/bcs";import{fromB64 as ks}from"@mysten/sui/utils";function Dn(s){return s=P(s),s.startsWith(`${Mr.PKG_V1}::pool_rewards::PoolRewards<`)}var ut=class s{__StructClass=!0;static get $typeName(){return`${Mr.PKG_V1}::pool_rewards::PoolRewards`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;accRewardPerShareP;adminFeeShareBp;adminFee;rewards;lpSupply;constructor(a,r){this.$fullTypeName=M(s.$typeName,...a),this.$typeArgs=a,this.accRewardPerShareP=r.accRewardPerShareP,this.adminFeeShareBp=r.adminFeeShareBp,this.adminFee=r.adminFee,this.rewards=r.rewards,this.lpSupply=r.lpSupply}static reified(a){return{typeName:s.$typeName,fullTypeName:M(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([B(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return j(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Wn.struct("PoolRewards",{acc_reward_per_share_p:Wn.u128(),admin_fee_share_bp:Wn.u64(),admin_fee:te.bcs,rewards:te.bcs,lp_supply:Wn.u64()})}static fromFields(a,r){return s.reified(a).new({accRewardPerShareP:k("u128",r.acc_reward_per_share_p),adminFeeShareBp:k("u64",r.admin_fee_share_bp),adminFee:k(te.reified(a),r.admin_fee),rewards:k(te.reified(a),r.rewards),lpSupply:k("u64",r.lp_supply)})}static fromFieldsWithTypes(a,r){if(!Dn(r.type))throw new Error("not a PoolRewards type");return Ve(r,[a]),s.reified(a).new({accRewardPerShareP:R("u128",r.fields.acc_reward_per_share_p),adminFeeShareBp:R("u64",r.fields.admin_fee_share_bp),adminFee:R(te.reified(a),r.fields.admin_fee),rewards:R(te.reified(a),r.fields.rewards),lpSupply:R("u64",r.fields.lp_supply)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{accRewardPerShareP:this.accRewardPerShareP.toString(),adminFeeShareBp:this.adminFeeShareBp.toString(),adminFee:this.adminFee.toJSONField(),rewards:this.rewards.toJSONField(),lpSupply:this.lpSupply.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({accRewardPerShareP:v("u128",r.accRewardPerShareP),adminFeeShareBp:v("u64",r.adminFeeShareBp),adminFee:v(te.reified(a),r.adminFee),rewards:v(te.reified(a),r.rewards),lpSupply:v("u64",r.lpSupply)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return ve(M(s.$typeName,B(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Dn(r.type))throw new Error(`object at ${r.fields.id} is not a PoolRewards object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Dn(r.bcs.type))throw new Error("object at is not a PoolRewards object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(B(a));if(o!==P(B(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,ks(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching PoolRewards object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Dn(o.data.bcs.type))throw new Error(`object at id ${i} is not a PoolRewards object`);return s.fromSuiObjectData(r,o.data)}};H();var Or=Pe(qe());import{bcs as It}from"@mysten/sui/bcs";import{fromB64 as Fs}from"@mysten/sui/utils";function Gn(s){return s=P(s),s.startsWith(`${Or.PKG_V1}::pool_state::PoolState<`)}var lt=class s{__StructClass=!0;static get $typeName(){return`${Or.PKG_V1}::pool_state::PoolState`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;tokenBalance;vusdBalance;d;a;balanceRatioMinBp;constructor(a,r){this.$fullTypeName=M(s.$typeName,...a),this.$typeArgs=a,this.tokenBalance=r.tokenBalance,this.vusdBalance=r.vusdBalance,this.d=r.d,this.a=r.a,this.balanceRatioMinBp=r.balanceRatioMinBp}static reified(a){return{typeName:s.$typeName,fullTypeName:M(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([B(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return j(s.reified(a))}static get p(){return s.phantom}static get bcs(){return It.struct("PoolState",{token_balance:It.u64(),vusd_balance:It.u64(),d:It.u64(),a:It.u64(),balance_ratio_min_bp:It.u64()})}static fromFields(a,r){return s.reified(a).new({tokenBalance:k("u64",r.token_balance),vusdBalance:k("u64",r.vusd_balance),d:k("u64",r.d),a:k("u64",r.a),balanceRatioMinBp:k("u64",r.balance_ratio_min_bp)})}static fromFieldsWithTypes(a,r){if(!Gn(r.type))throw new Error("not a PoolState type");return Ve(r,[a]),s.reified(a).new({tokenBalance:R("u64",r.fields.token_balance),vusdBalance:R("u64",r.fields.vusd_balance),d:R("u64",r.fields.d),a:R("u64",r.fields.a),balanceRatioMinBp:R("u64",r.fields.balance_ratio_min_bp)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{tokenBalance:this.tokenBalance.toString(),vusdBalance:this.vusdBalance.toString(),d:this.d.toString(),a:this.a.toString(),balanceRatioMinBp:this.balanceRatioMinBp.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({tokenBalance:v("u64",r.tokenBalance),vusdBalance:v("u64",r.vusdBalance),d:v("u64",r.d),a:v("u64",r.a),balanceRatioMinBp:v("u64",r.balanceRatioMinBp)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return ve(M(s.$typeName,B(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Gn(r.type))throw new Error(`object at ${r.fields.id} is not a PoolState object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Gn(r.bcs.type))throw new Error("object at is not a PoolState object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(B(a));if(o!==P(B(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,Fs(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching PoolState object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Gn(o.data.bcs.type))throw new Error(`object at id ${i} is not a PoolState object`);return s.fromSuiObjectData(r,o.data)}};import{bcs as Zt}from"@mysten/sui/bcs";import{fromB64 as xs}from"@mysten/sui/utils";function Un(s){return s=P(s),s.startsWith(`${Nr.PKG_V1}::pool::Pool<`)}var En=class s{__StructClass=!0;static get $typeName(){return`${Nr.PKG_V1}::pool::Pool`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;state;rewards;feeShareBp;canDeposit;canWithdraw;decimals;balance;constructor(a,r){this.$fullTypeName=M(s.$typeName,...a),this.$typeArgs=a,this.id=r.id,this.state=r.state,this.rewards=r.rewards,this.feeShareBp=r.feeShareBp,this.canDeposit=r.canDeposit,this.canWithdraw=r.canWithdraw,this.decimals=r.decimals,this.balance=r.balance}static reified(a){return{typeName:s.$typeName,fullTypeName:M(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([B(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return j(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Zt.struct("Pool",{id:he.bcs,state:lt.bcs,rewards:ut.bcs,fee_share_bp:Zt.u64(),can_deposit:Zt.bool(),can_withdraw:Zt.bool(),decimals:Zt.u8(),balance:te.bcs})}static fromFields(a,r){return s.reified(a).new({id:k(he.reified(),r.id),state:k(lt.reified(a),r.state),rewards:k(ut.reified(a),r.rewards),feeShareBp:k("u64",r.fee_share_bp),canDeposit:k("bool",r.can_deposit),canWithdraw:k("bool",r.can_withdraw),decimals:k("u8",r.decimals),balance:k(te.reified(a),r.balance)})}static fromFieldsWithTypes(a,r){if(!Un(r.type))throw new Error("not a Pool type");return Ve(r,[a]),s.reified(a).new({id:R(he.reified(),r.fields.id),state:R(lt.reified(a),r.fields.state),rewards:R(ut.reified(a),r.fields.rewards),feeShareBp:R("u64",r.fields.fee_share_bp),canDeposit:R("bool",r.fields.can_deposit),canWithdraw:R("bool",r.fields.can_withdraw),decimals:R("u8",r.fields.decimals),balance:R(te.reified(a),r.fields.balance)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{id:this.id,state:this.state.toJSONField(),rewards:this.rewards.toJSONField(),feeShareBp:this.feeShareBp.toString(),canDeposit:this.canDeposit,canWithdraw:this.canWithdraw,decimals:this.decimals,balance:this.balance.toJSONField()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({id:v(he.reified(),r.id),state:v(lt.reified(a),r.state),rewards:v(ut.reified(a),r.rewards),feeShareBp:v("u64",r.feeShareBp),canDeposit:v("bool",r.canDeposit),canWithdraw:v("bool",r.canWithdraw),decimals:v("u8",r.decimals),balance:v(te.reified(a),r.balance)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return ve(M(s.$typeName,B(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Un(r.type))throw new Error(`object at ${r.fields.id} is not a Pool object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Un(r.bcs.type))throw new Error("object at is not a Pool object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(B(a));if(o!==P(B(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,xs(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching Pool object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Un(o.data.bcs.type))throw new Error(`object at id ${i} is not a Pool object`);return s.fromSuiObjectData(r,o.data)}};H();var Dr=Pe(qe());import{bcs as Wr}from"@mysten/sui/bcs";import{fromB64 as Ms}from"@mysten/sui/utils";function Vn(s){return s=P(s),s.startsWith(`${Dr.PKG_V1}::user_deposit::UserDeposit<`)}var Zn=class s{__StructClass=!0;static get $typeName(){return`${Dr.PKG_V1}::user_deposit::UserDeposit`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;lpAmount;rewardDebt;constructor(a,r){this.$fullTypeName=M(s.$typeName,...a),this.$typeArgs=a,this.id=r.id,this.lpAmount=r.lpAmount,this.rewardDebt=r.rewardDebt}static reified(a){return{typeName:s.$typeName,fullTypeName:M(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([B(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return j(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Wr.struct("UserDeposit",{id:he.bcs,lp_amount:Wr.u64(),reward_debt:Wr.u64()})}static fromFields(a,r){return s.reified(a).new({id:k(he.reified(),r.id),lpAmount:k("u64",r.lp_amount),rewardDebt:k("u64",r.reward_debt)})}static fromFieldsWithTypes(a,r){if(!Vn(r.type))throw new Error("not a UserDeposit type");return Ve(r,[a]),s.reified(a).new({id:R(he.reified(),r.fields.id),lpAmount:R("u64",r.fields.lp_amount),rewardDebt:R("u64",r.fields.reward_debt)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{id:this.id,lpAmount:this.lpAmount.toString(),rewardDebt:this.rewardDebt.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({id:v(he.reified(),r.id),lpAmount:v("u64",r.lpAmount),rewardDebt:v("u64",r.rewardDebt)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return ve(M(s.$typeName,B(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Vn(r.type))throw new Error(`object at ${r.fields.id} is not a UserDeposit object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Vn(r.bcs.type))throw new Error("object at is not a UserDeposit object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(B(a));if(o!==P(B(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,Ms(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching UserDeposit object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Vn(o.data.bcs.type))throw new Error(`object at id ${i} is not a UserDeposit object`);return s.fromSuiObjectData(r,o.data)}};function za(s,a,r){if(a.length===0||!a[0])return[];let i=a[0],o=s.reduce((m,u)=>m+BigInt(u),BigInt(0)),A=BigInt(i.balance),c=[];for(let m of a.slice(1)){if(A>o)return Qa(r,i,c,s);A+=BigInt(m.balance),c.push(m)}return A>=o?Qa(r,i,c,s):[]}function Qa(s,a,r,i){let o=i.map(A=>s.pure.u64(A));return r.length>0&&s.mergeCoins(a.coinObjectId,r.map(A=>A.coinObjectId)),s.splitCoins(a.coinObjectId,o)}var Os="0x0000000000000000000000000000000000000000000000000000000000000000";async function qa(s,a,r){let i=await s.devInspectTransactionBlock({sender:Os,transactionBlock:a});if(i.effects.status.status!=="success")throw new Error(`inspectionResult failed. ${JSON.stringify(i,null,2)}`);let o=i.results?.pop()?.returnValues?.pop();if(!o)throw new Error(`Something with inspectionResult went wrong. ${JSON.stringify(i,null,2)}`);let[A,c]=o;return typeof r=="object"?r.fromBcs(Uint8Array.from(A)).toJSONField():Ut(r).parse(Uint8Array.from(A))}var $n=class extends de{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.client=new Ns({url:r})}chainType="SUI";client;async getUserBalanceInfo(r,i){if(!i.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");let o=i.suiAddresses;if(!o)throw new y("SUI token must contain 'suiAddresses'");(0,Rt.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin);let c=(await this.fetchDeposits(r,i.originTokenAddress)).reduce((m,u)=>{if(u.data)return m.lpAmount+=BigInt(u.data.content.fields.lp_amount),m.rewardDebt+=BigInt(u.data.content.fields.reward_debt),m;throw new y("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new ie({lpAmount:c.lpAmount.toString(),rewardDebt:c.rewardDebt.toString()})}async fetchDeposits(r,i){return await Ze(o=>this.client.getOwnedObjects({owner:r,filter:{StructType:Zn.phantom(j(i)).phantomType},options:{showContent:!0},cursor:o}))}async getPoolInfoFromChain(r){let i=r.suiAddresses;if(!i)throw new y("SUI token must contain 'suiAddresses'");if((0,Rt.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");let o=48,A=new jn;Na(A,r.originTokenAddress,i.bridgeObjectAddress);let c=await qa(this.client,A,En.reified(j(r.originTokenAddress))),m=c.state.tokenBalance,u=c.state.vusdBalance,l=re({tokenBalance:m,vUsdBalance:u});return{dValue:c.state.d,aValue:c.state.a,totalLpAmount:c.rewards.lpSupply,vUsdBalance:u,tokenBalance:m,accRewardPerShareP:c.rewards.accRewardPerShareP,p:o,imbalance:l}}async buildRawTransactionDeposit(r){let i=r.token.suiAddresses;if(!i)throw new y("SUI token must contain 'suiAddresses'");if((0,Rt.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");let o=await Ze(p=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:p}));if(o.length===0||!o[0])throw new $e("No coins to deposit");let A=o[0],c=new jn;c.setSender(r.accountAddress);let{depositObj:m,isNewDeposit:u}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,c),[l]=za([r.amount],o,c);if(!l)throw new $e("No coins to deposit");if(!r.token.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");let d=xa(c,r.token.originTokenAddress,{bridge:i.bridgeObjectAddress,userDeposit:m,coin:l});return c.mergeCoins(A.coinObjectId,[d]),u&&c.transferObjects([m],r.accountAddress),await c.toJSON({client:this.client})}async getDepositObject(r,i,o){let A=await this.fetchDeposits(r,i);if(A.length===0||!A[0]){let c=j(i).phantomType;return{depositObj:Wa(o,c),isNewDeposit:!0}}else{if(A[0].data?.objectId)return{depositObj:A[0].data.objectId,isNewDeposit:!1};throw new y("Something went wrong while deposit")}}async buildRawTransactionWithdraw(r){let i=r.token.suiAddresses;if(!i)throw new y("SUI token must contain 'suiAddresses'");if((0,Rt.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");let o=j(r.token.originTokenAddress).phantomType,A=new jn;A.setSender(r.accountAddress);let{depositObj:c,isNewDeposit:m}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,A);if(m)throw new $e("No deposit found");let u=Ma(A,o,{bridge:i.bridgeObjectAddress,userDeposit:c,amountLp:BigInt(r.amount)}),l=await Ze(d=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:d}));if(!u[0]||!u[1])throw new y("No rewards found");return l[0]?A.mergeCoins(l[0].coinObjectId,[u[0],u[1]]):(A.mergeCoins(u[0],[u[1]]),A.transferObjects([u[0]],r.accountAddress)),await A.toJSON({client:this.client})}async buildRawTransactionClaimRewards(r){let i=r.token.suiAddresses;if(!i)throw new y("SUI token must contain 'suiAddresses'");if((0,Rt.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");let o=j(r.token.originTokenAddress).phantomType,A=new jn;A.setSender(r.accountAddress);let{depositObj:c,isNewDeposit:m}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,A);if(m)throw new $e("No deposit found");let u=Oa(A,o,{bridge:i.bridgeObjectAddress,userDeposit:c}),l=await Ze(d=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:d}));return l[0]?A.mergeCoins(l[0].coinObjectId,[u]):A.transferObjects([u],r.accountAddress),await A.toJSON({client:this.client})}};import{Web3 as Ke}from"web3";var jt=class extends de{constructor(r,i,o){super();this.tronWeb=r;this.api=i;o&&(this.web3=new Ke(o))}chainType="TRX";P=52;web3;async getUserBalanceInfo(r,i){let o;if(this.web3)try{o=await this.getUserBalanceInfoByBatch(this.web3,r,i)}catch{o=await this.getUserBalanceInfoPerProperty(r,i)}else o=await this.getUserBalanceInfoPerProperty(r,i);return o}async getUserBalanceInfoByBatch(r,i,o){let A=new r.BatchRequest,c=new r.eth.Contract(Pt.abi,await An(o.poolAddress)),m=c.methods.userRewardDebt(i).encodeABI(),u=c.methods.balanceOf(i).encodeABI();A.add({method:"eth_call",params:[{to:o.poolAddress,data:m},"latest"]}),A.add({method:"eth_call",params:[{to:o.poolAddress,data:u},"latest"]});let[l,d]=await A.execute();if(l&&d&&!l.error&&!d.error)return new ie({lpAmount:Ke.utils.toBigInt(d.result).toString(),rewardDebt:Ke.utils.toBigInt(l.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(r,i){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(r);let o=this.getContract(i.poolAddress),A=(await o.methods.userRewardDebt(r).call()).toString(),c=(await o.methods.balanceOf(r).call()).toString();return new ie({lpAmount:c,rewardDebt:A})}async getPoolInfoFromChain(r){let i;if(this.web3)try{i=await this.getPoolInfoByBatch(this.web3,r)}catch{i=await this.getPoolInfoPerProperty(r)}else i=await this.getPoolInfoPerProperty(r);return i}async getPoolInfoByBatch(r,i){let o=new r.BatchRequest,A=new r.eth.Contract(Pt.abi,await An(i.poolAddress),this.web3),c=A.methods.a().encodeABI(),m=A.methods.d().encodeABI(),u=A.methods.tokenBalance().encodeABI(),l=A.methods.vUsdBalance().encodeABI(),d=A.methods.totalSupply().encodeABI(),p=A.methods.accRewardPerShareP().encodeABI();o.add({method:"eth_call",params:[{to:i.poolAddress,data:c},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:m},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:u},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:l},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:d},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:p},"latest"]});let[f,g,h,S,T,w]=await o.execute();if(f&&g&&h&&S&&T&&w&&!f.error&&!g.error&&!h.error&&!S.error&&!T.error&&!w.error){let I=Ke.utils.toBigInt(h.result).toString(),F=Ke.utils.toBigInt(S.result).toString(),X=re({tokenBalance:I,vUsdBalance:F});return{aValue:Ke.utils.toBigInt(f.result).toString(),dValue:Ke.utils.toBigInt(g.result).toString(),tokenBalance:I,vUsdBalance:F,totalLpAmount:Ke.utils.toBigInt(T.result).toString(),accRewardPerShareP:Ke.utils.toBigInt(w.result).toString(),p:this.P,imbalance:X}}throw new Error("Batched failed")}async getPoolInfoPerProperty(r){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(r.poolAddress);let i=this.getContract(r.poolAddress),[o,A,c,m,u,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=c.toString(),p=m.toString(),f=re({tokenBalance:d,vUsdBalance:p});return{aValue:o.toString(),dValue:A.toString(),tokenBalance:d,vUsdBalance:p,totalLpAmount:u.toString(),accRewardPerShareP:l.toString(),p:this.P,imbalance:f}}buildRawTransactionDeposit(r){let{amount:i,accountAddress:o}=r,A=[{type:"uint256",value:i}];return this.buildRawTransaction(r.token.poolAddress,"deposit(uint256)",A,"0",o)}buildRawTransactionWithdraw(r){let{amount:i,accountAddress:o}=r,A=[{type:"uint256",value:i}];return this.buildRawTransaction(r.token.poolAddress,"withdraw(uint256)",A,"0",o)}buildRawTransactionClaimRewards(r){let{accountAddress:i}=r,o=[];return this.buildRawTransaction(r.token.poolAddress,"claimRewards()",o,"0",i)}async buildRawTransaction(r,i,o,A,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+A},o,c);if(!m?.result?.result)throw new y("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}getContract(r){return this.tronWeb.contract(Pt.abi,r)}};var _n=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new Fn(a,r,this.params,o);let A=i.cachePoolInfoChainSec>0?i.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new Ds({defaultTtl:A})}rawTxBuilder;cache;async getAllowance(a,r){if(r){let i=a,o=r;return await this.tokenService.getAllowance({...o,spender:o.token.poolAddress},i)}else{let i=a;return await this.tokenService.getAllowance({...i,spender:i.token.poolAddress})}}async checkAllowance(a,r){if(r){let i=a,o=r;return this.tokenService.checkAllowance({...o,spender:o.token.poolAddress},i)}else{let i=a;return this.tokenService.checkAllowance({...i,spender:i.token.poolAddress})}}async approve(a,r){return this.tokenService.approve(a,{...r,spender:r.token.poolAddress})}async getAmountToBeDeposited(a,r,i){U(a),E("amount",a,r.decimals);let o=await this.getPoolInfoFromChain(r,i),{vUsdBalance:A,tokenBalance:c,aValue:m,dValue:u}=o,l=La(a,m,u,c,A);return x(l,3).toFixed()}async getAmountToBeWithdrawn(a,r,i,o){U(a),E("amount",a,i.decimals);let A=await this.getPoolInfoFromChain(i,o),c=Xa(a),m=ue(c,i.decimals),l=(await this.getUserBalanceInfo(r,i,o)).earned(A)||"0",d=Ws(m).plus(l).toFixed();return x(d,i.decimals).toFixed()}async getUserBalanceInfo(a,r,i){return(await wt(r.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i)).getUserBalanceInfo(a,r)}async getPoolInfoFromChain(a,r){let i={chainSymbol:a.chainSymbol,poolAddress:a.poolAddress},o=this.cache.get(i);if(o)return o;{let A=await(await wt(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r)).getPoolInfoFromChain(a);return this.cache.put(i,A),this.api.cachePut({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress},A),A}}};async function wt(s,a,r,i,o){switch(N.getChainProperty(s).chainType){case"EVM":{if(o)return new Vt(o,a);{let A=r.getNodeRpcUrl(s),c=new Es(A);return c.defaultReturnFormat={number:Us.STR,bytes:Gs.HEX},new Vt(c,a)}}case"TRX":{let A=r.getNodeRpcUrl(s),c=i.tronJsonRpc;if(o){let m=await we();return new jt(o,a,c)}else{let m=new(await we())({fullHost:A});return new jt(m,a,c)}}case"SOLANA":{let A=r.getNodeRpcUrl(s);return new xn(A,a)}case"SRB":return new On(r,i,a);case"SUI":return new $n(r.getNodeRpcUrl(s),a)}}import{Big as _}from"big.js";function ni(s,a,r){let i=Vs(s,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),o=Zs(i.amountIncludingCommissionInSystemPrecision,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo);return{swapToVUsdCalcResult:i,swapFromVUsdCalcResult:o}}function ri(s,a,r){let i=js(s,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo),o=$s(i.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:i,swapFromVUsdCalcResult:o}}function Vs(s,{feeShare:a,decimals:r},i){let o=_(s),A=o.times(a),c=o.minus(A);return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInSystemPrecision:ei(it(c,r),i),amountExcludingCommissionInSystemPrecision:ei(it(o,r),i)}}function ei(s,a){if(s.eq(0))return"0";let r=_(a.tokenBalance).plus(s),i=De(r.toFixed(),a.aValue,a.dValue);return _(a.vUsdBalance).minus(i).round().toFixed()}function Zs(s,{feeShare:a,decimals:r},i){if(_(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let A=_(s).plus(i.vUsdBalance),c=De(A,i.aValue,i.dValue),m=ue(_(i.tokenBalance).minus(c),r),u=_(m).times(a),l=_(m).minus(u).round();return{bridgeFeeInTokenPrecision:u.round().toFixed(),amountIncludingCommissionInTokenPrecision:l.toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}function js(s,{feeShare:a,decimals:r},i){let o=_(a).div(_(1).minus(a)),A=_(s).times(o),c=_(s).plus(A);return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInSystemPrecision:ti(it(c,r),i),amountExcludingCommissionInSystemPrecision:ti(it(s,r),i)}}function ti(s,a){let r=_(a.tokenBalance).minus(s),i=De(r.toFixed(),a.aValue,a.dValue);return _(i).minus(a.vUsdBalance).round().toFixed()}function $s(s,{feeShare:a,decimals:r},i){if(_(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let o=_(i.vUsdBalance).minus(s),A=De(o.toFixed(),i.aValue,i.dValue),c=_(A).minus(i.tokenBalance),m=ue(c.toFixed(),r),u=_(a).div(_(1).minus(a)),l=_(m).times(u),d=_(m).plus(l);return{bridgeFeeInTokenPrecision:l.round().toFixed(),amountIncludingCommissionInTokenPrecision:d.round().toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}import{Big as at}from"big.js";function ai(s,a,r,i,o){let A=We(s,a,r),c=ue(A,a.decimals),m=Mt(A,i,o),u=at(s).times(a.feeShare),l=at(m).div(at(1).minus(i.feeShare)).minus(m);return{sourceLPSwap:{fee:x(u,a.decimals).neg().round(a.decimals,at.roundUp).toFixed(),swap:x(at(s).minus(c).minus(u),a.decimals).neg().round(a.decimals,at.roundUp).toFixed()},destLPSwap:{fee:x(l,i.decimals).neg().round(i.decimals,at.roundUp).toFixed(),swap:x(ue(A,i.decimals).minus(m).minus(l),i.decimals).neg().round(i.decimals,at.roundUp).toFixed()}}}import{Connection as _s,PublicKey as Js,TransactionMessage as Ls}from"@solana/web3.js";var Jn=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}async addMemoToTx(a,r){if(r.length>28)throw new y("InvalidArgumentException memo cannot be more than 28 characters");let i=new _s(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),o=await At(a,i),A=Ls.decompile(a.message,{addressLookupTableAccounts:o}),c=A.instructions[A.instructions.length-1];if(!c?.keys)throw new y("Last instruction or its keys are invalid.");c.keys.push({pubkey:new Js(Buffer.from(r)),isSigner:!1,isWritable:!1}),a.message=A.compileToV0Message(o)}};import{Asset as Ks,BASE_FEE as Hs,contract as wb,Horizon as ii,Operation as Qs,Operation as zs,rpc as _t,TimeoutInfinite as qs,TransactionBuilder as Gr,TransactionBuilder as si}from"@stellar/stellar-sdk";import{contract as e}from"@stellar/stellar-sdk";var Xs=e.Spec,Ys=e.Client;var $t=class extends Ys{constructor(r){super(new Xs(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),r);this.options=r}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 eo=100,to=180,Ln=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}async buildChangeTrustLineXdrTx(a){let i=await new ii.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.sender),A=await this.getContract($t,a.tokenAddress).name();if(Bt(A))throw new y;let c=Ct(A);if(!c)throw new y;let[m,u]=c.split(":");if(m===void 0||u===void 0)throw new y("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let l=new Ks(m,u),d=zs.changeTrust({asset:l,limit:a.limit});return new si(i,{fee:eo.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(d).setTimeout(to).build().toXDR()}async getBalanceLine(a,r){let o=await this.getContract($t,r).name();if(Bt(o))throw new y;let A=Ct(o);if(!A)throw new y;let[c,m]=A.split(":"),u=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new ii.Server(u).loadAccount(a)).balances.find(f=>(f.asset_type==="credit_alphanum4"||f.asset_type==="credit_alphanum12")&&f.asset_code==c&&f.asset_issuer==m)}async submitTransactionStellar(a){let r=new ii.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),i=si.fromXDR(a,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await r.submitTransaction(i)}async simulateAndCheckRestoreTxRequiredSoroban(a,r){let i=new _t.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await i.getAccount(r),A=Gr.fromXDR(a,this.params.sorobanNetworkPassphrase),c=await i.simulateTransaction(A);if(_t.Api.isSimulationRestore(c))return new Gr(o,{fee:(+Hs+ +c.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(c.restorePreamble.transactionData.build()).addOperation(Qs.restoreFootprint({})).setTimeout(qs).build().toXDR()}async sendTransactionSoroban(a){let r=new _t.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),i=Gr.fromXDR(a,this.params.sorobanNetworkPassphrase);return r.sendTransaction(i)}async confirmTx(a,r=15){let i=new _t.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await qr(()=>i.getTransaction(a),c=>c.status===_t.Api.GetTransactionStatus.NOT_FOUND,r);if(o.length===0)throw new y("No transaction responses found.");let A=o[o.length-1];if(!A)throw new y("Unexpected error: last response is undefined.");return A}getContract(a,r){let i={contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(i)}};var Xn=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.srb=new Ln(a,r),this.sol=new Jn(a,r)}srb;sol};var ot=(r=>(r.WITH_NATIVE_CURRENCY="native",r.WITH_STABLECOIN="stablecoin",r))(ot||{}),mn=(r=>(r.INT="int",r.FLOAT="float",r))(mn||{});import{Big as uo}from"big.js";import{Web3 as lo}from"web3";var no={abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}]},Yn=no;import{Big as oi}from"big.js";var pe=class{async checkAllowance(a){let r=await this.getAllowance(a);return oi(r).gte(oi(a.amount))}};var ro="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",ao="0xdac17f958d2ee523a2206206994597c13d831ec7",io=1e5,Jt=class extends pe{constructor(r,i){super();this.web3=r;this.api=i}chainType="EVM";getAllowance(r){let i=r.token.tokenAddress,o=r.owner,A=r.spender;return this.getAllowanceByTokenAddress(i,o,A)}getAllowanceByTokenAddress(r,i,o){return this.getERC20Contract(r).methods.allowance(i,o).call()}async getTokenBalance(r){return await this.getERC20Contract(r.token.tokenAddress).methods.balanceOf(r.account).call()}async getNativeTokenBalance(r){return(await this.web3.eth.getBalance(r.account)).toString()}async approve(r){if(this.isUsdt(r.tokenAddress)&&await this.getAllowanceByTokenAddress(r.tokenAddress,r.owner,r.spender)!=="0"){let A=await this.buildRawTransactionApprove({...r,amount:"0"});await this.sendRawTransaction(A,r.chainSymbol)}let i=await this.buildRawTransactionApprove(r);return await this.sendRawTransaction(i,r.chainSymbol)}isUsdt(r){return r.toLowerCase()===ao}buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:A,amount:c}=r,u=this.getERC20Contract(i).methods.approve(o,c==null?ro:Rn(c));return Promise.resolve({from:A,to:i,value:"0",data:u.encodeABI()})}async sendRawTransaction(r,i){let o=r,A={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};i==="POL"?o.gas=io:o.gas=await this.web3.eth.estimateGas(r);let{transactionHash:c}=await this.web3.eth.sendTransaction({...o,...A});return{txId:c.toString()}}getERC20Contract(r){return new this.web3.eth.Contract(Yn.abi,r)}};import{AnchorProvider as so}from"@project-serum/anchor";import{Connection as oo,PublicKey as Kn}from"@solana/web3.js";var Hn=class extends pe{constructor(r,i){super();this.solanaRpcUrl=r;this.api=i}chainType="SOLANA";approve(r){throw new Y}buildRawTransactionApprove(r){throw new Y}buildAnchorProvider(r){let i=new oo(this.solanaRpcUrl,"confirmed"),o=new Kn(r);return new so(i,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(r){throw new Y}async getTokenBalance(r){let{account:i,token:o}=r;try{let A=await Ce(new Kn(i),new Kn(o.tokenAddress));return(await ht(A,this.buildAnchorProvider(i))).amount.toString()}catch(A){if(A instanceof Error)return A.message.startsWith("Account does not exist"),"0";throw A}}async getNativeTokenBalance(r){return(await this.buildAnchorProvider(r.account).connection.getBalance(new Kn(r.account))).toString()}};import{Horizon as Wh,NotFoundError as Ao}from"@stellar/stellar-sdk";var Qn=class extends pe{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";getAllowance(){throw new Y}async getTokenBalance(r){if(!r.token.originTokenAddress)throw new y("OriginTokenAddress missing");let[i,o]=r.token.originTokenAddress.split(":"),A=new Wh.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),c;try{c=await A.loadAccount(r.account)}catch(l){if(l instanceof Ao)return"0";throw l}let u=c.balances.find(l=>(l.asset_type==="credit_alphanum4"||l.asset_type==="credit_alphanum12")&&l.asset_code==i&&l.asset_issuer==o);return u?.balance?D(u.balance,N.getChainDecimalsByType(N.getChainProperty(r.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(r){let c=(await new Wh.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(r.account)).balances.find(m=>m.asset_type==="native");return c?.balance?D(c.balance,N.getChainDecimalsByType(N.getChainProperty(r.chainSymbol).chainType)).toFixed():"0"}approve(){throw new Y}buildRawTransactionApprove(){throw new Y}};import{SuiClient as co}from"@mysten/sui/client";var zn=class extends pe{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.suiClient=new co({url:this.suiRpcUrl})}chainType="SUI";suiClient;approve(r){throw new Y}buildRawTransactionApprove(r){throw new Y}getAllowance(r){throw new Y}async getTokenBalance(r){if(!r.token.originTokenAddress)throw new y("SUI token must contain 'originTokenAddress'");return(await this.suiClient.getBalance({owner:r.account,coinType:r.token.originTokenAddress})).totalBalance}async getNativeTokenBalance(r){let i=await Ze(o=>this.suiClient.getCoins({owner:r.account,cursor:o}));return i.length===0?"0":i.reduce((o,A)=>o+BigInt(A.balance),BigInt(0)).toString()}};var mo="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Lt=class extends pe{constructor(r,i){super();this.tronWeb=r;this.api=i}chainType="TRX";async getAllowance(r){let{token:{tokenAddress:i},owner:o}=r;return(await(await this.getContract(i)).methods.allowance(o,r.spender).call()).toString()}async getTokenBalance(r){return(await(await this.getContract(r.token.tokenAddress)).balanceOf(r.account).call()).toString()}async getNativeTokenBalance(r){return(await this.tronWeb.trx.getBalance(r.account)).toString()}async approve(r){let i=await this.buildRawTransactionApprove(r);return await vn(this.tronWeb,i)}async buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:A,amount:c}=r,m=c==null?mo:Rn(c),u=[{type:"address",value:o},{type:"uint256",value:m}];return this.buildRawTransaction(i,"approve(address,uint256)",u,"0",A)}getContract(r){return this.tronWeb.contract(Yn.abi,r)}async buildRawTransaction(r,i,o,A,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+A},o,c);if(!m?.result?.result)throw new y("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var qn=class{constructor(a,r,i){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i}async getAllowance(a,r){let i=await(await this.getChainTokenService(a.token.chainSymbol,a.owner,r)).getAllowance(a);return x(i,a.token.decimals).toFixed()}async checkAllowance(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),(await this.getChainTokenService(a.token.chainSymbol,a.owner,r)).checkAllowance(this.prepareCheckAllowanceParams(a))}async approve(a,r){return r.amount&&(U(r.amount),E("amount",r.amount,r.token.decimals)),(await this.getChainTokenService(r.token.chainSymbol,r.owner,a)).approve(this.prepareApproveParams(r))}async buildRawTransactionApprove(a,r){return a.amount&&(U(a.amount),E("amount",a.amount,a.token.decimals)),(await this.getChainTokenService(a.token.chainSymbol,a.owner,r)).buildRawTransactionApprove(this.prepareApproveParams(a))}async getTokenBalance(a,r){let i=await(await this.getChainTokenService(a.token.chainSymbol,a.account,r)).getTokenBalance(a);return a.token.decimals?x(i,a.token.decimals).toFixed():i}async getNativeTokenBalance(a,r){let i=await(await this.getChainTokenService(a.chainSymbol,a.account,r)).getNativeTokenBalance(a);return{int:i,float:x(i,N.getChainDecimalsByType(N.getChainProperty(a.chainSymbol).chainType)).toFixed()}}async getChainTokenService(a,r,i){switch(N.getChainProperty(a).chainType){case"EVM":{if(i)return new Jt(i,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new Jt(new lo(o),this.api)}}case"TRX":if(i){let o=await we();return new Lt(i,this.api)}else{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a),A=new(await we())({fullHost:o});return A.setAddress(r),new Lt(A,this.api)}case"SOLANA":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new Hn(o,this.api)}case"SRB":return new Qn(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new zn(this.nodeRpcUrlsConfig.getNodeRpcUrl(a),this.api)}}prepareCheckAllowanceParams(a){return{...a,amount:D(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:uo(a.amount).toFixed()}}};var Xt=class{constructor(a){this.nodeRpcUrls=a}getNodeRpcUrl(a){let r=this.nodeRpcUrls[a];if(r!==void 0)return r;throw new zt(a)}},er=class{api;tokenService;params;bridge;pool;constructor(a,r=Kt){N.addChainsProperties(r.additionalChainsProperties);let i=new en(r),o=new nn(i),A=new rn(o),c=new sn(A);this.api=new an(c,r),this.tokenService=new qn(this.api,a,r),this.bridge=new kn(this.api,a,r,this.tokenService),this.pool=new _n(this.api,a,r,this.tokenService),this.params=r}async chainDetailsMap(a){return this.api.getChainDetailsMap(a)}async tokens(a){return this.api.tokens(a)}async tokensByChain(a,r){let o=(await this.api.getChainDetailsMap(r))[a];return o?o.tokens:[]}async getTransferStatus(a,r){return this.api.getTransferStatus(a,r)}async getGasBalance(a,r){return this.api.getGasBalance(a,r)}async checkAddress(){return new Promise(a=>{a({status:"OK",gasBalance:null})})}async getPendingStatusInfo(a,r,i,o){U(a);let A;r=="float"?(E("amount",a,i.decimals),A=D(a,i.decimals).toFixed()):A=a;let c=We(A,i,await K(this.api,i)),m=await K(this.api,o),u=this.getAmountFromVUsdFormatted(c,o,m),l,d=await this.api.getPendingInfo();for(let p in d[o.chainSymbol]){let f=d[o.chainSymbol];if(!f)throw new y("Cannot find pending info for "+o.chainSymbol);l=f[p]}if(l){let p=Zr(l.totalSentAmount,m),f=this.getAmountFromVUsdFormatted(c,o,p),g;return Ae(f.int).gt(u.int)?g={min:u,max:f}:g={min:f,max:u},{pendingTxs:l.pendingTxs,pendingAmount:{int:Ne(l.totalSentAmount,3,o.decimals).toFixed(0),float:x(l.totalSentAmount,3).toFixed()},estimatedAmount:g}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:u,max:u}}}async getTokenBalance(a,r){return this.tokenService.getTokenBalance(a,r)}async getNativeTokenBalance(a,r){return this.tokenService.getNativeTokenBalance(a,r)}async calculateFeePercentOnSourceChain(a,r){U(a),E("amountFloat",a,r.decimals);let i=D(a,r.decimals);if(i.eq(0))return 0;let o=We(i,r,await K(this.api,r)),A=ue(o,r.decimals);return rr(i,A)}async calculateFeePercentOnDestinationChain(a,r,i){U(a),E("amountFloat",a,r.decimals);let o=D(a,r.decimals);if(o.eq(0))return 0;let A=We(o,r,await K(this.api,r)),c=Mt(A,i,await K(this.api,i)),m=ue(A,i.decimals);return rr(m,c)}async getAmountToBeReceivedAndGasFeeOptions(a,r,i,o){return U(a),E("amountToSendFloat",a,r.decimals),{amountToSendFloat:Ae(a).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(a,r,i,o),gasFeeOptions:await this.getGasFeeOptions(r,i,o)}}async getAmountToSendAndGasFeeOptions(a,r,i,o){return U(a),E("amountToBeReceivedFloat",a,i.decimals),{amountToSendFloat:await this.getAmountToSend(a,r,i,o),amountToBeReceivedFloat:Ae(a).toFixed(),gasFeeOptions:await this.getGasFeeOptions(r,i,o)}}async getAmountToBeReceived(a,r,i,o){let A=await K(this.api,r),c=await K(this.api,i);return this.getAmountToBeReceivedFromPools(a,r,i,A,c,o)}async getAmountToBeReceivedFromChain(a,r,i,o,A,c){let m=await this.pool.getPoolInfoFromChain(r,A),u=await this.pool.getPoolInfoFromChain(i,c);return this.getAmountToBeReceivedFromPools(a,r,i,m,u,o)}getAmountToBeReceivedFromPools(a,r,i,o,A,c){U(a),E("amountToSendFloat",a,r.decimals);let m=D(a,r.decimals);if(c&&c==3){if(!r.cctpAddress||!i.cctpAddress||!r.cctpFeeShare)throw new ne("Such route does not support CCTP protocol");let l=m.mul(Ae(1).minus(r.cctpFeeShare)).round(0,Ae.roundUp),d=Ne(l,r.decimals,i.decimals).round(0);return x(d,i.decimals).toFixed()}if(c&&c==4){if(!r.cctpV2Address||!i.cctpV2Address||!r.cctpV2FeeShare)throw new ne("Such route does not support CCTP V2 protocol");let l=m.mul(Ae(1).minus(r.cctpV2FeeShare)).round(0,Ae.roundUp),d=Ne(l,r.decimals,i.decimals).round(0);return x(d,i.decimals).toFixed()}let u=We(m,r,o);return this.getAmountFromVUsdFormatted(u,i,A).float}async getAmountToSend(a,r,i,o){let A=await K(this.api,r),c=await K(this.api,i);return this.getAmountToSendFromPools(a,r,i,A,c,o)}async getAmountToSendFromChain(a,r,i,o,A,c){let m=await this.pool.getPoolInfoFromChain(r,A),u=await this.pool.getPoolInfoFromChain(i,c);return this.getAmountToSendFromPools(a,r,i,m,u,o)}getAmountToSendFromPools(a,r,i,o,A,c){U(a),E("amountToBeReceivedFloat",a,i.decimals);let m=D(a,i.decimals);if(c&&c==3){if(!r.cctpAddress||!i.cctpAddress||!r.cctpFeeShare)throw new ne("Such route does not support CCTP protocol");let d=m.div(Ae(1).minus(r.cctpFeeShare)).round(0,Ae.roundDown),p=Ne(d,i.decimals,r.decimals).round(0);return x(p,r.decimals).toFixed()}if(c&&c==4){if(!r.cctpV2Address||!i.cctpV2Address||!r.cctpV2FeeShare)throw new ne("Such route does not support CCTP V2 protocol");let d=m.div(Ae(1).minus(r.cctpV2FeeShare)).round(0,Ae.roundDown),p=Ne(d,i.decimals,r.decimals).round(0);return x(p,r.decimals).toFixed()}let u=$r(m,i,A),l=jr(u,r,o);if(Ae(l).lte(0))throw new _e;return x(l,r.decimals).toFixed()}async getGasFeeOptions(a,r,i){return lr(a.allbridgeChainId,a.chainType,r.allbridgeChainId,a.decimals,i,this.api)}getAverageTransferTime(a,r,i){return a.transferTime?.[r.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(o=>({chainSymbol:o.chainSymbol,poolAddress:o.poolAddress}));return this.api.refreshPoolInfo(i)}return this.api.refreshPoolInfo()}aprInPercents(a){return Jr(a)}async getExtraGasMaxLimits(a,r){return await dr(a,r,this.api)}async getVUsdFromAmount(a,r,i){U(a);let o;r=="float"?(E("amount",a,i.decimals),o=D(a,i.decimals).toFixed()):o=a;let A=We(o,i,await K(this.api,i));return{int:A,float:x(A,3).toFixed()}}async getAmountFromVUsd(a,r){return this.getAmountFromVUsdFormatted(a,r,await K(this.api,r))}getAmountFromVUsdFormatted(a,r,i){U(a);let o=Mt(a,r,i);if(Ae(o).lt(0))throw new _e;return{int:o,float:x(o,r.decimals).toFixed()}}async swapAndBridgeFeeCalculation(a,r,i){return ni(a,{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await K(this.api,r)},{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await K(this.api,i)})}async swapAndBridgeFeeCalculationReverse(a,r,i){let o=ri(a,{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await K(this.api,r)},{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await K(this.api,i)}),A=o.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(Ae(A).lt(0))throw new _e;return o}async getSendAmountDetails(a,r,i,o){U(a);let A;return r=="float"?(E("amount",a,i.decimals),A=D(a,i.decimals).toFixed()):A=a,ai(A,i,await K(this.api,i),o,await K(this.api,o))}};function po(s){return"solanaRpcUrl"in s}var Ai=class{params;bridge;pool;utils;service;constructor(a,r=Kt){let i;po(a)?i=new Xt({SOL:a.solanaRpcUrl,TRX:a.tronRpcUrl}):i=new Xt(a),this.service=new er(i,r),this.bridge=this.service.bridge,this.pool=this.service.pool,this.utils=new Xn(i,r),this.params=r}async chainDetailsMap(a="swap"){return this.service.chainDetailsMap(a)}async tokens(a="swap"){return this.service.tokens(a)}async tokensByChain(a,r="swap"){return this.service.tokensByChain(a,r)}async getTransferStatus(a,r){return this.service.getTransferStatus(a,r)}async getGasBalance(a,r){return this.service.getGasBalance(a,r)}async checkAddress(a,r,i){return await this.service.checkAddress()}async getPendingStatusInfo(a,r,i,o){return this.service.getPendingStatusInfo(a,r,i,o)}async getTokenBalance(a,r){return this.service.getTokenBalance(a,r)}async getNativeTokenBalance(a,r){return this.service.getNativeTokenBalance(a,r)}async calculateFeePercentOnSourceChain(a,r){return this.service.calculateFeePercentOnSourceChain(a,r)}async calculateFeePercentOnDestinationChain(a,r,i){return this.service.calculateFeePercentOnDestinationChain(a,r,i)}async getAmountToBeReceivedAndGasFeeOptions(a,r,i,o){return this.service.getAmountToBeReceivedAndGasFeeOptions(a,r,i,o)}async getAmountToSendAndGasFeeOptions(a,r,i,o){return this.service.getAmountToSendAndGasFeeOptions(a,r,i,o)}async getAmountToBeReceived(a,r,i,o){return this.service.getAmountToBeReceived(a,r,i,o)}async getAmountToBeReceivedFromChain(a,r,i,o,A,c){return this.service.getAmountToBeReceivedFromChain(a,r,i,o,A,c)}getAmountToBeReceivedFromPools(a,r,i,o,A,c){return this.service.getAmountToBeReceivedFromPools(a,r,i,o,A,c)}async getAmountToSend(a,r,i,o){return this.service.getAmountToSend(a,r,i,o)}async getAmountToSendFromChain(a,r,i,o,A,c){return this.service.getAmountToSendFromChain(a,r,i,o,A,c)}getAmountToSendFromPools(a,r,i,o,A,c){return this.service.getAmountToSendFromPools(a,r,i,o,A,c)}async getGasFeeOptions(a,r,i){return this.service.getGasFeeOptions(a,r,i)}getAverageTransferTime(a,r,i){return this.service.getAverageTransferTime(a,r,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,r){return this.service.getExtraGasMaxLimits(a,r)}async getVUsdFromAmount(a,r,i){return this.service.getVUsdFromAmount(a,r,i)}async getAmountFromVUsd(a,r){return this.service.getAmountFromVUsd(a,r)}async swapAndBridgeFeeCalculation(a,r,i){return this.service.swapAndBridgeFeeCalculation(a,r,i)}async swapAndBridgeFeeCalculationReverse(a,r,i){return this.service.swapAndBridgeFeeCalculationReverse(a,r,i)}async getSendAmountDetails(a,r,i,o){return this.service.getSendAmountDetails(a,r,i,o)}};export{ar as AddressStatus,Ai as AllbridgeCoreSdk,mn as AmountFormat,dt as AmountNotEnoughError,Qt as ArgumentInvalidDecimalsError,ne as CCTPDoesNotSupportedError,fe as ChainSymbol,Z as ChainType,yi as ErrorCode,Ht as ExtraGasMaxLimitExceededError,ot as FeePaymentMethod,_e as InsufficientPoolLiquidityError,$e as InvalidAmountError,vt as InvalidGasFeePaymentOptionError,Er as InvalidMessengerOptionError,pt as InvalidTxError,Q as JupiterError,Ge as Messenger,Y as MethodNotSupportedError,zt as NodeRpcUrlNotInitializedError,y as SdkError,J as SdkRootError,pr as SolanaAutoTxFee,Ft as TimeoutError,qt as TxTooLargeError,kt as VerifyTxError,Kt as mainnet,yo as nodeRpcUrlsDefault,fo as nodeUrlsDefault};
|
|
1
|
+
var ci=Object.create;var Dr=Object.defineProperty;var mi=Object.getOwnPropertyDescriptor;var ui=Object.getOwnPropertyNames;var li=Object.getPrototypeOf,di=Object.prototype.hasOwnProperty;var pi=(s,a)=>()=>(s&&(a=s(s=0)),a);var er=(s,a)=>()=>(a||s((a={exports:{}}).exports,a),a.exports);var gi=(s,a,r,i)=>{if(a&&typeof a=="object"||typeof a=="function")for(let o of ui(a))!di.call(s,o)&&o!==r&&Dr(s,o,{get:()=>a[o],enumerable:!(i=mi(a,o))||i.enumerable});return s};var Pe=(s,a,r)=>(r=s!=null?ci(li(s)):{},gi(a||!s||!s.__esModule?Dr(r,"default",{value:s,enumerable:!0}):r,s));import{bcs as oe}from"@mysten/sui/bcs";function ts(s,a=["<",">"]){let[r,i]=a,o=[],A="",c=0;for(let m=0;m<s.length;m++){let u=s[m];if(u===r&&c++,u===i&&c--,c===0&&u===","){o.push(A.trim()),A="";continue}A+=u}return o.push(A.trim()),o}function ee(s){if(typeof s!="string")throw new Error(`Illegal type passed as a name of the type: ${s}`);let[a,r]=["<",">"],i=s.indexOf(a),o=Array.from(s).reverse().indexOf(r);if(i===-1&&o===-1)return{typeName:s,typeArgs:[]};if(i===-1||o===-1)throw new Error(`Unclosed generic in name '${s}'`);let A=s.slice(0,i),c=ts(s.slice(i+1,s.length-o-1),[a,r]);return{typeName:A,typeArgs:c}}function Ra(s){return!s||typeof s!="object"||Array.isArray(s)?!1:"GasCoin"in s||"Input"in s||"Result"in s||"NestedResult"in s}function w(s,a){return Ra(a)?a:s.object(a)}function ye(s,a,r){if(Ra(a))return w(s,a);function i(l){let{typeName:d,typeArgs:p}=ee(l);switch(d){case"bool":return oe.Bool;case"u8":return oe.U8;case"u16":return oe.U16;case"u32":return oe.U32;case"u64":return oe.U64;case"u128":return oe.U128;case"u256":return oe.U256;case"address":return oe.Address;case"0x1::string::String":case"0x1::ascii::String":return oe.String;case"0x2::object::ID":return oe.Address;case"0x1::option::Option":return oe.option(i(p[0]));case"vector":return oe.vector(i(p[0]));default:throw new Error(`invalid primitive type ${l}`)}}function o(l){for(let d of l){if(typeof d>"u"||d===null)return!0;if(Array.isArray(d))return o(d)}return!1}function A(l){for(let d of l){if(!Array.isArray(d)){if(d===null)continue;switch(typeof d){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return A(d)}return!0}function c(l){for(let d of l){if(!Array.isArray(d))switch(typeof d){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return c(d)}return!1}let{typeName:m,typeArgs:u}=ee(r);switch(m){case"0x1::option::Option":if(a===null)return s.pure.option("bool",null);if(A([a]))return s.pure(i(r).serialize(a));if(c([a]))throw new Error("mixing primitive and TransactionArgument values is not supported");return s.moveCall({target:"0x1::option::some",typeArguments:[u[0]],arguments:[ye(s,a,u[0])]});case"vector":if(!Array.isArray(a))throw new Error("expected an array for vector type");if(a.length===0)return s.pure(oe.vector(oe.Bool).serialize([]));if(o(a))throw new Error("the provided array contains undefined or null values");if(A(a))return s.pure(i(r).serialize(a));if(c(a))throw new Error("mixing primitive and TransactionArgument values is not supported");return s.makeMoveVec({type:u[0],elements:a});default:return s.pure(i(r).serialize(a))}}function ns(s){let a=s.split("0x").join("");for(let r=0;r<a.length;r++)if(a[r]!=="0")return`0x${a.substring(r)}`;return"0x0"}function P(s){let{typeName:a,typeArgs:r}=ee(s);switch(a){case"bool":case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"address":case"signer":return a;case"vector":return`vector<${P(r[0])}>`;default:{let i=a.split("::");i[0]=ns(i[0]);let o=i.join("::");return r.length>0?`${o}<${r.map(A=>P(A)).join(",")}>`:o}}}function x(s,...a){return a.length>0?`${s}<${a.join(", ")}>`:s}var K=pi(()=>{"use strict"});var Qe=er((Jm,va)=>{"use strict";K();var yr=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},rs=new yr;va.exports=rs});var Sr=er((Km,Wa)=>{"use strict";K();var br=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},as=new br;Wa.exports=as});var Cr=er((qm,Ga)=>{"use strict";K();var wr=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},is=new wr;Ga.exports=is});var Yt={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://lite-api.jup.ag/swap/v1",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,SUI:8}},cachePoolInfoChainSec:20},To={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},bo={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org",SUI:"https://fullnode.mainnet.sui.io"};import{Big as Ae}from"big.js";var J=class extends Error{errorCode;constructor(a,r){super(r),this.errorCode=a}},h=class extends J{constructor(a){super("SdkError",a)}},Ze=class extends J{constructor(a){super("InvalidAmountError",a)}},ut=class extends J{constructor(a){super("AmountNotEnoughError",a)}},$e=class extends J{constructor(a){super("InsufficientPoolLiquidityError",a)}},Q=class extends J{constructor(a){super("JupiterError",a)}},Bt=class extends J{constructor(a){super("InvalidGasFeePaymentOptionError",a)}},Gr=class extends J{constructor(a){super("InvalidMessengerOptionError",a)}},X=class extends J{constructor(a){super("MethodNotSupportedError",a)}},It=class extends J{constructor(a){super("VerifyTxError",a)}},lt=class extends J{constructor(a){super("InvalidTxError",a)}},Kt=class extends J{constructor(a){super("ExtraGasMaxLimitExceededError",a)}},Ht=class extends J{constructor(a,r,i){super("ArgumentInvalidDecimalsError",`Argument '${a}' decimals '${r}' cannot be greater than '${i}'`)}},Rt=class extends J{constructor(a){super("TimeoutError",a)}},Qt=class extends J{constructor(a){super("NodeRpcUrlNotInitializedError",`For chain '${a}' Node RPC URL not initialized`)}},ne=class extends J{constructor(a){super("CCTPDoesNotSupportedError",a)}},zt=class extends J{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},fi=(T=>(T.SDK_ERROR="SdkError",T.INVALID_AMOUNT_ERROR="InvalidAmountError",T.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",T.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",T.JUPITER_ERROR="JupiterError",T.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",T.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",T.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",T.VERIFY_TX_ERROR="VerifyTxError",T.INVALID_TX_ERROR="InvalidTxError",T.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",T.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",T.TIMEOUT_ERROR="TimeoutError",T.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",T.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",T.TX_TOO_LARGE="TxTooLargeError",T))(fi||{});var fe=(f=>(f.BSC="BSC",f.ETH="ETH",f.BAS="BAS",f.SOL="SOL",f.TRX="TRX",f.POL="POL",f.ARB="ARB",f.CEL="CEL",f.AVA="AVA",f.SRB="SRB",f.STLR="STLR",f.OPT="OPT",f.SUI="SUI",f.SNC="SNC",f))(fe||{}),j=(A=>(A.EVM="EVM",A.SOLANA="SOLANA",A.TRX="TRX",A.SRB="SRB",A.SUI="SUI",A))(j||{});var yi={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9},hi={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"},SNC:{chainSymbol:"SNC",chainId:"0x92",name:"Sonic",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"},SUI:{chainSymbol:"SUI",name:"Sui",chainType:"SUI"}},N=(()=>{let s={...hi};return{addChainsProperties(a){s={...s,...a}},getChainProperty(a){let r=s[a];if(!r)throw new h(`Cannot find chain properties for ${a}`);return r},getChainsProperties(){return s},getChainDecimalsByType(a){return yi[a]}}})();import Ci from"axios";var Ur="3.23.0-beta.1";import{Big as b}from"big.js";import tr from"bn.js";function nr(s,a){return b(100).minus(b(100).times(a).div(s)).toNumber()}function rt(s,a){return Oe(s,a,3).round(0,b.roundDown)}function ue(s,a){return Oe(s,3,a)}function Oe(s,a,r){let i=b(r).minus(a).toNumber();return b(s).times(vt(i))}function vt(s){return b(10).pow(s)}function D(s,a){return b(s).times(vt(a))}function F(s,a){let r=b(s);return r.eq(0)?b(0):b(r).div(vt(a))}function re(s){return F(b(s.tokenBalance).minus(s.vUsdBalance).toFixed(),3).div(2).toFixed()}function Ne(s,{feeShare:a,decimals:r},i){let o=b(s);if(o.lte(0))return"0";let A=o.times(a),c=o.minus(A),m=rt(c,r),u=b(i.tokenBalance).plus(m),l=We(u,i.aValue,i.dValue);return b(i.vUsdBalance).minus(l).round(0,b.roundDown).toFixed()}function kt(s,{feeShare:a,decimals:r},i){let o=b(s);if(o.lte(0))return b(0).toFixed();let A=o.plus(i.vUsdBalance),c=We(A,i.aValue,i.dValue),m=ue(b(i.tokenBalance).minus(c),r),u=b(m).times(a);return b(m).minus(u).round(0,b.roundDown).toFixed()}function Er(s,a){let r=b(s);if(r.lte(0))return a;let i=r.plus(a.vUsdBalance),o=We(i,a.aValue,a.dValue);return{aValue:a.aValue,dValue:a.dValue,tokenBalance:o.toFixed(0),vUsdBalance:i.toFixed(0)}}function Vr(s,{feeShare:a,decimals:r},i){if(b(s).lte(0))return b(0);let o=b(i.vUsdBalance).minus(s);if(o.lte(0))throw new $e;let A=We(o,i.aValue,i.dValue),c=b(A).minus(i.tokenBalance),m=ue(c,r),u=b(a).div(b(1).minus(a)),l=b(m).times(u).round(0,b.roundUp);return b(m).plus(l).round(0,b.roundDown)}function jr(s,{feeShare:a,decimals:r},i){if(b(s).lte(0))return b(0);let o=b(a).div(b(1).minus(a)),A=b(s).times(o).round(0,b.roundUp),c=b(s).plus(A),m=rt(c,r),u=b(i.tokenBalance).minus(m);if(u.lte(0))throw new $e;let l=We(u,i.aValue,i.dValue);return b(l).minus(i.vUsdBalance).round(0,b.roundDown)}function We(s,a,r){let i=b(4).times(a).times(b(r).minus(s)).minus(r),o=b(r).pow(3),A=i.pow(2),c=b(s).times(b(s).times(A).plus(b(4).times(a).times(o))).sqrt().round(0,b.roundDown),m=b(8).times(a).times(s),u=i.times(s).plus(c).div(m).round(0,b.roundDown);return u.eq(0)?b(0):u.plus(1)}function Zr(s,a,r,i){let o=new tr(s),A=new tr(r),c=new tr(a);return o.mul(A).shrn(i).sub(c).toString()}function $r(s){return b(s).gt(0)?`${Number(b(s).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function _r(s,a,r){let i=b(a).times(r),o=b(a).plus(r),A=b(8).times(s).times(i).times(o),c=i.times(b(16).times(s).minus(4)).div(3),m=A.times(A),u=c.times(c).times(c),l=m.plus(u),d=b(l).sqrt(),p=b(Math.cbrt(+A.plus(d).toFixed())),g=b(Math.cbrt(+A.minus(d).toFixed()));return p.plus(g).toFixed()}var rr=(c=>(c.OK="OK",c.INVALID="INVALID",c.FORBIDDEN="FORBIDDEN",c.UNINITIALIZED="UNINITIALIZED",c.CONTRACT_ADDRESS="CONTRACT_ADDRESS",c.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",c))(rr||{});var De=(o=>(o[o.ALLBRIDGE=1]="ALLBRIDGE",o[o.WORMHOLE=2]="WORMHOLE",o[o.CCTP=3]="CCTP",o[o.CCTP_V2=4]="CCTP_V2",o))(De||{});function Jr(s){return Object.entries(s).reduce((a,r)=>{let i=r[0],o=r[1],A=wi(i,o);return A&&(a[i]=A),a},{})}function Lr(s){let a={};for(let[r,i]of Object.entries(s)){let o=r;for(let A of i.tokens){let c=dt({chainSymbol:o,poolAddress:A.poolAddress}),m=re(A.poolInfo);a[c]={...A.poolInfo,imbalance:m}}}return a}function Ti(s,a){let{name:r,...i}=s,{poolInfo:o,...A}=a;return{...A,...i,chainName:r}}function bi(s){switch(s){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4}}function Si(s){return Object.entries(s).reduce((a,[r,i])=>(a[r]=Pi(i),a),{})}function Pi(s){return Object.entries(s).reduce((a,[r,i])=>{let o=bi(r);return o&&(a[o]=i),a},{})}function wi(s,a){let r=N.getChainsProperties()[s];if(!r)return null;let i={...r,allbridgeChainId:a.chainId,bridgeAddress:a.bridgeAddress,transferTime:Si(a.transferTime),txCostAmount:a.txCostAmount,confirmations:a.confirmations,suiAddresses:a.suiAddresses};return{...i,tokens:a.tokens.map(o=>Ti(i,o))}}function dt(s){return s.chainSymbol+"_"+s.poolAddress}function Xr(s){let a=[];for(let[r,i]of Object.entries(s)){let o=r;for(let A of i.tokens)a.push({chainSymbol:o,poolAddress:A.poolAddress})}return a}function Yr(s){let a={};for(let[r,i]of Object.entries(s)){let o=r;for(let[A,c]of Object.entries(i))c.imbalance=re(c),a[dt({chainSymbol:o,poolAddress:A})]=c}return a}var qt=class{api;constructor(a){this.api=Ci.create({baseURL:a.coreApiUrl,headers:{Accept:"application/json",...a.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+Ur},params:a.coreApiQueryParams})}async getTokenInfo(){let{data:a}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:Jr(a),poolInfoMap:Lr(a)}}async getPendingInfo(){let{data:a}=await this.api.get("/pending-info");return a}async getGasBalance(a,r){let{data:i}=await this.api.get(`/check/${a}/${r}`);return i}async getTransferStatus(a,r){let{data:i}=await this.api.get(`/chain/${a}/${r}`);return i}async getReceiveTransactionCost(a){let{data:r}=await this.api.post("/receive-fee",a,{headers:{"Content-Type":"application/json"}});return{exchangeRate:r.exchangeRate,fee:r.fee,sourceNativeTokenPrice:r.sourceNativeTokenPrice}}async getPoolInfoMap(a){let r=a instanceof Array?a:[a],{data:i}=await this.api.post("/pool-info",{pools:r},{headers:{"Content-Type":"application/json"}});return Yr(i)}};import en from"timed-cache";var ar=20*1e3,Bi=55*1e3,tn=class{constructor(a){this.apiClient=a;this.tokenInfoCache=new en({defaultTtl:Bi}),this.receivedTransactionCache=new en({defaultTtl:ar}),this.pendingInfoCache=new en({defaultTtl:ar}),this.gasBalanceCache=new en({defaultTtl:ar})}tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let a="TOKEN_INFO_CACHE_KEY",r=this.tokenInfoCache.get(a);if(r)return r;let i=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(a,i),i}async getGasBalance(a,r){let i=`GAS_BALANCE_${a}_${r}`,o=this.gasBalanceCache.get(i);if(o)return o;let A=this.apiClient.getGasBalance(a,r);return this.gasBalanceCache.put(i,A),A}async getPendingInfo(){let a="PENDING_INFO_CACHE_KEY",r=this.pendingInfoCache.get(a);if(r)return r;let i=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(a,i),i}async getReceiveTransactionCost(a){let r=`RECEIVE_TX_COST_${a.sourceChainId}_${a.destinationChainId}_${a.messenger}`,i=this.receivedTransactionCache.get(r);if(i)return i;let o=await this.apiClient.getReceiveTransactionCost(a);return this.receivedTransactionCache.put(r,o),o}async getTransferStatus(a,r){return this.apiClient.getTransferStatus(a,r)}async getPoolInfoMap(a){return this.apiClient.getPoolInfoMap(a)}};var nn=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(r=>r.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(a,r){return this.apiClient.getGasBalance(a,r)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(a,r){return await this.apiClient.getTransferStatus(a,r)}async getReceiveTransactionCost(a){return await this.apiClient.getReceiveTransactionCost(a)}async getPoolInfoMap(a){return await this.apiClient.getPoolInfoMap(a)}};var rn=class{constructor(a,r){this.client=a;this.isStaging=r.coreApiQueryParams?.staging==="true"}isStaging;async getChainDetailsMap(a){let r=await this.client.getChainDetailsMap(),i={};for(let o in r){let A=r[o];A&&(i[o]={...A,tokens:Kr(A.tokens,a,this.isStaging)})}return i}async tokens(a){return Kr(await this.client.tokens(),a,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(a,r){return this.client.getGasBalance(a,r)}async getTransferStatus(a,r){return await this.client.getTransferStatus(a,r)}async getReceiveTransactionCost(a){return await this.client.getReceiveTransactionCost(a)}cachePut(a,r){return this.client.cachePut(a,r)}getPoolInfoByKey(a){return this.client.getPoolInfoByKey(a)}refreshPoolInfo(a){return this.client.refreshPoolInfo(a)}};function Kr(s,a,r){return s.filter(i=>r?!0:i.flags[a]).map(Ii)}function Ii(s){let{flags:a,...r}=s;return r}import Ri from"timed-cache";var vi=55*1e3,an=class{constructor(a){this.client=a;this.poolInfoCache=new ir}poolInfoCache;async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(a,r){return this.client.getTransferStatus(a,r)}getReceiveTransactionCost(a){return this.client.getReceiveTransactionCost(a)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(a,r){return this.client.getGasBalance(a,r)}async getPoolInfoByKey(a){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let r=this.poolInfoCache.get(a);if(r)return r;{let i=await this.client.getPoolInfoMap(a);this.poolInfoCache.putAll(i);let o=i[dt(a)];if(o)return o;throw new h("Cannot find pool info for "+a.poolAddress+" on chain "+a.chainSymbol)}}async refreshPoolInfo(a){let r;if(a)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),r=await this.client.getPoolInfoMap(a);else{let i=await this.client.getChainDetailsMapAndPoolInfoMap();r=await this.client.getPoolInfoMap(Xr(i.chainDetailsMap))}this.poolInfoCache.putAll(r)}cachePut(a,r){this.poolInfoCache.put(dt(a),r)}},ir=class{cache;constructor(){this.cache=new Ri({defaultTtl:vi})}putAll(a){for(let[r,i]of Object.entries(a))this.cache.put(r,i)}putAllIfNotExists(a){for(let[r,i]of Object.entries(a))this.cache.get(r)||this.cache.put(r,i)}put(a,r){this.cache.put(a,r)}get(a){let r=dt(a);return this.cache.get(r)}};import{TronWeb as ys}from"tronweb";import{Web3 as hs}from"web3";import{Big as Hr}from"big.js";async function Y(s,a){return await s.getPoolInfoByKey({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress})}function U(s){if(Hr(s).lte(0))throw new Ze("Amount must be greater than zero")}function E(s,a,r){let i=Hr(a).toFixed(),[o,A]=i.split(".");if(A&&A.length>r)throw new Ht(s,A.length,r)}async function sn(s,a,r){return await Promise.race([s,new Promise((i,o)=>{setTimeout(()=>o(new Rt(a)),r)})])}async function sr(s,a,r,i){if(r<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${r} was received.`);let o=0;for(;;)try{return await sn(s(),a,i)}catch{if(++o>=r)throw new Rt(a)}}async function Qr(s,a,r,i=1.5,o=!1){let A=[],c=0,m=await s();if(A.push(m),!a(m))return A;let u=new Date(Date.now()+r*1e3).valueOf(),l=1e3,d=l;for(;Date.now()<u;){let p=A[A.length-1];if(p===void 0||!a(p))break;c++,o&&console.info(`Waiting ${l}ms before trying again (bringing the total wait time to ${d}ms so far, of total ${r*1e3}ms)`),await new Promise(y=>setTimeout(y,l)),l=l*i,new Date(Date.now()+l).valueOf()>u&&(l=u-Date.now(),o&&console.info(`was gonna wait too long; new waitTime: ${l}ms`)),d=l+d;let g=await s(p);A.push(g),o&&a(g)&&console.info(`${c}. Called ${s.name}; ${A.length} prev attempts. Most recent: ${JSON.stringify(A[A.length-1],null,2)}`)}return A}import{Big as Vi}from"big.js";var ki={abi:[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},zr=ki;var Fi={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},qr=Fi;import*as cn from"@project-serum/anchor";import{PublicKey as da}from"@solana/web3.js";import*as q from"@project-serum/anchor";import{PublicKey as ae}from"@solana/web3.js";async function we(s,a){return q.utils.token.associatedAddress({mint:a,owner:s})}async function Ye(s){let[a]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("config")],s);return a}async function ea(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("lock"),Uint8Array.from(s)],a);return r}async function Ft(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([s])],a);return r}async function pt(s){let a=await Ye(s),[r]=await ae.findProgramAddress([a.toBuffer()],s);return r}async function ta(s,a){let[r]=await ae.findProgramAddress([s.toBuffer()],a);return r}async function gt(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("token"),s.toBytes()],a);return r}async function na(s,a,r){let[i]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([s]),a],r);return i}async function or(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([s])],a);return r}async function Ar(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([s])],a);return r}async function ra(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("sent_message"),s],a);return r}async function cr(s,a,r){let[i]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("user_deposit"),a.toBytes(),s.toBytes()],r);return i}async function aa(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("cctp_bridge"),s.toBytes()],a);return r}async function ia(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("token"),s.toBytes()],a);return r}function sa(s,a){let[r]=ae.findProgramAddressSync([q.utils.bytes.utf8.encode("lock"),a.toBuffer()],s);return r}function oa(s,a,r,i){let o=at("message_transmitter",r),A=at("token_messenger",i),c=at("__event_authority",i),m=at("token_minter",i),u=at("local_token",i,[a]),l=at("remote_token_messenger",i,[s.toString()]),d=at("sender_authority",i);return{messageTransmitterAccount:o,tokenMessenger:A,tokenMessengerEventAuthority:c,tokenMinter:m,localToken:u,remoteTokenMessengerKey:l,authorityPda:d}}function at(s,a,r=[]){let i=[Buffer.from(q.utils.bytes.utf8.encode(s))];for(let A of r)typeof A=="string"?i.push(Buffer.from(q.utils.bytes.utf8.encode(A))):Array.isArray(A)||Buffer.isBuffer(A)?i.push(Buffer.from(Uint8Array.from(A))):i.push(Buffer.from(Uint8Array.from(A.toBuffer())));return ae.findProgramAddressSync(i,a)[0]}import{AnchorProvider as xi}from"@project-serum/anchor";import{Connection as Mi,PublicKey as Oi}from"@solana/web3.js";function Ke(s,a){let r=new Mi(s,"confirmed"),i=new Oi(a);return new xi(r,{publicKey:i},{preflightCommitment:"confirmed",commitment:"confirmed"})}import{PublicKey as Ni}from"@solana/web3.js";import{Address as Wi}from"@stellar/stellar-sdk";import{Big as _e}from"big.js";import ma from"randombytes";import{utils as Aa}from"tronweb";function Je(s,a,r){let i;switch(a){case"EVM":{i=ca(s);break}case"SOLANA":{i=new Ni(s).toBuffer();break}case"TRX":{i=Di(s);break}case"SRB":{i=new Wi(s).toBuffer();break}case"SUI":{i=ca(s);break}}switch(r){case"EVM":return"0x"+i.toString("hex");case"SOLANA":return Array.from(i);case"TRX":return i;case"SRB":return i.toJSON().data;case"SUI":return"0x"+i.toString("hex")}}function Ce(s){return s.replace(/^0x/i,"")}function ua(s){return Buffer.from(s.replace(/^0x/i,""),"hex")}function ca(s){let r=ua(s);return Buffer.concat([Buffer.alloc(32-r.length,0),r],32)}function Di(s){let a=xt(s),r=ua(a);return Gi(r,32)}function xt(s){let a=Aa.crypto.decodeBase58Address(s);return a?Aa.bytes.byteArray2hexStr(a).replace(/^41/,"0x"):""}function Gi(s,a){if(s.length>=a)return s;let r=Buffer.alloc(a,0);return s.copy(r,a-s.length),r}function on(){return ma(32)}function Ge(){let s=ma(32).readBigInt64BE();return s<0?s*-1n:s}function Ue(s,a){let r={},i=a.sourceToken;if(r.amount=D(a.amount,i.decimals).toFixed(),r.contractAddress=i.bridgeAddress,r.fromAccountAddress=a.fromAccountAddress,s==="SUI"){if(!i.originTokenAddress)throw new h("SUI sourceToken must contain 'originTokenAddress'");r.fromTokenAddress=i.originTokenAddress}else r.fromTokenAddress=Je(i.tokenAddress,s,s);if(r.toAccountAddress=a.toAccountAddress,s==="SUI"){if(!a.destinationToken.originTokenAddress)throw new h("SUI destinationToken must contain 'originTokenAddress'");r.toTokenAddress=a.destinationToken.originTokenAddress}else r.toTokenAddress=Je(a.destinationToken.tokenAddress,s,s);return r.minimumReceiveAmount=a.minimumReceiveAmount?D(a.minimumReceiveAmount,a.destinationToken.decimals).toFixed():"0",r}async function Be(s,a,r){let i={};i.fromChainId=a.sourceToken.allbridgeChainId,i.fromChainSymbol=a.sourceToken.chainSymbol;let o=N.getChainProperty(a.destinationToken.chainSymbol).chainType;if(s==="SUI"){if(!a.sourceToken.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");i.fromTokenAddress=a.sourceToken.originTokenAddress}else 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 A=a.sourceToken;if(a.messenger===3){if(!A.cctpAddress||!a.destinationToken.cctpAddress)throw new ne("Such route does not support CCTP protocol");i.contractAddress=A.cctpAddress}else if(a.messenger===4){if(!A.cctpV2Address||!a.destinationToken.cctpV2Address)throw new ne("Such route does not support CCTP V2 protocol");i.contractAddress=A.cctpV2Address}else i.contractAddress=A.bridgeAddress;i.messenger=a.messenger,i.fromAccountAddress=a.fromAccountAddress,i.amount=D(a.amount,A.decimals).toFixed();let{fee:c,feeFormat:m}=a;if(!c){let p=(await mr(i.fromChainId,a.sourceToken.chainType,i.toChainId,A.decimals,i.messenger,r))[i.gasFeePaymentMethod];if(!p)throw new Bt;c=p.int,m="int"}if(m=="float")switch(i.gasFeePaymentMethod){case"native":i.fee=D(c,N.getChainDecimalsByType(A.chainType)).toFixed(0);break;case"stablecoin":i.fee=D(c,A.decimals).toFixed(0);break}else i.fee=c;let{extraGas:u,extraGasFormat:l}=a;if(u&&+u>0){if(l=="float")switch(i.gasFeePaymentMethod){case"native":i.extraGas=D(u,N.getChainDecimalsByType(A.chainType)).toFixed(0);break;case"stablecoin":i.extraGas=D(u,A.decimals).toFixed(0);break}else i.extraGas=u;await Ei(i.extraGas,i.gasFeePaymentMethod,A,a.destinationToken,r)}return s!=="SUI"&&(i.fromTokenAddress=Je(i.fromTokenAddress,s,s)),i.toAccountAddress=Je(a.toAccountAddress,o,s),i.toTokenAddress=Je(i.toTokenAddress,o,s),i.gasFeePaymentMethod=="stablecoin"&&Ui(i.amount,A.decimals,i.fee,i.extraGas),i}function Ui(s,a,r,i){let o=_e(s).minus(r).minus(i??0);if(o.lte(0))throw new ut(`Amount not enough to pay fee, ${F(_e(o).minus(1).neg(),a).toFixed()} stables is missing`)}async function mr(s,a,r,i,o,A){let c=await A.getReceiveTransactionCost({sourceChainId:s,destinationChainId:r,messenger:o}),m={native:{int:c.fee,float:F(c.fee,N.getChainDecimalsByType(a)).toFixed()}};if(c.sourceNativeTokenPrice){let u=Oe(new _e(c.fee).mul(c.sourceNativeTokenPrice),N.getChainDecimalsByType(a),i).toFixed(0,_e.roundUp);m.stablecoin={int:u,float:F(u,i).toFixed()}}return m}async function Ei(s,a,r,i,o){let c=(await ur(r,i,o)).extraGasMax[a];if(!c)throw new Bt(`Impossible to pay extra gas by '${a}' payment method`);let m=c.int;if(_e(s).gt(m))throw new Kt(`Extra gas ${s} in int format, exceeded limit ${m} for '${a}' payment method`)}async function ur(s,a,r){let i={},o=await r.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:a.allbridgeChainId,messenger:1}),A=a.txCostAmount.maxAmount,c=F(A,N.getChainDecimalsByType(a.chainType)).toFixed(),m=_e(c).div(o.exchangeRate).toFixed(N.getChainDecimalsByType(s.chainType),_e.roundDown),u=D(m,N.getChainDecimalsByType(s.chainType)).toFixed(0);if(i.native={int:u,float:m},o.sourceNativeTokenPrice){let l=_e(m).mul(o.sourceNativeTokenPrice).toFixed(s.decimals,_e.roundDown);i.stablecoin={int:D(l,s.decimals).toFixed(0),float:l}}return{extraGasMax:i,destinationChain:{gasAmountMax:{int:A,float:c},swap:{int:a.txCostAmount.swap,float:F(a.txCostAmount.swap,N.getChainDecimalsByType(a.chainType)).toFixed()},transfer:{int:a.txCostAmount.transfer,float:F(a.txCostAmount.transfer,N.getChainDecimalsByType(a.chainType)).toFixed()}},exchangeRate:o.exchangeRate,sourceNativeTokenPrice:o.sourceNativeTokenPrice}}function la(s){return s.sourceToken.chainSymbol!==s.destinationToken.chainSymbol}async function mn(s,a,r,i){let o,A=new da(a),c=new da(r),m=await we(A,c),u=Ke(i,a);cn.setProvider(u);let l=await cn.Spl.token(u).account.token.fetchNullable(m);if(l?.authority.equals(A))o=Je(m.toBase58(),"SOLANA",s);else{let d=await u.connection.getTokenAccountsByOwner(A,{mint:c});if(d.value.length===0&&!l)o=Je(m.toBase58(),"SOLANA",s);else if(d.value.length>0){let p=d.value[0];if(!p?.pubkey)throw new h("First token account or its public key is undefined");o=Je(p.pubkey.toBase58(),"SOLANA",s)}else throw new h("Associated account has wrong owner")}return o}var le=class{};var Mt=class extends le{constructor(r,i,o){super();this.web3=r;this.api=i;this.nodeRpcUrlsConfig=o}chainType="EVM";async send(r){let i=await this.buildRawTransactionSend(r);return this.sendRawTransaction(i)}async buildRawTransactionSwap(r){let i=Ue(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=r,p=this.getBridgeContract(o).methods.swap(i,c,u,m,l);return Promise.resolve({from:A,to:o,data:p.encodeABI()})}async buildRawTransactionSend(r){let i=await Be(this.chainType,r,this.api),{amount:o,contractAddress:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,toTokenAddress:d,messenger:p,fee:g,gasFeePaymentMethod:y,extraGas:f}=i,S="0x"+on().toString("hex"),T,B,v=g;if(f&&(v=Vi(v).plus(f).toFixed()),p===3||p===4){let M=await this.buildRawTransactionCctpSend(r,i,v);T=M.sendMethod,B=M.value}else{let M=this.getBridgeContract(A);y==="stablecoin"?(T=M.methods.swapAndBridge(m,o,l,u,d,S,p,v),B="0"):(T=M.methods.swapAndBridge(m,o,l,u,d,S,p,0),B=v)}return Promise.resolve({from:c,to:A,value:B,data:T.encodeABI()})}async buildRawTransactionCctpSend(r,i,o){let{amount:A,contractAddress:c,toChainId:m,toAccountAddress:u,gasFeePaymentMethod:l}=i,d=this.getCctpBridgeContract(c),p,g;if(r.destinationToken.chainType==="SOLANA"){let y=await mn(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));l==="stablecoin"?(p=d.methods.bridgeWithWalletAddress(A,y,u,m,o),g="0"):(p=d.methods.bridgeWithWalletAddress(A,y,u,m,0),g=o)}else l==="stablecoin"?(p=d.methods.bridge(A,u,m,o),g="0"):(p=d.methods.bridge(A,u,m,0),g=o);return{sendMethod:p,value:g}}async sendRawTransaction(r){let i=await this.web3.eth.estimateGas(r),o={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:A}=await this.web3.eth.sendTransaction({...r,gas:i,...o});return{txId:A.toString()}}getBridgeContract(r){return new this.web3.eth.Contract(zr.abi,r)}getCctpBridgeContract(r){return new this.web3.eth.Contract(qr.abi,r)}};var un=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o}async approve(a,r){let i,o;r?(i=a,o=r):o=a;let A=Ot(o.token,o.messenger);return this.tokenService.buildRawTransactionApprove({...o,spender:A},i)}async send(a,r){return U(a.amount),E("amount",a.amount,a.sourceToken.decimals),la(a)?ln(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionSend(a):ln(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionSwap(a)}};import{BN as ht,Program as pr,Spl as Hi,web3 as He}from"@project-serum/anchor";import{Keypair as Ba,PublicKey as V,SystemProgram as Qi}from"@solana/web3.js";import{Big as Ie}from"big.js";var Nt={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 pa={version:"0.1.0",name:"cctp_bridge",instructions:[{name:"initialize",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"bridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"messageSentEventData",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!0,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"cctpMessenger",isMut:!1,isSigner:!1},{name:"messageTransmitterProgram",isMut:!1,isSigner:!1},{name:"messageTransmitterAccount",isMut:!0,isSigner:!1},{name:"tokenMessenger",isMut:!1,isSigner:!1},{name:"tokenMinter",isMut:!1,isSigner:!1},{name:"localToken",isMut:!0,isSigner:!1},{name:"remoteTokenMessengerKey",isMut:!1,isSigner:!1},{name:"authorityPda",isMut:!1,isSigner:!1},{name:"eventAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"setAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setCctpTokenMessengerMinter",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]}],accounts:[{name:"cctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"admin",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"adminFeeShareBp",type:"u64"},{name:"adminFeeAmount",type:"u64"}]}},{name:"chainBridge",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"amount",type:"u64"},{name:"adminFee",type:"u64"},{name:"relayerFee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"slot",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gasOracleProgramId",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"}]}}],errors:[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}]};import{Spl as ji}from"@project-serum/anchor";import Zi from"big.js";import{Web3 as dn}from"web3";async function ft(s,a){return await ji.token(a).account.token.fetch(s)}async function ga(s,a,r){let i=await a.account.pool.fetch(r),o=i.decimals,A=Zi(i.feeShareBp.toString()).div(1e4).toFixed(),c={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 Ne(s,{decimals:o,feeShare:A},c)}function fa(s){let a=s.amount,r="0x"+s.recipient.toString("hex"),i=s.sourceChainId,o=s.destinationChainId,A="0x"+s.receiveToken.toString("hex"),c="0x"+s.nonce.toString("hex"),m=1,u="0x"+s.chainBridge.toString("hex"),l=dn.utils.encodePacked({t:"uint256",v:a},{t:"bytes32",v:r},{t:"uint256",v:i},{t:"bytes32",v:A},{t:"uint256",v:c},{t:"uint8",v:m});if(!l)throw new h("message cannot be undefined");let d=dn.utils.keccak256(Buffer.from(l.replace("0x",""),"hex")),p=Buffer.from(d.replace("0x",""),"hex");p[0]=i,p[1]=o;let g=dn.utils.encodePacked({t:"bytes32",v:"0x"+p.toString("hex")},{t:"bytes32",v:u});if(!g)throw new lt("messageWithSigner cannot be undefined");let y=dn.utils.keccak256(Buffer.from(g.replace("0x",""),"hex")),f=Buffer.from(y.replace("0x",""),"hex");return f[0]=p[0],f[1]=p[1],f}import{ComputeBudgetInstruction as ha,ComputeBudgetProgram as pn,Connection as Ta,TransactionMessage as $i}from"@solana/web3.js";import{Big as _i}from"big.js";import{AddressLookupTableAccount as ya}from"@solana/web3.js";async function st(s,a){return await Promise.all(s.message.addressTableLookups.map(async r=>new ya({key:r.accountKey,state:ya.deserialize(await a.getAccountInfo(r.accountKey).then(i=>{if(!i)throw new h("Cannot get AccountInfo");return i.data}))})))}var lr="AUTO";async function yt(s,a,r){let i=new Ta(r,"confirmed"),o=(await i.simulateTransaction(s)).value.unitsConsumed;await Sa(s.instructions,o,a,i)}async function ba(s,a,r){let i=new Ta(r,"confirmed"),o=await st(s,i),A=$i.decompile(s.message,{addressLookupTableAccounts:o});if(s.serialize().length>1232)throw new zt;await Sa(A.instructions,769230,a,i),s.message=A.compileToV0Message(o)}async function Sa(s,a,r,i){if(a>0){let o=Ji(a,s);if(r?.solana){let A=r.solana;if(A===lr)await dr(s,i);else if("pricePerUnitInMicroLamports"in A)await dr(s,i,A.pricePerUnitInMicroLamports);else{let c=_i(A.extraFeeInLamports).div(o).mul(vt(6)).toFixed(0);await dr(s,i,c)}}}}function Ji(s,a){let r=a.findIndex(A=>A.programId.equals(pn.programId)&&ha.decodeInstructionType(A)==="SetComputeUnitLimit"),i=Number((s*1.3).toFixed(0)),o=pn.setComputeUnitLimit({units:i});return r>=0?a[r]=o:a.push(o),i.toString()}async function dr(s,a,r){let i=s.findIndex(c=>c.programId.equals(pn.programId)&&ha.decodeInstructionType(c)==="SetComputeUnitPrice"),o=BigInt(r||await Li(a)),A=pn.setComputeUnitPrice({microLamports:o});return i>=0?s[i]=A:s.push(A),o.toString()}async function Li(s){let a=await s.getRecentPrioritizationFees(),r=0;for(let i of a)r+=i.prioritizationFee;return(r/a.length).toFixed(0)}import{NATIVE_MINT as Xi}from"@solana/spl-token";import{Connection as Yi,TransactionMessage as Pa,VersionedTransaction as Ki}from"@solana/web3.js";import wa,{AxiosError as Ca}from"axios";var gn=class{connection;jupiterUrl;apiKeyHeader;maxAccounts;constructor(a,r){this.connection=new Yi(a),this.jupiterUrl=r.jupiterUrl.replace(/\/$/,""),this.apiKeyHeader=r.jupiterApiKeyHeader,this.maxAccounts=r.jupiterMaxAccounts}async getJupiterSwapTx(a,r,i,o){let A;try{let p=o?"ExactOut":"ExactIn",g=`${this.jupiterUrl}/quote?inputMint=${r}&outputMint=${Xi.toString()}&amount=${i}&swapMode=${p}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(g+=`&maxAccounts=${this.maxAccounts}`),A=await wa.get(g,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(p){throw p instanceof Ca&&p.response&&p.response.data&&p.response.data.error?new Q(p.response.data.error):new Q("Cannot get route")}let c;if(o&&A?.data?.inAmount)c=A.data.inAmount;else if(o)throw new Q("Cannot get inAmount");let m;try{m=await wa.post(`${this.jupiterUrl}/swap`,{quoteResponse:A.data,userPublicKey:a,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(p){throw p instanceof Ca&&p.response&&p.response.data&&p.response.data.error?new Q(p.response.data.error):new Q("Cannot get swap transaction")}let u;if(m?.data?.swapTransaction)u=m.data.swapTransaction;else throw new Q("Cannot get swap transaction");let l=Buffer.from(u,"base64"),d=Ki.deserialize(l);return o?{tx:d,amountIn:c}:{tx:d}}async amendJupiterWithSdkTx(a,r){try{let i=await st(a,this.connection),o=await st(r,this.connection),A=Pa.decompile(a.message,{addressLookupTableAccounts:i}),c=Pa.decompile(r.message,{addressLookupTableAccounts:o});if(c.instructions.shift(),A.instructions.push(...c.instructions),i.push(...o),a.message=A.compileToV0Message(i),r.message.header.numRequiredSignatures===2&&a.signatures.length===1){let m=r.signatures[0];if(!m)throw new h("Signature is undefined");a.signatures.push(m)}return a}catch(i){throw i instanceof Error&&i.message?new Q(`Some error occurred during creation final swap and bridge transaction. ${i.message}`):new Q("Some error occurred during creation final swap and bridge transaction")}}};var gr=1e6,Ia=1.1,fn=class extends le{constructor(r,i,o){super();this.solanaRpcUrl=r;this.params=i;this.api=o;this.jupiterService=new gn(r,i.jupiterParams)}chainType="SOLANA";jupiterService;async buildRawTransactionSwap(r){let i=Ue(this.chainType,r);return await this.buildSwapTransaction(i,r.sourceToken.poolAddress,r.destinationToken.poolAddress,r.txFeeParams)}async buildSwapTransaction(r,i,o,A){let{fromAccountAddress:c,amount:m,contractAddress:u,fromTokenAddress:l,toTokenAddress:d,toAccountAddress:p,minimumReceiveAmount:g}=r,y=c,f=u,S=l,T=d,B=o,v=p,M=new V(y),H=Ke(this.solanaRpcUrl,M.toString()),G=new pr(Nt,f,H),O=await pt(G.programId),ce=await Ye(G.programId),L=new V(S),ke=await gt(L,G.programId),Fe=new V(i),je=await we(M,L),Te=new V(v),se=new V(T),ge=await gt(se,G.programId),be=new V(B),me=await we(Te,se),xe=[He.ComputeBudgetProgram.setComputeUnitLimit({units:gr})];try{await ft(me,H)}catch{let Ai=await Hi.associatedToken(H).methods.create().accounts({mint:se,owner:Te,associatedAccount:me}).instruction();xe.push(Ai)}let Me=await G.methods.swap(new ht(m),new ht(g||0)).accounts({payer:M,config:ce,bridgeAuthority:O,user:M,sendBridgeToken:ke,sendMint:L,sendPool:Fe,sendUserToken:je,receiveBridgeToken:ge,receiveMint:se,receivePool:be,receiveUserToken:me}).preInstructions(xe).transaction(),Se=H.connection;return Me.recentBlockhash=(await Se.getLatestBlockhash()).blockhash,Me.feePayer=M,await yt(Me,A,this.solanaRpcUrl),await this.convertToVersionedTransaction(Me,Se)}async buildRawTransactionSend(r){let i=await Be(this.chainType,r,this.api),o=this.addPoolAddress(r,i),A=o.gasFeePaymentMethod=="stablecoin",c;if(A)try{let{tx:l,solTxSendUpdatedParams:d}=await this.processJup(o,r,!0);c=l,o={...o,...d}}catch{try{let{tx:d,solTxSendUpdatedParams:p}=await this.processJup(o,r,!1);c=d,o={...o,...p}}catch(d){throw d instanceof J?d:d instanceof Error&&d.message?new Q(`Some error occurred during creation Jupiter swap transaction. ${d.message}`):new Q("Some error occurred during creation Jupiter swap transaction")}}let m,u;switch(i.messenger){case 1:{let l=await this.prepareSwapAndBridgeData(o);m=await this.buildSwapAndBridgeAllbridgeTransaction(l);break}case 2:{let l=await this.prepareSwapAndBridgeData(o),{transaction:d,messageAccount:p}=await this.buildSwapAndBridgeWormholeTransaction(l);m=d,u=p;break}case 3:case 4:{let l=await this.prepareSwapAndBridgeCctpData(o),{transaction:d,messageSentEventDataKeypair:p}=await this.buildSwapAndBridgeCctpTransaction(r.destinationToken.chainSymbol,l);m=d,u=p;break}}if(A){if(!c)throw new Q("Swap tx is absent");m=await this.jupiterService.amendJupiterWithSdkTx(c,m)}return await ba(m,r.txFeeParams,this.solanaRpcUrl),u&&m.sign([u]),m}async processJup(r,i,o){let{fee:A,extraGas:c,gasFeePaymentMethod:m}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(i.sourceToken.decimals,r),u=o?Ie(A):Ie(r.fee);c&&(u=u.plus(c)),o||(u=u.mul(Ia));let{tx:l,amountIn:d}=await this.jupiterService.getJupiterSwapTx(i.fromAccountAddress,i.sourceToken.tokenAddress,u.toFixed(0),o),p;if(o){if(!d)throw new Q("Cannot get inAmount");p=Ie(r.amount).minus(Ie(d).mul(Ia)).toFixed(0)}else p=Ie(r.amount).minus(u).toFixed(0);if(Ie(p).lte(0))throw new ut(`Amount not enough to pay fee, ${F(Ie(p).minus(1).neg(),i.sourceToken.decimals).toFixed()} stables is missing`);return{tx:l,solTxSendUpdatedParams:{amount:p,fee:A,extraGas:c,gasFeePaymentMethod:m}}}addPoolAddress(r,i){return{...i,poolAddress:r.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(r,i){if(i.gasFeePaymentMethod=="stablecoin"){let o=(await this.api.getReceiveTransactionCost({sourceChainId:i.fromChainId,destinationChainId:i.toChainId,messenger:i.messenger})).sourceNativeTokenPrice,A=Ie(i.fee).div(o).mul(Ie(10).pow(N.getChainDecimalsByType("SOLANA")-r)).toFixed(0),c;return i.extraGas&&(c=Ie(i.extraGas).div(o).mul(Ie(10).pow(N.getChainDecimalsByType("SOLANA")-r)).toFixed(0)),{fee:A,extraGas:c,gasFeePaymentMethod:"native"}}return{fee:i.fee,extraGas:i.extraGas,gasFeePaymentMethod:"native"}}getExtraGasInstruction(r,i,o){return He.SystemProgram.transfer({fromPubkey:i,toPubkey:o,lamports:+r})}async prepareSwapAndBridgeData(r){let{amount:i,contractAddress:o,fromChainId:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,toTokenAddress:d,poolAddress:p,extraGas:g}=r,y=m,f=c,S=u,T=d,B=l,v=o,M=A,H=Ke(this.solanaRpcUrl,f),G=new pr(Nt,v,H),O=Array.from(on()),ce=new V(p),L=await ga(i,G,ce),ke=await ea(O,G.programId),Fe=await pt(G.programId),je=await we(new V(f),new V(y)),Te=await gt(new V(y),G.programId),se=await or(S,G.programId),ge=await na(S,Buffer.from(T),G.programId),be=await Ye(G.programId),me=await G.account.config.fetch(be),xe=await Ft(S,me.gasOracleProgramId),Me=await Ft(M,me.gasOracleProgramId),Se=fa({amount:L,recipient:Buffer.from(B),nonce:Buffer.from(O),receiveToken:Buffer.from(T),destinationChainId:S,sourceChainId:M,chainBridge:(await pt(G.programId)).toBuffer()}),W={};return W.bridge=G,W.amount=new ht(i),W.vusdAmount=new ht(L),W.nonce=O,W.recipient=Array.from(B),W.receiveToken=Array.from(T),W.poolAccount=ce,W.lockAccount=ke,W.bridgeAuthority=Fe,W.userToken=je,W.bridgeTokenAccount=Te,W.chainBridgeAccount=se,W.otherBridgeTokenAccount=ge,W.userAccount=new V(f),W.destinationChainId=S,W.mint=new V(y),W.config=be,W.configAccountInfo=me,W.gasPrice=xe,W.thisGasPrice=Me,W.message=Se,g&&(W.extraGasInstruction=this.getExtraGasInstruction(g,W.userAccount,be)),W}async buildSwapAndBridgeAllbridgeTransaction(r){let{bridge:i,vusdAmount:o,nonce:A,recipient:c,receiveToken:m,poolAccount:u,lockAccount:l,bridgeAuthority:d,userToken:p,bridgeTokenAccount:g,chainBridgeAccount:y,otherBridgeTokenAccount:f,userAccount:S,destinationChainId:T,mint:B,config:v,configAccountInfo:M,gasPrice:H,thisGasPrice:G,message:O,extraGasInstruction:ce}=r,L=M.allbridgeMessengerProgramId,ke=await Ar(T,L),Fe=await Ye(L),je=await ra(O,L),Te=[];ce&&Te.push(ce);let se=await i.methods.swapAndBridge({vusdAmount:o,nonce:A,destinationChainId:T,recipient:c,receiveToken:m}).accounts({mint:B,user:S,config:v,lock:l,pool:u,gasPrice:H,thisGasPrice:G,bridgeAuthority:d,userToken:p,bridgeToken:g,chainBridge:y,messenger:L,messengerGasUsage:ke,messengerConfig:Fe,sentMessageAccount:je,otherBridgeToken:f}).preInstructions([He.ComputeBudgetProgram.setComputeUnitLimit({units:gr})]).postInstructions(Te).transaction(),ge=Ke(this.solanaRpcUrl,S.toString()).connection;return se.recentBlockhash=(await ge.getLatestBlockhash()).blockhash,se.feePayer=S,await this.convertToVersionedTransaction(se,ge)}async convertToVersionedTransaction(r,i){let o=await i.getAddressLookupTable(new V(this.params.solanaLookUpTable)).then(c=>c.value);if(!o)throw new h("Cannot find allbridgeLookupTableAccount");let A=new He.TransactionMessage({payerKey:r.feePayer,recentBlockhash:r.recentBlockhash,instructions:r.instructions}).compileToV0Message([o]);return new He.VersionedTransaction(A)}async buildSwapAndBridgeWormholeTransaction(r){let{bridge:i,vusdAmount:o,nonce:A,recipient:c,receiveToken:m,poolAccount:u,lockAccount:l,bridgeAuthority:d,userToken:p,bridgeTokenAccount:g,chainBridgeAccount:y,otherBridgeTokenAccount:f,userAccount:S,destinationChainId:T,mint:B,config:v,configAccountInfo:M,gasPrice:H,thisGasPrice:G,message:O,extraGasInstruction:ce}=r,L=this.params.wormholeMessengerProgramId,[ke]=V.findProgramAddressSync([Buffer.from("Bridge")],new V(L)),[Fe]=V.findProgramAddressSync([Buffer.from("fee_collector")],new V(L)),[je]=V.findProgramAddressSync([Buffer.from("Sequence"),d.toBuffer()],new V(L)),Te=await Ar(T,M.wormholeMessengerProgramId),se=await Ye(M.wormholeMessengerProgramId),ge=Ba.generate(),be=Ke(this.solanaRpcUrl,S.toString()),me=await be.connection.getAccountInfo(ke);if(me==null)throw new h("Cannot fetch wormhole bridge account info");let xe=new ht(me.data.slice(16,24),"le").toString(),Me=Qi.transfer({fromPubkey:S,toPubkey:Fe,lamports:+xe}),Se=[];ce&&Se.push(ce);let W={mint:B,user:S,config:v,lock:l,pool:u,gasPrice:H,thisGasPrice:G,bridgeAuthority:d,userToken:p,bridgeToken:g,chainBridge:y,otherBridgeToken:f,messengerGasUsage:Te,wormholeProgram:L,bridge:ke,message:ge.publicKey,wormholeMessenger:M.wormholeMessengerProgramId,sequence:je,feeCollector:Fe,wormholeMessengerConfig:se,clock:He.SYSVAR_CLOCK_PUBKEY},Xt=await i.methods.swapAndBridgeWormhole({vusdAmount:o,nonce:A,destinationChainId:T,recipient:c,receiveToken:m}).accounts(W).preInstructions([He.ComputeBudgetProgram.setComputeUnitLimit({units:gr}),Me]).postInstructions(Se).signers([ge]).transaction();return Xt.recentBlockhash=(await be.connection.getLatestBlockhash()).blockhash,Xt.feePayer=S,{transaction:await this.convertToVersionedTransaction(Xt,be.connection),messageAccount:ge}}async prepareSwapAndBridgeCctpData(r){let{contractAddress:i,amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,extraGas:d}=r,p=i;if(!p)throw new ne("Such route does not support CCTP protocol");let g=4,y=A,f=l,S=u,T=Ke(this.solanaRpcUrl,y),B=new pr(pa,p,T),v=new V(c),M=await aa(v,B.programId),H=new V(y),G=await B.account.cctpBridge.fetch(M),O={};return O.cctpBridge=B,O.cctpBridgeAccount=M,O.cctpAddressAccount=new V(p),O.amount=new ht(o),O.recipient=Array.from(S),O.receiveToken=Array.from(f),O.userToken=await we(H,v),O.bridgeAuthority=await ta(M,B.programId),O.bridgeTokenAccount=await ia(v,B.programId),O.chainBridgeAccount=await or(m,B.programId),O.userAccount=H,O.destinationChainId=m,O.mint=v,O.gasPrice=await Ft(m,G.gasOracleProgramId),O.thisGasPrice=await Ft(g,G.gasOracleProgramId),O.provider=T,d&&(O.extraGasInstruction=this.getExtraGasInstruction(d,O.userAccount,M)),O}async buildSwapAndBridgeCctpTransaction(r,i){let{cctpBridge:o,cctpBridgeAccount:A,amount:c,recipient:m,receiveToken:u,bridgeAuthority:l,userToken:d,bridgeTokenAccount:p,chainBridgeAccount:g,userAccount:y,destinationChainId:f,mint:S,gasPrice:T,thisGasPrice:B,extraGasInstruction:v,provider:M}=i,H=this.params.cctpParams.cctpDomains[r],G=this.params.cctpParams.cctpTransmitterProgramId,O=this.params.cctpParams.cctpTokenMessengerMinter;if(H==null||!G||!O)throw new h("CCTP is not configured");let ce=new V(G),L=new V(O),{messageTransmitterAccount:ke,tokenMessenger:Fe,tokenMessengerEventAuthority:je,tokenMinter:Te,localToken:se,remoteTokenMessengerKey:ge,authorityPda:be}=oa(H,S,ce,L),me=[];v&&me.push(v);let xe=Ba.generate(),Me=sa(o.programId,xe.publicKey),Se=await o.methods.bridge({amount:c,destinationChainId:f,recipient:m,receiveToken:u}).accounts({mint:S,user:y,cctpBridge:A,messageSentEventData:xe.publicKey,lock:Me,cctpMessenger:L,messageTransmitterProgram:ce,messageTransmitterAccount:ke,tokenMessenger:Fe,tokenMinter:Te,localToken:se,remoteTokenMessengerKey:ge,authorityPda:be,eventAuthority:je,bridgeToken:p,gasPrice:T,thisGasPrice:B,chainBridge:g,userToken:d,bridgeAuthority:l}).preInstructions([He.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(me).transaction(),W=M.connection;return Se.recentBlockhash=(await W.getLatestBlockhash()).blockhash,Se.feePayer=y,{transaction:await this.convertToVersionedTransaction(Se,W),messageSentEventDataKeypair:xe}}send(r){throw new X}};import{Address as fr,contract as Bb}from"@stellar/stellar-sdk";import{Big as es}from"big.js";import{contract as n}from"@stellar/stellar-sdk";var zi=n.Spec,qi=n.Client;var Wt=class extends qi{constructor(r){super(new zi(["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"]),r);this.options=r}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 yn=class extends le{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";async buildRawTransactionSend(r){let i=await Be(this.chainType,r,this.api);return await this.buildRawTransactionSendFromParams(i)}async buildRawTransactionSendFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:g}=r,y=d;g&&(y=es(y).plus(g).toFixed());let f=this.getContract(Wt,o,A),S;return p==="stablecoin"?S=await f.swap_and_bridge({sender:A,token:fr.contract(Buffer.from(c)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(l),nonce:Ge(),gas_amount:BigInt(0),fee_token_amount:BigInt(y)}):S=await f.swap_and_bridge({sender:A,token:fr.contract(Buffer.from(c)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(l),nonce:Ge(),gas_amount:BigInt(y),fee_token_amount:BigInt(0)}),S.toXDR()}async buildRawTransactionSwap(r){let i=Ue(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=r;return(await this.getContract(Wt,o,A).swap({sender:A,amount:BigInt(i),token:fr.contract(Buffer.from(c)).toBuffer(),receive_token:Buffer.from(u),recipient:m,receive_amount_min:BigInt(l)})).toXDR()}send(r){throw new X}getContract(r,i,o){let A={publicKey:o,contractId:i,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new r(A)}};import{SuiClient as ds}from"@mysten/sui/client";import{coinWithBalance as $,Transaction as wn}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as ja}from"@mysten/sui/utils";import{Big as vr}from"big.js";var kr=Pe(Qe());var Le=Pe(Qe());K();function ka(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::swap`,typeArguments:a,arguments:[w(s,r.bridge),w(s,r.coin),ye(s,r.receiveAmountMin,"u64")]})}function Fa(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::deposit`,typeArguments:[a],arguments:[w(s,r.bridge),w(s,r.userDeposit),w(s,r.coin)]})}function xa(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::withdraw`,typeArguments:[a],arguments:[w(s,r.bridge),w(s,r.userDeposit),ye(s,r.amountLp,"u64")]})}function Ma(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::claim_reward`,typeArguments:[a],arguments:[w(s,r.bridge),w(s,r.userDeposit)]})}function Oa(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::pool`,typeArguments:[a],arguments:[w(s,r)]})}function hr(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::swap_and_bridge_wormhole`,typeArguments:[a],arguments:[w(s,r.bridge),w(s,r.messenger),w(s,r.wormholeState),w(s,r.theClock),w(s,r.gasOracle),w(s,r.amount),w(s,r.recipient),ye(s,r.destinationChainId,"u8"),w(s,r.receiveToken),ye(s,r.nonce,"u256"),w(s,r.feeSuiCoin),w(s,r.feeTokenCoin)]})}function Na(s,a){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::new_user_deposit`,typeArguments:[a],arguments:[]})}function Tr(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::swap_and_bridge`,typeArguments:[a],arguments:[w(s,r.bridge),w(s,r.messenger),w(s,r.gasOracle),w(s,r.amount),w(s,r.recipient),ye(s,r.destinationChainId,"u8"),w(s,r.receiveToken),ye(s,r.nonce,"u256"),w(s,r.feeSuiCoin),w(s,r.feeTokenCoin)]})}var Za=Pe(Sr());var Da=Pe(Sr());K();function Pr(s,a,r){return s.moveCall({target:`${Da.PUBLISHED_AT}::cctp_bridge_interface::bridge`,typeArguments:[a],arguments:[w(s,r.cctpBridge),w(s,r.gasOracle),w(s,r.tokenMessengerMinterState),w(s,r.messageTransmitterState),w(s,r.treasury),w(s,r.denyList),w(s,r.amount),w(s,r.feeSuiCoin),w(s,r.feeTokenCoin),ye(s,r.destinationChainId,"u8"),w(s,r.recipient),w(s,r.recipientWalletAddress)]})}var $a=Pe(Cr());var Va=Pe(Cr());K();import{bcs as ze}from"@mysten/sui/bcs";import{fromHEX as os,toHEX as As}from"@mysten/sui/utils";import{bcs as ss}from"@mysten/sui/bcs";K();var Br=class s{__VectorClass=!0;static $typeName="vector";static $numTypeParams=1;static $isPhantom=[!1];$typeName="vector";$fullTypeName;$typeArgs;$isPhantom=[!1];elements;constructor(a,r){this.$fullTypeName=x(this.$typeName,...a),this.$typeArgs=a,this.elements=r}static reified(a){return{typeName:s.$typeName,fullTypeName:x(s.$typeName,C(a)),typeArgs:[C(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs(Dt(a)),fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),new:r=>new s([C(a)],r),kind:"VectorClassReified"}}static get r(){return s.reified}static get bcs(){return ss.vector}static fromFields(a,r){return s.reified(a).new(r.map(i=>k(a,i)))}static fromFieldsWithTypes(a,r){return s.reified(a).new(r.map(i=>I(a,i)))}static fromBcs(a,r){return s.fromFields(a,s.bcs(Dt(a)).parse(r))}toJSONField(){return this.elements.map(a=>ot(this.$typeArgs[0],a))}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,elements:this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new(r.map(i=>R(a,i)))}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a vector json object");return s.fromJSONField(a,r.elements)}};function Tt(s){return Br.r(s)}function Z(s){return typeof s=="string"?{phantomType:s,kind:"PhantomReified"}:{phantomType:s.fullTypeName,kind:"PhantomReified"}}var cs=ze.bytes(32).transform({input:s=>os(s),output:s=>As(s)});function Dt(s){switch(s){case"bool":return ze.bool();case"u8":return ze.u8();case"u16":return ze.u16();case"u32":return ze.u32();case"u64":return ze.u64();case"u128":return ze.u128();case"u256":return ze.u256();case"address":return cs;default:return s.bcs}}function C(s){switch(s){case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"bool":case"address":return s}switch(s.kind){case"PhantomReified":return s.phantomType;case"StructClassReified":return s.fullTypeName;case"VectorClassReified":return s.fullTypeName}throw new Error("unreachable")}function k(s,a){switch(s){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return`0x${a}`}if(s.kind==="VectorClassReified")return s.fromFields(a).elements;switch(s.typeName){case"0x1::string::String":case"0x1::ascii::String":return new TextDecoder().decode(Uint8Array.from(a.bytes)).toString();case"0x2::url::Url":return new TextDecoder().decode(Uint8Array.from(a.url.bytes)).toString();case"0x2::object::ID":return`0x${a.bytes}`;case"0x2::object::UID":return`0x${a.id.bytes}`;case"0x1::option::Option":return a.vec.length===0?null:s.fromFields(a).vec[0];default:return s.fromFields(a)}}function I(s,a){switch(s){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return a}if(s.kind==="VectorClassReified")return s.fromFieldsWithTypes(a).elements;switch(s.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":return a;case"0x2::object::UID":return a.id;case"0x2::balance::Balance":return s.fromFields({value:BigInt(a)});case"0x1::option::Option":return a===null?null:I(s.reifiedTypeArgs[0],a);default:return s.fromFieldsWithTypes(a)}}function Re(s,a,r){if(r.length!==a.length)throw new Error(`provided item has mismatching number of type argments ${s} (expected ${r.length}, got ${a.length}))`);for(let i=0;i<a.length;i++)if(P(a[i])!==P(C(r[i])))throw new Error(`provided item has mismatching type argments ${s} (expected ${C(r[i])}, got ${a[i]}))`)}function Ee(s,a){let{typeArgs:r}=ee(s.type);Re(s.type,r,a)}function ot(s,a){let{typeName:r,typeArgs:i}=ee(s);switch(r){case"bool":return a;case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return a.toString();case"address":case"signer":return a;case"vector":return a.map(o=>ot(i[0],o));case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return a;case"0x1::option::Option":return a===null?null:ot(i[0],a);default:return a.toJSONField()}}function R(s,a){switch(s){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return a}if(s.kind==="VectorClassReified")return s.fromJSONField(a).elements;switch(s.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return a;case"0x1::option::Option":return a===null?null:R(s.reifiedTypeArgs[0],a);default:return s.fromJSONField(a)}}K();var hn="0x1";import{bcs as ku}from"@mysten/sui/bcs";import{fromB64 as xu}from"@mysten/sui/utils";K();import{bcs as Ir}from"@mysten/sui/bcs";import{fromB64 as ms}from"@mysten/sui/utils";function Tn(s){return s=P(s),s===`${hn}::string::String`}var bn=class s{__StructClass=!0;static get $typeName(){return`${hn}::string::String`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;bytes;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:x(s.$typeName),typeArgs:[],isPhantom:s.$isPhantom,reifiedTypeArgs:[],fromFields:a=>s.fromFields(a),fromFieldsWithTypes:a=>s.fromFieldsWithTypes(a),fromBcs:a=>s.fromBcs(a),bcs:s.bcs,fromJSONField:a=>s.fromJSONField(a),fromJSON:a=>s.fromJSON(a),fromSuiParsedData:a=>s.fromSuiParsedData(a),fromSuiObjectData:a=>s.fromSuiObjectData(a),fetch:async(a,r)=>s.fetch(a,r),new:a=>new s([],a),kind:"StructClassReified"}}static get r(){return s.reified()}static phantom(){return Z(s.reified())}static get p(){return s.phantom()}static get bcs(){return Ir.struct("String",{bytes:Ir.vector(Ir.u8())})}static fromFields(a){return s.reified().new({bytes:k(Tt("u8"),a.bytes)})}static fromFieldsWithTypes(a){if(!Tn(a.type))throw new Error("not a String type");return s.reified().new({bytes:I(Tt("u8"),a.fields.bytes)})}static fromBcs(a){return s.fromFields(s.bcs.parse(a))}toJSONField(){return{bytes:ot("vector<u8>",this.bytes)}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return s.reified().new({bytes:R(Tt("u8"),a.bytes)})}static fromJSON(a){if(a.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(a)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!Tn(a.type))throw new Error(`object at ${a.fields.id} is not a String object`);return s.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!Tn(a.bcs.type))throw new Error("object at is not a String object");return s.fromBcs(ms(a.bcs.bcsBytes))}if(a.content)return s.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r){let i=await a.getObject({id:r,options:{showBcs:!0}});if(i.error)throw new Error(`error fetching String object at id ${r}: ${i.error.code}`);if(i.data?.bcs?.dataType!=="moveObject"||!Tn(i.data.bcs.type))throw new Error(`object at id ${r} is not a String object`);return s.fromSuiObjectData(i.data)}};K();K();var qe="0x2";import{bcs as Rr}from"@mysten/sui/bcs";import{fromB64 as Ea,fromHEX as us,toHEX as ls}from"@mysten/sui/utils";function Sn(s){return s=P(s),s===`${qe}::object::ID`}var At=class s{__StructClass=!0;static get $typeName(){return`${qe}::object::ID`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;bytes;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:x(s.$typeName),typeArgs:[],isPhantom:s.$isPhantom,reifiedTypeArgs:[],fromFields:a=>s.fromFields(a),fromFieldsWithTypes:a=>s.fromFieldsWithTypes(a),fromBcs:a=>s.fromBcs(a),bcs:s.bcs,fromJSONField:a=>s.fromJSONField(a),fromJSON:a=>s.fromJSON(a),fromSuiParsedData:a=>s.fromSuiParsedData(a),fromSuiObjectData:a=>s.fromSuiObjectData(a),fetch:async(a,r)=>s.fetch(a,r),new:a=>new s([],a),kind:"StructClassReified"}}static get r(){return s.reified()}static phantom(){return Z(s.reified())}static get p(){return s.phantom()}static get bcs(){return Rr.struct("ID",{bytes:Rr.bytes(32).transform({input:a=>us(a),output:a=>ls(a)})})}static fromFields(a){return s.reified().new({bytes:k("address",a.bytes)})}static fromFieldsWithTypes(a){if(!Sn(a.type))throw new Error("not a ID type");return s.reified().new({bytes:I("address",a.fields.bytes)})}static fromBcs(a){return s.fromFields(s.bcs.parse(a))}toJSONField(){return{bytes:this.bytes}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return s.reified().new({bytes:R("address",a.bytes)})}static fromJSON(a){if(a.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(a)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!Sn(a.type))throw new Error(`object at ${a.fields.id} is not a ID object`);return s.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!Sn(a.bcs.type))throw new Error("object at is not a ID object");return s.fromBcs(Ea(a.bcs.bcsBytes))}if(a.content)return s.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r){let i=await a.getObject({id:r,options:{showBcs:!0}});if(i.error)throw new Error(`error fetching ID object at id ${r}: ${i.error.code}`);if(i.data?.bcs?.dataType!=="moveObject"||!Sn(i.data.bcs.type))throw new Error(`object at id ${r} is not a ID object`);return s.fromSuiObjectData(i.data)}};function Pn(s){return s=P(s),s===`${qe}::object::UID`}var he=class s{__StructClass=!0;static get $typeName(){return`${qe}::object::UID`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.id=r.id}static reified(){return{typeName:s.$typeName,fullTypeName:x(s.$typeName),typeArgs:[],isPhantom:s.$isPhantom,reifiedTypeArgs:[],fromFields:a=>s.fromFields(a),fromFieldsWithTypes:a=>s.fromFieldsWithTypes(a),fromBcs:a=>s.fromBcs(a),bcs:s.bcs,fromJSONField:a=>s.fromJSONField(a),fromJSON:a=>s.fromJSON(a),fromSuiParsedData:a=>s.fromSuiParsedData(a),fromSuiObjectData:a=>s.fromSuiObjectData(a),fetch:async(a,r)=>s.fetch(a,r),new:a=>new s([],a),kind:"StructClassReified"}}static get r(){return s.reified()}static phantom(){return Z(s.reified())}static get p(){return s.phantom()}static get bcs(){return Rr.struct("UID",{id:At.bcs})}static fromFields(a){return s.reified().new({id:k(At.reified(),a.id)})}static fromFieldsWithTypes(a){if(!Pn(a.type))throw new Error("not a UID type");return s.reified().new({id:I(At.reified(),a.fields.id)})}static fromBcs(a){return s.fromFields(s.bcs.parse(a))}toJSONField(){return{id:this.id}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return s.reified().new({id:R(At.reified(),a.id)})}static fromJSON(a){if(a.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(a)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!Pn(a.type))throw new Error(`object at ${a.fields.id} is not a UID object`);return s.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!Pn(a.bcs.type))throw new Error("object at is not a UID object");return s.fromBcs(Ea(a.bcs.bcsBytes))}if(a.content)return s.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r){let i=await a.getObject({id:r,options:{showBcs:!0}});if(i.error)throw new Error(`error fetching UID object at id ${r}: ${i.error.code}`);if(i.data?.bcs?.dataType!=="moveObject"||!Pn(i.data.bcs.type))throw new Error(`object at id ${r} is not a UID object`);return s.fromSuiObjectData(i.data)}};function ve(s,a){return s.moveCall({target:`${Va.PUBLISHED_AT}::bytes32::from_hex`,arguments:[ye(s,a,`${bn.$typeName}`)]})}async function Ve(s,a,r=[]){let i=await s(a),o=r.concat(i.data);return i.hasNextPage&&i.nextCursor?Ve(s,i.nextCursor,o):o}var Cn=class extends le{constructor(r,i){super();this.nodeRpcUrlsConfig=r;this.api=i;this.client=new ds({url:r.getNodeRpcUrl(this.chainSymbol)})}chainType="SUI";chainSymbol="SUI";client;send(){throw new h("Method send not implemented.")}async buildRawTransactionSwap(r){let i=r.sourceToken.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");(0,kr.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin);let o=Ue(this.chainType,r);return await this.buildRawTransactionSwapFromParams(o,i)}async buildRawTransactionSwapFromParams(r,i){let{amount:o,fromAccountAddress:A,fromTokenAddress:c,toTokenAddress:m,minimumReceiveAmount:u}=r,l=new wn;l.setSender(A);let d={bridge:i.bridgeObjectAddress,coin:$({balance:BigInt(o),type:c}),receiveAmountMin:BigInt(u)},p=ka(l,[c,m],d),g=await Ve(y=>this.client.getCoins({owner:r.toAccountAddress,coinType:m,cursor:y}));return g.length===0||!g[0]?l.transferObjects([p],r.toAccountAddress):l.mergeCoins(g[0].coinObjectId,[p]),await l.toJSON({client:this.client})}async buildRawTransactionSend(r){let i=await Be(this.chainType,r,this.api),{messenger:o}=i,A=r.sourceToken.suiAddresses;if(!A)throw new h("SUI token must contain 'suiAddresses'");switch((0,kr.setAddress)(A.bridgeAddress,A.bridgeAddressOrigin),(0,$a.setAddress)(A.utilsAddress),o){case 1:return this.buildRawTransactionAllbridgeSend(i,A);case 2:return this.buildRawTransactionWormholeSend(i,A);case 3:case 4:return this.buildRawTransactionCctpSend(r,i,A)}}async buildRawTransactionAllbridgeSend(r,i){let{amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:g}=r,y=d;g&&(y=vr(y).plus(g).toFixed());let f=new wn;if(f.setSender(A),p==="stablecoin"){let S=BigInt(o)-BigInt(y),T={bridge:i.bridgeObjectAddress,messenger:i.allbridgeMessengerObjectAddress,amount:$({balance:S,type:c}),destinationChainId:m,nonce:Ge(),recipient:ve(f,Ce(u)),receiveToken:ve(f,Ce(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(y),type:c}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};Tr(f,c,T)}else{let S=y==="0"?$({balance:BigInt(y),useGasCoin:!1}):$({balance:BigInt(y)}),T={bridge:i.bridgeObjectAddress,messenger:i.allbridgeMessengerObjectAddress,amount:$({balance:BigInt(o),type:c}),destinationChainId:m,nonce:Ge(),recipient:ve(f,Ce(u)),receiveToken:ve(f,Ce(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:c}),feeSuiCoin:S};Tr(f,c,T)}return await f.toJSON({client:this.client})}async buildRawTransactionWormholeSend(r,i){let{amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:g}=r,y=d;g&&(y=vr(y).plus(g).toFixed());let f=new wn;if(f.setSender(A),p==="stablecoin"){let S=BigInt(o)-BigInt(y),T={bridge:i.bridgeObjectAddress,messenger:i.wormholeMessengerObjectAddress,wormholeState:i.wormholeStateObjectAddress,theClock:ja,amount:$({balance:S,type:c}),destinationChainId:m,nonce:Ge(),recipient:ve(f,Ce(u)),receiveToken:ve(f,Ce(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(y),type:c}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};hr(f,c,T)}else{let S=y==="0"?$({balance:BigInt(y),useGasCoin:!1}):$({balance:BigInt(y)}),T={bridge:i.bridgeObjectAddress,messenger:i.wormholeMessengerObjectAddress,wormholeState:i.wormholeStateObjectAddress,theClock:ja,amount:$({balance:BigInt(o),type:c}),destinationChainId:m,nonce:Ge(),recipient:ve(f,Ce(u)),receiveToken:ve(f,Ce(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:c}),feeSuiCoin:S};hr(f,c,T)}return await f.toJSON({client:this.client})}async buildRawTransactionCctpSend(r,i,o){let{amount:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:g}=i;(0,Za.setAddress)(o.cctpAddress,o.cctpAddressOrigin);let y=d;g&&(y=vr(y).plus(g).toFixed());let f=new wn;f.setSender(c);let S=ve(f,Ce(l)),T;if(r.destinationToken.chainType==="SOLANA"){let B=await mn(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));T=ve(f,Ce(B))}else T=S;if(p==="stablecoin"){let B=BigInt(A)-BigInt(y),v={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:$({balance:B,type:m}),destinationChainId:u,recipient:T,recipientWalletAddress:S,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(y),type:m}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};Pr(f,m,v)}else{let B=y==="0"?$({balance:BigInt(y),useGasCoin:!1}):$({balance:BigInt(y)}),v={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:$({balance:BigInt(A),type:m}),destinationChainId:u,recipient:T,recipientWalletAddress:S,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:m}),feeSuiCoin:B};Pr(f,m,v)}return await f.toJSON({client:this.client})}};import{Big as fs}from"big.js";import ps from"bn.js";function Bn(s){return"0x"+new ps(s).toString("hex")}function _a(s){return new Promise(a=>setTimeout(()=>a(),s))}async function In(s,a){let r=await s.trx.sign(a);if(!r.signature)throw new lt("Transaction was not signed properly");let o=(await s.trx.sendRawTransaction(r)).transaction.txID;return await gs(s,o),{txId:o}}async function gs(s,a,r=1e4){let i=Date.now();for(;;){if(Date.now()-i>r)throw new It("Transaction not found");let o=await s.trx.getUnconfirmedTransactionInfo(a);if(!o?.receipt){await _a(2e3);continue}if(o.receipt.result==="SUCCESS")return o;throw new It(`Transaction status is ${o.receipt.result}`)}}var Gt=class extends le{constructor(r,i){super();this.tronWeb=r;this.api=i}chainType="TRX";async send(r){let i=await Be(this.chainType,r,this.api),o=await this.buildRawTransactionSendFromParams(i);return await In(this.tronWeb,o)}async buildRawTransactionSwap(r){let i=Ue(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=r,d=[{type:"uint256",value:i},{type:"bytes32",value:c},{type:"bytes32",value:u},{type:"address",value:m},{type:"uint256",value:l}];return this.buildRawTransaction(o,"swap(uint256,bytes32,bytes32,address,uint256)",d,"0",A)}async buildRawTransactionSend(r){let i=await Be(this.chainType,r,this.api);return this.buildRawTransactionSendFromParams(i)}async buildRawTransactionSendFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,messenger:d,fee:p,gasFeePaymentMethod:g,extraGas:y}=r,f=p;y&&(f=fs(f).plus(y).toFixed());let S=Ge().toString(),T,B,v;return d==3||d==4?(g==="stablecoin"?(T=[{type:"uint256",value:i},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"uint256",value:f}],B="0"):(T=[{type:"uint256",value:i},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"uint256",value:0}],B=f),v="bridge(uint256,bytes32,uint256,uint256)"):(g==="stablecoin"?(T=[{type:"bytes32",value:c},{type:"uint256",value:i},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"bytes32",value:l},{type:"uint256",value:S},{type:"uint8",value:d},{type:"uint256",value:f}],B="0"):(T=[{type:"bytes32",value:c},{type:"uint256",value:i},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"bytes32",value:l},{type:"uint256",value:S},{type:"uint8",value:d},{type:"uint256",value:0}],B=f),v="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)"),this.buildRawTransaction(o,v,T,B,A)}async buildRawTransaction(r,i,o,A,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+A},o,c);if(!m?.result?.result)throw new h("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var Rn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new un(a,r,i,o)}rawTxBuilder;async getAllowance(a,r){let i,o;r?(i=a,o=r):o=a;let A=Ot(o.token,o.messenger);return await this.tokenService.getAllowance({...o,spender:A},i)}async checkAllowance(a,r){let i,o;r?(i=a,o=r):o=a;let A=Ot(o.token,o.messenger);return this.tokenService.checkAllowance({...o,spender:A},i)}async approve(a,r){let i=Ot(r.token,r.messenger);return this.tokenService.approve(a,{...r,spender:i})}async send(a,r){return U(r.amount),E("amount",r.amount,r.sourceToken.decimals),ln(r.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).send(r)}};function Ot(s,a){if(a&&a==3){if(s.cctpAddress)return s.cctpAddress;throw new ne("Such route does not support CCTP protocol")}else if(a&&a==4){if(s.cctpV2Address)return s.cctpV2Address;throw new ne("Such route does not support CCTP V2 protocol")}else return s.bridgeAddress}function ln(s,a,r,i,o){switch(N.getChainProperty(s).chainType){case"EVM":{if(o)return new Mt(o,a,r);{let A=r.getNodeRpcUrl(s);return new Mt(new hs(A),a,r)}}case"TRX":{if(o)return new Gt(o,a);{let A=r.getNodeRpcUrl(s);return new Gt(new ys({fullHost:A,solidityNode:A,eventServer:A}),a)}}case"SOLANA":return new fn(r.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:i.wormholeMessengerProgramId,solanaLookUpTable:i.solanaLookUpTable,cctpParams:i.cctpParams,jupiterParams:{jupiterUrl:i.jupiterUrl,jupiterApiKeyHeader:i.jupiterApiKeyHeader,jupiterMaxAccounts:i.jupiterMaxAccounts}},a);case"SRB":return new yn(r,i,a);case"SUI":return new Cn(r,a)}}import{Big as Ds}from"big.js";import Gs from"timed-cache";import{TronWeb as Us}from"tronweb";import{FMT_BYTES as Es,FMT_NUMBER as Vs,Web3 as js}from"web3";import{Big as Xe}from"big.js";function Ja(s,a,r,i,o){let A=D(s,3),c=Xe(A),m=Xe(r),u=Xe(i).plus(o),l,d;if(m.eq(0)||u.eq(0)){let g=c.div(2);l=Xe(i).plus(g),d=Xe(o).plus(g)}else l=Xe(i).plus(c.mul(i).div(u)),d=Xe(o).plus(c.mul(o).div(u));return Xe(_r(a,l.toFixed(),d.toFixed())).minus(m).toFixed()}function La(s){let a=D(s,3);return Xe(a).round().toFixed()}import{Web3 as et}from"web3";var Ts={abi:[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Ut=Ts;var ie=class{lpAmount;rewardDebt;constructor(a){this.lpAmount=a.lpAmount,this.rewardDebt=a.rewardDebt}get userLiquidity(){return F(this.lpAmount,3).toFixed()}earned(a,r){let i=Zr(this.lpAmount,this.rewardDebt,a.accRewardPerShareP,a.p);return r?F(i,r).toFixed():i}};var de=class{};var Et=class extends de{constructor(r,i){super();this.web3=r;this.api=i}chainType="EVM";P=52;async getUserBalanceInfo(r,i){let o;try{o=await sn(this.getUserBalanceInfoByBatch(r,i),`Cannot get UserBalanceInfo for ${i.name} on ${i.chainSymbol}`,5e3)}catch{o=await sr(()=>this.getUserBalanceInfoPerProperty(r,i),`Cannot get UserBalanceInfo for ${i.name} on ${i.chainSymbol}`,5,2e3)}return o}async getPoolInfoFromChain(r){let i;try{i=await sn(this.getPoolInfoByBatch(r),`Cannot get PoolInfo for ${r.name} on ${r.chainSymbol}`,5e3)}catch{i=await sr(()=>this.getPoolInfoPerProperty(r),`Cannot get PoolInfo for ${r.name} on ${r.chainSymbol}`,5,2e3)}return i}async getUserBalanceInfoByBatch(r,i){let o=new this.web3.eth.BatchRequest,A=this.getPoolContract(i.poolAddress),c=A.methods.userRewardDebt(r).encodeABI(),m=A.methods.balanceOf(r).encodeABI();o.add({method:"eth_call",params:[{to:i.poolAddress,data:c},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:m},"latest"]});let[u,l]=await o.execute();if(u&&l&&!u.error&&!l.error)return new ie({lpAmount:et.utils.toBigInt(l.result).toString(),rewardDebt:et.utils.toBigInt(u.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(r,i){let o=(await this.getPoolContract(i.poolAddress).methods.userRewardDebt(r).call()).toString(),A=(await this.getPoolContract(i.poolAddress).methods.balanceOf(r).call()).toString();return new ie({lpAmount:A,rewardDebt:o})}async getPoolInfoByBatch(r){let i=new this.web3.eth.BatchRequest,o=this.getPoolContract(r.poolAddress),A=o.methods.a().encodeABI(),c=o.methods.d().encodeABI(),m=o.methods.tokenBalance().encodeABI(),u=o.methods.vUsdBalance().encodeABI(),l=o.methods.totalSupply().encodeABI(),d=o.methods.accRewardPerShareP().encodeABI();i.add({method:"eth_call",params:[{to:r.poolAddress,data:A},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:c},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:m},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:u},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:l},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:d},"latest"]});let[p,g,y,f,S,T]=await i.execute();if(p&&g&&y&&f&&S&&T&&!p.error&&!g.error&&!y.error&&!f.error&&!S.error&&!T.error){let B=et.utils.toBigInt(y.result).toString(),v=et.utils.toBigInt(f.result).toString(),M=re({tokenBalance:B,vUsdBalance:v});return{aValue:et.utils.toBigInt(p.result).toString(),dValue:et.utils.toBigInt(g.result).toString(),tokenBalance:B,vUsdBalance:v,totalLpAmount:et.utils.toBigInt(S.result).toString(),accRewardPerShareP:et.utils.toBigInt(T.result).toString(),p:this.P,imbalance:M}}throw new Error("Batched failed")}async getPoolInfoPerProperty(r){let i=this.getPoolContract(r.poolAddress),o=(await i.methods.a().call()).toString(),A=(await i.methods.d().call()).toString(),c=(await i.methods.tokenBalance().call()).toString(),m=(await i.methods.vUsdBalance().call()).toString(),u=(await i.methods.totalSupply().call()).toString(),l=(await i.methods.accRewardPerShareP().call()).toString(),d=re({tokenBalance:c,vUsdBalance:m});return{aValue:o,dValue:A,tokenBalance:c,vUsdBalance:m,totalLpAmount:u,accRewardPerShareP:l,p:this.P,imbalance:d}}async buildRawTransactionDeposit(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.deposit(r.amount).encodeABI()})}async buildRawTransactionWithdraw(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.withdraw(r.amount).encodeABI()})}async buildRawTransactionClaimRewards(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(r){return{from:r.accountAddress,to:r.token.poolAddress,value:"0"}}getPoolContract(r){return new this.web3.eth.Contract(Ut.abi,r)}};var vn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o}async approve(a,r){if(r){let i=a,o=r;return this.tokenService.buildRawTransactionApprove({...o,spender:o.token.poolAddress},i)}else{let i=a;return this.tokenService.buildRawTransactionApprove({...i,spender:i.token.poolAddress})}}async deposit(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),a.amount=D(a.amount,a.token.decimals).toFixed(),bt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionDeposit(a)}async withdraw(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),a.amount=D(a.amount,3).toFixed(),bt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionWithdraw(a)}async claimRewards(a,r){return bt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionClaimRewards(a)}};import{AnchorProvider as bs,BN as Xa,Program as Ss,Spl as Ps,web3 as ws}from"@project-serum/anchor";import{Connection as Cs,PublicKey as tt}from"@solana/web3.js";var kn=class extends de{constructor(r,i){super();this.solanaRpcUrl=r;this.api=i}chainType="SOLANA";P=48;async getUserBalanceInfo(r,i){let o=this.buildAnchorProvider(r),A=this.getBridge(i.bridgeAddress,o),c=new tt(i.poolAddress),m=await A.account.pool.fetch(c);try{let u=await cr(new tt(r),m.mint,A.programId),{lpAmount:l,rewardDebt:d}=await A.account.userDeposit.fetch(u);return new ie({lpAmount:l.toString(),rewardDebt:d.toString()})}catch{return new ie({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(r){let i=this.buildAnchorProvider(r.bridgeAddress),o=await this.getBridge(r.bridgeAddress,i).account.pool.fetch(r.poolAddress),A=o.vUsdBalance.toString(),c=o.tokenBalance.toString(),m=re({tokenBalance:c,vUsdBalance:A});return{dValue:o.d.toString(),aValue:o.a.toString(),totalLpAmount:o.totalLpAmount.toString(),vUsdBalance:A,tokenBalance:c,accRewardPerShareP:o.accRewardPerShareP.toString(),p:this.P,imbalance:m}}async buildRawTransactionDeposit(r){let{bridge:i,accounts:o,preInstructions:A}=await this.prepareDataForTransaction(r),c=await i.methods.deposit(new Xa(r.amount)).accounts(o).preInstructions(A).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new tt(r.accountAddress),await yt(c,r.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionWithdraw(r){let{bridge:i,accounts:o,preInstructions:A}=await this.prepareDataForTransaction(r),c=await i.methods.withdraw(new Xa(r.amount)).accounts(o).preInstructions(A).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new tt(r.accountAddress),await yt(c,r.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionClaimRewards(r){let{bridge:i,accounts:o,preInstructions:A}=await this.prepareDataForTransaction(r),c=await i.methods.claimRewards().accounts(o).preInstructions(A).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new tt(r.accountAddress),await yt(c,r.txFeeParams,this.solanaRpcUrl),c}async prepareDataForTransaction(r){let i=this.buildAnchorProvider(r.accountAddress),o=this.getBridge(r.token.bridgeAddress,i),{accounts:A,preInstructions:c}=await this._getLPTransactionData(o,r.token.poolAddress,r.accountAddress,i);return{bridge:o,accounts:A,preInstructions:c}}getBridge(r,i){return new Ss(Nt,r,i)}buildAnchorProvider(r){let i=new Cs(this.solanaRpcUrl,"confirmed"),o=new tt(r);return new bs(i,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(r,i,o,A){let c=new tt(o),m=await Ye(r.programId),u=await pt(r.programId),l=new tt(i),p=(await r.account.pool.fetch(l)).mint,g=await we(c,p),y=await gt(p,r.programId),f=await cr(c,p,r.programId),S=[ws.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await ft(g,A)}catch{let M=await Ps.associatedToken(A).methods.create().accounts({mint:p,owner:c,associatedAccount:g}).instruction();S.push(M)}try{await r.account.userDeposit.fetch(f)}catch{let v=await r.methods.initDepositAccount().accounts({mint:p,user:c,userDeposit:f}).instruction();S.push(v)}return{accounts:{mint:p,user:c,config:m,pool:l,bridgeAuthority:u,userDeposit:f,userToken:g,bridgeToken:y},preInstructions:S}}};import{contract as Ib}from"@stellar/stellar-sdk";import{contract as t}from"@stellar/stellar-sdk";var Bs=t.Spec,Is=t.Client;var Fn=class extends Is{constructor(r){super(new Bs(["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"]),r);this.options=r}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}};import{contract as rp,rpc as Rs}from"@stellar/stellar-sdk";var Ya=Rs.Api;function St(s){let{simulation:a,options:r}=s;if(!a)throw new Error("Soroban assembled transaction does not have simulation");if(Ya.isSimulationSuccess(a))return a.result==null?void 0:r.parseResultXdr(a.result.retval);throw new Error(a.error)}function Pt(s){let{simulation:a}=s;if(!a)throw new Error("Soroban assembled transaction does not have simulation");return Ya.isSimulationError(a)}var xn=class extends de{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";P=48;async getUserBalanceInfo(r,i){let A=await this.getContract(i.poolAddress).get_user_deposit({user:r});if(Pt(A))throw new h;let c=St(A);if(!c)throw new h;let m=c.unwrap();return new ie({lpAmount:m.lp_amount.toString(),rewardDebt:m.reward_debt.toString()})}async getPoolInfoFromChain(r){let o=await this.getContract(r.poolAddress).get_pool();if(Pt(o))throw new h;let A=St(o);if(!A)throw new h;let c=A.unwrap();return{aValue:c.a.toString(),accRewardPerShareP:c.acc_reward_per_share_p.toString(),dValue:c.d.toString(),tokenBalance:c.token_balance.toString(),p:this.P,totalLpAmount:c.total_lp_amount.toString(),vUsdBalance:c.v_usd_balance.toString(),imbalance:re({tokenBalance:c.token_balance.toString(),vUsdBalance:c.v_usd_balance.toString()})}}async buildRawTransactionDeposit(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).deposit({sender:r.accountAddress,amount:BigInt(r.amount)})).toXDR()}async buildRawTransactionWithdraw(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).withdraw({sender:r.accountAddress,amount_lp:BigInt(r.amount)})).toXDR()}async buildRawTransactionClaimRewards(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).claim_rewards({sender:r.accountAddress})).toXDR()}getContract(r,i){let o={publicKey:i,contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new Fn(o)}};import{SuiClient as Ns}from"@mysten/sui/client";import{Transaction as Vn}from"@mysten/sui/transactions";var Ct=Pe(Qe());K();K();import{bcs as Ka}from"@mysten/sui/bcs";import{fromB64 as vs}from"@mysten/sui/utils";function Mn(s){return s=P(s),s.startsWith(`${qe}::balance::Balance<`)}var te=class s{__StructClass=!0;static get $typeName(){return`${qe}::balance::Balance`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;value;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.value=r.value}static reified(a){return{typeName:s.$typeName,fullTypeName:x(s.$typeName,C(a)),typeArgs:[C(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([C(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Z(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Ka.struct("Balance",{value:Ka.u64()})}static fromFields(a,r){return s.reified(a).new({value:k("u64",r.value)})}static fromFieldsWithTypes(a,r){if(!Mn(r.type))throw new Error("not a Balance type");return Ee(r,[a]),s.reified(a).new({value:I("u64",r.fields.value)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{value:this.value.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({value:R("u64",r.value)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return Re(x(s.$typeName,C(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Mn(r.type))throw new Error(`object at ${r.fields.id} is not a Balance object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Mn(r.bcs.type))throw new Error("object at is not a Balance object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(C(a));if(o!==P(C(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,vs(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching Balance object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Mn(o.data.bcs.type))throw new Error(`object at id ${i} is not a Balance object`);return s.fromSuiObjectData(r,o.data)}};var Mr=Pe(Qe());K();var Fr=Pe(Qe());import{bcs as On}from"@mysten/sui/bcs";import{fromB64 as ks}from"@mysten/sui/utils";function Nn(s){return s=P(s),s.startsWith(`${Fr.PKG_V1}::pool_rewards::PoolRewards<`)}var ct=class s{__StructClass=!0;static get $typeName(){return`${Fr.PKG_V1}::pool_rewards::PoolRewards`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;accRewardPerShareP;adminFeeShareBp;adminFee;rewards;lpSupply;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.accRewardPerShareP=r.accRewardPerShareP,this.adminFeeShareBp=r.adminFeeShareBp,this.adminFee=r.adminFee,this.rewards=r.rewards,this.lpSupply=r.lpSupply}static reified(a){return{typeName:s.$typeName,fullTypeName:x(s.$typeName,C(a)),typeArgs:[C(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([C(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Z(s.reified(a))}static get p(){return s.phantom}static get bcs(){return On.struct("PoolRewards",{acc_reward_per_share_p:On.u128(),admin_fee_share_bp:On.u64(),admin_fee:te.bcs,rewards:te.bcs,lp_supply:On.u64()})}static fromFields(a,r){return s.reified(a).new({accRewardPerShareP:k("u128",r.acc_reward_per_share_p),adminFeeShareBp:k("u64",r.admin_fee_share_bp),adminFee:k(te.reified(a),r.admin_fee),rewards:k(te.reified(a),r.rewards),lpSupply:k("u64",r.lp_supply)})}static fromFieldsWithTypes(a,r){if(!Nn(r.type))throw new Error("not a PoolRewards type");return Ee(r,[a]),s.reified(a).new({accRewardPerShareP:I("u128",r.fields.acc_reward_per_share_p),adminFeeShareBp:I("u64",r.fields.admin_fee_share_bp),adminFee:I(te.reified(a),r.fields.admin_fee),rewards:I(te.reified(a),r.fields.rewards),lpSupply:I("u64",r.fields.lp_supply)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{accRewardPerShareP:this.accRewardPerShareP.toString(),adminFeeShareBp:this.adminFeeShareBp.toString(),adminFee:this.adminFee.toJSONField(),rewards:this.rewards.toJSONField(),lpSupply:this.lpSupply.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({accRewardPerShareP:R("u128",r.accRewardPerShareP),adminFeeShareBp:R("u64",r.adminFeeShareBp),adminFee:R(te.reified(a),r.adminFee),rewards:R(te.reified(a),r.rewards),lpSupply:R("u64",r.lpSupply)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return Re(x(s.$typeName,C(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Nn(r.type))throw new Error(`object at ${r.fields.id} is not a PoolRewards object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Nn(r.bcs.type))throw new Error("object at is not a PoolRewards object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(C(a));if(o!==P(C(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,ks(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching PoolRewards object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Nn(o.data.bcs.type))throw new Error(`object at id ${i} is not a PoolRewards object`);return s.fromSuiObjectData(r,o.data)}};K();var xr=Pe(Qe());import{bcs as wt}from"@mysten/sui/bcs";import{fromB64 as Fs}from"@mysten/sui/utils";function Wn(s){return s=P(s),s.startsWith(`${xr.PKG_V1}::pool_state::PoolState<`)}var mt=class s{__StructClass=!0;static get $typeName(){return`${xr.PKG_V1}::pool_state::PoolState`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;tokenBalance;vusdBalance;d;a;balanceRatioMinBp;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.tokenBalance=r.tokenBalance,this.vusdBalance=r.vusdBalance,this.d=r.d,this.a=r.a,this.balanceRatioMinBp=r.balanceRatioMinBp}static reified(a){return{typeName:s.$typeName,fullTypeName:x(s.$typeName,C(a)),typeArgs:[C(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([C(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Z(s.reified(a))}static get p(){return s.phantom}static get bcs(){return wt.struct("PoolState",{token_balance:wt.u64(),vusd_balance:wt.u64(),d:wt.u64(),a:wt.u64(),balance_ratio_min_bp:wt.u64()})}static fromFields(a,r){return s.reified(a).new({tokenBalance:k("u64",r.token_balance),vusdBalance:k("u64",r.vusd_balance),d:k("u64",r.d),a:k("u64",r.a),balanceRatioMinBp:k("u64",r.balance_ratio_min_bp)})}static fromFieldsWithTypes(a,r){if(!Wn(r.type))throw new Error("not a PoolState type");return Ee(r,[a]),s.reified(a).new({tokenBalance:I("u64",r.fields.token_balance),vusdBalance:I("u64",r.fields.vusd_balance),d:I("u64",r.fields.d),a:I("u64",r.fields.a),balanceRatioMinBp:I("u64",r.fields.balance_ratio_min_bp)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{tokenBalance:this.tokenBalance.toString(),vusdBalance:this.vusdBalance.toString(),d:this.d.toString(),a:this.a.toString(),balanceRatioMinBp:this.balanceRatioMinBp.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({tokenBalance:R("u64",r.tokenBalance),vusdBalance:R("u64",r.vusdBalance),d:R("u64",r.d),a:R("u64",r.a),balanceRatioMinBp:R("u64",r.balanceRatioMinBp)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return Re(x(s.$typeName,C(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Wn(r.type))throw new Error(`object at ${r.fields.id} is not a PoolState object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Wn(r.bcs.type))throw new Error("object at is not a PoolState object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(C(a));if(o!==P(C(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,Fs(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching PoolState object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Wn(o.data.bcs.type))throw new Error(`object at id ${i} is not a PoolState object`);return s.fromSuiObjectData(r,o.data)}};import{bcs as Vt}from"@mysten/sui/bcs";import{fromB64 as xs}from"@mysten/sui/utils";function Dn(s){return s=P(s),s.startsWith(`${Mr.PKG_V1}::pool::Pool<`)}var Gn=class s{__StructClass=!0;static get $typeName(){return`${Mr.PKG_V1}::pool::Pool`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;state;rewards;feeShareBp;canDeposit;canWithdraw;decimals;balance;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.id=r.id,this.state=r.state,this.rewards=r.rewards,this.feeShareBp=r.feeShareBp,this.canDeposit=r.canDeposit,this.canWithdraw=r.canWithdraw,this.decimals=r.decimals,this.balance=r.balance}static reified(a){return{typeName:s.$typeName,fullTypeName:x(s.$typeName,C(a)),typeArgs:[C(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([C(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Z(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Vt.struct("Pool",{id:he.bcs,state:mt.bcs,rewards:ct.bcs,fee_share_bp:Vt.u64(),can_deposit:Vt.bool(),can_withdraw:Vt.bool(),decimals:Vt.u8(),balance:te.bcs})}static fromFields(a,r){return s.reified(a).new({id:k(he.reified(),r.id),state:k(mt.reified(a),r.state),rewards:k(ct.reified(a),r.rewards),feeShareBp:k("u64",r.fee_share_bp),canDeposit:k("bool",r.can_deposit),canWithdraw:k("bool",r.can_withdraw),decimals:k("u8",r.decimals),balance:k(te.reified(a),r.balance)})}static fromFieldsWithTypes(a,r){if(!Dn(r.type))throw new Error("not a Pool type");return Ee(r,[a]),s.reified(a).new({id:I(he.reified(),r.fields.id),state:I(mt.reified(a),r.fields.state),rewards:I(ct.reified(a),r.fields.rewards),feeShareBp:I("u64",r.fields.fee_share_bp),canDeposit:I("bool",r.fields.can_deposit),canWithdraw:I("bool",r.fields.can_withdraw),decimals:I("u8",r.fields.decimals),balance:I(te.reified(a),r.fields.balance)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{id:this.id,state:this.state.toJSONField(),rewards:this.rewards.toJSONField(),feeShareBp:this.feeShareBp.toString(),canDeposit:this.canDeposit,canWithdraw:this.canWithdraw,decimals:this.decimals,balance:this.balance.toJSONField()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({id:R(he.reified(),r.id),state:R(mt.reified(a),r.state),rewards:R(ct.reified(a),r.rewards),feeShareBp:R("u64",r.feeShareBp),canDeposit:R("bool",r.canDeposit),canWithdraw:R("bool",r.canWithdraw),decimals:R("u8",r.decimals),balance:R(te.reified(a),r.balance)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return Re(x(s.$typeName,C(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Dn(r.type))throw new Error(`object at ${r.fields.id} is not a Pool object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Dn(r.bcs.type))throw new Error("object at is not a Pool object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(C(a));if(o!==P(C(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,xs(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching Pool object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Dn(o.data.bcs.type))throw new Error(`object at id ${i} is not a Pool object`);return s.fromSuiObjectData(r,o.data)}};K();var Nr=Pe(Qe());import{bcs as Or}from"@mysten/sui/bcs";import{fromB64 as Ms}from"@mysten/sui/utils";function Un(s){return s=P(s),s.startsWith(`${Nr.PKG_V1}::user_deposit::UserDeposit<`)}var En=class s{__StructClass=!0;static get $typeName(){return`${Nr.PKG_V1}::user_deposit::UserDeposit`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;lpAmount;rewardDebt;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.id=r.id,this.lpAmount=r.lpAmount,this.rewardDebt=r.rewardDebt}static reified(a){return{typeName:s.$typeName,fullTypeName:x(s.$typeName,C(a)),typeArgs:[C(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([C(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Z(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Or.struct("UserDeposit",{id:he.bcs,lp_amount:Or.u64(),reward_debt:Or.u64()})}static fromFields(a,r){return s.reified(a).new({id:k(he.reified(),r.id),lpAmount:k("u64",r.lp_amount),rewardDebt:k("u64",r.reward_debt)})}static fromFieldsWithTypes(a,r){if(!Un(r.type))throw new Error("not a UserDeposit type");return Ee(r,[a]),s.reified(a).new({id:I(he.reified(),r.fields.id),lpAmount:I("u64",r.fields.lp_amount),rewardDebt:I("u64",r.fields.reward_debt)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{id:this.id,lpAmount:this.lpAmount.toString(),rewardDebt:this.rewardDebt.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({id:R(he.reified(),r.id),lpAmount:R("u64",r.lpAmount),rewardDebt:R("u64",r.rewardDebt)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return Re(x(s.$typeName,C(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Un(r.type))throw new Error(`object at ${r.fields.id} is not a UserDeposit object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Un(r.bcs.type))throw new Error("object at is not a UserDeposit object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(C(a));if(o!==P(C(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,Ms(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching UserDeposit object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Un(o.data.bcs.type))throw new Error(`object at id ${i} is not a UserDeposit object`);return s.fromSuiObjectData(r,o.data)}};function Qa(s,a,r){if(a.length===0||!a[0])return[];let i=a[0],o=s.reduce((m,u)=>m+BigInt(u),BigInt(0)),A=BigInt(i.balance),c=[];for(let m of a.slice(1)){if(A>o)return Ha(r,i,c,s);A+=BigInt(m.balance),c.push(m)}return A>=o?Ha(r,i,c,s):[]}function Ha(s,a,r,i){let o=i.map(A=>s.pure.u64(A));return r.length>0&&s.mergeCoins(a.coinObjectId,r.map(A=>A.coinObjectId)),s.splitCoins(a.coinObjectId,o)}var Os="0x0000000000000000000000000000000000000000000000000000000000000000";async function za(s,a,r){let i=await s.devInspectTransactionBlock({sender:Os,transactionBlock:a});if(i.effects.status.status!=="success")throw new Error(`inspectionResult failed. ${JSON.stringify(i,null,2)}`);let o=i.results?.pop()?.returnValues?.pop();if(!o)throw new Error(`Something with inspectionResult went wrong. ${JSON.stringify(i,null,2)}`);let[A,c]=o;return typeof r=="object"?r.fromBcs(Uint8Array.from(A)).toJSONField():Dt(r).parse(Uint8Array.from(A))}var jn=class extends de{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.client=new Ns({url:r})}chainType="SUI";client;async getUserBalanceInfo(r,i){if(!i.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=i.suiAddresses;if(!o)throw new h("SUI token must contain 'suiAddresses'");(0,Ct.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin);let c=(await this.fetchDeposits(r,i.originTokenAddress)).reduce((m,u)=>{if(u.data)return m.lpAmount+=BigInt(u.data.content.fields.lp_amount),m.rewardDebt+=BigInt(u.data.content.fields.reward_debt),m;throw new h("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new ie({lpAmount:c.lpAmount.toString(),rewardDebt:c.rewardDebt.toString()})}async fetchDeposits(r,i){return await Ve(o=>this.client.getOwnedObjects({owner:r,filter:{StructType:En.phantom(Z(i)).phantomType},options:{showContent:!0},cursor:o}))}async getPoolInfoFromChain(r){let i=r.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");if((0,Ct.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=48,A=new Vn;Oa(A,r.originTokenAddress,i.bridgeObjectAddress);let c=await za(this.client,A,Gn.reified(Z(r.originTokenAddress))),m=c.state.tokenBalance,u=c.state.vusdBalance,l=re({tokenBalance:m,vUsdBalance:u});return{dValue:c.state.d,aValue:c.state.a,totalLpAmount:c.rewards.lpSupply,vUsdBalance:u,tokenBalance:m,accRewardPerShareP:c.rewards.accRewardPerShareP,p:o,imbalance:l}}async buildRawTransactionDeposit(r){let i=r.token.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");if((0,Ct.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=await Ve(p=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:p}));if(o.length===0||!o[0])throw new Ze("No coins to deposit");let A=o[0],c=new Vn;c.setSender(r.accountAddress);let{depositObj:m,isNewDeposit:u}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,c),[l]=Qa([r.amount],o,c);if(!l)throw new Ze("No coins to deposit");if(!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let d=Fa(c,r.token.originTokenAddress,{bridge:i.bridgeObjectAddress,userDeposit:m,coin:l});return c.mergeCoins(A.coinObjectId,[d]),u&&c.transferObjects([m],r.accountAddress),await c.toJSON({client:this.client})}async getDepositObject(r,i,o){let A=await this.fetchDeposits(r,i);if(A.length===0||!A[0]){let c=Z(i).phantomType;return{depositObj:Na(o,c),isNewDeposit:!0}}else{if(A[0].data?.objectId)return{depositObj:A[0].data.objectId,isNewDeposit:!1};throw new h("Something went wrong while deposit")}}async buildRawTransactionWithdraw(r){let i=r.token.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");if((0,Ct.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=Z(r.token.originTokenAddress).phantomType,A=new Vn;A.setSender(r.accountAddress);let{depositObj:c,isNewDeposit:m}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,A);if(m)throw new Ze("No deposit found");let u=xa(A,o,{bridge:i.bridgeObjectAddress,userDeposit:c,amountLp:BigInt(r.amount)}),l=await Ve(d=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:d}));if(!u[0]||!u[1])throw new h("No rewards found");return l[0]?A.mergeCoins(l[0].coinObjectId,[u[0],u[1]]):(A.mergeCoins(u[0],[u[1]]),A.transferObjects([u[0]],r.accountAddress)),await A.toJSON({client:this.client})}async buildRawTransactionClaimRewards(r){let i=r.token.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");if((0,Ct.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=Z(r.token.originTokenAddress).phantomType,A=new Vn;A.setSender(r.accountAddress);let{depositObj:c,isNewDeposit:m}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,A);if(m)throw new Ze("No deposit found");let u=Ma(A,o,{bridge:i.bridgeObjectAddress,userDeposit:c}),l=await Ve(d=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:d}));return l[0]?A.mergeCoins(l[0].coinObjectId,[u]):A.transferObjects([u],r.accountAddress),await A.toJSON({client:this.client})}};import{Web3 as Zn}from"web3";import{encodeFunctionCall as Ws}from"web3-eth-abi";var jt=class extends de{constructor(r,i,o){super();this.tronWeb=r;this.api=i;this.tronJsonRpc=o}chainType="TRX";P=52;async getUserBalanceInfo(r,i){let o;if(this.tronJsonRpc)try{o=await this.getUserBalanceInfoByBatch(this.tronJsonRpc,r,i)}catch{o=await this.getUserBalanceInfoPerProperty(r,i)}else o=await this.getUserBalanceInfoPerProperty(r,i);return o}async getUserBalanceInfoByBatch(r,i,o){let A=xt(o.poolAddress),c=xt(i),m=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:A,data:this.getFunctionAbi("userRewardDebt",c)},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:A,data:this.getFunctionAbi("balanceOf",c)},"latest"]}],l=await(await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(m)})).json();if(Array.isArray(l)&&l.length===2){let d=p=>{let g=l.find(y=>y.id===p);if(!g||!g.result)throw new Error(`Missing or invalid result for id ${p}`);return Zn.utils.toBigInt(g.result).toString()};return new ie({lpAmount:Zn.utils.toBigInt(d(2)).toString(),rewardDebt:Zn.utils.toBigInt(d(1)).toString()})}throw new Error("Batched HTTP call failed")}async getUserBalanceInfoPerProperty(r,i){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(r);let o=this.getContract(i.poolAddress),A=(await o.methods.userRewardDebt(r).call()).toString(),c=(await o.methods.balanceOf(r).call()).toString();return new ie({lpAmount:c,rewardDebt:A})}async getPoolInfoFromChain(r){let i;if(this.tronJsonRpc)try{i=await this.getPoolInfoByBatch(this.tronJsonRpc,r)}catch{i=await this.getPoolInfoPerProperty(r)}else i=await this.getPoolInfoPerProperty(r);return i}async getPoolInfoByBatch(r,i){let o=xt(i.poolAddress),A=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("a")},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("d")},"latest"]},{jsonrpc:"2.0",id:3,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("tokenBalance")},"latest"]},{jsonrpc:"2.0",id:4,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("vUsdBalance")},"latest"]},{jsonrpc:"2.0",id:5,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("totalSupply")},"latest"]},{jsonrpc:"2.0",id:6,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("accRewardPerShareP")},"latest"]}],m=await(await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(A)})).json();if(Array.isArray(m)&&m.length===6){let u=g=>{let y=m.find(f=>f.id===g);if(!y||!y.result)throw new Error(`Missing or invalid result for id ${g}`);return Zn.utils.toBigInt(y.result).toString()},l=u(3),d=u(4),p=re({tokenBalance:l,vUsdBalance:d});return{aValue:u(1),dValue:u(2),tokenBalance:l,vUsdBalance:d,totalLpAmount:u(5),accRewardPerShareP:u(6),p:this.P,imbalance:p}}throw new Error("Batched pool info call failed")}async getPoolInfoPerProperty(r){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(r.poolAddress);let i=this.getContract(r.poolAddress),[o,A,c,m,u,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=c.toString(),p=m.toString(),g=re({tokenBalance:d,vUsdBalance:p});return{aValue:o.toString(),dValue:A.toString(),tokenBalance:d,vUsdBalance:p,totalLpAmount:u.toString(),accRewardPerShareP:l.toString(),p:this.P,imbalance:g}}buildRawTransactionDeposit(r){let{amount:i,accountAddress:o}=r,A=[{type:"uint256",value:i}];return this.buildRawTransaction(r.token.poolAddress,"deposit(uint256)",A,"0",o)}buildRawTransactionWithdraw(r){let{amount:i,accountAddress:o}=r,A=[{type:"uint256",value:i}];return this.buildRawTransaction(r.token.poolAddress,"withdraw(uint256)",A,"0",o)}buildRawTransactionClaimRewards(r){let{accountAddress:i}=r,o=[];return this.buildRawTransaction(r.token.poolAddress,"claimRewards()",o,"0",i)}async buildRawTransaction(r,i,o,A,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+A},o,c);if(!m?.result?.result)throw new h("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}getContract(r){return this.tronWeb.contract(Ut.abi,r)}getFunctionAbi(r,...i){let o=Ut.abi.find(A=>A.type==="function"&&"name"in A&&A.name===r);if(!o)throw new Error(`${r} method not found in Pool ABI`);return Ws(o,i)}};var $n=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new vn(a,r,this.params,o);let A=i.cachePoolInfoChainSec>0?i.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new Gs({defaultTtl:A})}rawTxBuilder;cache;async getAllowance(a,r){if(r){let i=a,o=r;return await this.tokenService.getAllowance({...o,spender:o.token.poolAddress},i)}else{let i=a;return await this.tokenService.getAllowance({...i,spender:i.token.poolAddress})}}async checkAllowance(a,r){if(r){let i=a,o=r;return this.tokenService.checkAllowance({...o,spender:o.token.poolAddress},i)}else{let i=a;return this.tokenService.checkAllowance({...i,spender:i.token.poolAddress})}}async approve(a,r){return this.tokenService.approve(a,{...r,spender:r.token.poolAddress})}async getAmountToBeDeposited(a,r,i){U(a),E("amount",a,r.decimals);let o=await this.getPoolInfoFromChain(r,i),{vUsdBalance:A,tokenBalance:c,aValue:m,dValue:u}=o,l=Ja(a,m,u,c,A);return F(l,3).toFixed()}async getAmountToBeWithdrawn(a,r,i,o){U(a),E("amount",a,i.decimals);let A=await this.getPoolInfoFromChain(i,o),c=La(a),m=ue(c,i.decimals),l=(await this.getUserBalanceInfo(r,i,o)).earned(A)||"0",d=Ds(m).plus(l).toFixed();return F(d,i.decimals).toFixed()}async getUserBalanceInfo(a,r,i){return bt(r.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).getUserBalanceInfo(a,r)}async getPoolInfoFromChain(a,r){let i={chainSymbol:a.chainSymbol,poolAddress:a.poolAddress},o=this.cache.get(i);if(o)return o;{let A=await bt(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).getPoolInfoFromChain(a);return this.cache.put(i,A),this.api.cachePut({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress},A),A}}};function bt(s,a,r,i,o){switch(N.getChainProperty(s).chainType){case"EVM":{if(o)return new Et(o,a);{let A=r.getNodeRpcUrl(s),c=new js(A);return c.defaultReturnFormat={number:Vs.STR,bytes:Es.HEX},new Et(c,a)}}case"TRX":{let A=r.getNodeRpcUrl(s),c=i.tronJsonRpc;if(o)return new jt(o,a,c);{let m=new Us({fullHost:A});return new jt(m,a,c)}}case"SOLANA":{let A=r.getNodeRpcUrl(s);return new kn(A,a)}case"SRB":return new xn(r,i,a);case"SUI":return new jn(r.getNodeRpcUrl(s),a)}}import{Big as _}from"big.js";function ti(s,a,r){let i=Zs(s,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),o=$s(i.amountIncludingCommissionInSystemPrecision,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo);return{swapToVUsdCalcResult:i,swapFromVUsdCalcResult:o}}function ni(s,a,r){let i=_s(s,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo),o=Js(i.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:i,swapFromVUsdCalcResult:o}}function Zs(s,{feeShare:a,decimals:r},i){let o=_(s),A=o.times(a),c=o.minus(A);return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInSystemPrecision:qa(rt(c,r),i),amountExcludingCommissionInSystemPrecision:qa(rt(o,r),i)}}function qa(s,a){if(s.eq(0))return"0";let r=_(a.tokenBalance).plus(s),i=We(r.toFixed(),a.aValue,a.dValue);return _(a.vUsdBalance).minus(i).round().toFixed()}function $s(s,{feeShare:a,decimals:r},i){if(_(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let A=_(s).plus(i.vUsdBalance),c=We(A,i.aValue,i.dValue),m=ue(_(i.tokenBalance).minus(c),r),u=_(m).times(a),l=_(m).minus(u).round();return{bridgeFeeInTokenPrecision:u.round().toFixed(),amountIncludingCommissionInTokenPrecision:l.toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}function _s(s,{feeShare:a,decimals:r},i){let o=_(a).div(_(1).minus(a)),A=_(s).times(o),c=_(s).plus(A);return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInSystemPrecision:ei(rt(c,r),i),amountExcludingCommissionInSystemPrecision:ei(rt(s,r),i)}}function ei(s,a){let r=_(a.tokenBalance).minus(s),i=We(r.toFixed(),a.aValue,a.dValue);return _(i).minus(a.vUsdBalance).round().toFixed()}function Js(s,{feeShare:a,decimals:r},i){if(_(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let o=_(i.vUsdBalance).minus(s),A=We(o.toFixed(),i.aValue,i.dValue),c=_(A).minus(i.tokenBalance),m=ue(c.toFixed(),r),u=_(a).div(_(1).minus(a)),l=_(m).times(u),d=_(m).plus(l);return{bridgeFeeInTokenPrecision:l.round().toFixed(),amountIncludingCommissionInTokenPrecision:d.round().toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}import{Big as nt}from"big.js";function ri(s,a,r,i,o){let A=Ne(s,a,r),c=ue(A,a.decimals),m=kt(A,i,o),u=nt(s).times(a.feeShare),l=nt(m).div(nt(1).minus(i.feeShare)).minus(m);return{sourceLPSwap:{fee:F(u,a.decimals).neg().round(a.decimals,nt.roundUp).toFixed(),swap:F(nt(s).minus(c).minus(u),a.decimals).neg().round(a.decimals,nt.roundUp).toFixed()},destLPSwap:{fee:F(l,i.decimals).neg().round(i.decimals,nt.roundUp).toFixed(),swap:F(ue(A,i.decimals).minus(m).minus(l),i.decimals).neg().round(i.decimals,nt.roundUp).toFixed()}}}import{Connection as Ls,PublicKey as Xs,TransactionMessage as Ys}from"@solana/web3.js";var _n=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}async addMemoToTx(a,r){if(r.length>28)throw new h("InvalidArgumentException memo cannot be more than 28 characters");let i=new Ls(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),o=await st(a,i),A=Ys.decompile(a.message,{addressLookupTableAccounts:o}),c=A.instructions[A.instructions.length-1];if(!c?.keys)throw new h("Last instruction or its keys are invalid.");c.keys.push({pubkey:new Xs(Buffer.from(r)),isSigner:!1,isWritable:!1}),a.message=A.compileToV0Message(o)}};import{Asset as Qs,BASE_FEE as zs,contract as Rb,Horizon as ai,Operation as qs,Operation as eo,rpc as $t,TimeoutInfinite as to,TransactionBuilder as Wr,TransactionBuilder as ii}from"@stellar/stellar-sdk";import{contract as e}from"@stellar/stellar-sdk";var Ks=e.Spec,Hs=e.Client;var Zt=class extends Hs{constructor(r){super(new Ks(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),r);this.options=r}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 no=100,ro=180,Jn=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}async buildChangeTrustLineXdrTx(a){let i=await new ai.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.sender),A=await this.getContract(Zt,a.tokenAddress).name();if(Pt(A))throw new h;let c=St(A);if(!c)throw new h;let[m,u]=c.split(":");if(m===void 0||u===void 0)throw new h("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let l=new Qs(m,u),d=eo.changeTrust({asset:l,limit:a.limit});return new ii(i,{fee:no.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(d).setTimeout(ro).build().toXDR()}async getBalanceLine(a,r){let o=await this.getContract(Zt,r).name();if(Pt(o))throw new h;let A=St(o);if(!A)throw new h;let[c,m]=A.split(":"),u=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new ai.Server(u).loadAccount(a)).balances.find(g=>(g.asset_type==="credit_alphanum4"||g.asset_type==="credit_alphanum12")&&g.asset_code==c&&g.asset_issuer==m)}async submitTransactionStellar(a){let r=new ai.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),i=ii.fromXDR(a,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await r.submitTransaction(i)}async simulateAndCheckRestoreTxRequiredSoroban(a,r){let i=new $t.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await i.getAccount(r),A=Wr.fromXDR(a,this.params.sorobanNetworkPassphrase),c=await i.simulateTransaction(A);if($t.Api.isSimulationRestore(c))return new Wr(o,{fee:(+zs+ +c.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(c.restorePreamble.transactionData.build()).addOperation(qs.restoreFootprint({})).setTimeout(to).build().toXDR()}async sendTransactionSoroban(a){let r=new $t.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),i=Wr.fromXDR(a,this.params.sorobanNetworkPassphrase);return r.sendTransaction(i)}async confirmTx(a,r=15){let i=new $t.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await Qr(()=>i.getTransaction(a),c=>c.status===$t.Api.GetTransactionStatus.NOT_FOUND,r);if(o.length===0)throw new h("No transaction responses found.");let A=o[o.length-1];if(!A)throw new h("Unexpected error: last response is undefined.");return A}getContract(a,r){let i={contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(i)}};var Ln=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.srb=new Jn(a,r),this.sol=new _n(a,r)}srb;sol};var it=(r=>(r.WITH_NATIVE_CURRENCY="native",r.WITH_STABLECOIN="stablecoin",r))(it||{}),An=(r=>(r.INT="int",r.FLOAT="float",r))(An||{});import{Big as po}from"big.js";import{TronWeb as go}from"tronweb";import{Web3 as fo}from"web3";var ao={abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}]},Xn=ao;import{Big as si}from"big.js";var pe=class{async checkAllowance(a){let r=await this.getAllowance(a);return si(r).gte(si(a.amount))}};var io="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",so="0xdac17f958d2ee523a2206206994597c13d831ec7",oo=1e5,_t=class extends pe{constructor(r,i){super();this.web3=r;this.api=i}chainType="EVM";getAllowance(r){let i=r.token.tokenAddress,o=r.owner,A=r.spender;return this.getAllowanceByTokenAddress(i,o,A)}getAllowanceByTokenAddress(r,i,o){return this.getERC20Contract(r).methods.allowance(i,o).call()}async getTokenBalance(r){return await this.getERC20Contract(r.token.tokenAddress).methods.balanceOf(r.account).call()}async getNativeTokenBalance(r){return(await this.web3.eth.getBalance(r.account)).toString()}async approve(r){if(this.isUsdt(r.tokenAddress)&&await this.getAllowanceByTokenAddress(r.tokenAddress,r.owner,r.spender)!=="0"){let A=await this.buildRawTransactionApprove({...r,amount:"0"});await this.sendRawTransaction(A,r.chainSymbol)}let i=await this.buildRawTransactionApprove(r);return await this.sendRawTransaction(i,r.chainSymbol)}isUsdt(r){return r.toLowerCase()===so}buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:A,amount:c}=r,u=this.getERC20Contract(i).methods.approve(o,c==null?io:Bn(c));return Promise.resolve({from:A,to:i,value:"0",data:u.encodeABI()})}async sendRawTransaction(r,i){let o=r,A={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};i==="POL"?o.gas=oo:o.gas=await this.web3.eth.estimateGas(r);let{transactionHash:c}=await this.web3.eth.sendTransaction({...o,...A});return{txId:c.toString()}}getERC20Contract(r){return new this.web3.eth.Contract(Xn.abi,r)}};import{AnchorProvider as Ao}from"@project-serum/anchor";import{Connection as co,PublicKey as Yn}from"@solana/web3.js";var Kn=class extends pe{constructor(r,i){super();this.solanaRpcUrl=r;this.api=i}chainType="SOLANA";approve(r){throw new X}buildRawTransactionApprove(r){throw new X}buildAnchorProvider(r){let i=new co(this.solanaRpcUrl,"confirmed"),o=new Yn(r);return new Ao(i,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(r){throw new X}async getTokenBalance(r){let{account:i,token:o}=r;try{let A=await we(new Yn(i),new Yn(o.tokenAddress));return(await ft(A,this.buildAnchorProvider(i))).amount.toString()}catch(A){if(A instanceof Error)return A.message.startsWith("Account does not exist"),"0";throw A}}async getNativeTokenBalance(r){return(await this.buildAnchorProvider(r.account).connection.getBalance(new Yn(r.account))).toString()}};import{Horizon as Eh,NotFoundError as mo}from"@stellar/stellar-sdk";var Hn=class extends pe{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";getAllowance(){throw new X}async getTokenBalance(r){if(!r.token.originTokenAddress)throw new h("OriginTokenAddress missing");let[i,o]=r.token.originTokenAddress.split(":"),A=new Eh.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),c;try{c=await A.loadAccount(r.account)}catch(l){if(l instanceof mo)return"0";throw l}let u=c.balances.find(l=>(l.asset_type==="credit_alphanum4"||l.asset_type==="credit_alphanum12")&&l.asset_code==i&&l.asset_issuer==o);return u?.balance?D(u.balance,N.getChainDecimalsByType(N.getChainProperty(r.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(r){let c=(await new Eh.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(r.account)).balances.find(m=>m.asset_type==="native");return c?.balance?D(c.balance,N.getChainDecimalsByType(N.getChainProperty(r.chainSymbol).chainType)).toFixed():"0"}approve(){throw new X}buildRawTransactionApprove(){throw new X}};import{SuiClient as uo}from"@mysten/sui/client";var Qn=class extends pe{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.suiClient=new uo({url:this.suiRpcUrl})}chainType="SUI";suiClient;approve(r){throw new X}buildRawTransactionApprove(r){throw new X}getAllowance(r){throw new X}async getTokenBalance(r){if(!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");return(await this.suiClient.getBalance({owner:r.account,coinType:r.token.originTokenAddress})).totalBalance}async getNativeTokenBalance(r){let i=await Ve(o=>this.suiClient.getCoins({owner:r.account,cursor:o}));return i.length===0?"0":i.reduce((o,A)=>o+BigInt(A.balance),BigInt(0)).toString()}};var lo="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Jt=class extends pe{constructor(r,i){super();this.tronWeb=r;this.api=i}chainType="TRX";async getAllowance(r){let{token:{tokenAddress:i},owner:o}=r;return(await(await this.getContract(i)).methods.allowance(o,r.spender).call()).toString()}async getTokenBalance(r){return(await(await this.getContract(r.token.tokenAddress)).balanceOf(r.account).call()).toString()}async getNativeTokenBalance(r){return(await this.tronWeb.trx.getBalance(r.account)).toString()}async approve(r){let i=await this.buildRawTransactionApprove(r);return await In(this.tronWeb,i)}async buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:A,amount:c}=r,m=c==null?lo:Bn(c),u=[{type:"address",value:o},{type:"uint256",value:m}];return this.buildRawTransaction(i,"approve(address,uint256)",u,"0",A)}getContract(r){return this.tronWeb.contract(Xn.abi,r)}async buildRawTransaction(r,i,o,A,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+A},o,c);if(!m?.result?.result)throw new h("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var zn=class{constructor(a,r,i){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i}async getAllowance(a,r){let i=await this.getChainTokenService(a.token.chainSymbol,a.owner,r).getAllowance(a);return F(i,a.token.decimals).toFixed()}async checkAllowance(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),this.getChainTokenService(a.token.chainSymbol,a.owner,r).checkAllowance(this.prepareCheckAllowanceParams(a))}async approve(a,r){return r.amount&&(U(r.amount),E("amount",r.amount,r.token.decimals)),this.getChainTokenService(r.token.chainSymbol,r.owner,a).approve(this.prepareApproveParams(r))}async buildRawTransactionApprove(a,r){return a.amount&&(U(a.amount),E("amount",a.amount,a.token.decimals)),this.getChainTokenService(a.token.chainSymbol,a.owner,r).buildRawTransactionApprove(this.prepareApproveParams(a))}async getTokenBalance(a,r){let i=await this.getChainTokenService(a.token.chainSymbol,a.account,r).getTokenBalance(a);return a.token.decimals?F(i,a.token.decimals).toFixed():i}async getNativeTokenBalance(a,r){let i=await this.getChainTokenService(a.chainSymbol,a.account,r).getNativeTokenBalance(a);return{int:i,float:F(i,N.getChainDecimalsByType(N.getChainProperty(a.chainSymbol).chainType)).toFixed()}}getChainTokenService(a,r,i){switch(N.getChainProperty(a).chainType){case"EVM":{if(i)return new _t(i,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new _t(new fo(o),this.api)}}case"TRX":{if(i)return new Jt(i,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a),A=new go({fullHost:o});return A.setAddress(r),new Jt(A,this.api)}}case"SOLANA":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new Kn(o,this.api)}case"SRB":return new Hn(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new Qn(this.nodeRpcUrlsConfig.getNodeRpcUrl(a),this.api)}}prepareCheckAllowanceParams(a){return{...a,amount:D(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:po(a.amount).toFixed()}}};var Lt=class{constructor(a){this.nodeRpcUrls=a}getNodeRpcUrl(a){let r=this.nodeRpcUrls[a];if(r!==void 0)return r;throw new Qt(a)}},qn=class{api;tokenService;params;bridge;pool;constructor(a,r=Yt){N.addChainsProperties(r.additionalChainsProperties);let i=new qt(r),o=new tn(i),A=new nn(o),c=new an(A);this.api=new rn(c,r),this.tokenService=new zn(this.api,a,r),this.bridge=new Rn(this.api,a,r,this.tokenService),this.pool=new $n(this.api,a,r,this.tokenService),this.params=r}async chainDetailsMap(a){return this.api.getChainDetailsMap(a)}async tokens(a){return this.api.tokens(a)}async tokensByChain(a,r){let o=(await this.api.getChainDetailsMap(r))[a];return o?o.tokens:[]}async getTransferStatus(a,r){return this.api.getTransferStatus(a,r)}async getGasBalance(a,r){return this.api.getGasBalance(a,r)}async checkAddress(){return new Promise(a=>{a({status:"OK",gasBalance:null})})}async getPendingStatusInfo(a,r,i,o){U(a);let A;r=="float"?(E("amount",a,i.decimals),A=D(a,i.decimals).toFixed()):A=a;let c=Ne(A,i,await Y(this.api,i)),m=await Y(this.api,o),u=this.getAmountFromVUsdFormatted(c,o,m),l,d=await this.api.getPendingInfo();for(let p in d[o.chainSymbol]){let g=d[o.chainSymbol];if(!g)throw new h("Cannot find pending info for "+o.chainSymbol);l=g[p]}if(l){let p=Er(l.totalSentAmount,m),g=this.getAmountFromVUsdFormatted(c,o,p),y;return Ae(g.int).gt(u.int)?y={min:u,max:g}:y={min:g,max:u},{pendingTxs:l.pendingTxs,pendingAmount:{int:Oe(l.totalSentAmount,3,o.decimals).toFixed(0),float:F(l.totalSentAmount,3).toFixed()},estimatedAmount:y}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:u,max:u}}}async getTokenBalance(a,r){return this.tokenService.getTokenBalance(a,r)}async getNativeTokenBalance(a,r){return this.tokenService.getNativeTokenBalance(a,r)}async calculateFeePercentOnSourceChain(a,r){U(a),E("amountFloat",a,r.decimals);let i=D(a,r.decimals);if(i.eq(0))return 0;let o=Ne(i,r,await Y(this.api,r)),A=ue(o,r.decimals);return nr(i,A)}async calculateFeePercentOnDestinationChain(a,r,i){U(a),E("amountFloat",a,r.decimals);let o=D(a,r.decimals);if(o.eq(0))return 0;let A=Ne(o,r,await Y(this.api,r)),c=kt(A,i,await Y(this.api,i)),m=ue(A,i.decimals);return nr(m,c)}async getAmountToBeReceivedAndGasFeeOptions(a,r,i,o){return U(a),E("amountToSendFloat",a,r.decimals),{amountToSendFloat:Ae(a).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(a,r,i,o),gasFeeOptions:await this.getGasFeeOptions(r,i,o)}}async getAmountToSendAndGasFeeOptions(a,r,i,o){return U(a),E("amountToBeReceivedFloat",a,i.decimals),{amountToSendFloat:await this.getAmountToSend(a,r,i,o),amountToBeReceivedFloat:Ae(a).toFixed(),gasFeeOptions:await this.getGasFeeOptions(r,i,o)}}async getAmountToBeReceived(a,r,i,o){let A=await Y(this.api,r),c=await Y(this.api,i);return this.getAmountToBeReceivedFromPools(a,r,i,A,c,o)}async getAmountToBeReceivedFromChain(a,r,i,o,A,c){let m=await this.pool.getPoolInfoFromChain(r,A),u=await this.pool.getPoolInfoFromChain(i,c);return this.getAmountToBeReceivedFromPools(a,r,i,m,u,o)}getAmountToBeReceivedFromPools(a,r,i,o,A,c){U(a),E("amountToSendFloat",a,r.decimals);let m=D(a,r.decimals);if(c&&c==3){if(!r.cctpAddress||!i.cctpAddress||!r.cctpFeeShare)throw new ne("Such route does not support CCTP protocol");let l=m.mul(Ae(1).minus(r.cctpFeeShare)).round(0,Ae.roundUp),d=Oe(l,r.decimals,i.decimals).round(0);return F(d,i.decimals).toFixed()}if(c&&c==4){if(!r.cctpV2Address||!i.cctpV2Address||!r.cctpV2FeeShare)throw new ne("Such route does not support CCTP V2 protocol");let l=m.mul(Ae(1).minus(r.cctpV2FeeShare)).round(0,Ae.roundUp),d=Oe(l,r.decimals,i.decimals).round(0);return F(d,i.decimals).toFixed()}let u=Ne(m,r,o);return this.getAmountFromVUsdFormatted(u,i,A).float}async getAmountToSend(a,r,i,o){let A=await Y(this.api,r),c=await Y(this.api,i);return this.getAmountToSendFromPools(a,r,i,A,c,o)}async getAmountToSendFromChain(a,r,i,o,A,c){let m=await this.pool.getPoolInfoFromChain(r,A),u=await this.pool.getPoolInfoFromChain(i,c);return this.getAmountToSendFromPools(a,r,i,m,u,o)}getAmountToSendFromPools(a,r,i,o,A,c){U(a),E("amountToBeReceivedFloat",a,i.decimals);let m=D(a,i.decimals);if(c&&c==3){if(!r.cctpAddress||!i.cctpAddress||!r.cctpFeeShare)throw new ne("Such route does not support CCTP protocol");let d=m.div(Ae(1).minus(r.cctpFeeShare)).round(0,Ae.roundDown),p=Oe(d,i.decimals,r.decimals).round(0);return F(p,r.decimals).toFixed()}if(c&&c==4){if(!r.cctpV2Address||!i.cctpV2Address||!r.cctpV2FeeShare)throw new ne("Such route does not support CCTP V2 protocol");let d=m.div(Ae(1).minus(r.cctpV2FeeShare)).round(0,Ae.roundDown),p=Oe(d,i.decimals,r.decimals).round(0);return F(p,r.decimals).toFixed()}let u=jr(m,i,A),l=Vr(u,r,o);if(Ae(l).lte(0))throw new $e;return F(l,r.decimals).toFixed()}async getGasFeeOptions(a,r,i){return mr(a.allbridgeChainId,a.chainType,r.allbridgeChainId,a.decimals,i,this.api)}getAverageTransferTime(a,r,i){return a.transferTime?.[r.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(o=>({chainSymbol:o.chainSymbol,poolAddress:o.poolAddress}));return this.api.refreshPoolInfo(i)}return this.api.refreshPoolInfo()}aprInPercents(a){return $r(a)}async getExtraGasMaxLimits(a,r){return await ur(a,r,this.api)}async getVUsdFromAmount(a,r,i){U(a);let o;r=="float"?(E("amount",a,i.decimals),o=D(a,i.decimals).toFixed()):o=a;let A=Ne(o,i,await Y(this.api,i));return{int:A,float:F(A,3).toFixed()}}async getAmountFromVUsd(a,r){return this.getAmountFromVUsdFormatted(a,r,await Y(this.api,r))}getAmountFromVUsdFormatted(a,r,i){U(a);let o=kt(a,r,i);if(Ae(o).lt(0))throw new $e;return{int:o,float:F(o,r.decimals).toFixed()}}async swapAndBridgeFeeCalculation(a,r,i){return ti(a,{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await Y(this.api,r)},{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await Y(this.api,i)})}async swapAndBridgeFeeCalculationReverse(a,r,i){let o=ni(a,{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await Y(this.api,r)},{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await Y(this.api,i)}),A=o.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(Ae(A).lt(0))throw new $e;return o}async getSendAmountDetails(a,r,i,o){U(a);let A;return r=="float"?(E("amount",a,i.decimals),A=D(a,i.decimals).toFixed()):A=a,ri(A,i,await Y(this.api,i),o,await Y(this.api,o))}};function yo(s){return"solanaRpcUrl"in s}var oi=class{params;bridge;pool;utils;service;constructor(a,r=Yt){let i;yo(a)?i=new Lt({SOL:a.solanaRpcUrl,TRX:a.tronRpcUrl}):i=new Lt(a),this.service=new qn(i,r),this.bridge=this.service.bridge,this.pool=this.service.pool,this.utils=new Ln(i,r),this.params=r}async chainDetailsMap(a="swap"){return this.service.chainDetailsMap(a)}async tokens(a="swap"){return this.service.tokens(a)}async tokensByChain(a,r="swap"){return this.service.tokensByChain(a,r)}async getTransferStatus(a,r){return this.service.getTransferStatus(a,r)}async getGasBalance(a,r){return this.service.getGasBalance(a,r)}async checkAddress(a,r,i){return await this.service.checkAddress()}async getPendingStatusInfo(a,r,i,o){return this.service.getPendingStatusInfo(a,r,i,o)}async getTokenBalance(a,r){return this.service.getTokenBalance(a,r)}async getNativeTokenBalance(a,r){return this.service.getNativeTokenBalance(a,r)}async calculateFeePercentOnSourceChain(a,r){return this.service.calculateFeePercentOnSourceChain(a,r)}async calculateFeePercentOnDestinationChain(a,r,i){return this.service.calculateFeePercentOnDestinationChain(a,r,i)}async getAmountToBeReceivedAndGasFeeOptions(a,r,i,o){return this.service.getAmountToBeReceivedAndGasFeeOptions(a,r,i,o)}async getAmountToSendAndGasFeeOptions(a,r,i,o){return this.service.getAmountToSendAndGasFeeOptions(a,r,i,o)}async getAmountToBeReceived(a,r,i,o){return this.service.getAmountToBeReceived(a,r,i,o)}async getAmountToBeReceivedFromChain(a,r,i,o,A,c){return this.service.getAmountToBeReceivedFromChain(a,r,i,o,A,c)}getAmountToBeReceivedFromPools(a,r,i,o,A,c){return this.service.getAmountToBeReceivedFromPools(a,r,i,o,A,c)}async getAmountToSend(a,r,i,o){return this.service.getAmountToSend(a,r,i,o)}async getAmountToSendFromChain(a,r,i,o,A,c){return this.service.getAmountToSendFromChain(a,r,i,o,A,c)}getAmountToSendFromPools(a,r,i,o,A,c){return this.service.getAmountToSendFromPools(a,r,i,o,A,c)}async getGasFeeOptions(a,r,i){return this.service.getGasFeeOptions(a,r,i)}getAverageTransferTime(a,r,i){return this.service.getAverageTransferTime(a,r,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,r){return this.service.getExtraGasMaxLimits(a,r)}async getVUsdFromAmount(a,r,i){return this.service.getVUsdFromAmount(a,r,i)}async getAmountFromVUsd(a,r){return this.service.getAmountFromVUsd(a,r)}async swapAndBridgeFeeCalculation(a,r,i){return this.service.swapAndBridgeFeeCalculation(a,r,i)}async swapAndBridgeFeeCalculationReverse(a,r,i){return this.service.swapAndBridgeFeeCalculationReverse(a,r,i)}async getSendAmountDetails(a,r,i,o){return this.service.getSendAmountDetails(a,r,i,o)}};export{rr as AddressStatus,oi as AllbridgeCoreSdk,An as AmountFormat,ut as AmountNotEnoughError,Ht as ArgumentInvalidDecimalsError,ne as CCTPDoesNotSupportedError,fe as ChainSymbol,j as ChainType,fi as ErrorCode,Kt as ExtraGasMaxLimitExceededError,it as FeePaymentMethod,$e as InsufficientPoolLiquidityError,Ze as InvalidAmountError,Bt as InvalidGasFeePaymentOptionError,Gr as InvalidMessengerOptionError,lt as InvalidTxError,Q as JupiterError,De as Messenger,X as MethodNotSupportedError,Qt as NodeRpcUrlNotInitializedError,h as SdkError,J as SdkRootError,lr as SolanaAutoTxFee,Rt as TimeoutError,zt as TxTooLargeError,It as VerifyTxError,Yt as mainnet,bo as nodeRpcUrlsDefault,To as nodeUrlsDefault};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|