@allbridge/bridge-core-sdk 3.27.0 → 3.27.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/esm/index.js CHANGED
@@ -1,2 +1,2 @@
1
- var Pi=Object.create;var Kr=Object.defineProperty;var wi=Object.getOwnPropertyDescriptor;var Ci=Object.getOwnPropertyNames;var Bi=Object.getPrototypeOf,Ri=Object.prototype.hasOwnProperty;var Ii=(s,a)=>()=>(s&&(a=s(s=0)),a);var dr=(s,a)=>()=>(a||s((a={exports:{}}).exports,a),a.exports);var vi=(s,a,r,i)=>{if(a&&typeof a=="object"||typeof a=="function")for(let o of Ci(a))!Ri.call(s,o)&&o!==r&&Kr(s,o,{get:()=>a[o],enumerable:!(i=wi(a,o))||i.enumerable});return s};var Re=(s,a,r)=>(r=s!=null?Pi(Bi(s)):{},vi(a||!s||!s.__esModule?Kr(r,"default",{value:s,enumerable:!0}):r,s));import{bcs as Ae}from"@mysten/sui/bcs";function is(s,a=["<",">"]){let[r,i]=a,o=[],c="",A=0;for(let m=0;m<s.length;m++){let u=s[m];if(u===r&&A++,u===i&&A--,A===0&&u===","){o.push(c.trim()),c="";continue}c+=u}return o.push(c.trim()),o}function te(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 c=s.slice(0,i),A=is(s.slice(i+1,s.length-o-1),[a,r]);return{typeName:c,typeArgs:A}}function Da(s){return!s||typeof s!="object"||Array.isArray(s)?!1:"GasCoin"in s||"Input"in s||"Result"in s||"NestedResult"in s}function v(s,a){return Da(a)?a:s.object(a)}function Se(s,a,r){if(Da(a))return v(s,a);function i(d){let{typeName:l,typeArgs:p}=te(d);switch(l){case"bool":return Ae.Bool;case"u8":return Ae.U8;case"u16":return Ae.U16;case"u32":return Ae.U32;case"u64":return Ae.U64;case"u128":return Ae.U128;case"u256":return Ae.U256;case"address":return Ae.Address;case"0x1::string::String":case"0x1::ascii::String":return Ae.String;case"0x2::object::ID":return Ae.Address;case"0x1::option::Option":return Ae.option(i(p[0]));case"vector":return Ae.vector(i(p[0]));default:throw new Error(`invalid primitive type ${d}`)}}function o(d){for(let l of d){if(typeof l>"u"||l===null)return!0;if(Array.isArray(l))return o(l)}return!1}function c(d){for(let l of d){if(!Array.isArray(l)){if(l===null)continue;switch(typeof l){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return c(l)}return!0}function A(d){for(let l of d){if(!Array.isArray(l))switch(typeof l){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return A(l)}return!1}let{typeName:m,typeArgs:u}=te(r);switch(m){case"0x1::option::Option":if(a===null)return s.pure.option("bool",null);if(c([a]))return s.pure(i(r).serialize(a));if(A([a]))throw new Error("mixing primitive and TransactionArgument values is not supported");return s.moveCall({target:"0x1::option::some",typeArguments:[u[0]],arguments:[Se(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(Ae.vector(Ae.Bool).serialize([]));if(o(a))throw new Error("the provided array contains undefined or null values");if(c(a))return s.pure(i(r).serialize(a));if(A(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 ss(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 C(s){let{typeName:a,typeArgs:r}=te(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<${C(r[0])}>`;default:{let i=a.split("::");i[0]=ss(i[0]);let o=i.join("::");return r.length>0?`${o}<${r.map(c=>C(c)).join(",")}>`:o}}}function U(s,...a){return a.length>0?`${s}<${a.join(", ")}>`:s}var z=Ii(()=>{"use strict"});var ze=dr((_m,Wa)=>{"use strict";z();var Ir=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return C(s.$PACKAGE_ID)}get PUBLISHED_AT(){return C(s.$PUBLISHED_AT)}get PKG_V1(){return C(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}},os=new Ir;Wa.exports=os});var xr=dr((Lm,Za)=>{"use strict";z();var Fr=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return C(s.$PACKAGE_ID)}get PUBLISHED_AT(){return C(s.$PUBLISHED_AT)}get PKG_V1(){return C(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}},cs=new Fr;Za.exports=cs});var Dr=dr((Qm,$a)=>{"use strict";z();var Or=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return C(s.$PACKAGE_ID)}get PUBLISHED_AT(){return C(s.$PUBLISHED_AT)}get PKG_V1(){return C(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 Or;$a.exports=As});var on={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},Eo={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},Vo={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{TronWeb as Ss}from"tronweb";import{Web3 as Ps}from"web3";var $=class extends Error{errorCode;constructor(a,r){super(r),this.errorCode=a}},f=class extends ${constructor(a){super("SdkError",a)}},$e=class extends ${constructor(a){super("InvalidAmountError",a)}},lt=class extends ${constructor(a){super("AmountNotEnoughError",a)}},Je=class extends ${constructor(a){super("InsufficientPoolLiquidityError",a)}},q=class extends ${constructor(a){super("JupiterError",a)}},Wt=class extends ${constructor(a){super("InvalidGasFeePaymentOptionError",a)}},cn=class extends ${constructor(a){super("InvalidMessengerOptionError",a)}},J=class extends ${constructor(a){super("MethodNotSupportedError",a)}},Nt=class extends ${constructor(a){super("VerifyTxError",a)}},pt=class extends ${constructor(a){super("InvalidTxError",a)}},An=class extends ${constructor(a){super("ExtraGasMaxLimitExceededError",a)}},mn=class extends ${constructor(a,r,i){super("ArgumentInvalidDecimalsError",`Argument '${a}' decimals '${r}' cannot be greater than '${i}'`)}},Gt=class extends ${constructor(a){super("TimeoutError",a)}},un=class extends ${constructor(a){super("NodeRpcUrlNotInitializedError",`For chain '${a}' Node RPC URL not initialized`)}},re=class extends ${constructor(a){super("CCTPDoesNotSupportedError",a)}},ae=class extends ${constructor(a){super("OFTDoesNotSupportedError",a)}},dn=class extends ${constructor(a){super("YieldDoesNotSupportedError",a)}},ln=class extends ${constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},ki=(y=>(y.SDK_ERROR="SdkError",y.INVALID_AMOUNT_ERROR="InvalidAmountError",y.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",y.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",y.JUPITER_ERROR="JupiterError",y.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",y.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",y.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",y.VERIFY_TX_ERROR="VerifyTxError",y.INVALID_TX_ERROR="InvalidTxError",y.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",y.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",y.TIMEOUT_ERROR="TimeoutError",y.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",y.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",y.OFT_DOES_NOT_SUPPORTED_ERROR="OFTDoesNotSupportedError",y.YIELD_DOES_NOT_SUPPORTED_ERROR="YieldDoesNotSupportedError",y.TX_TOO_LARGE="TxTooLargeError",y))(ki||{});var he=(b=>(b.BSC="BSC",b.ETH="ETH",b.BAS="BAS",b.SOL="SOL",b.TRX="TRX",b.POL="POL",b.ARB="ARB",b.CEL="CEL",b.AVA="AVA",b.SRB="SRB",b.STLR="STLR",b.OPT="OPT",b.SUI="SUI",b.SNC="SNC",b.UNI="UNI",b.LIN="LIN",b))(he||{}),Z=(c=>(c.EVM="EVM",c.SOLANA="SOLANA",c.TRX="TRX",c.SRB="SRB",c.SUI="SUI",c))(Z||{});var Fi={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9},xi={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"},UNI:{chainSymbol:"UNI",chainId:"0x82",name:"Unichain",chainType:"EVM"},LIN:{chainSymbol:"LIN",chainId:"0xe708",name:"Linea",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"}},x=(()=>{let s={...xi};return{addChainsProperties(a){s={...s,...a}},getChainProperty(a){let r=s[a];if(!r)throw new f(`Cannot find chain properties for ${a}`);return r},getChainsProperties(){return s},getChainDecimalsByType(a){return Fi[a]}}})();var lr=(A=>(A.OK="OK",A.INVALID="INVALID",A.FORBIDDEN="FORBIDDEN",A.UNINITIALIZED="UNINITIALIZED",A.CONTRACT_ADDRESS="CONTRACT_ADDRESS",A.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",A))(lr||{});var Te=(c=>(c[c.ALLBRIDGE=1]="ALLBRIDGE",c[c.WORMHOLE=2]="WORMHOLE",c[c.CCTP=3]="CCTP",c[c.CCTP_V2=4]="CCTP_V2",c[c.OFT=5]="OFT",c))(Te||{});import{Big as Hr}from"big.js";async function H(s,a){return await s.getPoolInfoByKey({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress})}function M(s){if(Hr(s).lte(0))throw new $e("Amount must be greater than zero")}function W(s,a,r){let i=Hr(a).toFixed(),[o,c]=i.split(".");if(c&&c.length>r)throw new mn(s,c.length,r)}async function pn(s,a,r){return await Promise.race([s,new Promise((i,o)=>{setTimeout(()=>o(new Gt(a)),r)})])}async function pr(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 pn(s(),a,i)}catch{if(++o>=r)throw new Gt(a)}}async function Qr(s,a,r,i=1.5,o=!1){let c=[],A=0,m=await s();if(c.push(m),!a(m))return c;let u=new Date(Date.now()+r*1e3).valueOf(),d=1e3,l=d;for(;Date.now()<u;){let p=c[c.length-1];if(p===void 0||!a(p))break;A++,o&&console.info(`Waiting ${d}ms before trying again (bringing the total wait time to ${l}ms so far, of total ${r*1e3}ms)`),await new Promise(h=>setTimeout(h,d)),d=d*i,new Date(Date.now()+d).valueOf()>u&&(d=u-Date.now(),o&&console.info(`was gonna wait too long; new waitTime: ${d}ms`)),l=d+l;let g=await s(p);c.push(g),o&&a(g)&&console.info(`${A}. Called ${s.name}; ${c.length} prev attempts. Most recent: ${JSON.stringify(c[c.length-1],null,2)}`)}return c}import{Big as $i}from"big.js";var Mi={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=Mi;var Oi={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=Oi;var Di={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"uint16",name:"optionType",type:"uint16"}],name:"InvalidOptionType",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"address",name:"tokenAddress",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFeeWithExtraGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"extraGasDestinationToken",type:"uint256"}],name:"OftTokensSent",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:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"addToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"feeShare",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"},{internalType:"uint256",name:"extraGasInDestinationToken",type:"uint256"},{internalType:"uint256",name:"slippageBP",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"},{internalType:"uint128",name:"extraGasAmount_",type:"uint128"}],name:"extraGasPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getEidByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"oftAddress",outputs:[{internalType:"address",name:"oftAddress",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"eid_",type:"uint32"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"}],name:"relayerFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"removeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"setLzGasLimit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"maxExtraGas_",type:"uint256"}],name:"setMaxExtraGas",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:[{internalType:"contract IERC20",name:"token_",type:"address"}],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"}]},ea=Di;import*as yn from"@project-serum/anchor";import{PublicKey as ba}from"@solana/web3.js";import*as ee from"@project-serum/anchor";import{PublicKey as ie}from"@solana/web3.js";async function Ie(s,a){return ee.utils.token.associatedAddress({mint:a,owner:s})}async function Ke(s){let[a]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("config")],s);return a}async function ta(s,a){let[r]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("lock"),Uint8Array.from(s)],a);return r}async function Ut(s,a){let[r]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([s])],a);return r}async function gt(s){let a=await Ke(s),[r]=await ie.findProgramAddress([a.toBuffer()],s);return r}async function na(s,a){let[r]=await ie.findProgramAddress([s.toBuffer()],a);return r}async function ft(s,a){let[r]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("token"),s.toBytes()],a);return r}async function ra(s,a,r){let[i]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([s]),a],r);return i}async function gr(s,a){let[r]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([s])],a);return r}async function fr(s,a){let[r]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([s])],a);return r}async function aa(s,a){let[r]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("sent_message"),s],a);return r}async function yr(s,a,r){let[i]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("user_deposit"),a.toBytes(),s.toBytes()],r);return i}async function ia(s,a){let[r]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("cctp_bridge"),s.toBytes()],a);return r}async function sa(s,a){let[r]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("token"),s.toBytes()],a);return r}function oa(s,a){let[r]=ie.findProgramAddressSync([ee.utils.bytes.utf8.encode("lock"),a.toBuffer()],s);return r}function ca(s,a,r,i){let o=at("message_transmitter",r),c=at("token_messenger",i),A=at("__event_authority",i),m=at("token_minter",i),u=at("local_token",i,[a]),d=at("remote_token_messenger",i,[s.toString()]),l=at("sender_authority",i);return{messageTransmitterAccount:o,tokenMessenger:c,tokenMessengerEventAuthority:A,tokenMinter:m,localToken:u,remoteTokenMessengerKey:d,authorityPda:l}}function at(s,a,r=[]){let i=[Buffer.from(ee.utils.bytes.utf8.encode(s))];for(let c of r)typeof c=="string"?i.push(Buffer.from(ee.utils.bytes.utf8.encode(c))):Array.isArray(c)||Buffer.isBuffer(c)?i.push(Buffer.from(Uint8Array.from(c))):i.push(Buffer.from(Uint8Array.from(c.toBuffer())));return ie.findProgramAddressSync(i,a)[0]}import{AnchorProvider as Wi}from"@project-serum/anchor";import{Connection as Ni,PublicKey as Gi}from"@solana/web3.js";function He(s,a){let r=new Ni(s,"confirmed"),i=new Gi(a);return new Wi(r,{publicKey:i},{preflightCommitment:"confirmed",commitment:"confirmed"})}import{PublicKey as Ui}from"@solana/web3.js";import{Address as Ei}from"@stellar/stellar-sdk";import{Big as le}from"big.js";import ya from"randombytes";import{utils as ga}from"tronweb";import{Big as S}from"big.js";import hr from"bn.js";function Tr(s,a){return S(100).minus(S(100).times(a).div(s)).toNumber()}function it(s,a){return be(s,a,3).round(0,S.roundDown)}function de(s,a){return be(s,3,a)}function be(s,a,r){let i=S(r).minus(a).toNumber();return S(s).times(Et(i))}function Et(s){return S(10).pow(s)}function I(s,a){return S(s).times(Et(a))}function R(s,a){let r=S(s);return r.eq(0)?S(0):S(r).div(Et(a))}function se(s){return R(S(s.tokenBalance).minus(s.vUsdBalance).toFixed(),3).div(2).toFixed()}function Ge(s,{feeShare:a,decimals:r},i){let o=S(s);if(o.lte(0))return"0";let c=o.times(a),A=o.minus(c),m=it(A,r),u=S(i.tokenBalance).plus(m),d=Ue(u,i.aValue,i.dValue);return S(i.vUsdBalance).minus(d).round(0,S.roundDown).toFixed()}function Vt(s,{feeShare:a,decimals:r},i){let o=S(s);if(o.lte(0))return S(0).toFixed();let c=o.plus(i.vUsdBalance),A=Ue(c,i.aValue,i.dValue),m=de(S(i.tokenBalance).minus(A),r),u=S(m).times(a);return S(m).minus(u).round(0,S.roundDown).toFixed()}function Aa(s,a){let r=S(s);if(r.lte(0))return a;let i=r.plus(a.vUsdBalance),o=Ue(i,a.aValue,a.dValue);return{aValue:a.aValue,dValue:a.dValue,tokenBalance:o.toFixed(0),vUsdBalance:i.toFixed(0)}}function ma(s,{feeShare:a,decimals:r},i){if(S(s).lte(0))return S(0);let o=S(i.vUsdBalance).minus(s);if(o.lte(0))throw new Je;let c=Ue(o,i.aValue,i.dValue),A=S(c).minus(i.tokenBalance),m=de(A,r),u=S(a).div(S(1).minus(a)),d=S(m).times(u).round(0,S.roundUp);return S(m).plus(d).round(0,S.roundDown)}function ua(s,{feeShare:a,decimals:r},i){if(S(s).lte(0))return S(0);let o=S(a).div(S(1).minus(a)),c=S(s).times(o).round(0,S.roundUp),A=S(s).plus(c),m=it(A,r),u=S(i.tokenBalance).minus(m);if(u.lte(0))throw new Je;let d=Ue(u,i.aValue,i.dValue);return S(d).minus(i.vUsdBalance).round(0,S.roundDown)}function Ue(s,a,r){let i=S(4).times(a).times(S(r).minus(s)).minus(r),o=S(r).pow(3),c=i.pow(2),A=S(s).times(S(s).times(c).plus(S(4).times(a).times(o))).sqrt().round(0,S.roundDown),m=S(8).times(a).times(s),u=i.times(s).plus(A).div(m).round(0,S.roundDown);return u.eq(0)?S(0):u.plus(1)}function da(s,a,r,i){let o=new hr(s),c=new hr(r),A=new hr(a);return o.mul(c).shrn(i).sub(A).toString()}function la(s){return S(s).gt(0)?`${Number(S(s).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function pa(s,a,r){let i=S(a).times(r),o=S(a).plus(r),c=S(8).times(s).times(i).times(o),A=i.times(S(16).times(s).minus(4)).div(3),m=c.times(c),u=A.times(A).times(A),d=m.plus(u),l=S(d).sqrt(),p=S(Math.cbrt(+c.plus(l).toFixed())),g=S(Math.cbrt(+c.minus(l).toFixed()));return p.plus(g).toFixed()}function Ye(s,a,r){let i;switch(a){case"EVM":{i=fa(s);break}case"SOLANA":{i=new Ui(s).toBuffer();break}case"TRX":{i=Vi(s);break}case"SRB":{i=new Ei(s).toBuffer();break}case"SUI":{i=fa(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 ve(s){return s.replace(/^0x/i,"")}function ha(s){return Buffer.from(s.replace(/^0x/i,""),"hex")}function fa(s){let r=ha(s);return Buffer.concat([Buffer.alloc(32-r.length,0),r],32)}function Vi(s){let a=jt(s),r=ha(a);return ji(r,32)}function jt(s){let a=ga.crypto.decodeBase58Address(s);return a?ga.bytes.byteArray2hexStr(a).replace(/^41/,"0x"):""}function ji(s,a){if(s.length>=a)return s;let r=Buffer.alloc(a,0);return s.copy(r,a-s.length),r}function gn(){return ya(32)}function Ee(){let s=ya(32).readBigInt64BE();return s<0?s*-1n:s}function Ve(s,a){let r={},i=a.sourceToken;if(r.amount=I(a.amount,i.decimals).toFixed(),r.contractAddress=i.bridgeAddress,r.fromAccountAddress=a.fromAccountAddress,s==="SUI"){if(!i.originTokenAddress)throw new f("SUI sourceToken must contain 'originTokenAddress'");r.fromTokenAddress=i.originTokenAddress}else r.fromTokenAddress=Ye(i.tokenAddress,s,s);if(r.toAccountAddress=a.toAccountAddress,s==="SUI"){if(!a.destinationToken.originTokenAddress)throw new f("SUI destinationToken must contain 'originTokenAddress'");r.toTokenAddress=a.destinationToken.originTokenAddress}else r.toTokenAddress=Ye(a.destinationToken.tokenAddress,s,s);return r.minimumReceiveAmount=a.minimumReceiveAmount?I(a.minimumReceiveAmount,a.destinationToken.decimals).toFixed():"0",r}async function ke(s,a,r){let i={};i.fromChainId=a.sourceToken.allbridgeChainId,i.fromChainSymbol=a.sourceToken.chainSymbol;let o=x.getChainProperty(a.destinationToken.chainSymbol).chainType;if(s==="SUI"){if(!a.sourceToken.originTokenAddress)throw new f("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 c=a.sourceToken;switch(a.messenger){case 3:if(!c.cctpAddress||!a.destinationToken.cctpAddress)throw new re("Such route does not support CCTP protocol");i.contractAddress=c.cctpAddress;break;case 4:if(!c.cctpV2Address||!a.destinationToken.cctpV2Address)throw new re("Such route does not support CCTP V2 protocol");i.contractAddress=c.cctpV2Address;break;case 5:if(!c.oftBridgeAddress||!a.destinationToken.oftBridgeAddress||c.oftId!==a.destinationToken.oftId)throw new ae("Such route does not support OFT protocol");i.contractAddress=c.oftBridgeAddress;break;case 1:case 2:i.contractAddress=c.bridgeAddress;break}i.messenger=a.messenger,i.fromAccountAddress=a.fromAccountAddress,i.amount=I(a.amount,c.decimals).toFixed();let{fee:A,feeFormat:m}=a;if(!A){let p=(await br(a.sourceToken,i.toChainId,i.messenger,r))[i.gasFeePaymentMethod];if(!p)throw new Wt;A=p.int,m="int"}if(m=="float")switch(i.gasFeePaymentMethod){case"native":i.fee=I(A,x.getChainDecimalsByType(c.chainType)).toFixed(0);break;case"stablecoin":i.fee=I(A,c.decimals).toFixed(0);break}else i.fee=A;let{extraGas:u,extraGasFormat:d}=a;if(u&&+u>0){let l=await Sr(c,a.destinationToken,i.messenger,r),p,g;switch(i.gasFeePaymentMethod){case"native":p=x.getChainDecimalsByType(c.chainType),g=le(l.exchangeRate);break;case"stablecoin":p=c.decimals,g=le(l.exchangeRate).div(l.sourceNativeTokenPrice);break}switch(d??"int"){case"float":{i.extraGas=I(u,p).toFixed(0);let h=g.mul(u);i.extraGasDest=I(h,x.getChainDecimalsByType(a.destinationToken.chainType)).toFixed(0,le.roundDown);break}case"int":{i.extraGas=u;let h=R(i.extraGas,x.getChainDecimalsByType(c.chainType)),B=g.mul(h);i.extraGasDest=I(B,x.getChainDecimalsByType(a.destinationToken.chainType)).toFixed(0,le.roundDown);break}}_i(i.extraGas,i.gasFeePaymentMethod,l)}return s!=="SUI"&&(i.fromTokenAddress=Ye(i.fromTokenAddress,s,s)),i.toAccountAddress=Ye(a.toAccountAddress,o,s),i.toTokenAddress=Ye(i.toTokenAddress,o,s),i.gasFeePaymentMethod=="stablecoin"&&Zi(i.amount,c.decimals,i.fee,i.extraGas),i}function Zi(s,a,r,i){let o=le(s).minus(r).minus(i??0);if(o.lte(0))throw new lt(`Amount not enough to pay fee, ${R(le(o).minus(1).neg(),a).toFixed()} stables is missing`)}async function br(s,a,r,i){let o=await i.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:a,messenger:r,sourceToken:s.tokenAddress}),c={native:{int:o.fee,float:R(o.fee,x.getChainDecimalsByType(s.chainType)).toFixed()},adminFeeShareWithExtras:o.adminFeeShareWithExtras};if(o.sourceNativeTokenPrice){let A=be(new le(o.fee).mul(o.sourceNativeTokenPrice),x.getChainDecimalsByType(s.chainType),s.decimals).toFixed(0,le.roundUp);c.stablecoin={int:A,float:R(A,s.decimals).toFixed()}}return c}function _i(s,a,r){let i=r.extraGasMax[a];if(!i)throw new Wt(`Impossible to pay extra gas by '${a}' payment method`);let o=i.int;if(le(s).gt(o))throw new An(`Extra gas ${s} in int format, exceeded limit ${o} for '${a}' payment method`)}async function Sr(s,a,r,i){let o={},c=await i.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:a.allbridgeChainId,messenger:r,sourceToken:s.tokenAddress}),A=a.txCostAmount.maxAmount,m=R(A,x.getChainDecimalsByType(a.chainType)).toFixed(),u=le(m).div(c.exchangeRate).toFixed(x.getChainDecimalsByType(s.chainType),le.roundDown),d=I(u,x.getChainDecimalsByType(s.chainType)).toFixed(0);if(o.native={int:d,float:u},c.sourceNativeTokenPrice){let l=le(u).mul(c.sourceNativeTokenPrice).toFixed(s.decimals,le.roundDown);o.stablecoin={int:I(l,s.decimals).toFixed(0),float:l}}return{extraGasMax:o,destinationChain:{gasAmountMax:{int:A,float:m},swap:{int:a.txCostAmount.swap,float:R(a.txCostAmount.swap,x.getChainDecimalsByType(a.chainType)).toFixed()},transfer:{int:a.txCostAmount.transfer,float:R(a.txCostAmount.transfer,x.getChainDecimalsByType(a.chainType)).toFixed()}},exchangeRate:c.exchangeRate,sourceNativeTokenPrice:c.sourceNativeTokenPrice}}function Ta(s){return s.sourceToken.chainSymbol!==s.destinationToken.chainSymbol}async function hn(s,a,r,i){let o,c=new ba(a),A=new ba(r),m=await Ie(c,A),u=He(i,a);yn.setProvider(u);let d=await yn.Spl.token(u).account.token.fetchNullable(m);if(d?.authority.equals(c))o=Ye(m.toBase58(),"SOLANA",s);else{let l=await u.connection.getTokenAccountsByOwner(c,{mint:A});if(l.value.length===0&&!d)o=Ye(m.toBase58(),"SOLANA",s);else if(l.value.length>0){let p=l.value[0];if(!p?.pubkey)throw new f("First token account or its public key is undefined");o=Ye(p.pubkey.toBase58(),"SOLANA",s)}else throw new f("Associated account has wrong owner")}return o}var pe=class{};var Zt=class extends pe{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=Ve(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:c,fromTokenAddress:A,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:d}=r,p=this.getBridgeContract(o).methods.swap(i,A,u,m,d);return Promise.resolve({from:c,to:o,data:p.encodeABI()})}async buildRawTransactionSend(r){let i=await ke(this.chainType,r,this.api),{amount:o,contractAddress:c,fromAccountAddress:A,fromTokenAddress:m,toChainId:u,toAccountAddress:d,toTokenAddress:l,messenger:p,fee:g,gasFeePaymentMethod:h,extraGas:B,extraGasDest:T}=i,b="0x"+gn().toString("hex"),w,y,P=g;switch(B&&(P=$i(P).plus(B).toFixed()),p){case 3:case 4:{let F=await this.buildRawTransactionCctpSend(r,i,P);w=F.sendMethod,y=F.value;break}case 5:{let F=this.buildRawTransactionOftSend(r,i,P,T);w=F.sendMethod,y=F.value;break}case 1:case 2:{let F=this.getBridgeContract(c);h==="stablecoin"?(w=F.methods.swapAndBridge(m,o,d,u,l,b,p,P),y="0"):(w=F.methods.swapAndBridge(m,o,d,u,l,b,p,0),y=P)}break}return Promise.resolve({from:A,to:c,value:y,data:w.encodeABI()})}async buildRawTransactionCctpSend(r,i,o){let{amount:c,contractAddress:A,toChainId:m,toAccountAddress:u,gasFeePaymentMethod:d}=i,l=this.getCctpBridgeContract(A),p,g;if(r.destinationToken.chainType==="SOLANA"){let h=await hn(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));d==="stablecoin"?(p=l.methods.bridgeWithWalletAddress(c,h,u,m,o),g="0"):(p=l.methods.bridgeWithWalletAddress(c,h,u,m,0),g=o)}else d==="stablecoin"?(p=l.methods.bridge(c,u,m,o),g="0"):(p=l.methods.bridge(c,u,m,0),g=o);return{sendMethod:p,value:g}}buildRawTransactionOftSend(r,i,o,c){let{amount:A,contractAddress:m,toChainId:u,toAccountAddress:d,gasFeePaymentMethod:l}=i,p=this.getOftBridgeContract(m),g,h;return l==="stablecoin"?(g=p.methods.bridge(r.sourceToken.tokenAddress,A,d,u,o,c??"0","10"),h="0"):(g=p.methods.bridge(r.sourceToken.tokenAddress,A,d,u,0,c??"0","10"),h=o),{sendMethod:g,value:h}}async sendRawTransaction(r){let i=await this.web3.eth.estimateGas(r),o={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:c}=await this.web3.eth.sendTransaction({...r,gas:i,...o});return{txId:c.toString()}}getBridgeContract(r){return new this.web3.eth.Contract(zr.abi,r)}getCctpBridgeContract(r){return new this.web3.eth.Contract(qr.abi,r)}getOftBridgeContract(r){return new this.web3.eth.Contract(ea.abi,r)}};var Tn=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 c=_t(o.token,o.messenger);return this.tokenService.buildRawTransactionApprove({...o,spender:c},i)}async send(a,r){return M(a.amount),W("amount",a.amount,a.sourceToken.decimals),Ta(a)?bn(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionSend(a):bn(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionSwap(a)}};import{BN as Tt,Program as Cr,Spl as es,web3 as Qe}from"@project-serum/anchor";import{Keypair as Ma,PublicKey as _,SystemProgram as ts}from"@solana/web3.js";import{Big as Fe}from"big.js";var $t={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 Sa={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 Yi from"big.js";import{Web3 as Sn}from"web3";async function yt(s,a){return await Ji.token(a).account.token.fetch(s)}async function Pa(s,a,r){let i=await a.account.pool.fetch(r),o=i.decimals,c=Yi(i.feeShareBp.toString()).div(1e4).toFixed(),A={aValue:i.a.toString(),dValue:i.d.toString(),totalLpAmount:i.totalLpAmount.toString(),tokenBalance:i.tokenBalance.toString(),vUsdBalance:i.vUsdBalance.toString(),accRewardPerShareP:i.accRewardPerShareP.toString()};return Ge(s,{decimals:o,feeShare:c},A)}function wa(s){let a=s.amount,r="0x"+s.recipient.toString("hex"),i=s.sourceChainId,o=s.destinationChainId,c="0x"+s.receiveToken.toString("hex"),A="0x"+s.nonce.toString("hex"),m=1,u="0x"+s.chainBridge.toString("hex"),d=Sn.utils.encodePacked({t:"uint256",v:a},{t:"bytes32",v:r},{t:"uint256",v:i},{t:"bytes32",v:c},{t:"uint256",v:A},{t:"uint8",v:m});if(!d)throw new f("message cannot be undefined");let l=Sn.utils.keccak256(Buffer.from(d.replace("0x",""),"hex")),p=Buffer.from(l.replace("0x",""),"hex");p[0]=i,p[1]=o;let g=Sn.utils.encodePacked({t:"bytes32",v:"0x"+p.toString("hex")},{t:"bytes32",v:u});if(!g)throw new pt("messageWithSigner cannot be undefined");let h=Sn.utils.keccak256(Buffer.from(g.replace("0x",""),"hex")),B=Buffer.from(h.replace("0x",""),"hex");return B[0]=p[0],B[1]=p[1],B}import{ComputeBudgetInstruction as Ba,ComputeBudgetProgram as Pn,Connection as Ra,TransactionMessage as Li}from"@solana/web3.js";import{Big as Xi}from"big.js";import{AddressLookupTableAccount as Ca}from"@solana/web3.js";async function ot(s,a){return await Promise.all(s.message.addressTableLookups.map(async r=>new Ca({key:r.accountKey,state:Ca.deserialize(await a.getAccountInfo(r.accountKey).then(i=>{if(!i)throw new f("Cannot get AccountInfo");return i.data}))})))}var Pr="AUTO";async function ht(s,a,r){let i=new Ra(r,"confirmed"),o=(await i.simulateTransaction(s)).value.unitsConsumed;await va(s.instructions,o,a,i)}async function Ia(s,a,r){let i=new Ra(r,"confirmed"),o=await ot(s,i),c=Li.decompile(s.message,{addressLookupTableAccounts:o});if(s.serialize().length>1232)throw new ln;await va(c.instructions,769230,a,i),s.message=c.compileToV0Message(o)}async function va(s,a,r,i){if(a>0){let o=Ki(a,s);if(r?.solana){let c=r.solana;if(c===Pr)await wr(s,i);else if("pricePerUnitInMicroLamports"in c)await wr(s,i,c.pricePerUnitInMicroLamports);else{let A=Xi(c.extraFeeInLamports).div(o).mul(Et(6)).toFixed(0);await wr(s,i,A)}}}}function Ki(s,a){let r=a.findIndex(c=>c.programId.equals(Pn.programId)&&Ba.decodeInstructionType(c)==="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 wr(s,a,r){let i=s.findIndex(A=>A.programId.equals(Pn.programId)&&Ba.decodeInstructionType(A)==="SetComputeUnitPrice"),o=BigInt(r||await Hi(a)),c=Pn.setComputeUnitPrice({microLamports:o});return i>=0?s[i]=c:s.push(c),o.toString()}async function Hi(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 Qi}from"@solana/spl-token";import{Connection as zi,TransactionMessage as ka,VersionedTransaction as qi}from"@solana/web3.js";import Fa,{AxiosError as xa}from"axios";var wn=class{connection;jupiterUrl;apiKeyHeader;maxAccounts;constructor(a,r){this.connection=new zi(a),this.jupiterUrl=r.jupiterUrl.replace(/\/$/,""),this.apiKeyHeader=r.jupiterApiKeyHeader,this.maxAccounts=r.jupiterMaxAccounts}async getJupiterSwapTx(a,r,i,o){let c;try{let p=o?"ExactOut":"ExactIn",g=`${this.jupiterUrl}/quote?inputMint=${r}&outputMint=${Qi.toString()}&amount=${i}&swapMode=${p}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(g+=`&maxAccounts=${this.maxAccounts}`),c=await Fa.get(g,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(p){throw p instanceof xa&&p.response&&p.response.data&&p.response.data.error?new q(p.response.data.error):new q("Cannot get route")}let A;if(o&&c?.data?.inAmount)A=c.data.inAmount;else if(o)throw new q("Cannot get inAmount");let m;try{m=await Fa.post(`${this.jupiterUrl}/swap`,{quoteResponse:c.data,userPublicKey:a,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(p){throw p instanceof xa&&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 d=Buffer.from(u,"base64"),l=qi.deserialize(d);return o?{tx:l,amountIn:A}:{tx:l}}async amendJupiterWithSdkTx(a,r){try{let i=await ot(a,this.connection),o=await ot(r,this.connection),c=ka.decompile(a.message,{addressLookupTableAccounts:i}),A=ka.decompile(r.message,{addressLookupTableAccounts:o});if(A.instructions.shift(),c.instructions.push(...A.instructions),i.push(...o),a.message=c.compileToV0Message(i),r.message.header.numRequiredSignatures===2&&a.signatures.length===1){let m=r.signatures[0];if(!m)throw new f("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 Br=1e6,Oa=1.1,Cn=class extends pe{constructor(r,i,o){super();this.solanaRpcUrl=r;this.params=i;this.api=o;this.jupiterService=new wn(r,i.jupiterParams)}chainType="SOLANA";jupiterService;async buildRawTransactionSwap(r){let i=Ve(this.chainType,r);return await this.buildSwapTransaction(i,r.sourceToken.poolAddress,r.destinationToken.poolAddress,r.txFeeParams)}async buildSwapTransaction(r,i,o,c){let{fromAccountAddress:A,amount:m,contractAddress:u,fromTokenAddress:d,toTokenAddress:l,toAccountAddress:p,minimumReceiveAmount:g}=r,h=A,B=u,T=d,b=l,w=o,y=p,P=new _(h),F=He(this.solanaRpcUrl,P.toString()),j=new Cr($t,B,F),G=await gt(j.programId),me=await Ke(j.programId),K=new _(T),Oe=await ft(K,j.programId),De=new _(i),_e=await Ie(P,K),we=new _(y),ce=new _(b),ye=await ft(ce,j.programId),Ce=new _(w),ue=await Ie(we,ce),We=[Qe.ComputeBudgetProgram.setComputeUnitLimit({units:Br})];try{await yt(ue,F)}catch{let Si=await es.associatedToken(F).methods.create().accounts({mint:ce,owner:we,associatedAccount:ue}).instruction();We.push(Si)}let Ne=await j.methods.swap(new Tt(m),new Tt(g||0)).accounts({payer:P,config:me,bridgeAuthority:G,user:P,sendBridgeToken:Oe,sendMint:K,sendPool:De,sendUserToken:_e,receiveBridgeToken:ye,receiveMint:ce,receivePool:Ce,receiveUserToken:ue}).preInstructions(We).transaction(),Be=F.connection;return Ne.recentBlockhash=(await Be.getLatestBlockhash()).blockhash,Ne.feePayer=P,await ht(Ne,c,this.solanaRpcUrl),await this.convertToVersionedTransaction(Ne,Be)}async buildRawTransactionSend(r){let i=await ke(this.chainType,r,this.api),o=this.addPoolAddress(r,i),c=o.gasFeePaymentMethod=="stablecoin",A;if(c)try{let{tx:d,solTxSendUpdatedParams:l}=await this.processJup(o,r,!0);A=d,o={...o,...l}}catch{try{let{tx:l,solTxSendUpdatedParams:p}=await this.processJup(o,r,!1);A=l,o={...o,...p}}catch(l){throw l instanceof $?l:l instanceof Error&&l.message?new q(`Some error occurred during creation Jupiter swap transaction. ${l.message}`):new q("Some error occurred during creation Jupiter swap transaction")}}let m,u;switch(i.messenger){case 1:{let d=await this.prepareSwapAndBridgeData(o);m=await this.buildSwapAndBridgeAllbridgeTransaction(d);break}case 2:{let d=await this.prepareSwapAndBridgeData(o),{transaction:l,messageAccount:p}=await this.buildSwapAndBridgeWormholeTransaction(d);m=l,u=p;break}case 3:case 4:{let d=await this.prepareSwapAndBridgeCctpData(o),{transaction:l,messageSentEventDataKeypair:p}=await this.buildSwapAndBridgeCctpTransaction(r.destinationToken.chainSymbol,d);m=l,u=p;break}case 5:throw new ae("Messenger OFT is not supported yet.")}if(c){if(!A)throw new q("Swap tx is absent");m=await this.jupiterService.amendJupiterWithSdkTx(A,m)}return await Ia(m,r.txFeeParams,this.solanaRpcUrl),u&&m.sign([u]),m}async processJup(r,i,o){let{fee:c,extraGas:A,gasFeePaymentMethod:m}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(i.sourceToken,r),u=o?Fe(c):Fe(r.fee);A&&(u=u.plus(A)),o||(u=u.mul(Oa));let{tx:d,amountIn:l}=await this.jupiterService.getJupiterSwapTx(i.fromAccountAddress,i.sourceToken.tokenAddress,u.toFixed(0),o),p;if(o){if(!l)throw new q("Cannot get inAmount");p=Fe(r.amount).minus(Fe(l).mul(Oa)).toFixed(0)}else p=Fe(r.amount).minus(u).toFixed(0);if(Fe(p).lte(0))throw new lt(`Amount not enough to pay fee, ${R(Fe(p).minus(1).neg(),i.sourceToken.decimals).toFixed()} stables is missing`);return{tx:d,solTxSendUpdatedParams:{amount:p,fee:c,extraGas:A,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,sourceToken:r.tokenAddress})).sourceNativeTokenPrice,c=Fe(i.fee).div(o).mul(Fe(10).pow(x.getChainDecimalsByType("SOLANA")-r.decimals)).toFixed(0),A;return i.extraGas&&(A=Fe(i.extraGas).div(o).mul(Fe(10).pow(x.getChainDecimalsByType("SOLANA")-r.decimals)).toFixed(0)),{fee:c,extraGas:A,gasFeePaymentMethod:"native"}}return{fee:i.fee,extraGas:i.extraGas,gasFeePaymentMethod:"native"}}getExtraGasInstruction(r,i,o){return Qe.SystemProgram.transfer({fromPubkey:i,toPubkey:o,lamports:+r})}async prepareSwapAndBridgeData(r){let{amount:i,contractAddress:o,fromChainId:c,fromAccountAddress:A,fromTokenAddress:m,toChainId:u,toAccountAddress:d,toTokenAddress:l,poolAddress:p,extraGas:g}=r,h=m,B=A,T=u,b=l,w=d,y=o,P=c,F=He(this.solanaRpcUrl,B),j=new Cr($t,y,F),G=Array.from(gn()),me=new _(p),K=await Pa(i,j,me),Oe=await ta(G,j.programId),De=await gt(j.programId),_e=await Ie(new _(B),new _(h)),we=await ft(new _(h),j.programId),ce=await gr(T,j.programId),ye=await ra(T,Buffer.from(b),j.programId),Ce=await Ke(j.programId),ue=await j.account.config.fetch(Ce),We=await Ut(T,ue.gasOracleProgramId),Ne=await Ut(P,ue.gasOracleProgramId),Be=wa({amount:K,recipient:Buffer.from(w),nonce:Buffer.from(G),receiveToken:Buffer.from(b),destinationChainId:T,sourceChainId:P,chainBridge:(await gt(j.programId)).toBuffer()}),E={};return E.bridge=j,E.amount=new Tt(i),E.vusdAmount=new Tt(K),E.nonce=G,E.recipient=Array.from(w),E.receiveToken=Array.from(b),E.poolAccount=me,E.lockAccount=Oe,E.bridgeAuthority=De,E.userToken=_e,E.bridgeTokenAccount=we,E.chainBridgeAccount=ce,E.otherBridgeTokenAccount=ye,E.userAccount=new _(B),E.destinationChainId=T,E.mint=new _(h),E.config=Ce,E.configAccountInfo=ue,E.gasPrice=We,E.thisGasPrice=Ne,E.message=Be,g&&(E.extraGasInstruction=this.getExtraGasInstruction(g,E.userAccount,Ce)),E}async buildSwapAndBridgeAllbridgeTransaction(r){let{bridge:i,vusdAmount:o,nonce:c,recipient:A,receiveToken:m,poolAccount:u,lockAccount:d,bridgeAuthority:l,userToken:p,bridgeTokenAccount:g,chainBridgeAccount:h,otherBridgeTokenAccount:B,userAccount:T,destinationChainId:b,mint:w,config:y,configAccountInfo:P,gasPrice:F,thisGasPrice:j,message:G,extraGasInstruction:me}=r,K=P.allbridgeMessengerProgramId,Oe=await fr(b,K),De=await Ke(K),_e=await aa(G,K),we=[];me&&we.push(me);let ce=await i.methods.swapAndBridge({vusdAmount:o,nonce:c,destinationChainId:b,recipient:A,receiveToken:m}).accounts({mint:w,user:T,config:y,lock:d,pool:u,gasPrice:F,thisGasPrice:j,bridgeAuthority:l,userToken:p,bridgeToken:g,chainBridge:h,messenger:K,messengerGasUsage:Oe,messengerConfig:De,sentMessageAccount:_e,otherBridgeToken:B}).preInstructions([Qe.ComputeBudgetProgram.setComputeUnitLimit({units:Br})]).postInstructions(we).transaction(),ye=He(this.solanaRpcUrl,T.toString()).connection;return ce.recentBlockhash=(await ye.getLatestBlockhash()).blockhash,ce.feePayer=T,await this.convertToVersionedTransaction(ce,ye)}async convertToVersionedTransaction(r,i){let o=await i.getAddressLookupTable(new _(this.params.solanaLookUpTable)).then(A=>A.value);if(!o)throw new f("Cannot find allbridgeLookupTableAccount");let c=new Qe.TransactionMessage({payerKey:r.feePayer,recentBlockhash:r.recentBlockhash,instructions:r.instructions}).compileToV0Message([o]);return new Qe.VersionedTransaction(c)}async buildSwapAndBridgeWormholeTransaction(r){let{bridge:i,vusdAmount:o,nonce:c,recipient:A,receiveToken:m,poolAccount:u,lockAccount:d,bridgeAuthority:l,userToken:p,bridgeTokenAccount:g,chainBridgeAccount:h,otherBridgeTokenAccount:B,userAccount:T,destinationChainId:b,mint:w,config:y,configAccountInfo:P,gasPrice:F,thisGasPrice:j,message:G,extraGasInstruction:me}=r,K=this.params.wormholeMessengerProgramId,[Oe]=_.findProgramAddressSync([Buffer.from("Bridge")],new _(K)),[De]=_.findProgramAddressSync([Buffer.from("fee_collector")],new _(K)),[_e]=_.findProgramAddressSync([Buffer.from("Sequence"),l.toBuffer()],new _(K)),we=await fr(b,P.wormholeMessengerProgramId),ce=await Ke(P.wormholeMessengerProgramId),ye=Ma.generate(),Ce=He(this.solanaRpcUrl,T.toString()),ue=await Ce.connection.getAccountInfo(Oe);if(ue==null)throw new f("Cannot fetch wormhole bridge account info");let We=new Tt(ue.data.slice(16,24),"le").toString(),Ne=ts.transfer({fromPubkey:T,toPubkey:De,lamports:+We}),Be=[];me&&Be.push(me);let E={mint:w,user:T,config:y,lock:d,pool:u,gasPrice:F,thisGasPrice:j,bridgeAuthority:l,userToken:p,bridgeToken:g,chainBridge:h,otherBridgeToken:B,messengerGasUsage:we,wormholeProgram:K,bridge:Oe,message:ye.publicKey,wormholeMessenger:P.wormholeMessengerProgramId,sequence:_e,feeCollector:De,wormholeMessengerConfig:ce,clock:Qe.SYSVAR_CLOCK_PUBKEY},sn=await i.methods.swapAndBridgeWormhole({vusdAmount:o,nonce:c,destinationChainId:b,recipient:A,receiveToken:m}).accounts(E).preInstructions([Qe.ComputeBudgetProgram.setComputeUnitLimit({units:Br}),Ne]).postInstructions(Be).signers([ye]).transaction();return sn.recentBlockhash=(await Ce.connection.getLatestBlockhash()).blockhash,sn.feePayer=T,{transaction:await this.convertToVersionedTransaction(sn,Ce.connection),messageAccount:ye}}async prepareSwapAndBridgeCctpData(r){let{contractAddress:i,amount:o,fromAccountAddress:c,fromTokenAddress:A,toChainId:m,toAccountAddress:u,toTokenAddress:d,extraGas:l}=r,p=i;if(!p)throw new re("Such route does not support CCTP protocol");let g=4,h=c,B=d,T=u,b=He(this.solanaRpcUrl,h),w=new Cr(Sa,p,b),y=new _(A),P=await ia(y,w.programId),F=new _(h),j=await w.account.cctpBridge.fetch(P),G={};return G.cctpBridge=w,G.cctpBridgeAccount=P,G.cctpAddressAccount=new _(p),G.amount=new Tt(o),G.recipient=Array.from(T),G.receiveToken=Array.from(B),G.userToken=await Ie(F,y),G.bridgeAuthority=await na(P,w.programId),G.bridgeTokenAccount=await sa(y,w.programId),G.chainBridgeAccount=await gr(m,w.programId),G.userAccount=F,G.destinationChainId=m,G.mint=y,G.gasPrice=await Ut(m,j.gasOracleProgramId),G.thisGasPrice=await Ut(g,j.gasOracleProgramId),G.provider=b,l&&(G.extraGasInstruction=this.getExtraGasInstruction(l,G.userAccount,P)),G}async buildSwapAndBridgeCctpTransaction(r,i){let{cctpBridge:o,cctpBridgeAccount:c,amount:A,recipient:m,receiveToken:u,bridgeAuthority:d,userToken:l,bridgeTokenAccount:p,chainBridgeAccount:g,userAccount:h,destinationChainId:B,mint:T,gasPrice:b,thisGasPrice:w,extraGasInstruction:y,provider:P}=i,F=this.params.cctpParams.cctpDomains[r],j=this.params.cctpParams.cctpTransmitterProgramId,G=this.params.cctpParams.cctpTokenMessengerMinter;if(F==null||!j||!G)throw new f("CCTP is not configured");let me=new _(j),K=new _(G),{messageTransmitterAccount:Oe,tokenMessenger:De,tokenMessengerEventAuthority:_e,tokenMinter:we,localToken:ce,remoteTokenMessengerKey:ye,authorityPda:Ce}=ca(F,T,me,K),ue=[];y&&ue.push(y);let We=Ma.generate(),Ne=oa(o.programId,We.publicKey),Be=await o.methods.bridge({amount:A,destinationChainId:B,recipient:m,receiveToken:u}).accounts({mint:T,user:h,cctpBridge:c,messageSentEventData:We.publicKey,lock:Ne,cctpMessenger:K,messageTransmitterProgram:me,messageTransmitterAccount:Oe,tokenMessenger:De,tokenMinter:we,localToken:ce,remoteTokenMessengerKey:ye,authorityPda:Ce,eventAuthority:_e,bridgeToken:p,gasPrice:b,thisGasPrice:w,chainBridge:g,userToken:l,bridgeAuthority:d}).preInstructions([Qe.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(ue).transaction(),E=P.connection;return Be.recentBlockhash=(await E.getLatestBlockhash()).blockhash,Be.feePayer=h,{transaction:await this.convertToVersionedTransaction(Be,E),messageSentEventDataKeypair:We}}send(r){throw new J}};import{Address as Rr,contract as _P}from"@stellar/stellar-sdk";import{Big as as}from"big.js";import{contract as n}from"@stellar/stellar-sdk";var ns=n.Spec,rs=n.Client;var Jt=class extends rs{constructor(r){super(new ns(["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 Bn=class extends pe{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";async buildRawTransactionSend(r){let i=await ke(this.chainType,r,this.api);return await this.buildRawTransactionSendFromParams(i)}async buildRawTransactionSendFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:c,fromTokenAddress:A,toChainId:m,toAccountAddress:u,toTokenAddress:d,fee:l,gasFeePaymentMethod:p,extraGas:g}=r,h=l;g&&(h=as(h).plus(g).toFixed());let B=this.getContract(Jt,o,c),T;return p==="stablecoin"?T=await B.swap_and_bridge({sender:c,token:Rr.contract(Buffer.from(A)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(d),nonce:Ee(),gas_amount:BigInt(0),fee_token_amount:BigInt(h)}):T=await B.swap_and_bridge({sender:c,token:Rr.contract(Buffer.from(A)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(d),nonce:Ee(),gas_amount:BigInt(h),fee_token_amount:BigInt(0)}),T.toXDR()}async buildRawTransactionSwap(r){let i=Ve(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:c,fromTokenAddress:A,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:d}=r;return(await this.getContract(Jt,o,c).swap({sender:c,amount:BigInt(i),token:Rr.contract(Buffer.from(A)).toBuffer(),receive_token:Buffer.from(u),recipient:m,receive_amount_min:BigInt(d)})).toXDR()}send(r){throw new J}getContract(r,i,o){let c={publicKey:o,contractId:i,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new r(c)}};import{SuiClient as ys}from"@mysten/sui/client";import{coinWithBalance as L,Transaction as Ur}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as Xa}from"@mysten/sui/utils";import{Big as Er}from"big.js";var Vr=Re(ze());var Le=Re(ze());z();function Na(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::swap`,typeArguments:a,arguments:[v(s,r.bridge),v(s,r.coin),Se(s,r.receiveAmountMin,"u64")]})}function Ga(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::deposit`,typeArguments:[a],arguments:[v(s,r.bridge),v(s,r.userDeposit),v(s,r.coin)]})}function Ua(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::withdraw`,typeArguments:[a],arguments:[v(s,r.bridge),v(s,r.userDeposit),Se(s,r.amountLp,"u64")]})}function Ea(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::claim_reward`,typeArguments:[a],arguments:[v(s,r.bridge),v(s,r.userDeposit)]})}function Va(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::pool`,typeArguments:[a],arguments:[v(s,r)]})}function vr(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::swap_and_bridge_wormhole`,typeArguments:[a],arguments:[v(s,r.bridge),v(s,r.messenger),v(s,r.wormholeState),v(s,r.theClock),v(s,r.gasOracle),v(s,r.amount),v(s,r.recipient),Se(s,r.destinationChainId,"u8"),v(s,r.receiveToken),Se(s,r.nonce,"u256"),v(s,r.feeSuiCoin),v(s,r.feeTokenCoin)]})}function ja(s,a){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::new_user_deposit`,typeArguments:[a],arguments:[]})}function kr(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::swap_and_bridge`,typeArguments:[a],arguments:[v(s,r.bridge),v(s,r.messenger),v(s,r.gasOracle),v(s,r.amount),v(s,r.recipient),Se(s,r.destinationChainId,"u8"),v(s,r.receiveToken),Se(s,r.nonce,"u256"),v(s,r.feeSuiCoin),v(s,r.feeTokenCoin)]})}var Ka=Re(xr());var _a=Re(xr());z();function Mr(s,a,r){return s.moveCall({target:`${_a.PUBLISHED_AT}::cctp_bridge_interface::bridge`,typeArguments:[a],arguments:[v(s,r.cctpBridge),v(s,r.gasOracle),v(s,r.tokenMessengerMinterState),v(s,r.messageTransmitterState),v(s,r.treasury),v(s,r.denyList),v(s,r.amount),v(s,r.feeSuiCoin),v(s,r.feeTokenCoin),Se(s,r.destinationChainId,"u8"),v(s,r.recipient),v(s,r.recipientWalletAddress)]})}var Ha=Re(Dr());var La=Re(Dr());z();import{bcs as qe}from"@mysten/sui/bcs";import{fromHEX as us,toHEX as ds}from"@mysten/sui/utils";import{bcs as ms}from"@mysten/sui/bcs";z();var Wr=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=U(this.$typeName,...a),this.$typeArgs=a,this.elements=r}static reified(a){return{typeName:s.$typeName,fullTypeName:U(s.$typeName,k(a)),typeArgs:[k(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(Yt(a)),fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),new:r=>new s([k(a)],r),kind:"VectorClassReified"}}static get r(){return s.reified}static get bcs(){return ms.vector}static fromFields(a,r){return s.reified(a).new(r.map(i=>N(a,i)))}static fromFieldsWithTypes(a,r){return s.reified(a).new(r.map(i=>O(a,i)))}static fromBcs(a,r){return s.fromFields(a,s.bcs(Yt(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=>D(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 bt(s){return Wr.r(s)}function Y(s){return typeof s=="string"?{phantomType:s,kind:"PhantomReified"}:{phantomType:s.fullTypeName,kind:"PhantomReified"}}var ls=qe.bytes(32).transform({input:s=>us(s),output:s=>ds(s)});function Yt(s){switch(s){case"bool":return qe.bool();case"u8":return qe.u8();case"u16":return qe.u16();case"u32":return qe.u32();case"u64":return qe.u64();case"u128":return qe.u128();case"u256":return qe.u256();case"address":return ls;default:return s.bcs}}function k(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 N(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 O(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:O(s.reifiedTypeArgs[0],a);default:return s.fromFieldsWithTypes(a)}}function xe(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(C(a[i])!==C(k(r[i])))throw new Error(`provided item has mismatching type argments ${s} (expected ${k(r[i])}, got ${a[i]}))`)}function je(s,a){let{typeArgs:r}=te(s.type);xe(s.type,r,a)}function ct(s,a){let{typeName:r,typeArgs:i}=te(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 D(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:D(s.reifiedTypeArgs[0],a);default:return s.fromJSONField(a)}}z();var Rn="0x1";import{bcs as Iu}from"@mysten/sui/bcs";import{fromB64 as ku}from"@mysten/sui/utils";z();import{bcs as Nr}from"@mysten/sui/bcs";import{fromB64 as ps}from"@mysten/sui/utils";function In(s){return s=C(s),s===`${Rn}::string::String`}var vn=class s{__StructClass=!0;static get $typeName(){return`${Rn}::string::String`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;bytes;constructor(a,r){this.$fullTypeName=U(s.$typeName,...a),this.$typeArgs=a,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:U(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 Y(s.reified())}static get p(){return s.phantom()}static get bcs(){return Nr.struct("String",{bytes:Nr.vector(Nr.u8())})}static fromFields(a){return s.reified().new({bytes:N(bt("u8"),a.bytes)})}static fromFieldsWithTypes(a){if(!In(a.type))throw new Error("not a String type");return s.reified().new({bytes:O(bt("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:D(bt("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(!In(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"||!In(a.bcs.type))throw new Error("object at is not a String object");return s.fromBcs(ps(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"||!In(i.data.bcs.type))throw new Error(`object at id ${r} is not a String object`);return s.fromSuiObjectData(i.data)}};z();z();var et="0x2";import{bcs as Gr}from"@mysten/sui/bcs";import{fromB64 as Ya,fromHEX as gs,toHEX as fs}from"@mysten/sui/utils";function kn(s){return s=C(s),s===`${et}::object::ID`}var At=class s{__StructClass=!0;static get $typeName(){return`${et}::object::ID`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;bytes;constructor(a,r){this.$fullTypeName=U(s.$typeName,...a),this.$typeArgs=a,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:U(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 Y(s.reified())}static get p(){return s.phantom()}static get bcs(){return Gr.struct("ID",{bytes:Gr.bytes(32).transform({input:a=>gs(a),output:a=>fs(a)})})}static fromFields(a){return s.reified().new({bytes:N("address",a.bytes)})}static fromFieldsWithTypes(a){if(!kn(a.type))throw new Error("not a ID type");return s.reified().new({bytes:O("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:D("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(!kn(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"||!kn(a.bcs.type))throw new Error("object at is not a ID object");return s.fromBcs(Ya(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"||!kn(i.data.bcs.type))throw new Error(`object at id ${r} is not a ID object`);return s.fromSuiObjectData(i.data)}};function Fn(s){return s=C(s),s===`${et}::object::UID`}var Pe=class s{__StructClass=!0;static get $typeName(){return`${et}::object::UID`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;constructor(a,r){this.$fullTypeName=U(s.$typeName,...a),this.$typeArgs=a,this.id=r.id}static reified(){return{typeName:s.$typeName,fullTypeName:U(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 Y(s.reified())}static get p(){return s.phantom()}static get bcs(){return Gr.struct("UID",{id:At.bcs})}static fromFields(a){return s.reified().new({id:N(At.reified(),a.id)})}static fromFieldsWithTypes(a){if(!Fn(a.type))throw new Error("not a UID type");return s.reified().new({id:O(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:D(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(!Fn(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"||!Fn(a.bcs.type))throw new Error("object at is not a UID object");return s.fromBcs(Ya(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"||!Fn(i.data.bcs.type))throw new Error(`object at id ${r} is not a UID object`);return s.fromSuiObjectData(i.data)}};function Me(s,a){return s.moveCall({target:`${La.PUBLISHED_AT}::bytes32::from_hex`,arguments:[Se(s,a,`${vn.$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 St=class extends pe{constructor(r,i){super();this.nodeRpcUrlsConfig=r;this.api=i;this.client=new ys({url:r.getNodeRpcUrl(this.chainSymbol)})}chainType="SUI";chainSymbol="SUI";client;send(){throw new f("Method send not implemented.")}async buildRawTransactionSwap(r){let i=r.sourceToken.suiAddresses;if(!i)throw new f("SUI token must contain 'suiAddresses'");(0,Vr.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin);let o=Ve(this.chainType,r);return await this.buildRawTransactionSwapFromParams(o,i)}async buildRawTransactionSwapFromParams(r,i){let{amount:o,fromAccountAddress:c,fromTokenAddress:A,toTokenAddress:m,minimumReceiveAmount:u}=r,d=new Ur;d.setSender(c);let l={bridge:i.bridgeObjectAddress,coin:L({balance:BigInt(o),type:A}),receiveAmountMin:BigInt(u)},p=Na(d,[A,m],l),g=await Ze(h=>this.client.getCoins({owner:r.toAccountAddress,coinType:m,cursor:h}));return g.length===0||!g[0]?d.transferObjects([p],r.toAccountAddress):d.mergeCoins(g[0].coinObjectId,[p]),await d.toJSON({client:this.client})}async buildRawTransactionSendFromCustomTx(r,i,o){let c=Ur.from(r);return this.buildRawTransactionSendFromTx(o,c,i)}async buildRawTransactionSend(r){return this.buildRawTransactionSendFromTx(r,new Ur)}async buildRawTransactionSendFromTx(r,i,o){let c=await ke(this.chainType,r,this.api),{messenger:A}=c,m=r.sourceToken.suiAddresses;if(!m)throw new f("SUI token must contain 'suiAddresses'");switch((0,Vr.setAddress)(m.bridgeAddress,m.bridgeAddressOrigin),(0,Ha.setAddress)(m.utilsAddress),A){case 1:return this.buildRawTransactionAllbridgeSend(c,m,i,o);case 2:return this.buildRawTransactionWormholeSend(c,m,i,o);case 3:case 4:return this.buildRawTransactionCctpSend(r,c,m,i,o);case 5:throw new ae("Messenger OFT is not supported yet.")}}async buildRawTransactionAllbridgeSend(r,i,o,c){let{amount:A,fromAccountAddress:m,fromTokenAddress:u,toChainId:d,toAccountAddress:l,toTokenAddress:p,fee:g,gasFeePaymentMethod:h,extraGas:B}=r,T=g;if(B&&(T=Er(T).plus(B).toFixed()),o.setSender(m),h==="stablecoin"){let b=BigInt(A)-BigInt(T),w,y;if(c){let[F]=o.splitCoins(c,[T]);w=c,y=F}else w=L({balance:b,type:u}),y=L({balance:BigInt(T),type:u});let P={bridge:i.bridgeObjectAddress,messenger:i.allbridgeMessengerObjectAddress,amount:w,destinationChainId:d,nonce:Ee(),recipient:Me(o,ve(l)),receiveToken:Me(o,ve(p)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:y,feeSuiCoin:L({balance:BigInt(0),useGasCoin:!1})};kr(o,u,P)}else{let b=T==="0"?L({balance:BigInt(T),useGasCoin:!1}):L({balance:BigInt(T)}),w={bridge:i.bridgeObjectAddress,messenger:i.allbridgeMessengerObjectAddress,amount:c??L({balance:BigInt(A),type:u}),destinationChainId:d,nonce:Ee(),recipient:Me(o,ve(l)),receiveToken:Me(o,ve(p)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:L({balance:BigInt(0),type:u}),feeSuiCoin:b};kr(o,u,w)}return await o.toJSON({client:this.client})}async buildRawTransactionWormholeSend(r,i,o,c){let{amount:A,fromAccountAddress:m,fromTokenAddress:u,toChainId:d,toAccountAddress:l,toTokenAddress:p,fee:g,gasFeePaymentMethod:h,extraGas:B}=r,T=g;if(B&&(T=Er(T).plus(B).toFixed()),o.setSender(m),h==="stablecoin"){let b=BigInt(A)-BigInt(T),w,y;if(c){let[F]=o.splitCoins(c,[T]);w=c,y=F}else w=L({balance:b,type:u}),y=L({balance:BigInt(T),type:u});let P={bridge:i.bridgeObjectAddress,messenger:i.wormholeMessengerObjectAddress,wormholeState:i.wormholeStateObjectAddress,theClock:Xa,amount:w,destinationChainId:d,nonce:Ee(),recipient:Me(o,ve(l)),receiveToken:Me(o,ve(p)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:y,feeSuiCoin:L({balance:BigInt(0),useGasCoin:!1})};vr(o,u,P)}else{let b=T==="0"?L({balance:BigInt(T),useGasCoin:!1}):L({balance:BigInt(T)}),w={bridge:i.bridgeObjectAddress,messenger:i.wormholeMessengerObjectAddress,wormholeState:i.wormholeStateObjectAddress,theClock:Xa,amount:c??L({balance:BigInt(A),type:u}),destinationChainId:d,nonce:Ee(),recipient:Me(o,ve(l)),receiveToken:Me(o,ve(p)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:L({balance:BigInt(0),type:u}),feeSuiCoin:b};vr(o,u,w)}return await o.toJSON({client:this.client})}async buildRawTransactionCctpSend(r,i,o,c,A){let{amount:m,fromAccountAddress:u,fromTokenAddress:d,toChainId:l,toAccountAddress:p,fee:g,gasFeePaymentMethod:h,extraGas:B}=i;(0,Ka.setAddress)(o.cctpAddress,o.cctpAddressOrigin);let T=g;B&&(T=Er(T).plus(B).toFixed()),c.setSender(u);let b=Me(c,ve(p)),w;if(r.destinationToken.chainType==="SOLANA"){let y=await hn(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));w=Me(c,ve(y))}else w=b;if(h==="stablecoin"){let y=BigInt(m)-BigInt(T),P,F;if(A){let[G]=c.splitCoins(A,[T]);P=A,F=G}else P=L({balance:y,type:d}),F=L({balance:BigInt(T),type:d});let j={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:P,destinationChainId:l,recipient:w,recipientWalletAddress:b,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:F,feeSuiCoin:L({balance:BigInt(0),useGasCoin:!1})};Mr(c,d,j)}else{let y=T==="0"?L({balance:BigInt(T),useGasCoin:!1}):L({balance:BigInt(T)}),P={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:A??L({balance:BigInt(m),type:d}),destinationChainId:l,recipient:w,recipientWalletAddress:b,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:L({balance:BigInt(0),type:d}),feeSuiCoin:y};Mr(c,d,P)}return await c.toJSON({client:this.client})}};import{Big as bs}from"big.js";import hs from"bn.js";function xn(s){return"0x"+new hs(s).toString("hex")}function Qa(s){return new Promise(a=>setTimeout(()=>a(),s))}async function Mn(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 Ts(s,o),{txId:o}}async function Ts(s,a,r=1e4){let i=Date.now();for(;;){if(Date.now()-i>r)throw new Nt("Transaction not found");let o=await s.trx.getUnconfirmedTransactionInfo(a);if(!o?.receipt){await Qa(2e3);continue}if(o.receipt.result==="SUCCESS")return o;throw new Nt(`Transaction status is ${o.receipt.result}`)}}var Lt=class extends pe{constructor(r,i){super();this.tronWeb=r;this.api=i}chainType="TRX";async send(r){let i=await ke(this.chainType,r,this.api),o=await this.buildRawTransactionSendFromParams(r,i);return await Mn(this.tronWeb,o)}async buildRawTransactionSwap(r){let i=Ve(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:c,fromTokenAddress:A,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:d}=r,l=[{type:"uint256",value:i},{type:"bytes32",value:A},{type:"bytes32",value:u},{type:"address",value:m},{type:"uint256",value:d}];return this.buildRawTransaction(o,"swap(uint256,bytes32,bytes32,address,uint256)",l,"0",c)}async buildRawTransactionSend(r){let i=await ke(this.chainType,r,this.api);return this.buildRawTransactionSendFromParams(r,i)}async buildRawTransactionSendFromParams(r,i){let{amount:o,contractAddress:c,fromAccountAddress:A,fromTokenAddress:m,toChainId:u,toAccountAddress:d,toTokenAddress:l,messenger:p,fee:g,gasFeePaymentMethod:h,extraGas:B,extraGasDest:T}=i,b=g;B&&(b=bs(b).plus(B).toFixed());let w=Ee().toString(),y,P,F;switch(p){case 3:case 4:h==="stablecoin"?(y=[{type:"uint256",value:o},{type:"bytes32",value:d},{type:"uint256",value:u},{type:"uint256",value:b}],P="0"):(y=[{type:"uint256",value:o},{type:"bytes32",value:d},{type:"uint256",value:u},{type:"uint256",value:0}],P=b),F="bridge(uint256,bytes32,uint256,uint256)";break;case 5:h==="stablecoin"?(y=[{type:"address",value:r.sourceToken.tokenAddress},{type:"uint256",value:o},{type:"bytes32",value:d},{type:"uint256",value:u},{type:"uint256",value:b},{type:"uint256",value:T??"0"},{type:"uint256",value:"10"}],P="0"):(y=[{type:"address",value:r.sourceToken.tokenAddress},{type:"uint256",value:o},{type:"bytes32",value:d},{type:"uint256",value:u},{type:"uint256",value:0},{type:"uint256",value:T??"0"},{type:"uint256",value:"10"}],P=b),F="bridge(address,uint256,bytes32,uint256,uint256,uint256,uint256)";break;case 1:case 2:h==="stablecoin"?(y=[{type:"bytes32",value:m},{type:"uint256",value:o},{type:"bytes32",value:d},{type:"uint256",value:u},{type:"bytes32",value:l},{type:"uint256",value:w},{type:"uint8",value:p},{type:"uint256",value:b}],P="0"):(y=[{type:"bytes32",value:m},{type:"uint256",value:o},{type:"bytes32",value:d},{type:"uint256",value:u},{type:"bytes32",value:l},{type:"uint256",value:w},{type:"uint8",value:p},{type:"uint256",value:0}],P=b),F="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)";break}return this.buildRawTransaction(c,F,y,P,A)}async buildRawTransaction(r,i,o,c,A){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+c},o,A);if(!m?.result?.result)throw new f("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var On=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new Tn(a,r,i,o)}rawTxBuilder;async getAllowance(a,r){let i,o;r?(i=a,o=r):o=a;let c=_t(o.token,o.messenger);return await this.tokenService.getAllowance({...o,spender:c},i)}async checkAllowance(a,r){let i,o;r?(i=a,o=r):o=a;let c=_t(o.token,o.messenger);return this.tokenService.checkAllowance({...o,spender:c},i)}async approve(a,r){let i=_t(r.token,r.messenger);return this.tokenService.approve(a,{...r,spender:i})}async send(a,r){return M(r.amount),W("amount",r.amount,r.sourceToken.decimals),bn(r.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).send(r)}};function _t(s,a=1){switch(a){case 3:if(s.cctpAddress)return s.cctpAddress;throw new re("Such route does not support CCTP protocol");case 4:if(s.cctpV2Address)return s.cctpV2Address;throw new re("Such route does not support CCTP V2 protocol");case 5:if(s.oftBridgeAddress)return s.oftBridgeAddress;throw new ae("Such route does not support OFT protocol");case 1:case 2:return s.bridgeAddress}}function bn(s,a,r,i,o){switch(x.getChainProperty(s).chainType){case"EVM":{if(o)return new Zt(o,a,r);{let c=r.getNodeRpcUrl(s);return new Zt(new Ps(c),a,r)}}case"TRX":{if(o)return new Lt(o,a);{let c=r.getNodeRpcUrl(s);return new Lt(new Ss({fullHost:c,solidityNode:c,eventServer:c}),a)}}case"SOLANA":return new Cn(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 Bn(r,i,a);case"SUI":return new St(r,a)}}import{Big as Vs}from"big.js";import js from"timed-cache";import{TronWeb as Zs}from"tronweb";import{FMT_BYTES as _s,FMT_NUMBER as $s,Web3 as Js}from"web3";import{Big as Xe}from"big.js";function za(s,a,r,i,o){let c=I(s,3),A=Xe(c),m=Xe(r),u=Xe(i).plus(o),d,l;if(m.eq(0)||u.eq(0)){let g=A.div(2);d=Xe(i).plus(g),l=Xe(o).plus(g)}else d=Xe(i).plus(A.mul(i).div(u)),l=Xe(o).plus(A.mul(o).div(u));return Xe(pa(a,d.toFixed(),l.toFixed())).minus(m).toFixed()}function qa(s){let a=I(s,3);return Xe(a).round().toFixed()}import{Web3 as tt}from"web3";var ws={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"}]},Xt=ws;var oe=class{lpAmount;rewardDebt;constructor(a){this.lpAmount=a.lpAmount,this.rewardDebt=a.rewardDebt}get userLiquidity(){return R(this.lpAmount,3).toFixed()}earned(a,r){let i=da(this.lpAmount,this.rewardDebt,a.accRewardPerShareP,a.p);return r?R(i,r).toFixed():i}};var ge=class{};var Kt=class extends ge{constructor(r,i){super();this.web3=r;this.api=i}chainType="EVM";P=52;async getUserBalanceInfo(r,i){let o;try{o=await pn(this.getUserBalanceInfoByBatch(r,i),`Cannot get UserBalanceInfo for ${i.name} on ${i.chainSymbol}`,5e3)}catch{o=await pr(()=>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 pn(this.getPoolInfoByBatch(r),`Cannot get PoolInfo for ${r.name} on ${r.chainSymbol}`,5e3)}catch{i=await pr(()=>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,c=this.getPoolContract(i.poolAddress),A=c.methods.userRewardDebt(r).encodeABI(),m=c.methods.balanceOf(r).encodeABI();o.add({method:"eth_call",params:[{to:i.poolAddress,data:A},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:m},"latest"]});let[u,d]=await o.execute();if(u&&d&&!u.error&&!d.error)return new oe({lpAmount:tt.utils.toBigInt(d.result).toString(),rewardDebt:tt.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(),c=(await this.getPoolContract(i.poolAddress).methods.balanceOf(r).call()).toString();return new oe({lpAmount:c,rewardDebt:o})}async getPoolInfoByBatch(r){let i=new this.web3.eth.BatchRequest,o=this.getPoolContract(r.poolAddress),c=o.methods.a().encodeABI(),A=o.methods.d().encodeABI(),m=o.methods.tokenBalance().encodeABI(),u=o.methods.vUsdBalance().encodeABI(),d=o.methods.totalSupply().encodeABI(),l=o.methods.accRewardPerShareP().encodeABI();i.add({method:"eth_call",params:[{to:r.poolAddress,data:c},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:A},"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:d},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:l},"latest"]});let[p,g,h,B,T,b]=await i.execute();if(p&&g&&h&&B&&T&&b&&!p.error&&!g.error&&!h.error&&!B.error&&!T.error&&!b.error){let w=tt.utils.toBigInt(h.result).toString(),y=tt.utils.toBigInt(B.result).toString(),P=se({tokenBalance:w,vUsdBalance:y});return{aValue:tt.utils.toBigInt(p.result).toString(),dValue:tt.utils.toBigInt(g.result).toString(),tokenBalance:w,vUsdBalance:y,totalLpAmount:tt.utils.toBigInt(T.result).toString(),accRewardPerShareP:tt.utils.toBigInt(b.result).toString(),p:this.P,imbalance:P}}throw new Error("Batched failed")}async getPoolInfoPerProperty(r){let i=this.getPoolContract(r.poolAddress),o=(await i.methods.a().call()).toString(),c=(await i.methods.d().call()).toString(),A=(await i.methods.tokenBalance().call()).toString(),m=(await i.methods.vUsdBalance().call()).toString(),u=(await i.methods.totalSupply().call()).toString(),d=(await i.methods.accRewardPerShareP().call()).toString(),l=se({tokenBalance:A,vUsdBalance:m});return{aValue:o,dValue:c,tokenBalance:A,vUsdBalance:m,totalLpAmount:u,accRewardPerShareP:d,p:this.P,imbalance:l}}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(Xt.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){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 M(a.amount),W("amount",a.amount,a.token.decimals),a.amount=I(a.amount,a.token.decimals).toFixed(),Pt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionDeposit(a)}async withdraw(a,r){return M(a.amount),W("amount",a.amount,a.token.decimals),a.amount=I(a.amount,3).toFixed(),Pt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionWithdraw(a)}async claimRewards(a,r){return Pt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionClaimRewards(a)}};import{AnchorProvider as Cs,BN as ei,Program as Bs,Spl as Rs,web3 as Is}from"@project-serum/anchor";import{Connection as vs,PublicKey as nt}from"@solana/web3.js";var Wn=class extends ge{constructor(r,i){super();this.solanaRpcUrl=r;this.api=i}chainType="SOLANA";P=48;async getUserBalanceInfo(r,i){let o=this.buildAnchorProvider(r),c=this.getBridge(i.bridgeAddress,o),A=new nt(i.poolAddress),m=await c.account.pool.fetch(A);try{let u=await yr(new nt(r),m.mint,c.programId),{lpAmount:d,rewardDebt:l}=await c.account.userDeposit.fetch(u);return new oe({lpAmount:d.toString(),rewardDebt:l.toString()})}catch{return new oe({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),c=o.vUsdBalance.toString(),A=o.tokenBalance.toString(),m=se({tokenBalance:A,vUsdBalance:c});return{dValue:o.d.toString(),aValue:o.a.toString(),totalLpAmount:o.totalLpAmount.toString(),vUsdBalance:c,tokenBalance:A,accRewardPerShareP:o.accRewardPerShareP.toString(),p:this.P,imbalance:m}}async buildRawTransactionDeposit(r){let{bridge:i,accounts:o,preInstructions:c}=await this.prepareDataForTransaction(r),A=await i.methods.deposit(new ei(r.amount)).accounts(o).preInstructions(c).transaction();return A.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,A.feePayer=new nt(r.accountAddress),await ht(A,r.txFeeParams,this.solanaRpcUrl),A}async buildRawTransactionWithdraw(r){let{bridge:i,accounts:o,preInstructions:c}=await this.prepareDataForTransaction(r),A=await i.methods.withdraw(new ei(r.amount)).accounts(o).preInstructions(c).transaction();return A.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,A.feePayer=new nt(r.accountAddress),await ht(A,r.txFeeParams,this.solanaRpcUrl),A}async buildRawTransactionClaimRewards(r){let{bridge:i,accounts:o,preInstructions:c}=await this.prepareDataForTransaction(r),A=await i.methods.claimRewards().accounts(o).preInstructions(c).transaction();return A.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,A.feePayer=new nt(r.accountAddress),await ht(A,r.txFeeParams,this.solanaRpcUrl),A}async prepareDataForTransaction(r){let i=this.buildAnchorProvider(r.accountAddress),o=this.getBridge(r.token.bridgeAddress,i),{accounts:c,preInstructions:A}=await this._getLPTransactionData(o,r.token.poolAddress,r.accountAddress,i);return{bridge:o,accounts:c,preInstructions:A}}getBridge(r,i){return new Bs($t,r,i)}buildAnchorProvider(r){let i=new vs(this.solanaRpcUrl,"confirmed"),o=new nt(r);return new Cs(i,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(r,i,o,c){let A=new nt(o),m=await Ke(r.programId),u=await gt(r.programId),d=new nt(i),p=(await r.account.pool.fetch(d)).mint,g=await Ie(A,p),h=await ft(p,r.programId),B=await yr(A,p,r.programId),T=[Is.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await yt(g,c)}catch{let P=await Rs.associatedToken(c).methods.create().accounts({mint:p,owner:A,associatedAccount:g}).instruction();T.push(P)}try{await r.account.userDeposit.fetch(B)}catch{let y=await r.methods.initDepositAccount().accounts({mint:p,user:A,userDeposit:B}).instruction();T.push(y)}return{accounts:{mint:p,user:A,config:m,pool:d,bridgeAuthority:u,userDeposit:B,userToken:g,bridgeToken:h},preInstructions:T}}};import{contract as $P}from"@stellar/stellar-sdk";import{contract as t}from"@stellar/stellar-sdk";var ks=t.Spec,Fs=t.Client;var Nn=class extends Fs{constructor(r){super(new ks(["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 xs}from"@stellar/stellar-sdk";var ti=xs.Api;function wt(s){let{simulation:a,options:r}=s;if(!a)throw new Error("Soroban assembled transaction does not have simulation");if(ti.isSimulationSuccess(a))return a.result==null?void 0:r.parseResultXdr(a.result.retval);throw new Error(a.error)}function Ct(s){let{simulation:a}=s;if(!a)throw new Error("Soroban assembled transaction does not have simulation");return ti.isSimulationError(a)}var Gn=class extends ge{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";P=48;async getUserBalanceInfo(r,i){let c=await this.getContract(i.poolAddress).get_user_deposit({user:r});if(Ct(c))throw new f;let A=wt(c);if(!A)throw new f;let m=A.unwrap();return new oe({lpAmount:m.lp_amount.toString(),rewardDebt:m.reward_debt.toString()})}async getPoolInfoFromChain(r){let o=await this.getContract(r.poolAddress).get_pool();if(Ct(o))throw new f;let c=wt(o);if(!c)throw new f;let A=c.unwrap();return{aValue:A.a.toString(),accRewardPerShareP:A.acc_reward_per_share_p.toString(),dValue:A.d.toString(),tokenBalance:A.token_balance.toString(),p:this.P,totalLpAmount:A.total_lp_amount.toString(),vUsdBalance:A.v_usd_balance.toString(),imbalance:se({tokenBalance:A.token_balance.toString(),vUsdBalance:A.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 Nn(o)}};import{SuiClient as Us}from"@mysten/sui/client";import{Transaction as Yn}from"@mysten/sui/transactions";var Rt=Re(ze());z();z();import{bcs as ni}from"@mysten/sui/bcs";import{fromB64 as Ms}from"@mysten/sui/utils";function Un(s){return s=C(s),s.startsWith(`${et}::balance::Balance<`)}var ne=class s{__StructClass=!0;static get $typeName(){return`${et}::balance::Balance`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;value;constructor(a,r){this.$fullTypeName=U(s.$typeName,...a),this.$typeArgs=a,this.value=r.value}static reified(a){return{typeName:s.$typeName,fullTypeName:U(s.$typeName,k(a)),typeArgs:[k(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([k(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Y(s.reified(a))}static get p(){return s.phantom}static get bcs(){return ni.struct("Balance",{value:ni.u64()})}static fromFields(a,r){return s.reified(a).new({value:N("u64",r.value)})}static fromFieldsWithTypes(a,r){if(!Un(r.type))throw new Error("not a Balance type");return je(r,[a]),s.reified(a).new({value:O("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:D("u64",r.value)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(U(s.$typeName,k(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 Balance 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 Balance object");let i=te(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=C(i[0]),c=C(k(a));if(o!==C(k(a)))throw new Error(`type argument mismatch: expected '${c}' 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 Balance 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 Balance object`);return s.fromSuiObjectData(r,o.data)}};var _r=Re(ze());z();var jr=Re(ze());import{bcs as En}from"@mysten/sui/bcs";import{fromB64 as Os}from"@mysten/sui/utils";function Vn(s){return s=C(s),s.startsWith(`${jr.PKG_V1}::pool_rewards::PoolRewards<`)}var mt=class s{__StructClass=!0;static get $typeName(){return`${jr.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=U(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:U(s.$typeName,k(a)),typeArgs:[k(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([k(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Y(s.reified(a))}static get p(){return s.phantom}static get bcs(){return En.struct("PoolRewards",{acc_reward_per_share_p:En.u128(),admin_fee_share_bp:En.u64(),admin_fee:ne.bcs,rewards:ne.bcs,lp_supply:En.u64()})}static fromFields(a,r){return s.reified(a).new({accRewardPerShareP:N("u128",r.acc_reward_per_share_p),adminFeeShareBp:N("u64",r.admin_fee_share_bp),adminFee:N(ne.reified(a),r.admin_fee),rewards:N(ne.reified(a),r.rewards),lpSupply:N("u64",r.lp_supply)})}static fromFieldsWithTypes(a,r){if(!Vn(r.type))throw new Error("not a PoolRewards type");return je(r,[a]),s.reified(a).new({accRewardPerShareP:O("u128",r.fields.acc_reward_per_share_p),adminFeeShareBp:O("u64",r.fields.admin_fee_share_bp),adminFee:O(ne.reified(a),r.fields.admin_fee),rewards:O(ne.reified(a),r.fields.rewards),lpSupply:O("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:D("u128",r.accRewardPerShareP),adminFeeShareBp:D("u64",r.adminFeeShareBp),adminFee:D(ne.reified(a),r.adminFee),rewards:D(ne.reified(a),r.rewards),lpSupply:D("u64",r.lpSupply)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(U(s.$typeName,k(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 PoolRewards 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 PoolRewards object");let i=te(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=C(i[0]),c=C(k(a));if(o!==C(k(a)))throw new Error(`type argument mismatch: expected '${c}' but got '${o}'`);return s.fromBcs(a,Os(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"||!Vn(o.data.bcs.type))throw new Error(`object at id ${i} is not a PoolRewards object`);return s.fromSuiObjectData(r,o.data)}};z();var Zr=Re(ze());import{bcs as Bt}from"@mysten/sui/bcs";import{fromB64 as Ds}from"@mysten/sui/utils";function jn(s){return s=C(s),s.startsWith(`${Zr.PKG_V1}::pool_state::PoolState<`)}var ut=class s{__StructClass=!0;static get $typeName(){return`${Zr.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=U(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:U(s.$typeName,k(a)),typeArgs:[k(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([k(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Y(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Bt.struct("PoolState",{token_balance:Bt.u64(),vusd_balance:Bt.u64(),d:Bt.u64(),a:Bt.u64(),balance_ratio_min_bp:Bt.u64()})}static fromFields(a,r){return s.reified(a).new({tokenBalance:N("u64",r.token_balance),vusdBalance:N("u64",r.vusd_balance),d:N("u64",r.d),a:N("u64",r.a),balanceRatioMinBp:N("u64",r.balance_ratio_min_bp)})}static fromFieldsWithTypes(a,r){if(!jn(r.type))throw new Error("not a PoolState type");return je(r,[a]),s.reified(a).new({tokenBalance:O("u64",r.fields.token_balance),vusdBalance:O("u64",r.fields.vusd_balance),d:O("u64",r.fields.d),a:O("u64",r.fields.a),balanceRatioMinBp:O("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:D("u64",r.tokenBalance),vusdBalance:D("u64",r.vusdBalance),d:D("u64",r.d),a:D("u64",r.a),balanceRatioMinBp:D("u64",r.balanceRatioMinBp)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(U(s.$typeName,k(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!jn(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"||!jn(r.bcs.type))throw new Error("object at is not a PoolState object");let i=te(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=C(i[0]),c=C(k(a));if(o!==C(k(a)))throw new Error(`type argument mismatch: expected '${c}' but got '${o}'`);return s.fromBcs(a,Ds(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"||!jn(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 Ht}from"@mysten/sui/bcs";import{fromB64 as Ws}from"@mysten/sui/utils";function Zn(s){return s=C(s),s.startsWith(`${_r.PKG_V1}::pool::Pool<`)}var _n=class s{__StructClass=!0;static get $typeName(){return`${_r.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=U(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:U(s.$typeName,k(a)),typeArgs:[k(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([k(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Y(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Ht.struct("Pool",{id:Pe.bcs,state:ut.bcs,rewards:mt.bcs,fee_share_bp:Ht.u64(),can_deposit:Ht.bool(),can_withdraw:Ht.bool(),decimals:Ht.u8(),balance:ne.bcs})}static fromFields(a,r){return s.reified(a).new({id:N(Pe.reified(),r.id),state:N(ut.reified(a),r.state),rewards:N(mt.reified(a),r.rewards),feeShareBp:N("u64",r.fee_share_bp),canDeposit:N("bool",r.can_deposit),canWithdraw:N("bool",r.can_withdraw),decimals:N("u8",r.decimals),balance:N(ne.reified(a),r.balance)})}static fromFieldsWithTypes(a,r){if(!Zn(r.type))throw new Error("not a Pool type");return je(r,[a]),s.reified(a).new({id:O(Pe.reified(),r.fields.id),state:O(ut.reified(a),r.fields.state),rewards:O(mt.reified(a),r.fields.rewards),feeShareBp:O("u64",r.fields.fee_share_bp),canDeposit:O("bool",r.fields.can_deposit),canWithdraw:O("bool",r.fields.can_withdraw),decimals:O("u8",r.fields.decimals),balance:O(ne.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:D(Pe.reified(),r.id),state:D(ut.reified(a),r.state),rewards:D(mt.reified(a),r.rewards),feeShareBp:D("u64",r.feeShareBp),canDeposit:D("bool",r.canDeposit),canWithdraw:D("bool",r.canWithdraw),decimals:D("u8",r.decimals),balance:D(ne.reified(a),r.balance)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(U(s.$typeName,k(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Zn(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"||!Zn(r.bcs.type))throw new Error("object at is not a Pool object");let i=te(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=C(i[0]),c=C(k(a));if(o!==C(k(a)))throw new Error(`type argument mismatch: expected '${c}' but got '${o}'`);return s.fromBcs(a,Ws(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"||!Zn(o.data.bcs.type))throw new Error(`object at id ${i} is not a Pool object`);return s.fromSuiObjectData(r,o.data)}};z();var Jr=Re(ze());import{bcs as $r}from"@mysten/sui/bcs";import{fromB64 as Ns}from"@mysten/sui/utils";function $n(s){return s=C(s),s.startsWith(`${Jr.PKG_V1}::user_deposit::UserDeposit<`)}var Jn=class s{__StructClass=!0;static get $typeName(){return`${Jr.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=U(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:U(s.$typeName,k(a)),typeArgs:[k(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([k(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Y(s.reified(a))}static get p(){return s.phantom}static get bcs(){return $r.struct("UserDeposit",{id:Pe.bcs,lp_amount:$r.u64(),reward_debt:$r.u64()})}static fromFields(a,r){return s.reified(a).new({id:N(Pe.reified(),r.id),lpAmount:N("u64",r.lp_amount),rewardDebt:N("u64",r.reward_debt)})}static fromFieldsWithTypes(a,r){if(!$n(r.type))throw new Error("not a UserDeposit type");return je(r,[a]),s.reified(a).new({id:O(Pe.reified(),r.fields.id),lpAmount:O("u64",r.fields.lp_amount),rewardDebt:O("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:D(Pe.reified(),r.id),lpAmount:D("u64",r.lpAmount),rewardDebt:D("u64",r.rewardDebt)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(U(s.$typeName,k(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!$n(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"||!$n(r.bcs.type))throw new Error("object at is not a UserDeposit object");let i=te(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=C(i[0]),c=C(k(a));if(o!==C(k(a)))throw new Error(`type argument mismatch: expected '${c}' but got '${o}'`);return s.fromBcs(a,Ns(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"||!$n(o.data.bcs.type))throw new Error(`object at id ${i} is not a UserDeposit object`);return s.fromSuiObjectData(r,o.data)}};function ai(s,a,r){if(a.length===0||!a[0])return[];let i=a[0],o=s.reduce((m,u)=>m+BigInt(u),BigInt(0)),c=BigInt(i.balance),A=[];for(let m of a.slice(1)){if(c>o)return ri(r,i,A,s);c+=BigInt(m.balance),A.push(m)}return c>=o?ri(r,i,A,s):[]}function ri(s,a,r,i){let o=i.map(c=>s.pure.u64(c));return r.length>0&&s.mergeCoins(a.coinObjectId,r.map(c=>c.coinObjectId)),s.splitCoins(a.coinObjectId,o)}var Gs="0x0000000000000000000000000000000000000000000000000000000000000000";async function ii(s,a,r){let i=await s.devInspectTransactionBlock({sender:Gs,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[c,A]=o;return typeof r=="object"?r.fromBcs(Uint8Array.from(c)).toJSONField():Yt(r).parse(Uint8Array.from(c))}var Ln=class extends ge{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.client=new Us({url:r})}chainType="SUI";client;async getUserBalanceInfo(r,i){if(!i.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let o=i.suiAddresses;if(!o)throw new f("SUI token must contain 'suiAddresses'");(0,Rt.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin);let A=(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 f("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new oe({lpAmount:A.lpAmount.toString(),rewardDebt:A.rewardDebt.toString()})}async fetchDeposits(r,i){return await Ze(o=>this.client.getOwnedObjects({owner:r,filter:{StructType:Jn.phantom(Y(i)).phantomType},options:{showContent:!0},cursor:o}))}async getPoolInfoFromChain(r){let i=r.suiAddresses;if(!i)throw new f("SUI token must contain 'suiAddresses'");if((0,Rt.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let o=48,c=new Yn;Va(c,r.originTokenAddress,i.bridgeObjectAddress);let A=await ii(this.client,c,_n.reified(Y(r.originTokenAddress))),m=A.state.tokenBalance,u=A.state.vusdBalance,d=se({tokenBalance:m,vUsdBalance:u});return{dValue:A.state.d,aValue:A.state.a,totalLpAmount:A.rewards.lpSupply,vUsdBalance:u,tokenBalance:m,accRewardPerShareP:A.rewards.accRewardPerShareP,p:o,imbalance:d}}async buildRawTransactionDeposit(r){let i=r.token.suiAddresses;if(!i)throw new f("SUI token must contain 'suiAddresses'");if((0,Rt.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new f("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 c=o[0],A=new Yn;A.setSender(r.accountAddress);let{depositObj:m,isNewDeposit:u}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,A),[d]=ai([r.amount],o,A);if(!d)throw new $e("No coins to deposit");if(!r.token.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let l=Ga(A,r.token.originTokenAddress,{bridge:i.bridgeObjectAddress,userDeposit:m,coin:d});return A.mergeCoins(c.coinObjectId,[l]),u&&A.transferObjects([m],r.accountAddress),await A.toJSON({client:this.client})}async getDepositObject(r,i,o){let c=await this.fetchDeposits(r,i);if(c.length===0||!c[0]){let A=Y(i).phantomType;return{depositObj:ja(o,A),isNewDeposit:!0}}else{if(c[0].data?.objectId)return{depositObj:c[0].data.objectId,isNewDeposit:!1};throw new f("Something went wrong while deposit")}}async buildRawTransactionWithdraw(r){let i=r.token.suiAddresses;if(!i)throw new f("SUI token must contain 'suiAddresses'");if((0,Rt.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let o=Y(r.token.originTokenAddress).phantomType,c=new Yn;c.setSender(r.accountAddress);let{depositObj:A,isNewDeposit:m}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,c);if(m)throw new $e("No deposit found");let u=Ua(c,o,{bridge:i.bridgeObjectAddress,userDeposit:A,amountLp:BigInt(r.amount)}),d=await Ze(l=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:l}));if(!u[0]||!u[1])throw new f("No rewards found");return d[0]?c.mergeCoins(d[0].coinObjectId,[u[0],u[1]]):(c.mergeCoins(u[0],[u[1]]),c.transferObjects([u[0]],r.accountAddress)),await c.toJSON({client:this.client})}async buildRawTransactionClaimRewards(r){let i=r.token.suiAddresses;if(!i)throw new f("SUI token must contain 'suiAddresses'");if((0,Rt.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let o=Y(r.token.originTokenAddress).phantomType,c=new Yn;c.setSender(r.accountAddress);let{depositObj:A,isNewDeposit:m}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,c);if(m)throw new $e("No deposit found");let u=Ea(c,o,{bridge:i.bridgeObjectAddress,userDeposit:A}),d=await Ze(l=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:l}));return d[0]?c.mergeCoins(d[0].coinObjectId,[u]):c.transferObjects([u],r.accountAddress),await c.toJSON({client:this.client})}};import{Web3 as Xn}from"web3";import{encodeFunctionCall as Es}from"web3-eth-abi";var Qt=class extends ge{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 c=jt(o.poolAddress),A=jt(i),m=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:c,data:this.getFunctionAbi("userRewardDebt",A)},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:c,data:this.getFunctionAbi("balanceOf",A)},"latest"]}],d=await(await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(m)})).json();if(Array.isArray(d)&&d.length===2){let l=p=>{let g=d.find(h=>h.id===p);if(!g||!g.result)throw new Error(`Missing or invalid result for id ${p}`);return Xn.utils.toBigInt(g.result).toString()};return new oe({lpAmount:Xn.utils.toBigInt(l(2)).toString(),rewardDebt:Xn.utils.toBigInt(l(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),c=(await o.methods.userRewardDebt(r).call()).toString(),A=(await o.methods.balanceOf(r).call()).toString();return new oe({lpAmount:A,rewardDebt:c})}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=jt(i.poolAddress),c=[{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(c)})).json();if(Array.isArray(m)&&m.length===6){let u=g=>{let h=m.find(B=>B.id===g);if(!h||!h.result)throw new Error(`Missing or invalid result for id ${g}`);return Xn.utils.toBigInt(h.result).toString()},d=u(3),l=u(4),p=se({tokenBalance:d,vUsdBalance:l});return{aValue:u(1),dValue:u(2),tokenBalance:d,vUsdBalance:l,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,c,A,m,u,d]=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()]),l=A.toString(),p=m.toString(),g=se({tokenBalance:l,vUsdBalance:p});return{aValue:o.toString(),dValue:c.toString(),tokenBalance:l,vUsdBalance:p,totalLpAmount:u.toString(),accRewardPerShareP:d.toString(),p:this.P,imbalance:g}}buildRawTransactionDeposit(r){let{amount:i,accountAddress:o}=r,c=[{type:"uint256",value:i}];return this.buildRawTransaction(r.token.poolAddress,"deposit(uint256)",c,"0",o)}buildRawTransactionWithdraw(r){let{amount:i,accountAddress:o}=r,c=[{type:"uint256",value:i}];return this.buildRawTransaction(r.token.poolAddress,"withdraw(uint256)",c,"0",o)}buildRawTransactionClaimRewards(r){let{accountAddress:i}=r,o=[];return this.buildRawTransaction(r.token.poolAddress,"claimRewards()",o,"0",i)}async buildRawTransaction(r,i,o,c,A){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+c},o,A);if(!m?.result?.result)throw new f("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}getContract(r){return this.tronWeb.contract(Xt.abi,r)}getFunctionAbi(r,...i){let o=Xt.abi.find(c=>c.type==="function"&&"name"in c&&c.name===r);if(!o)throw new Error(`${r} method not found in Pool ABI`);return Es(o,i)}};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,this.params,o);let c=i.cachePoolInfoChainSec>0?i.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new js({defaultTtl:c})}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){M(a),W("amount",a,r.decimals);let o=await this.getPoolInfoFromChain(r,i),{vUsdBalance:c,tokenBalance:A,aValue:m,dValue:u}=o,d=za(a,m,u,A,c);return R(d,3).toFixed()}async getAmountToBeWithdrawn(a,r,i,o){M(a),W("amount",a,i.decimals);let c=await this.getPoolInfoFromChain(i,o),A=qa(a),m=de(A,i.decimals),d=(await this.getUserBalanceInfo(r,i,o)).earned(c)||"0",l=Vs(m).plus(d).toFixed();return R(l,i.decimals).toFixed()}async getUserBalanceInfo(a,r,i){return Pt(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 c=await Pt(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).getPoolInfoFromChain(a);return this.cache.put(i,c),this.api.cachePut({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress},c),c}}};function Pt(s,a,r,i,o){switch(x.getChainProperty(s).chainType){case"EVM":{if(o)return new Kt(o,a);{let c=r.getNodeRpcUrl(s),A=new Js(c);return A.defaultReturnFormat={number:$s.STR,bytes:_s.HEX},new Kt(A,a)}}case"TRX":{let c=r.getNodeRpcUrl(s),A=i.tronJsonRpc;if(o)return new Qt(o,a,A);{let m=new Zs({fullHost:c});return new Qt(m,a,A)}}case"SOLANA":{let c=r.getNodeRpcUrl(s);return new Wn(c,a)}case"SRB":return new Gn(r,i,a);case"SUI":return new Ln(r.getNodeRpcUrl(s),a)}}import{TronWeb as Xs}from"tronweb";import{FMT_BYTES as Ks,FMT_NUMBER as Hs,Web3 as Qs}from"web3";var Ys={abi:[{inputs:[{internalType:"string",name:"tokenName_",type:"string"},{internalType:"string",name:"tokenSymbol_",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:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"lpAmount",type:"uint256"}],name:"Deposited",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"DepositedRewards",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[4]",name:"values",type:"uint256[4]"}],name:"MultiTransfer",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:"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:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdrawn",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"NUM_TOKENS",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:"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"},{internalType:"uint256",name:"index",type:"uint256"},{internalType:"uint256",name:"minVirtualAmount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"depositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"getEstimatedAmountOnDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"getRewardsAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"getWithdrawProportionAmount",outputs:[{internalType:"uint256[4]",name:"",type:"uint256[4]"}],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:"uint256",name:"",type:"uint256"}],name:"pools",outputs:[{internalType:"contract IPool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"},{internalType:"contract IPool",name:"pool",type:"address"}],name:"setPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subBalanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subDepositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subTotalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransfer",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"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"tokens",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],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:"uint256",name:"virtualAmount",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Hn=Ys;var dt=class{};var zt=class extends dt{constructor(r,i){super();this.web3=r;this.api=i}chainType="EVM";async balanceOf(r){let i=(await this.getYieldContract(r.token.yieldAddress).methods.balanceOf(r.owner).call()).toString();return R(i,3).toFixed()}async getEstimatedAmountOnDeposit(r){let i=I(r.amount,r.token.decimals).toFixed(),o=(await this.getYieldContract(r.token.yieldAddress).methods.getEstimatedAmountOnDeposit(i,r.token.yieldId).call()).toString();return R(o,3).toFixed()}async getWithdrawProportionAmount(r){let i=I(r.amount,3).toFixed();return await this.getYieldContract(r.cydToken.yieldAddress).methods.getWithdrawProportionAmount(r.owner,i).call()}async buildRawTransactionDeposit(r){return Promise.resolve({...this.buildTxParams({owner:r.owner,yieldAddress:r.token.yieldAddress}),data:this.getYieldContract(r.token.yieldAddress).methods.deposit(r.amount,r.token.yieldId,r.minVirtualAmount).encodeABI()})}async buildRawTransactionWithdraw(r){return Promise.resolve({...this.buildTxParams({owner:r.owner,yieldAddress:r.token.yieldAddress}),data:this.getYieldContract(r.token.yieldAddress).methods.withdraw(r.amount).encodeABI()})}buildTxParams(r){return{from:r.owner,to:r.yieldAddress,value:"0"}}getYieldContract(r){return new this.web3.eth.Contract(Hn.abi,r)}};var Qn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o}async approve(a,r){return this.tokenService.buildRawTransactionApprove({...a,spender:a.token.yieldAddress},r)}async deposit(a,r){return M(a.amount),W("amount",a.amount,a.token.decimals),M(a.minVirtualAmount),W("minVirtualAmount",a.minVirtualAmount,3),a.amount=I(a.amount,a.token.decimals).toFixed(),a.minVirtualAmount=I(a.minVirtualAmount,3).toFixed(),It(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,a.owner,r).buildRawTransactionDeposit(a)}async withdraw(a,r){return M(a.amount),W("amount",a.amount,3),a.amount=I(a.amount,3).toFixed(),It(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,a.owner,r).buildRawTransactionWithdraw(a)}};var qt=class extends dt{constructor(r,i){super();this.tronWeb=r;this.api=i}chainType="TRX";async balanceOf(r){let i=(await(await this.getContract(r.token.yieldAddress)).methods.balanceOf(r.owner).call()).toString();return R(i,3).toFixed()}async getEstimatedAmountOnDeposit(r){let i=I(r.amount,r.token.decimals).toFixed(),o=(await(await this.getContract(r.token.yieldAddress)).methods.getEstimatedAmountOnDeposit(i,r.token.yieldId).call()).toString();return R(o,3).toFixed()}async getWithdrawProportionAmount(r){let i=I(r.amount,3).toFixed();return(await(await this.getContract(r.cydToken.yieldAddress)).methods.getWithdrawProportionAmount(r.owner,i).call()).toString().split(",")}async buildRawTransactionDeposit(r){let{amount:i,owner:o,token:c,minVirtualAmount:A}=r,m=[{type:"uint256",value:i},{type:"uint256",value:c.yieldId},{type:"uint256",value:A}];return this.buildRawTransaction(r.token.yieldAddress,"deposit(uint256,uint256,uint256)",m,"0",o)}async buildRawTransactionWithdraw(r){let{amount:i,owner:o}=r,c=[{type:"uint256",value:i}];return this.buildRawTransaction(r.token.yieldAddress,"withdraw(uint256)",c,"0",o)}async buildRawTransaction(r,i,o,c,A){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+c},o,A);if(!m?.result?.result)throw new f("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}getContract(r){return this.tronWeb.contract(Hn.abi,r)}};function Ls(s){if(!zn(s))throw new dn("Token does not support Yield")}function zn(s){return!!s.yieldAddress&&s.yieldId!==void 0}var qn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new Qn(a,r,i,o)}rawTxBuilder;async getCYDTokens(){let a=[],r=await this.api.getChainDetailsMap("pool");return Object.values(r).forEach(i=>{if(i.yieldAddress){let o=i.tokens.find(A=>A.tokenAddress===i.yieldAddress),c=i.tokens.filter(zn);if(c.length>0){let A=o??{allbridgeChainId:i.allbridgeChainId,apr:"",apr30d:"",apr7d:"",bridgeAddress:i.bridgeAddress,chainId:i.chainId,chainName:i.name,chainSymbol:i.chainSymbol,chainType:i.chainType,confirmations:i.confirmations,decimals:3,feeShare:"",lpRate:"",name:"Core Yield",poolAddress:"",symbol:"CYD",tokenAddress:i.yieldAddress,transferTime:{},txCostAmount:{maxAmount:"0",swap:"0",transfer:"0"},yieldAddress:i.yieldAddress};a.push({...A,yieldAddress:i.yieldAddress,tokens:c})}}}),a}async getAllowance(a,r){return await this.tokenService.getAllowance({...a,spender:a.token.yieldAddress},r)}async checkAllowance(a,r){return this.tokenService.checkAllowance({...a,spender:a.token.yieldAddress},r)}async balanceOf(a,r){return It(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,a.owner,r).balanceOf(a)}async getEstimatedAmountOnDeposit(a,r){return M(a.amount),W("amount",a.amount,a.token.decimals),It(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,a.token.yieldAddress,r).getEstimatedAmountOnDeposit(a)}async getWithdrawAmounts(a,r){M(a.amount),W("amount",a.amount,3);let i=await It(a.cydToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,a.owner,r).getWithdrawProportionAmount(a);return a.cydToken.tokens.filter(o=>i[o.yieldId]!==void 0).map(o=>({amount:R(i[o.yieldId],o.decimals).toFixed(),token:o}))}};function It(s,a,r,i,o){switch(x.getChainProperty(s).chainType){case"EVM":{if(o)return new zt(o,a);{let c=r.getNodeRpcUrl(s),A=new Qs(c);return A.defaultReturnFormat={number:Hs.STR,bytes:Ks.HEX},new zt(A,a)}}case"TRX":{if(o)return new qt(o,a);{let c=r.getNodeRpcUrl(s),A=new Xs({fullHost:c});return A.setAddress(i),new qt(A,a)}}case"SOLANA":throw new J;case"SRB":throw new J;case"SUI":throw new J}}import{Big as X}from"big.js";function ci(s,a,r){let i=zs(s,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),o=qs(i.amountIncludingCommissionInSystemPrecision,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo);return{swapToVUsdCalcResult:i,swapFromVUsdCalcResult:o}}function Ai(s,a,r){let i=eo(s,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo),o=to(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=X(s),c=o.times(a),A=o.minus(c);return{bridgeFeeInTokenPrecision:c.round().toFixed(),amountIncludingCommissionInSystemPrecision:si(it(A,r),i),amountExcludingCommissionInSystemPrecision:si(it(o,r),i)}}function si(s,a){if(s.eq(0))return"0";let r=X(a.tokenBalance).plus(s),i=Ue(r.toFixed(),a.aValue,a.dValue);return X(a.vUsdBalance).minus(i).round().toFixed()}function qs(s,{feeShare:a,decimals:r},i){if(X(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let c=X(s).plus(i.vUsdBalance),A=Ue(c,i.aValue,i.dValue),m=de(X(i.tokenBalance).minus(A),r),u=X(m).times(a),d=X(m).minus(u).round();return{bridgeFeeInTokenPrecision:u.round().toFixed(),amountIncludingCommissionInTokenPrecision:d.toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}function eo(s,{feeShare:a,decimals:r},i){let o=X(a).div(X(1).minus(a)),c=X(s).times(o),A=X(s).plus(c);return{bridgeFeeInTokenPrecision:c.round().toFixed(),amountIncludingCommissionInSystemPrecision:oi(it(A,r),i),amountExcludingCommissionInSystemPrecision:oi(it(s,r),i)}}function oi(s,a){let r=X(a.tokenBalance).minus(s),i=Ue(r.toFixed(),a.aValue,a.dValue);return X(i).minus(a.vUsdBalance).round().toFixed()}function to(s,{feeShare:a,decimals:r},i){if(X(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let o=X(i.vUsdBalance).minus(s),c=Ue(o.toFixed(),i.aValue,i.dValue),A=X(c).minus(i.tokenBalance),m=de(A.toFixed(),r),u=X(a).div(X(1).minus(a)),d=X(m).times(u),l=X(m).plus(d);return{bridgeFeeInTokenPrecision:d.round().toFixed(),amountIncludingCommissionInTokenPrecision:l.round().toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}import{Big as rt}from"big.js";function mi(s,a,r,i,o){let c=Ge(s,a,r),A=de(c,a.decimals),m=Vt(c,i,o),u=rt(s).times(a.feeShare),d=rt(m).div(rt(1).minus(i.feeShare)).minus(m);return{sourceLPSwap:{fee:R(u,a.decimals).neg().round(a.decimals,rt.roundUp).toFixed(),swap:R(rt(s).minus(A).minus(u),a.decimals).neg().round(a.decimals,rt.roundUp).toFixed()},destLPSwap:{fee:R(d,i.decimals).neg().round(i.decimals,rt.roundUp).toFixed(),swap:R(de(c,i.decimals).minus(m).minus(d),i.decimals).neg().round(i.decimals,rt.roundUp).toFixed()}}}import oo from"axios";var ui="3.27.0";function di(s){return Object.entries(s).reduce((a,r)=>{let i=r[0],o=r[1],c=so(i,o);return c&&(a[i]=c),a},{})}function li(s){let a={};for(let[r,i]of Object.entries(s)){let o=r;for(let c of i.tokens){let A=vt({chainSymbol:o,poolAddress:c.poolAddress}),m=se(c.poolInfo);a[A]={...c.poolInfo,imbalance:m}}}return a}function no(s,a){let{name:r,...i}=s,{poolInfo:o,...c}=a;return{...c,...i,chainName:r}}function ro(s){switch(s){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4;case"oft":return 5}}function ao(s){return Object.entries(s).reduce((a,[r,i])=>(a[r]=io(i),a),{})}function io(s){return Object.entries(s).reduce((a,[r,i])=>{let o=ro(r);return o&&i!=null&&(a[o]=i),a},{})}function so(s,a){let r=x.getChainsProperties()[s];if(!r)return null;let i={...r,allbridgeChainId:a.chainId,bridgeAddress:a.bridgeAddress,oftBridgeAddress:a.oftBridgeAddress,yieldAddress:a.yieldAddress,transferTime:ao(a.transferTime),txCostAmount:a.txCostAmount,confirmations:a.confirmations,suiAddresses:a.suiAddresses};return{...i,tokens:a.tokens.map(o=>no(i,o))}}function vt(s){return s.chainSymbol+"_"+s.poolAddress}function pi(s){let a=[];for(let[r,i]of Object.entries(s)){let o=r;for(let c of i.tokens)a.push({chainSymbol:o,poolAddress:c.poolAddress})}return a}function gi(s){let a={};for(let[r,i]of Object.entries(s)){let o=r;for(let[c,A]of Object.entries(i))A.imbalance=se(A),a[vt({chainSymbol:o,poolAddress:c})]=A}return a}var kt=class{api;constructor(a){this.api=oo.create({baseURL:a.coreApiUrl,headers:{Accept:"application/json",...a.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+ui},params:a.coreApiQueryParams})}async getTokenInfo(){let{data:a}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:di(a),poolInfoMap:li(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){if(a.messenger===5&&!a.sourceToken)throw new cn("For OFT sourceToken required");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,adminFeeShareWithExtras:r.adminFeeShareWithExtras}}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 gi(i)}};import er from"timed-cache";var Yr=20*1e3,co=55*1e3,Ft=class{constructor(a){this.apiClient=a;this.tokenInfoCache=new er({defaultTtl:co}),this.receivedTransactionCache=new er({defaultTtl:Yr}),this.pendingInfoCache=new er({defaultTtl:Yr}),this.gasBalanceCache=new er({defaultTtl:Yr})}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 c=this.apiClient.getGasBalance(a,r);return this.gasBalanceCache.put(i,c),c}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}${a.sourceToken?"_"+a.sourceToken:""}`,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 xt=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 Mt=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 c=r[o];c&&(i[o]={...c,tokens:fi(c.tokens,a,this.isStaging)})}return i}async tokens(a){return fi(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 fi(s,a,r){return s.filter(i=>r?!0:i.flags[a]).map(Ao)}function Ao(s){let{flags:a,...r}=s;return r}import mo from"timed-cache";var uo=55*1e3,Ot=class{constructor(a){this.client=a;this.poolInfoCache=new Lr}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[vt(a)];if(o)return o;throw new f("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(pi(i.chainDetailsMap))}this.poolInfoCache.putAll(r)}cachePut(a,r){this.poolInfoCache.put(vt(a),r)}},Lr=class{cache;constructor(){this.cache=new mo({defaultTtl:uo})}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=vt(a);return this.cache.get(r)}};import{Big as Po}from"big.js";import{TronWeb as wo}from"tronweb";import{Web3 as Co}from"web3";var lo={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"}]},tr=lo;import{Big as yi}from"big.js";var fe=class{async checkAllowance(a){let r=await this.getAllowance(a);return yi(r).gte(yi(a.amount))}};var po="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",go="0xdac17f958d2ee523a2206206994597c13d831ec7",fo=1e5,en=class extends fe{constructor(r,i){super();this.web3=r;this.api=i}chainType="EVM";getAllowance(r){let i=r.token.tokenAddress,o=r.owner,c=r.spender;return this.getAllowanceByTokenAddress(i,o,c)}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 c=await this.buildRawTransactionApprove({...r,amount:"0"});await this.sendRawTransaction(c,r.chainSymbol)}let i=await this.buildRawTransactionApprove(r);return await this.sendRawTransaction(i,r.chainSymbol)}isUsdt(r){return r.toLowerCase()===go}buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:c,amount:A}=r,u=this.getERC20Contract(i).methods.approve(o,A==null?po:xn(A));return Promise.resolve({from:c,to:i,value:"0",data:u.encodeABI()})}async sendRawTransaction(r,i){let o=r,c={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};i==="POL"?o.gas=fo:o.gas=await this.web3.eth.estimateGas(r);let{transactionHash:A}=await this.web3.eth.sendTransaction({...o,...c});return{txId:A.toString()}}getERC20Contract(r){return new this.web3.eth.Contract(tr.abi,r)}};import{AnchorProvider as yo}from"@project-serum/anchor";import{Connection as ho,PublicKey as nr}from"@solana/web3.js";var rr=class extends fe{constructor(r,i){super();this.solanaRpcUrl=r;this.api=i}chainType="SOLANA";approve(r){throw new J}buildRawTransactionApprove(r){throw new J}buildAnchorProvider(r){let i=new ho(this.solanaRpcUrl,"confirmed"),o=new nr(r);return new yo(i,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(r){throw new J}async getTokenBalance(r){let{account:i,token:o}=r;try{let c=await Ie(new nr(i),new nr(o.tokenAddress));return(await yt(c,this.buildAnchorProvider(i))).amount.toString()}catch(c){if(c instanceof Error)return c.message.startsWith("Account does not exist"),"0";throw c}}async getNativeTokenBalance(r){return(await this.buildAnchorProvider(r.account).connection.getBalance(new nr(r.account))).toString()}};import{Horizon as tT,NotFoundError as To}from"@stellar/stellar-sdk";var ar=class extends fe{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";getAllowance(){throw new J}async getTokenBalance(r){if(!r.token.originTokenAddress)throw new f("OriginTokenAddress missing");let[i,o]=r.token.originTokenAddress.split(":"),c=new tT.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),A;try{A=await c.loadAccount(r.account)}catch(d){if(d instanceof To)return"0";throw d}let u=A.balances.find(d=>(d.asset_type==="credit_alphanum4"||d.asset_type==="credit_alphanum12")&&d.asset_code==i&&d.asset_issuer==o);return u?.balance?I(u.balance,x.getChainDecimalsByType(x.getChainProperty(r.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(r){let A=(await new tT.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(r.account)).balances.find(m=>m.asset_type==="native");return A?.balance?I(A.balance,x.getChainDecimalsByType(x.getChainProperty(r.chainSymbol).chainType)).toFixed():"0"}approve(){throw new J}buildRawTransactionApprove(){throw new J}};import{SuiClient as bo}from"@mysten/sui/client";var ir=class extends fe{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.suiClient=new bo({url:this.suiRpcUrl})}chainType="SUI";suiClient;approve(r){throw new J}buildRawTransactionApprove(r){throw new J}getAllowance(r){throw new J}async getTokenBalance(r){if(!r.token.originTokenAddress)throw new f("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,c)=>o+BigInt(c.balance),BigInt(0)).toString()}};var So="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",tn=class extends fe{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 Mn(this.tronWeb,i)}async buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:c,amount:A}=r,m=A==null?So:xn(A),u=[{type:"address",value:o},{type:"uint256",value:m}];return this.buildRawTransaction(i,"approve(address,uint256)",u,"0",c)}getContract(r){return this.tronWeb.contract(tr.abi,r)}async buildRawTransaction(r,i,o,c,A){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+c},o,A);if(!m?.result?.result)throw new f("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var Dt=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 R(i,a.token.decimals).toFixed()}async checkAllowance(a,r){return M(a.amount),W("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&&(M(r.amount),W("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&&(M(a.amount),W("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?R(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:R(i,x.getChainDecimalsByType(x.getChainProperty(a.chainSymbol).chainType)).toFixed()}}getChainTokenService(a,r,i){switch(x.getChainProperty(a).chainType){case"EVM":{if(i)return new en(i,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new en(new Co(o),this.api)}}case"TRX":{if(i)return new tn(i,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a),c=new wo({fullHost:o});return c.setAddress(r),new tn(c,this.api)}}case"SOLANA":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new rr(o,this.api)}case"SRB":return new ar(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new ir(this.nodeRpcUrlsConfig.getNodeRpcUrl(a),this.api)}}prepareCheckAllowanceParams(a){return{...a,amount:I(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 sr=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r;let i=new kt(r),o=new Ft(i),c=new xt(o),A=new Ot(c);this.api=new Mt(A,r),this.tokenService=new Dt(this.api,a,r)}api;tokenService;buildRawTransactionApprove(a,r){return this.tokenService.buildRawTransactionApprove(a,r)}checkAllowance(a,r){return this.tokenService.checkAllowance(a,r)}getAllowance(a,r){return this.tokenService.getAllowance(a,r)}};import{Connection as Bo,PublicKey as Ro,TransactionMessage as Io}from"@solana/web3.js";var or=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}async addMemoToTx(a,r){if(r.length>28)throw new f("InvalidArgumentException memo cannot be more than 28 characters");let i=new Bo(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),o=await ot(a,i),c=Io.decompile(a.message,{addressLookupTableAccounts:o}),A=c.instructions[c.instructions.length-1];if(!A?.keys)throw new f("Last instruction or its keys are invalid.");A.keys.push({pubkey:new Ro(Buffer.from(r)),isSigner:!1,isWritable:!1}),a.message=c.compileToV0Message(o)}};import{Asset as Fo,BASE_FEE as xo,contract as JP,Horizon as hi,Operation as Mo,Operation as Oo,rpc as rn,TimeoutInfinite as Do,TransactionBuilder as Xr,TransactionBuilder as Ti}from"@stellar/stellar-sdk";import{contract as e}from"@stellar/stellar-sdk";var vo=e.Spec,ko=e.Client;var nn=class extends ko{constructor(r){super(new vo(["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 Wo=100,No=180,cr=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}async buildChangeTrustLineXdrTx(a){let i=await new hi.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.sender),c=await this.getContract(nn,a.tokenAddress).name();if(Ct(c))throw new f;let A=wt(c);if(!A)throw new f;let[m,u]=A.split(":");if(m===void 0||u===void 0)throw new f("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let d=new Fo(m,u),l=Oo.changeTrust({asset:d,limit:a.limit});return new Ti(i,{fee:Wo.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(l).setTimeout(No).build().toXDR()}async getBalanceLine(a,r){let o=await this.getContract(nn,r).name();if(Ct(o))throw new f;let c=wt(o);if(!c)throw new f;let[A,m]=c.split(":"),u=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new hi.Server(u).loadAccount(a)).balances.find(g=>(g.asset_type==="credit_alphanum4"||g.asset_type==="credit_alphanum12")&&g.asset_code==A&&g.asset_issuer==m)}async submitTransactionStellar(a){let r=new hi.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),i=Ti.fromXDR(a,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await r.submitTransaction(i)}async simulateAndCheckRestoreTxRequiredSoroban(a,r){let i=new rn.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await i.getAccount(r),c=Xr.fromXDR(a,this.params.sorobanNetworkPassphrase),A=await i.simulateTransaction(c);if(rn.Api.isSimulationRestore(A))return new Xr(o,{fee:(+xo+ +A.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(A.restorePreamble.transactionData.build()).addOperation(Mo.restoreFootprint({})).setTimeout(Do).build().toXDR()}async sendTransactionSoroban(a){let r=new rn.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),i=Xr.fromXDR(a,this.params.sorobanNetworkPassphrase);return r.sendTransaction(i)}async confirmTx(a,r=15){let i=new rn.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await Qr(()=>i.getTransaction(a),A=>A.status===rn.Api.GetTransactionStatus.NOT_FOUND,r);if(o.length===0)throw new f("No transaction responses found.");let c=o[o.length-1];if(!c)throw new f("Unexpected error: last response is undefined.");return c}getContract(a,r){let i={contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(i)}};var Ar=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.api=r}_suiBridgeService;async buildSendTxFromCustomTx(a,r,i){return this.suiBridgeService.buildRawTransactionSendFromCustomTx(a,r,i)}get suiBridgeService(){return this._suiBridgeService||(this._suiBridgeService=new St(this.nodeRpcUrlsConfig,this.api)),this._suiBridgeService}};var mr=class{constructor(a){this.service=a;this.srb=new cr(a.nodeRpcUrlsConfig,a.params),this.sol=new or(a.nodeRpcUrlsConfig,a.params),this.sui=new Ar(a.nodeRpcUrlsConfig,a.api),this.evm=new sr(a.nodeRpcUrlsConfig,a.params)}srb;sol;sui;evm};var st=(r=>(r.WITH_NATIVE_CURRENCY="native",r.WITH_STABLECOIN="stablecoin",r))(st||{}),fn=(r=>(r.INT="int",r.FLOAT="float",r))(fn||{});import{Big as Q}from"big.js";var an=class{constructor(a){this.nodeRpcUrls=a}getNodeRpcUrl(a){let r=this.nodeRpcUrls[a];if(r!==void 0)return r;throw new un(a)}},ur=class{constructor(a,r=on){this.nodeRpcUrlsConfig=a;x.addChainsProperties(r.additionalChainsProperties);let i=new kt(r),o=new Ft(i),c=new xt(o),A=new Ot(c);this.api=new Mt(A,r),this.tokenService=new Dt(this.api,a,r),this.bridge=new On(this.api,a,r,this.tokenService),this.pool=new Kn(this.api,a,r,this.tokenService),this.yield=new qn(this.api,a,r,this.tokenService),this.params=r}api;tokenService;params;bridge;pool;yield;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){M(a);let c;r=="float"?(W("amount",a,i.decimals),c=I(a,i.decimals).toFixed()):c=a;let A=Ge(c,i,await H(this.api,i)),m=await H(this.api,o),u=this.getAmountFromVUsdFormatted(A,o,m),d,l=await this.api.getPendingInfo();for(let p in l[o.chainSymbol]){let g=l[o.chainSymbol];if(!g)throw new f("Cannot find pending info for "+o.chainSymbol);d=g[p]}if(d){let p=Aa(d.totalSentAmount,m),g=this.getAmountFromVUsdFormatted(A,o,p),h;return Q(g.int).gt(u.int)?h={min:u,max:g}:h={min:g,max:u},{pendingTxs:d.pendingTxs,pendingAmount:{int:be(d.totalSentAmount,3,o.decimals).toFixed(0),float:R(d.totalSentAmount,3).toFixed()},estimatedAmount:h}}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){M(a),W("amountFloat",a,r.decimals);let i=I(a,r.decimals);if(i.eq(0))return 0;let o=Ge(i,r,await H(this.api,r)),c=de(o,r.decimals);return Tr(i,c)}async calculateFeePercentOnDestinationChain(a,r,i){M(a),W("amountFloat",a,r.decimals);let o=I(a,r.decimals);if(o.eq(0))return 0;let c=Ge(o,r,await H(this.api,r)),A=Vt(c,i,await H(this.api,i)),m=de(c,i.decimals);return Tr(m,A)}async getAmountToBeReceivedAndGasFeeOptions(a,r,i,o){return M(a),W("amountToSendFloat",a,r.decimals),{amountToSendFloat:Q(a).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(a,r,i,o),gasFeeOptions:await this.getGasFeeOptions(r,i,o)}}async getAmountToSendAndGasFeeOptions(a,r,i,o){return M(a),W("amountToBeReceivedFloat",a,i.decimals),{amountToSendFloat:await this.getAmountToSend(a,r,i,o),amountToBeReceivedFloat:Q(a).toFixed(),gasFeeOptions:await this.getGasFeeOptions(r,i,o)}}async getAmountToBeReceived(a,r,i,o){return this.getAmountToBeReceivedCompute(a,r,i,o,async()=>await H(this.api,r),async()=>await H(this.api,i))}async getAmountToBeReceivedFromChain(a,r,i,o,c,A){return this.getAmountToBeReceivedCompute(a,r,i,o,async()=>await this.pool.getPoolInfoFromChain(r,c),async()=>await this.pool.getPoolInfoFromChain(i,A))}async getAmountToBeReceivedCompute(a,r,i,o=1,c,A){switch(o){case 1:case 2:return this.getAmountToBeReceivedComputeWithPools(a,r,i,await c(),await A());case 3:case 4:return this.getAmountToBeReceivedComputeCctp(a,r,i,o);case 5:return this.getAmountToBeReceivedComputeOft(a,r,i)}}getAmountToBeReceivedComputeWithPools(a,r,i,o,c){M(a),W("amountToSendFloat",a,r.decimals);let A=I(a,r.decimals),m=Ge(A,r,o);return this.getAmountFromVUsdFormatted(m,i,c).float}getAmountToBeReceivedComputeCctp(a,r,i,o){M(a),W("amountToSendFloat",a,r.decimals);let c=I(a,r.decimals);switch(o){case 3:{if(!r.cctpAddress||!i.cctpAddress||!r.cctpFeeShare)throw new re("Such route does not support CCTP protocol");let A=c.mul(Q(1).minus(r.cctpFeeShare)).round(0,Q.roundUp),m=be(A,r.decimals,i.decimals).round(0);return R(m,i.decimals).toFixed()}case 4:{if(!r.cctpV2Address||!i.cctpV2Address||!r.cctpV2FeeShare)throw new re("Such route does not support CCTP V2 protocol");let A=c.mul(Q(1).minus(r.cctpV2FeeShare)).round(0,Q.roundUp),m=be(A,r.decimals,i.decimals).round(0);return R(m,i.decimals).toFixed()}}}async getAmountToBeReceivedComputeOft(a,r,i){M(a),W("amountToSendFloat",a,r.decimals);let o=I(a,r.decimals);if(!r.oftBridgeAddress||!i.oftBridgeAddress||r.oftId!==i.oftId)throw new ae("Such route does not support OFT protocol");let{adminFeeShareWithExtras:c}=await this.api.getReceiveTransactionCost({sourceChainId:r.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:5,sourceToken:r.tokenAddress});if(!c)throw new ae("Such route does not support OFT protocol");let A=o.mul(Q(1).minus(c)).round(0,Q.roundUp),m=be(A,r.decimals,i.decimals).round(0);return R(m,i.decimals).toFixed()}async getAmountToSend(a,r,i,o){return this.getAmountToSendCompute(a,r,i,o,()=>H(this.api,r),()=>H(this.api,i))}async getAmountToSendFromChain(a,r,i,o,c,A){return this.getAmountToSendCompute(a,r,i,o,()=>this.pool.getPoolInfoFromChain(r,c),()=>this.pool.getPoolInfoFromChain(i,A))}async getAmountToSendCompute(a,r,i,o=1,c,A){switch(o){case 1:case 2:return this.getAmountToSendComputeWithPools(a,r,i,await c(),await A());case 3:case 4:return this.getAmountToSendComputeCctp(a,r,i,o);case 5:return this.getAmountToSendComputeOft(a,r,i)}}getAmountToSendComputeWithPools(a,r,i,o,c){M(a),W("amountToBeReceivedFloat",a,i.decimals);let A=I(a,i.decimals),m=ua(A,i,c),u=ma(m,r,o);if(Q(u).lte(0))throw new Je;return R(u,r.decimals).toFixed()}getAmountToSendComputeCctp(a,r,i,o){M(a),W("amountToBeReceivedFloat",a,i.decimals);let c=I(a,i.decimals);switch(o){case 3:{if(!r.cctpAddress||!i.cctpAddress||!r.cctpFeeShare)throw new re("Such route does not support CCTP protocol");let A=c.div(Q(1).minus(r.cctpFeeShare)).round(0,Q.roundDown),m=be(A,i.decimals,r.decimals).round(0);return R(m,r.decimals).toFixed()}case 4:{if(!r.cctpV2Address||!i.cctpV2Address||!r.cctpV2FeeShare)throw new re("Such route does not support CCTP V2 protocol");let A=c.div(Q(1).minus(r.cctpV2FeeShare)).round(0,Q.roundDown),m=be(A,i.decimals,r.decimals).round(0);return R(m,r.decimals).toFixed()}}}async getAmountToSendComputeOft(a,r,i){M(a),W("amountToBeReceivedFloat",a,i.decimals);let o=I(a,i.decimals);if(!r.oftId||!i.oftId||!r.oftBridgeAddress||r.oftId!==i.oftId)throw new ae("Such route does not support OFT protocol");let{adminFeeShareWithExtras:c}=await this.api.getReceiveTransactionCost({sourceChainId:r.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:5,sourceToken:r.tokenAddress});if(!c)throw new ae("Such route does not support OFT protocol");let A=o.div(Q(1).minus(c)).round(0,Q.roundDown),m=be(A,i.decimals,r.decimals).round(0);return R(m,r.decimals).toFixed()}async getGasFeeOptions(a,r,i){return br(a,r.allbridgeChainId,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 la(a)}async getExtraGasMaxLimits(a,r,i){return await Sr(a,r,i,this.api)}async getVUsdFromAmount(a,r,i){M(a);let o;r=="float"?(W("amount",a,i.decimals),o=I(a,i.decimals).toFixed()):o=a;let c=Ge(o,i,await H(this.api,i));return{int:c,float:R(c,3).toFixed()}}async getAmountFromVUsd(a,r){return this.getAmountFromVUsdFormatted(a,r,await H(this.api,r))}getAmountFromVUsdFormatted(a,r,i){M(a);let o=Vt(a,r,i);if(Q(o).lt(0))throw new Je;return{int:o,float:R(o,r.decimals).toFixed()}}async swapAndBridgeFeeCalculation(a,r,i){return ci(a,{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await H(this.api,r)},{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await H(this.api,i)})}async swapAndBridgeFeeCalculationReverse(a,r,i){let o=Ai(a,{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await H(this.api,r)},{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await H(this.api,i)}),c=o.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(Q(c).lt(0))throw new Je;return o}async getSendAmountDetails(a,r,i,o){M(a);let c;return r=="float"?(W("amount",a,i.decimals),c=I(a,i.decimals).toFixed()):c=a,mi(c,i,await H(this.api,i),o,await H(this.api,o))}};function Go(s){return"solanaRpcUrl"in s}var bi=class{params;bridge;pool;yield;utils;service;constructor(a,r=on){let i;Go(a)?i=new an({SOL:a.solanaRpcUrl,TRX:a.tronRpcUrl}):i=new an(a),this.service=new ur(i,r),this.bridge=this.service.bridge,this.pool=this.service.pool,this.yield=this.service.yield,this.utils=new mr(this.service),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=1){return this.service.getAmountToBeReceived(a,r,i,o)}async getAmountToBeReceivedFromChain(a,r,i,o=1,c,A){return this.service.getAmountToBeReceivedFromChain(a,r,i,o,c,A)}getAmountToBeReceivedFromPools(a,r,i,o,c,A=1){switch(A){case 1:case 2:return this.service.getAmountToBeReceivedComputeWithPools(a,r,i,o,c);case 3:case 4:return this.service.getAmountToBeReceivedComputeCctp(a,r,i,A)}}async getAmountToSend(a,r,i,o=1){return this.service.getAmountToSend(a,r,i,o)}async getAmountToSendFromChain(a,r,i,o=1,c,A){return this.service.getAmountToSendFromChain(a,r,i,o,c,A)}getAmountToSendFromPools(a,r,i,o,c,A=1){switch(A){case 1:case 2:return this.service.getAmountToSendComputeWithPools(a,r,i,o,c);case 3:case 4:return this.service.getAmountToSendComputeCctp(a,r,i,A)}}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,i=1){return this.service.getExtraGasMaxLimits(a,r,i)}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{lr as AddressStatus,bi as AllbridgeCoreSdk,fn as AmountFormat,lt as AmountNotEnoughError,mn as ArgumentInvalidDecimalsError,re as CCTPDoesNotSupportedError,he as ChainSymbol,Z as ChainType,ki as ErrorCode,An as ExtraGasMaxLimitExceededError,st as FeePaymentMethod,Je as InsufficientPoolLiquidityError,$e as InvalidAmountError,Wt as InvalidGasFeePaymentOptionError,cn as InvalidMessengerOptionError,pt as InvalidTxError,q as JupiterError,Te as Messenger,J as MethodNotSupportedError,un as NodeRpcUrlNotInitializedError,ae as OFTDoesNotSupportedError,f as SdkError,$ as SdkRootError,Pr as SolanaAutoTxFee,Gt as TimeoutError,ln as TxTooLargeError,Nt as VerifyTxError,dn as YieldDoesNotSupportedError,Ls as assertYieldIsSupported,zn as isYieldSupported,on as mainnet,Vo as nodeRpcUrlsDefault,Eo as nodeUrlsDefault};
1
+ var Pi=Object.create;var Kr=Object.defineProperty;var wi=Object.getOwnPropertyDescriptor;var Ci=Object.getOwnPropertyNames;var Bi=Object.getPrototypeOf,Ri=Object.prototype.hasOwnProperty;var Ii=(s,a)=>()=>(s&&(a=s(s=0)),a);var dr=(s,a)=>()=>(a||s((a={exports:{}}).exports,a),a.exports);var vi=(s,a,r,i)=>{if(a&&typeof a=="object"||typeof a=="function")for(let o of Ci(a))!Ri.call(s,o)&&o!==r&&Kr(s,o,{get:()=>a[o],enumerable:!(i=wi(a,o))||i.enumerable});return s};var Re=(s,a,r)=>(r=s!=null?Pi(Bi(s)):{},vi(a||!s||!s.__esModule?Kr(r,"default",{value:s,enumerable:!0}):r,s));import{bcs as Ae}from"@mysten/sui/bcs";function is(s,a=["<",">"]){let[r,i]=a,o=[],c="",A=0;for(let m=0;m<s.length;m++){let u=s[m];if(u===r&&A++,u===i&&A--,A===0&&u===","){o.push(c.trim()),c="";continue}c+=u}return o.push(c.trim()),o}function te(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 c=s.slice(0,i),A=is(s.slice(i+1,s.length-o-1),[a,r]);return{typeName:c,typeArgs:A}}function Da(s){return!s||typeof s!="object"||Array.isArray(s)?!1:"GasCoin"in s||"Input"in s||"Result"in s||"NestedResult"in s}function v(s,a){return Da(a)?a:s.object(a)}function Se(s,a,r){if(Da(a))return v(s,a);function i(d){let{typeName:l,typeArgs:p}=te(d);switch(l){case"bool":return Ae.Bool;case"u8":return Ae.U8;case"u16":return Ae.U16;case"u32":return Ae.U32;case"u64":return Ae.U64;case"u128":return Ae.U128;case"u256":return Ae.U256;case"address":return Ae.Address;case"0x1::string::String":case"0x1::ascii::String":return Ae.String;case"0x2::object::ID":return Ae.Address;case"0x1::option::Option":return Ae.option(i(p[0]));case"vector":return Ae.vector(i(p[0]));default:throw new Error(`invalid primitive type ${d}`)}}function o(d){for(let l of d){if(typeof l>"u"||l===null)return!0;if(Array.isArray(l))return o(l)}return!1}function c(d){for(let l of d){if(!Array.isArray(l)){if(l===null)continue;switch(typeof l){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return c(l)}return!0}function A(d){for(let l of d){if(!Array.isArray(l))switch(typeof l){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return A(l)}return!1}let{typeName:m,typeArgs:u}=te(r);switch(m){case"0x1::option::Option":if(a===null)return s.pure.option("bool",null);if(c([a]))return s.pure(i(r).serialize(a));if(A([a]))throw new Error("mixing primitive and TransactionArgument values is not supported");return s.moveCall({target:"0x1::option::some",typeArguments:[u[0]],arguments:[Se(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(Ae.vector(Ae.Bool).serialize([]));if(o(a))throw new Error("the provided array contains undefined or null values");if(c(a))return s.pure(i(r).serialize(a));if(A(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 ss(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 C(s){let{typeName:a,typeArgs:r}=te(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<${C(r[0])}>`;default:{let i=a.split("::");i[0]=ss(i[0]);let o=i.join("::");return r.length>0?`${o}<${r.map(c=>C(c)).join(",")}>`:o}}}function U(s,...a){return a.length>0?`${s}<${a.join(", ")}>`:s}var z=Ii(()=>{"use strict"});var ze=dr((_m,Wa)=>{"use strict";z();var Ir=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return C(s.$PACKAGE_ID)}get PUBLISHED_AT(){return C(s.$PUBLISHED_AT)}get PKG_V1(){return C(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}},os=new Ir;Wa.exports=os});var xr=dr((Lm,Za)=>{"use strict";z();var Fr=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return C(s.$PACKAGE_ID)}get PUBLISHED_AT(){return C(s.$PUBLISHED_AT)}get PKG_V1(){return C(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}},cs=new Fr;Za.exports=cs});var Dr=dr((Qm,$a)=>{"use strict";z();var Or=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return C(s.$PACKAGE_ID)}get PUBLISHED_AT(){return C(s.$PUBLISHED_AT)}get PKG_V1(){return C(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 Or;$a.exports=As});var on={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},Eo={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},Vo={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{TronWeb as Ss}from"tronweb";import{Web3 as Ps}from"web3";var $=class extends Error{errorCode;constructor(a,r){super(r),this.errorCode=a}},f=class extends ${constructor(a){super("SdkError",a)}},$e=class extends ${constructor(a){super("InvalidAmountError",a)}},lt=class extends ${constructor(a){super("AmountNotEnoughError",a)}},Je=class extends ${constructor(a){super("InsufficientPoolLiquidityError",a)}},q=class extends ${constructor(a){super("JupiterError",a)}},Wt=class extends ${constructor(a){super("InvalidGasFeePaymentOptionError",a)}},cn=class extends ${constructor(a){super("InvalidMessengerOptionError",a)}},J=class extends ${constructor(a){super("MethodNotSupportedError",a)}},Nt=class extends ${constructor(a){super("VerifyTxError",a)}},pt=class extends ${constructor(a){super("InvalidTxError",a)}},An=class extends ${constructor(a){super("ExtraGasMaxLimitExceededError",a)}},mn=class extends ${constructor(a,r,i){super("ArgumentInvalidDecimalsError",`Argument '${a}' decimals '${r}' cannot be greater than '${i}'`)}},Gt=class extends ${constructor(a){super("TimeoutError",a)}},un=class extends ${constructor(a){super("NodeRpcUrlNotInitializedError",`For chain '${a}' Node RPC URL not initialized`)}},re=class extends ${constructor(a){super("CCTPDoesNotSupportedError",a)}},ae=class extends ${constructor(a){super("OFTDoesNotSupportedError",a)}},dn=class extends ${constructor(a){super("YieldDoesNotSupportedError",a)}},ln=class extends ${constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},ki=(y=>(y.SDK_ERROR="SdkError",y.INVALID_AMOUNT_ERROR="InvalidAmountError",y.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",y.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",y.JUPITER_ERROR="JupiterError",y.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",y.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",y.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",y.VERIFY_TX_ERROR="VerifyTxError",y.INVALID_TX_ERROR="InvalidTxError",y.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",y.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",y.TIMEOUT_ERROR="TimeoutError",y.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",y.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",y.OFT_DOES_NOT_SUPPORTED_ERROR="OFTDoesNotSupportedError",y.YIELD_DOES_NOT_SUPPORTED_ERROR="YieldDoesNotSupportedError",y.TX_TOO_LARGE="TxTooLargeError",y))(ki||{});var he=(b=>(b.BSC="BSC",b.ETH="ETH",b.BAS="BAS",b.SOL="SOL",b.TRX="TRX",b.POL="POL",b.ARB="ARB",b.CEL="CEL",b.AVA="AVA",b.SRB="SRB",b.STLR="STLR",b.OPT="OPT",b.SUI="SUI",b.SNC="SNC",b.UNI="UNI",b.LIN="LIN",b))(he||{}),Z=(c=>(c.EVM="EVM",c.SOLANA="SOLANA",c.TRX="TRX",c.SRB="SRB",c.SUI="SUI",c))(Z||{});var Fi={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9},xi={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"},UNI:{chainSymbol:"UNI",chainId:"0x82",name:"Unichain",chainType:"EVM"},LIN:{chainSymbol:"LIN",chainId:"0xe708",name:"Linea",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"}},x=(()=>{let s={...xi};return{addChainsProperties(a){s={...s,...a}},getChainProperty(a){let r=s[a];if(!r)throw new f(`Cannot find chain properties for ${a}`);return r},getChainsProperties(){return s},getChainDecimalsByType(a){return Fi[a]}}})();var lr=(A=>(A.OK="OK",A.INVALID="INVALID",A.FORBIDDEN="FORBIDDEN",A.UNINITIALIZED="UNINITIALIZED",A.CONTRACT_ADDRESS="CONTRACT_ADDRESS",A.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",A))(lr||{});var Te=(c=>(c[c.ALLBRIDGE=1]="ALLBRIDGE",c[c.WORMHOLE=2]="WORMHOLE",c[c.CCTP=3]="CCTP",c[c.CCTP_V2=4]="CCTP_V2",c[c.OFT=5]="OFT",c))(Te||{});import{Big as Hr}from"big.js";async function H(s,a){return await s.getPoolInfoByKey({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress})}function M(s){if(Hr(s).lte(0))throw new $e("Amount must be greater than zero")}function W(s,a,r){let i=Hr(a).toFixed(),[o,c]=i.split(".");if(c&&c.length>r)throw new mn(s,c.length,r)}async function pn(s,a,r){return await Promise.race([s,new Promise((i,o)=>{setTimeout(()=>o(new Gt(a)),r)})])}async function pr(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 pn(s(),a,i)}catch{if(++o>=r)throw new Gt(a)}}async function Qr(s,a,r,i=1.5,o=!1){let c=[],A=0,m=await s();if(c.push(m),!a(m))return c;let u=new Date(Date.now()+r*1e3).valueOf(),d=1e3,l=d;for(;Date.now()<u;){let p=c[c.length-1];if(p===void 0||!a(p))break;A++,o&&console.info(`Waiting ${d}ms before trying again (bringing the total wait time to ${l}ms so far, of total ${r*1e3}ms)`),await new Promise(h=>setTimeout(h,d)),d=d*i,new Date(Date.now()+d).valueOf()>u&&(d=u-Date.now(),o&&console.info(`was gonna wait too long; new waitTime: ${d}ms`)),l=d+l;let g=await s(p);c.push(g),o&&a(g)&&console.info(`${A}. Called ${s.name}; ${c.length} prev attempts. Most recent: ${JSON.stringify(c[c.length-1],null,2)}`)}return c}import{Big as $i}from"big.js";var Mi={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=Mi;var Oi={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=Oi;var Di={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"uint16",name:"optionType",type:"uint16"}],name:"InvalidOptionType",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"address",name:"tokenAddress",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFeeWithExtraGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"extraGasDestinationToken",type:"uint256"}],name:"OftTokensSent",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:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"addToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"feeShare",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"},{internalType:"uint256",name:"extraGasInDestinationToken",type:"uint256"},{internalType:"uint256",name:"slippageBP",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"},{internalType:"uint128",name:"extraGasAmount_",type:"uint128"}],name:"extraGasPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getEidByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"oftAddress",outputs:[{internalType:"address",name:"oftAddress",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"eid_",type:"uint32"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"}],name:"relayerFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"removeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"setLzGasLimit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"maxExtraGas_",type:"uint256"}],name:"setMaxExtraGas",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:[{internalType:"contract IERC20",name:"token_",type:"address"}],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"}]},ea=Di;import*as yn from"@project-serum/anchor";import{PublicKey as ba}from"@solana/web3.js";import*as ee from"@project-serum/anchor";import{PublicKey as ie}from"@solana/web3.js";async function Ie(s,a){return ee.utils.token.associatedAddress({mint:a,owner:s})}async function Ke(s){let[a]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("config")],s);return a}async function ta(s,a){let[r]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("lock"),Uint8Array.from(s)],a);return r}async function Ut(s,a){let[r]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([s])],a);return r}async function gt(s){let a=await Ke(s),[r]=await ie.findProgramAddress([a.toBuffer()],s);return r}async function na(s,a){let[r]=await ie.findProgramAddress([s.toBuffer()],a);return r}async function ft(s,a){let[r]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("token"),s.toBytes()],a);return r}async function ra(s,a,r){let[i]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([s]),a],r);return i}async function gr(s,a){let[r]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([s])],a);return r}async function fr(s,a){let[r]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([s])],a);return r}async function aa(s,a){let[r]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("sent_message"),s],a);return r}async function yr(s,a,r){let[i]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("user_deposit"),a.toBytes(),s.toBytes()],r);return i}async function ia(s,a){let[r]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("cctp_bridge"),s.toBytes()],a);return r}async function sa(s,a){let[r]=await ie.findProgramAddress([ee.utils.bytes.utf8.encode("token"),s.toBytes()],a);return r}function oa(s,a){let[r]=ie.findProgramAddressSync([ee.utils.bytes.utf8.encode("lock"),a.toBuffer()],s);return r}function ca(s,a,r,i){let o=at("message_transmitter",r),c=at("token_messenger",i),A=at("__event_authority",i),m=at("token_minter",i),u=at("local_token",i,[a]),d=at("remote_token_messenger",i,[s.toString()]),l=at("sender_authority",i);return{messageTransmitterAccount:o,tokenMessenger:c,tokenMessengerEventAuthority:A,tokenMinter:m,localToken:u,remoteTokenMessengerKey:d,authorityPda:l}}function at(s,a,r=[]){let i=[Buffer.from(ee.utils.bytes.utf8.encode(s))];for(let c of r)typeof c=="string"?i.push(Buffer.from(ee.utils.bytes.utf8.encode(c))):Array.isArray(c)||Buffer.isBuffer(c)?i.push(Buffer.from(Uint8Array.from(c))):i.push(Buffer.from(Uint8Array.from(c.toBuffer())));return ie.findProgramAddressSync(i,a)[0]}import{AnchorProvider as Wi}from"@project-serum/anchor";import{Connection as Ni,PublicKey as Gi}from"@solana/web3.js";function He(s,a){let r=new Ni(s,"confirmed"),i=new Gi(a);return new Wi(r,{publicKey:i},{preflightCommitment:"confirmed",commitment:"confirmed"})}import{PublicKey as Ui}from"@solana/web3.js";import{Address as Ei}from"@stellar/stellar-sdk";import{Big as le}from"big.js";import ya from"randombytes";import{utils as ga}from"tronweb";import{Big as S}from"big.js";import hr from"bn.js";function Tr(s,a){return S(100).minus(S(100).times(a).div(s)).toNumber()}function it(s,a){return be(s,a,3).round(0,S.roundDown)}function de(s,a){return be(s,3,a)}function be(s,a,r){let i=S(r).minus(a).toNumber();return S(s).times(Et(i))}function Et(s){return S(10).pow(s)}function I(s,a){return S(s).times(Et(a))}function R(s,a){let r=S(s);return r.eq(0)?S(0):S(r).div(Et(a))}function se(s){return R(S(s.tokenBalance).minus(s.vUsdBalance).toFixed(),3).div(2).toFixed()}function Ge(s,{feeShare:a,decimals:r},i){let o=S(s);if(o.lte(0))return"0";let c=o.times(a),A=o.minus(c),m=it(A,r),u=S(i.tokenBalance).plus(m),d=Ue(u,i.aValue,i.dValue);return S(i.vUsdBalance).minus(d).round(0,S.roundDown).toFixed()}function Vt(s,{feeShare:a,decimals:r},i){let o=S(s);if(o.lte(0))return S(0).toFixed();let c=o.plus(i.vUsdBalance),A=Ue(c,i.aValue,i.dValue),m=de(S(i.tokenBalance).minus(A),r),u=S(m).times(a);return S(m).minus(u).round(0,S.roundDown).toFixed()}function Aa(s,a){let r=S(s);if(r.lte(0))return a;let i=r.plus(a.vUsdBalance),o=Ue(i,a.aValue,a.dValue);return{aValue:a.aValue,dValue:a.dValue,tokenBalance:o.toFixed(0),vUsdBalance:i.toFixed(0)}}function ma(s,{feeShare:a,decimals:r},i){if(S(s).lte(0))return S(0);let o=S(i.vUsdBalance).minus(s);if(o.lte(0))throw new Je;let c=Ue(o,i.aValue,i.dValue),A=S(c).minus(i.tokenBalance),m=de(A,r),u=S(a).div(S(1).minus(a)),d=S(m).times(u).round(0,S.roundUp);return S(m).plus(d).round(0,S.roundDown)}function ua(s,{feeShare:a,decimals:r},i){if(S(s).lte(0))return S(0);let o=S(a).div(S(1).minus(a)),c=S(s).times(o).round(0,S.roundUp),A=S(s).plus(c),m=it(A,r),u=S(i.tokenBalance).minus(m);if(u.lte(0))throw new Je;let d=Ue(u,i.aValue,i.dValue);return S(d).minus(i.vUsdBalance).round(0,S.roundDown)}function Ue(s,a,r){let i=S(4).times(a).times(S(r).minus(s)).minus(r),o=S(r).pow(3),c=i.pow(2),A=S(s).times(S(s).times(c).plus(S(4).times(a).times(o))).sqrt().round(0,S.roundDown),m=S(8).times(a).times(s),u=i.times(s).plus(A).div(m).round(0,S.roundDown);return u.eq(0)?S(0):u.plus(1)}function da(s,a,r,i){let o=new hr(s),c=new hr(r),A=new hr(a);return o.mul(c).shrn(i).sub(A).toString()}function la(s){return S(s).gt(0)?`${Number(S(s).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function pa(s,a,r){let i=S(a).times(r),o=S(a).plus(r),c=S(8).times(s).times(i).times(o),A=i.times(S(16).times(s).minus(4)).div(3),m=c.times(c),u=A.times(A).times(A),d=m.plus(u),l=S(d).sqrt(),p=S(Math.cbrt(+c.plus(l).toFixed())),g=S(Math.cbrt(+c.minus(l).toFixed()));return p.plus(g).toFixed()}function Ye(s,a,r){let i;switch(a){case"EVM":{i=fa(s);break}case"SOLANA":{i=new Ui(s).toBuffer();break}case"TRX":{i=Vi(s);break}case"SRB":{i=new Ei(s).toBuffer();break}case"SUI":{i=fa(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 ve(s){return s.replace(/^0x/i,"")}function ha(s){return Buffer.from(s.replace(/^0x/i,""),"hex")}function fa(s){let r=ha(s);return Buffer.concat([Buffer.alloc(32-r.length,0),r],32)}function Vi(s){let a=jt(s),r=ha(a);return ji(r,32)}function jt(s){let a=ga.crypto.decodeBase58Address(s);return a?ga.bytes.byteArray2hexStr(a).replace(/^41/,"0x"):""}function ji(s,a){if(s.length>=a)return s;let r=Buffer.alloc(a,0);return s.copy(r,a-s.length),r}function gn(){return ya(32)}function Ee(){let s=ya(32).readBigInt64BE();return s<0?s*-1n:s}function Ve(s,a){let r={},i=a.sourceToken;if(r.amount=I(a.amount,i.decimals).toFixed(),r.contractAddress=i.bridgeAddress,r.fromAccountAddress=a.fromAccountAddress,s==="SUI"){if(!i.originTokenAddress)throw new f("SUI sourceToken must contain 'originTokenAddress'");r.fromTokenAddress=i.originTokenAddress}else r.fromTokenAddress=Ye(i.tokenAddress,s,s);if(r.toAccountAddress=a.toAccountAddress,s==="SUI"){if(!a.destinationToken.originTokenAddress)throw new f("SUI destinationToken must contain 'originTokenAddress'");r.toTokenAddress=a.destinationToken.originTokenAddress}else r.toTokenAddress=Ye(a.destinationToken.tokenAddress,s,s);return r.minimumReceiveAmount=a.minimumReceiveAmount?I(a.minimumReceiveAmount,a.destinationToken.decimals).toFixed():"0",r}async function ke(s,a,r){let i={};i.fromChainId=a.sourceToken.allbridgeChainId,i.fromChainSymbol=a.sourceToken.chainSymbol;let o=x.getChainProperty(a.destinationToken.chainSymbol).chainType;if(s==="SUI"){if(!a.sourceToken.originTokenAddress)throw new f("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 c=a.sourceToken;switch(a.messenger){case 3:if(!c.cctpAddress||!a.destinationToken.cctpAddress)throw new re("Such route does not support CCTP protocol");i.contractAddress=c.cctpAddress;break;case 4:if(!c.cctpV2Address||!a.destinationToken.cctpV2Address)throw new re("Such route does not support CCTP V2 protocol");i.contractAddress=c.cctpV2Address;break;case 5:if(!c.oftBridgeAddress||!a.destinationToken.oftBridgeAddress||c.oftId!==a.destinationToken.oftId)throw new ae("Such route does not support OFT protocol");i.contractAddress=c.oftBridgeAddress;break;case 1:case 2:i.contractAddress=c.bridgeAddress;break}i.messenger=a.messenger,i.fromAccountAddress=a.fromAccountAddress,i.amount=I(a.amount,c.decimals).toFixed();let{fee:A,feeFormat:m}=a;if(!A){let p=(await br(a.sourceToken,i.toChainId,i.messenger,r))[i.gasFeePaymentMethod];if(!p)throw new Wt;A=p.int,m="int"}if(m=="float")switch(i.gasFeePaymentMethod){case"native":i.fee=I(A,x.getChainDecimalsByType(c.chainType)).toFixed(0);break;case"stablecoin":i.fee=I(A,c.decimals).toFixed(0);break}else i.fee=A;let{extraGas:u,extraGasFormat:d}=a;if(u&&+u>0){let l=await Sr(c,a.destinationToken,i.messenger,r),p,g;switch(i.gasFeePaymentMethod){case"native":p=x.getChainDecimalsByType(c.chainType),g=le(l.exchangeRate);break;case"stablecoin":p=c.decimals,g=le(l.exchangeRate).div(l.sourceNativeTokenPrice);break}switch(d??"int"){case"float":{i.extraGas=I(u,p).toFixed(0);let h=g.mul(u);i.extraGasDest=I(h,x.getChainDecimalsByType(a.destinationToken.chainType)).toFixed(0,le.roundDown);break}case"int":{i.extraGas=u;let h=R(i.extraGas,x.getChainDecimalsByType(c.chainType)),B=g.mul(h);i.extraGasDest=I(B,x.getChainDecimalsByType(a.destinationToken.chainType)).toFixed(0,le.roundDown);break}}_i(i.extraGas,i.gasFeePaymentMethod,l)}return s!=="SUI"&&(i.fromTokenAddress=Ye(i.fromTokenAddress,s,s)),i.toAccountAddress=Ye(a.toAccountAddress,o,s),i.toTokenAddress=Ye(i.toTokenAddress,o,s),i.gasFeePaymentMethod=="stablecoin"&&Zi(i.amount,c.decimals,i.fee,i.extraGas),i}function Zi(s,a,r,i){let o=le(s).minus(r).minus(i??0);if(o.lte(0))throw new lt(`Amount not enough to pay fee, ${R(le(o).minus(1).neg(),a).toFixed()} stables is missing`)}async function br(s,a,r,i){let o=await i.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:a,messenger:r,sourceToken:s.tokenAddress}),c={native:{int:o.fee,float:R(o.fee,x.getChainDecimalsByType(s.chainType)).toFixed()},adminFeeShareWithExtras:o.adminFeeShareWithExtras};if(o.sourceNativeTokenPrice){let A=be(new le(o.fee).mul(o.sourceNativeTokenPrice),x.getChainDecimalsByType(s.chainType),s.decimals).toFixed(0,le.roundUp);c.stablecoin={int:A,float:R(A,s.decimals).toFixed()}}return c}function _i(s,a,r){let i=r.extraGasMax[a];if(!i)throw new Wt(`Impossible to pay extra gas by '${a}' payment method`);let o=i.int;if(le(s).gt(o))throw new An(`Extra gas ${s} in int format, exceeded limit ${o} for '${a}' payment method`)}async function Sr(s,a,r,i){let o={},c=await i.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:a.allbridgeChainId,messenger:r,sourceToken:s.tokenAddress}),A=a.txCostAmount.maxAmount,m=R(A,x.getChainDecimalsByType(a.chainType)).toFixed(),u=le(m).div(c.exchangeRate).toFixed(x.getChainDecimalsByType(s.chainType),le.roundDown),d=I(u,x.getChainDecimalsByType(s.chainType)).toFixed(0);if(o.native={int:d,float:u},c.sourceNativeTokenPrice){let l=le(u).mul(c.sourceNativeTokenPrice).toFixed(s.decimals,le.roundDown);o.stablecoin={int:I(l,s.decimals).toFixed(0),float:l}}return{extraGasMax:o,destinationChain:{gasAmountMax:{int:A,float:m},swap:{int:a.txCostAmount.swap,float:R(a.txCostAmount.swap,x.getChainDecimalsByType(a.chainType)).toFixed()},transfer:{int:a.txCostAmount.transfer,float:R(a.txCostAmount.transfer,x.getChainDecimalsByType(a.chainType)).toFixed()}},exchangeRate:c.exchangeRate,sourceNativeTokenPrice:c.sourceNativeTokenPrice}}function Ta(s){return s.sourceToken.chainSymbol!==s.destinationToken.chainSymbol}async function hn(s,a,r,i){let o,c=new ba(a),A=new ba(r),m=await Ie(c,A),u=He(i,a);yn.setProvider(u);let d=await yn.Spl.token(u).account.token.fetchNullable(m);if(d?.authority.equals(c))o=Ye(m.toBase58(),"SOLANA",s);else{let l=await u.connection.getTokenAccountsByOwner(c,{mint:A});if(l.value.length===0&&!d)o=Ye(m.toBase58(),"SOLANA",s);else if(l.value.length>0){let p=l.value[0];if(!p?.pubkey)throw new f("First token account or its public key is undefined");o=Ye(p.pubkey.toBase58(),"SOLANA",s)}else throw new f("Associated account has wrong owner")}return o}var pe=class{};var Zt=class extends pe{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=Ve(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:c,fromTokenAddress:A,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:d}=r,p=this.getBridgeContract(o).methods.swap(i,A,u,m,d);return Promise.resolve({from:c,to:o,data:p.encodeABI()})}async buildRawTransactionSend(r){let i=await ke(this.chainType,r,this.api),{amount:o,contractAddress:c,fromAccountAddress:A,fromTokenAddress:m,toChainId:u,toAccountAddress:d,toTokenAddress:l,messenger:p,fee:g,gasFeePaymentMethod:h,extraGas:B,extraGasDest:T}=i,b="0x"+gn().toString("hex"),w,y,P=g;switch(B&&(P=$i(P).plus(B).toFixed()),p){case 3:case 4:{let F=await this.buildRawTransactionCctpSend(r,i,P);w=F.sendMethod,y=F.value;break}case 5:{let F=this.buildRawTransactionOftSend(r,i,P,T);w=F.sendMethod,y=F.value;break}case 1:case 2:{let F=this.getBridgeContract(c);h==="stablecoin"?(w=F.methods.swapAndBridge(m,o,d,u,l,b,p,P),y="0"):(w=F.methods.swapAndBridge(m,o,d,u,l,b,p,0),y=P)}break}return Promise.resolve({from:A,to:c,value:y,data:w.encodeABI()})}async buildRawTransactionCctpSend(r,i,o){let{amount:c,contractAddress:A,toChainId:m,toAccountAddress:u,gasFeePaymentMethod:d}=i,l=this.getCctpBridgeContract(A),p,g;if(r.destinationToken.chainType==="SOLANA"){let h=await hn(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));d==="stablecoin"?(p=l.methods.bridgeWithWalletAddress(c,h,u,m,o),g="0"):(p=l.methods.bridgeWithWalletAddress(c,h,u,m,0),g=o)}else d==="stablecoin"?(p=l.methods.bridge(c,u,m,o),g="0"):(p=l.methods.bridge(c,u,m,0),g=o);return{sendMethod:p,value:g}}buildRawTransactionOftSend(r,i,o,c){let{amount:A,contractAddress:m,toChainId:u,toAccountAddress:d,gasFeePaymentMethod:l}=i,p=this.getOftBridgeContract(m),g,h;return l==="stablecoin"?(g=p.methods.bridge(r.sourceToken.tokenAddress,A,d,u,o,c??"0","10"),h="0"):(g=p.methods.bridge(r.sourceToken.tokenAddress,A,d,u,0,c??"0","10"),h=o),{sendMethod:g,value:h}}async sendRawTransaction(r){let i=await this.web3.eth.estimateGas(r),o={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:c}=await this.web3.eth.sendTransaction({...r,gas:i,...o});return{txId:c.toString()}}getBridgeContract(r){return new this.web3.eth.Contract(zr.abi,r)}getCctpBridgeContract(r){return new this.web3.eth.Contract(qr.abi,r)}getOftBridgeContract(r){return new this.web3.eth.Contract(ea.abi,r)}};var Tn=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 c=_t(o.token,o.messenger);return this.tokenService.buildRawTransactionApprove({...o,spender:c},i)}async send(a,r){return M(a.amount),W("amount",a.amount,a.sourceToken.decimals),Ta(a)?bn(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionSend(a):bn(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionSwap(a)}};import{BN as Tt,Program as Cr,Spl as es,web3 as Qe}from"@project-serum/anchor";import{Keypair as Ma,PublicKey as _,SystemProgram as ts}from"@solana/web3.js";import{Big as Fe}from"big.js";var $t={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 Sa={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 Yi from"big.js";import{Web3 as Sn}from"web3";async function yt(s,a){return await Ji.token(a).account.token.fetch(s)}async function Pa(s,a,r){let i=await a.account.pool.fetch(r),o=i.decimals,c=Yi(i.feeShareBp.toString()).div(1e4).toFixed(),A={aValue:i.a.toString(),dValue:i.d.toString(),totalLpAmount:i.totalLpAmount.toString(),tokenBalance:i.tokenBalance.toString(),vUsdBalance:i.vUsdBalance.toString(),accRewardPerShareP:i.accRewardPerShareP.toString()};return Ge(s,{decimals:o,feeShare:c},A)}function wa(s){let a=s.amount,r="0x"+s.recipient.toString("hex"),i=s.sourceChainId,o=s.destinationChainId,c="0x"+s.receiveToken.toString("hex"),A="0x"+s.nonce.toString("hex"),m=1,u="0x"+s.chainBridge.toString("hex"),d=Sn.utils.encodePacked({t:"uint256",v:a},{t:"bytes32",v:r},{t:"uint256",v:i},{t:"bytes32",v:c},{t:"uint256",v:A},{t:"uint8",v:m});if(!d)throw new f("message cannot be undefined");let l=Sn.utils.keccak256(Buffer.from(d.replace("0x",""),"hex")),p=Buffer.from(l.replace("0x",""),"hex");p[0]=i,p[1]=o;let g=Sn.utils.encodePacked({t:"bytes32",v:"0x"+p.toString("hex")},{t:"bytes32",v:u});if(!g)throw new pt("messageWithSigner cannot be undefined");let h=Sn.utils.keccak256(Buffer.from(g.replace("0x",""),"hex")),B=Buffer.from(h.replace("0x",""),"hex");return B[0]=p[0],B[1]=p[1],B}import{ComputeBudgetInstruction as Ba,ComputeBudgetProgram as Pn,Connection as Ra,TransactionMessage as Li}from"@solana/web3.js";import{Big as Xi}from"big.js";import{AddressLookupTableAccount as Ca}from"@solana/web3.js";async function ot(s,a){return await Promise.all(s.message.addressTableLookups.map(async r=>new Ca({key:r.accountKey,state:Ca.deserialize(await a.getAccountInfo(r.accountKey).then(i=>{if(!i)throw new f("Cannot get AccountInfo");return i.data}))})))}var Pr="AUTO";async function ht(s,a,r){let i=new Ra(r,"confirmed"),o=(await i.simulateTransaction(s)).value.unitsConsumed;await va(s.instructions,o,a,i)}async function Ia(s,a,r){let i=new Ra(r,"confirmed"),o=await ot(s,i),c=Li.decompile(s.message,{addressLookupTableAccounts:o});if(s.serialize().length>1232)throw new ln;await va(c.instructions,769230,a,i),s.message=c.compileToV0Message(o)}async function va(s,a,r,i){if(a>0){let o=Ki(a,s);if(r?.solana){let c=r.solana;if(c===Pr)await wr(s,i);else if("pricePerUnitInMicroLamports"in c)await wr(s,i,c.pricePerUnitInMicroLamports);else{let A=Xi(c.extraFeeInLamports).div(o).mul(Et(6)).toFixed(0);await wr(s,i,A)}}}}function Ki(s,a){let r=a.findIndex(c=>c.programId.equals(Pn.programId)&&Ba.decodeInstructionType(c)==="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 wr(s,a,r){let i=s.findIndex(A=>A.programId.equals(Pn.programId)&&Ba.decodeInstructionType(A)==="SetComputeUnitPrice"),o=BigInt(r||await Hi(a)),c=Pn.setComputeUnitPrice({microLamports:o});return i>=0?s[i]=c:s.push(c),o.toString()}async function Hi(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 Qi}from"@solana/spl-token";import{Connection as zi,TransactionMessage as ka,VersionedTransaction as qi}from"@solana/web3.js";import Fa,{AxiosError as xa}from"axios";var wn=class{connection;jupiterUrl;apiKeyHeader;maxAccounts;constructor(a,r){this.connection=new zi(a),this.jupiterUrl=r.jupiterUrl.replace(/\/$/,""),this.apiKeyHeader=r.jupiterApiKeyHeader,this.maxAccounts=r.jupiterMaxAccounts}async getJupiterSwapTx(a,r,i,o){let c;try{let p=o?"ExactOut":"ExactIn",g=`${this.jupiterUrl}/quote?inputMint=${r}&outputMint=${Qi.toString()}&amount=${i}&swapMode=${p}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(g+=`&maxAccounts=${this.maxAccounts}`),c=await Fa.get(g,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(p){throw p instanceof xa&&p.response&&p.response.data&&p.response.data.error?new q(p.response.data.error):new q("Cannot get route")}let A;if(o&&c?.data?.inAmount)A=c.data.inAmount;else if(o)throw new q("Cannot get inAmount");let m;try{m=await Fa.post(`${this.jupiterUrl}/swap`,{quoteResponse:c.data,userPublicKey:a,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(p){throw p instanceof xa&&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 d=Buffer.from(u,"base64"),l=qi.deserialize(d);return o?{tx:l,amountIn:A}:{tx:l}}async amendJupiterWithSdkTx(a,r){try{let i=await ot(a,this.connection),o=await ot(r,this.connection),c=ka.decompile(a.message,{addressLookupTableAccounts:i}),A=ka.decompile(r.message,{addressLookupTableAccounts:o});if(A.instructions.shift(),c.instructions.push(...A.instructions),i.push(...o),a.message=c.compileToV0Message(i),r.message.header.numRequiredSignatures===2&&a.signatures.length===1){let m=r.signatures[0];if(!m)throw new f("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 Br=1e6,Oa=1.1,Cn=class extends pe{constructor(r,i,o){super();this.solanaRpcUrl=r;this.params=i;this.api=o;this.jupiterService=new wn(r,i.jupiterParams)}chainType="SOLANA";jupiterService;async buildRawTransactionSwap(r){let i=Ve(this.chainType,r);return await this.buildSwapTransaction(i,r.sourceToken.poolAddress,r.destinationToken.poolAddress,r.txFeeParams)}async buildSwapTransaction(r,i,o,c){let{fromAccountAddress:A,amount:m,contractAddress:u,fromTokenAddress:d,toTokenAddress:l,toAccountAddress:p,minimumReceiveAmount:g}=r,h=A,B=u,T=d,b=l,w=o,y=p,P=new _(h),F=He(this.solanaRpcUrl,P.toString()),j=new Cr($t,B,F),G=await gt(j.programId),me=await Ke(j.programId),K=new _(T),Oe=await ft(K,j.programId),De=new _(i),_e=await Ie(P,K),we=new _(y),ce=new _(b),ye=await ft(ce,j.programId),Ce=new _(w),ue=await Ie(we,ce),We=[Qe.ComputeBudgetProgram.setComputeUnitLimit({units:Br})];try{await yt(ue,F)}catch{let Si=await es.associatedToken(F).methods.create().accounts({mint:ce,owner:we,associatedAccount:ue}).instruction();We.push(Si)}let Ne=await j.methods.swap(new Tt(m),new Tt(g||0)).accounts({payer:P,config:me,bridgeAuthority:G,user:P,sendBridgeToken:Oe,sendMint:K,sendPool:De,sendUserToken:_e,receiveBridgeToken:ye,receiveMint:ce,receivePool:Ce,receiveUserToken:ue}).preInstructions(We).transaction(),Be=F.connection;return Ne.recentBlockhash=(await Be.getLatestBlockhash()).blockhash,Ne.feePayer=P,await ht(Ne,c,this.solanaRpcUrl),await this.convertToVersionedTransaction(Ne,Be)}async buildRawTransactionSend(r){let i=await ke(this.chainType,r,this.api),o=this.addPoolAddress(r,i),c=o.gasFeePaymentMethod=="stablecoin",A;if(c)try{let{tx:d,solTxSendUpdatedParams:l}=await this.processJup(o,r,!0);A=d,o={...o,...l}}catch{try{let{tx:l,solTxSendUpdatedParams:p}=await this.processJup(o,r,!1);A=l,o={...o,...p}}catch(l){throw l instanceof $?l:l instanceof Error&&l.message?new q(`Some error occurred during creation Jupiter swap transaction. ${l.message}`):new q("Some error occurred during creation Jupiter swap transaction")}}let m,u;switch(i.messenger){case 1:{let d=await this.prepareSwapAndBridgeData(o);m=await this.buildSwapAndBridgeAllbridgeTransaction(d);break}case 2:{let d=await this.prepareSwapAndBridgeData(o),{transaction:l,messageAccount:p}=await this.buildSwapAndBridgeWormholeTransaction(d);m=l,u=p;break}case 3:case 4:{let d=await this.prepareSwapAndBridgeCctpData(o),{transaction:l,messageSentEventDataKeypair:p}=await this.buildSwapAndBridgeCctpTransaction(r.destinationToken.chainSymbol,d);m=l,u=p;break}case 5:throw new ae("Messenger OFT is not supported yet.")}if(c){if(!A)throw new q("Swap tx is absent");m=await this.jupiterService.amendJupiterWithSdkTx(A,m)}return await Ia(m,r.txFeeParams,this.solanaRpcUrl),u&&m.sign([u]),m}async processJup(r,i,o){let{fee:c,extraGas:A,gasFeePaymentMethod:m}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(i.sourceToken,r),u=o?Fe(c):Fe(r.fee);A&&(u=u.plus(A)),o||(u=u.mul(Oa));let{tx:d,amountIn:l}=await this.jupiterService.getJupiterSwapTx(i.fromAccountAddress,i.sourceToken.tokenAddress,u.toFixed(0),o),p;if(o){if(!l)throw new q("Cannot get inAmount");p=Fe(r.amount).minus(Fe(l).mul(Oa)).toFixed(0)}else p=Fe(r.amount).minus(u).toFixed(0);if(Fe(p).lte(0))throw new lt(`Amount not enough to pay fee, ${R(Fe(p).minus(1).neg(),i.sourceToken.decimals).toFixed()} stables is missing`);return{tx:d,solTxSendUpdatedParams:{amount:p,fee:c,extraGas:A,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,sourceToken:r.tokenAddress})).sourceNativeTokenPrice,c=Fe(i.fee).div(o).mul(Fe(10).pow(x.getChainDecimalsByType("SOLANA")-r.decimals)).toFixed(0),A;return i.extraGas&&(A=Fe(i.extraGas).div(o).mul(Fe(10).pow(x.getChainDecimalsByType("SOLANA")-r.decimals)).toFixed(0)),{fee:c,extraGas:A,gasFeePaymentMethod:"native"}}return{fee:i.fee,extraGas:i.extraGas,gasFeePaymentMethod:"native"}}getExtraGasInstruction(r,i,o){return Qe.SystemProgram.transfer({fromPubkey:i,toPubkey:o,lamports:+r})}async prepareSwapAndBridgeData(r){let{amount:i,contractAddress:o,fromChainId:c,fromAccountAddress:A,fromTokenAddress:m,toChainId:u,toAccountAddress:d,toTokenAddress:l,poolAddress:p,extraGas:g}=r,h=m,B=A,T=u,b=l,w=d,y=o,P=c,F=He(this.solanaRpcUrl,B),j=new Cr($t,y,F),G=Array.from(gn()),me=new _(p),K=await Pa(i,j,me),Oe=await ta(G,j.programId),De=await gt(j.programId),_e=await Ie(new _(B),new _(h)),we=await ft(new _(h),j.programId),ce=await gr(T,j.programId),ye=await ra(T,Buffer.from(b),j.programId),Ce=await Ke(j.programId),ue=await j.account.config.fetch(Ce),We=await Ut(T,ue.gasOracleProgramId),Ne=await Ut(P,ue.gasOracleProgramId),Be=wa({amount:K,recipient:Buffer.from(w),nonce:Buffer.from(G),receiveToken:Buffer.from(b),destinationChainId:T,sourceChainId:P,chainBridge:(await gt(j.programId)).toBuffer()}),E={};return E.bridge=j,E.amount=new Tt(i),E.vusdAmount=new Tt(K),E.nonce=G,E.recipient=Array.from(w),E.receiveToken=Array.from(b),E.poolAccount=me,E.lockAccount=Oe,E.bridgeAuthority=De,E.userToken=_e,E.bridgeTokenAccount=we,E.chainBridgeAccount=ce,E.otherBridgeTokenAccount=ye,E.userAccount=new _(B),E.destinationChainId=T,E.mint=new _(h),E.config=Ce,E.configAccountInfo=ue,E.gasPrice=We,E.thisGasPrice=Ne,E.message=Be,g&&(E.extraGasInstruction=this.getExtraGasInstruction(g,E.userAccount,Ce)),E}async buildSwapAndBridgeAllbridgeTransaction(r){let{bridge:i,vusdAmount:o,nonce:c,recipient:A,receiveToken:m,poolAccount:u,lockAccount:d,bridgeAuthority:l,userToken:p,bridgeTokenAccount:g,chainBridgeAccount:h,otherBridgeTokenAccount:B,userAccount:T,destinationChainId:b,mint:w,config:y,configAccountInfo:P,gasPrice:F,thisGasPrice:j,message:G,extraGasInstruction:me}=r,K=P.allbridgeMessengerProgramId,Oe=await fr(b,K),De=await Ke(K),_e=await aa(G,K),we=[];me&&we.push(me);let ce=await i.methods.swapAndBridge({vusdAmount:o,nonce:c,destinationChainId:b,recipient:A,receiveToken:m}).accounts({mint:w,user:T,config:y,lock:d,pool:u,gasPrice:F,thisGasPrice:j,bridgeAuthority:l,userToken:p,bridgeToken:g,chainBridge:h,messenger:K,messengerGasUsage:Oe,messengerConfig:De,sentMessageAccount:_e,otherBridgeToken:B}).preInstructions([Qe.ComputeBudgetProgram.setComputeUnitLimit({units:Br})]).postInstructions(we).transaction(),ye=He(this.solanaRpcUrl,T.toString()).connection;return ce.recentBlockhash=(await ye.getLatestBlockhash()).blockhash,ce.feePayer=T,await this.convertToVersionedTransaction(ce,ye)}async convertToVersionedTransaction(r,i){let o=await i.getAddressLookupTable(new _(this.params.solanaLookUpTable)).then(A=>A.value);if(!o)throw new f("Cannot find allbridgeLookupTableAccount");let c=new Qe.TransactionMessage({payerKey:r.feePayer,recentBlockhash:r.recentBlockhash,instructions:r.instructions}).compileToV0Message([o]);return new Qe.VersionedTransaction(c)}async buildSwapAndBridgeWormholeTransaction(r){let{bridge:i,vusdAmount:o,nonce:c,recipient:A,receiveToken:m,poolAccount:u,lockAccount:d,bridgeAuthority:l,userToken:p,bridgeTokenAccount:g,chainBridgeAccount:h,otherBridgeTokenAccount:B,userAccount:T,destinationChainId:b,mint:w,config:y,configAccountInfo:P,gasPrice:F,thisGasPrice:j,message:G,extraGasInstruction:me}=r,K=this.params.wormholeMessengerProgramId,[Oe]=_.findProgramAddressSync([Buffer.from("Bridge")],new _(K)),[De]=_.findProgramAddressSync([Buffer.from("fee_collector")],new _(K)),[_e]=_.findProgramAddressSync([Buffer.from("Sequence"),l.toBuffer()],new _(K)),we=await fr(b,P.wormholeMessengerProgramId),ce=await Ke(P.wormholeMessengerProgramId),ye=Ma.generate(),Ce=He(this.solanaRpcUrl,T.toString()),ue=await Ce.connection.getAccountInfo(Oe);if(ue==null)throw new f("Cannot fetch wormhole bridge account info");let We=new Tt(ue.data.slice(16,24),"le").toString(),Ne=ts.transfer({fromPubkey:T,toPubkey:De,lamports:+We}),Be=[];me&&Be.push(me);let E={mint:w,user:T,config:y,lock:d,pool:u,gasPrice:F,thisGasPrice:j,bridgeAuthority:l,userToken:p,bridgeToken:g,chainBridge:h,otherBridgeToken:B,messengerGasUsage:we,wormholeProgram:K,bridge:Oe,message:ye.publicKey,wormholeMessenger:P.wormholeMessengerProgramId,sequence:_e,feeCollector:De,wormholeMessengerConfig:ce,clock:Qe.SYSVAR_CLOCK_PUBKEY},sn=await i.methods.swapAndBridgeWormhole({vusdAmount:o,nonce:c,destinationChainId:b,recipient:A,receiveToken:m}).accounts(E).preInstructions([Qe.ComputeBudgetProgram.setComputeUnitLimit({units:Br}),Ne]).postInstructions(Be).signers([ye]).transaction();return sn.recentBlockhash=(await Ce.connection.getLatestBlockhash()).blockhash,sn.feePayer=T,{transaction:await this.convertToVersionedTransaction(sn,Ce.connection),messageAccount:ye}}async prepareSwapAndBridgeCctpData(r){let{contractAddress:i,amount:o,fromAccountAddress:c,fromTokenAddress:A,toChainId:m,toAccountAddress:u,toTokenAddress:d,extraGas:l}=r,p=i;if(!p)throw new re("Such route does not support CCTP protocol");let g=4,h=c,B=d,T=u,b=He(this.solanaRpcUrl,h),w=new Cr(Sa,p,b),y=new _(A),P=await ia(y,w.programId),F=new _(h),j=await w.account.cctpBridge.fetch(P),G={};return G.cctpBridge=w,G.cctpBridgeAccount=P,G.cctpAddressAccount=new _(p),G.amount=new Tt(o),G.recipient=Array.from(T),G.receiveToken=Array.from(B),G.userToken=await Ie(F,y),G.bridgeAuthority=await na(P,w.programId),G.bridgeTokenAccount=await sa(y,w.programId),G.chainBridgeAccount=await gr(m,w.programId),G.userAccount=F,G.destinationChainId=m,G.mint=y,G.gasPrice=await Ut(m,j.gasOracleProgramId),G.thisGasPrice=await Ut(g,j.gasOracleProgramId),G.provider=b,l&&(G.extraGasInstruction=this.getExtraGasInstruction(l,G.userAccount,P)),G}async buildSwapAndBridgeCctpTransaction(r,i){let{cctpBridge:o,cctpBridgeAccount:c,amount:A,recipient:m,receiveToken:u,bridgeAuthority:d,userToken:l,bridgeTokenAccount:p,chainBridgeAccount:g,userAccount:h,destinationChainId:B,mint:T,gasPrice:b,thisGasPrice:w,extraGasInstruction:y,provider:P}=i,F=this.params.cctpParams.cctpDomains[r],j=this.params.cctpParams.cctpTransmitterProgramId,G=this.params.cctpParams.cctpTokenMessengerMinter;if(F==null||!j||!G)throw new f("CCTP is not configured");let me=new _(j),K=new _(G),{messageTransmitterAccount:Oe,tokenMessenger:De,tokenMessengerEventAuthority:_e,tokenMinter:we,localToken:ce,remoteTokenMessengerKey:ye,authorityPda:Ce}=ca(F,T,me,K),ue=[];y&&ue.push(y);let We=Ma.generate(),Ne=oa(o.programId,We.publicKey),Be=await o.methods.bridge({amount:A,destinationChainId:B,recipient:m,receiveToken:u}).accounts({mint:T,user:h,cctpBridge:c,messageSentEventData:We.publicKey,lock:Ne,cctpMessenger:K,messageTransmitterProgram:me,messageTransmitterAccount:Oe,tokenMessenger:De,tokenMinter:we,localToken:ce,remoteTokenMessengerKey:ye,authorityPda:Ce,eventAuthority:_e,bridgeToken:p,gasPrice:b,thisGasPrice:w,chainBridge:g,userToken:l,bridgeAuthority:d}).preInstructions([Qe.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(ue).transaction(),E=P.connection;return Be.recentBlockhash=(await E.getLatestBlockhash()).blockhash,Be.feePayer=h,{transaction:await this.convertToVersionedTransaction(Be,E),messageSentEventDataKeypair:We}}send(r){throw new J}};import{Address as Rr,contract as _P}from"@stellar/stellar-sdk";import{Big as as}from"big.js";import{contract as n}from"@stellar/stellar-sdk";var ns=n.Spec,rs=n.Client;var Jt=class extends rs{constructor(r){super(new ns(["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 Bn=class extends pe{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";async buildRawTransactionSend(r){let i=await ke(this.chainType,r,this.api);return await this.buildRawTransactionSendFromParams(i)}async buildRawTransactionSendFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:c,fromTokenAddress:A,toChainId:m,toAccountAddress:u,toTokenAddress:d,fee:l,gasFeePaymentMethod:p,extraGas:g}=r,h=l;g&&(h=as(h).plus(g).toFixed());let B=this.getContract(Jt,o,c),T;return p==="stablecoin"?T=await B.swap_and_bridge({sender:c,token:Rr.contract(Buffer.from(A)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(d),nonce:Ee(),gas_amount:BigInt(0),fee_token_amount:BigInt(h)}):T=await B.swap_and_bridge({sender:c,token:Rr.contract(Buffer.from(A)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(d),nonce:Ee(),gas_amount:BigInt(h),fee_token_amount:BigInt(0)}),T.toXDR()}async buildRawTransactionSwap(r){let i=Ve(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:c,fromTokenAddress:A,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:d}=r;return(await this.getContract(Jt,o,c).swap({sender:c,amount:BigInt(i),token:Rr.contract(Buffer.from(A)).toBuffer(),receive_token:Buffer.from(u),recipient:m,receive_amount_min:BigInt(d)})).toXDR()}send(r){throw new J}getContract(r,i,o){let c={publicKey:o,contractId:i,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new r(c)}};import{SuiClient as ys}from"@mysten/sui/client";import{coinWithBalance as L,Transaction as Ur}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as Xa}from"@mysten/sui/utils";import{Big as Er}from"big.js";var Vr=Re(ze());var Le=Re(ze());z();function Na(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::swap`,typeArguments:a,arguments:[v(s,r.bridge),v(s,r.coin),Se(s,r.receiveAmountMin,"u64")]})}function Ga(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::deposit`,typeArguments:[a],arguments:[v(s,r.bridge),v(s,r.userDeposit),v(s,r.coin)]})}function Ua(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::withdraw`,typeArguments:[a],arguments:[v(s,r.bridge),v(s,r.userDeposit),Se(s,r.amountLp,"u64")]})}function Ea(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::claim_reward`,typeArguments:[a],arguments:[v(s,r.bridge),v(s,r.userDeposit)]})}function Va(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::pool`,typeArguments:[a],arguments:[v(s,r)]})}function vr(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::swap_and_bridge_wormhole`,typeArguments:[a],arguments:[v(s,r.bridge),v(s,r.messenger),v(s,r.wormholeState),v(s,r.theClock),v(s,r.gasOracle),v(s,r.amount),v(s,r.recipient),Se(s,r.destinationChainId,"u8"),v(s,r.receiveToken),Se(s,r.nonce,"u256"),v(s,r.feeSuiCoin),v(s,r.feeTokenCoin)]})}function ja(s,a){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::new_user_deposit`,typeArguments:[a],arguments:[]})}function kr(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::swap_and_bridge`,typeArguments:[a],arguments:[v(s,r.bridge),v(s,r.messenger),v(s,r.gasOracle),v(s,r.amount),v(s,r.recipient),Se(s,r.destinationChainId,"u8"),v(s,r.receiveToken),Se(s,r.nonce,"u256"),v(s,r.feeSuiCoin),v(s,r.feeTokenCoin)]})}var Ka=Re(xr());var _a=Re(xr());z();function Mr(s,a,r){return s.moveCall({target:`${_a.PUBLISHED_AT}::cctp_bridge_interface::bridge`,typeArguments:[a],arguments:[v(s,r.cctpBridge),v(s,r.gasOracle),v(s,r.tokenMessengerMinterState),v(s,r.messageTransmitterState),v(s,r.treasury),v(s,r.denyList),v(s,r.amount),v(s,r.feeSuiCoin),v(s,r.feeTokenCoin),Se(s,r.destinationChainId,"u8"),v(s,r.recipient),v(s,r.recipientWalletAddress)]})}var Ha=Re(Dr());var La=Re(Dr());z();import{bcs as qe}from"@mysten/sui/bcs";import{fromHEX as us,toHEX as ds}from"@mysten/sui/utils";import{bcs as ms}from"@mysten/sui/bcs";z();var Wr=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=U(this.$typeName,...a),this.$typeArgs=a,this.elements=r}static reified(a){return{typeName:s.$typeName,fullTypeName:U(s.$typeName,k(a)),typeArgs:[k(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(Yt(a)),fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),new:r=>new s([k(a)],r),kind:"VectorClassReified"}}static get r(){return s.reified}static get bcs(){return ms.vector}static fromFields(a,r){return s.reified(a).new(r.map(i=>N(a,i)))}static fromFieldsWithTypes(a,r){return s.reified(a).new(r.map(i=>O(a,i)))}static fromBcs(a,r){return s.fromFields(a,s.bcs(Yt(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=>D(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 bt(s){return Wr.r(s)}function Y(s){return typeof s=="string"?{phantomType:s,kind:"PhantomReified"}:{phantomType:s.fullTypeName,kind:"PhantomReified"}}var ls=qe.bytes(32).transform({input:s=>us(s),output:s=>ds(s)});function Yt(s){switch(s){case"bool":return qe.bool();case"u8":return qe.u8();case"u16":return qe.u16();case"u32":return qe.u32();case"u64":return qe.u64();case"u128":return qe.u128();case"u256":return qe.u256();case"address":return ls;default:return s.bcs}}function k(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 N(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 O(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:O(s.reifiedTypeArgs[0],a);default:return s.fromFieldsWithTypes(a)}}function xe(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(C(a[i])!==C(k(r[i])))throw new Error(`provided item has mismatching type argments ${s} (expected ${k(r[i])}, got ${a[i]}))`)}function je(s,a){let{typeArgs:r}=te(s.type);xe(s.type,r,a)}function ct(s,a){let{typeName:r,typeArgs:i}=te(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 D(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:D(s.reifiedTypeArgs[0],a);default:return s.fromJSONField(a)}}z();var Rn="0x1";import{bcs as Iu}from"@mysten/sui/bcs";import{fromB64 as ku}from"@mysten/sui/utils";z();import{bcs as Nr}from"@mysten/sui/bcs";import{fromB64 as ps}from"@mysten/sui/utils";function In(s){return s=C(s),s===`${Rn}::string::String`}var vn=class s{__StructClass=!0;static get $typeName(){return`${Rn}::string::String`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;bytes;constructor(a,r){this.$fullTypeName=U(s.$typeName,...a),this.$typeArgs=a,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:U(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 Y(s.reified())}static get p(){return s.phantom()}static get bcs(){return Nr.struct("String",{bytes:Nr.vector(Nr.u8())})}static fromFields(a){return s.reified().new({bytes:N(bt("u8"),a.bytes)})}static fromFieldsWithTypes(a){if(!In(a.type))throw new Error("not a String type");return s.reified().new({bytes:O(bt("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:D(bt("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(!In(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"||!In(a.bcs.type))throw new Error("object at is not a String object");return s.fromBcs(ps(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"||!In(i.data.bcs.type))throw new Error(`object at id ${r} is not a String object`);return s.fromSuiObjectData(i.data)}};z();z();var et="0x2";import{bcs as Gr}from"@mysten/sui/bcs";import{fromB64 as Ya,fromHEX as gs,toHEX as fs}from"@mysten/sui/utils";function kn(s){return s=C(s),s===`${et}::object::ID`}var At=class s{__StructClass=!0;static get $typeName(){return`${et}::object::ID`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;bytes;constructor(a,r){this.$fullTypeName=U(s.$typeName,...a),this.$typeArgs=a,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:U(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 Y(s.reified())}static get p(){return s.phantom()}static get bcs(){return Gr.struct("ID",{bytes:Gr.bytes(32).transform({input:a=>gs(a),output:a=>fs(a)})})}static fromFields(a){return s.reified().new({bytes:N("address",a.bytes)})}static fromFieldsWithTypes(a){if(!kn(a.type))throw new Error("not a ID type");return s.reified().new({bytes:O("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:D("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(!kn(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"||!kn(a.bcs.type))throw new Error("object at is not a ID object");return s.fromBcs(Ya(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"||!kn(i.data.bcs.type))throw new Error(`object at id ${r} is not a ID object`);return s.fromSuiObjectData(i.data)}};function Fn(s){return s=C(s),s===`${et}::object::UID`}var Pe=class s{__StructClass=!0;static get $typeName(){return`${et}::object::UID`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;constructor(a,r){this.$fullTypeName=U(s.$typeName,...a),this.$typeArgs=a,this.id=r.id}static reified(){return{typeName:s.$typeName,fullTypeName:U(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 Y(s.reified())}static get p(){return s.phantom()}static get bcs(){return Gr.struct("UID",{id:At.bcs})}static fromFields(a){return s.reified().new({id:N(At.reified(),a.id)})}static fromFieldsWithTypes(a){if(!Fn(a.type))throw new Error("not a UID type");return s.reified().new({id:O(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:D(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(!Fn(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"||!Fn(a.bcs.type))throw new Error("object at is not a UID object");return s.fromBcs(Ya(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"||!Fn(i.data.bcs.type))throw new Error(`object at id ${r} is not a UID object`);return s.fromSuiObjectData(i.data)}};function Me(s,a){return s.moveCall({target:`${La.PUBLISHED_AT}::bytes32::from_hex`,arguments:[Se(s,a,`${vn.$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 St=class extends pe{constructor(r,i){super();this.nodeRpcUrlsConfig=r;this.api=i;this.client=new ys({url:r.getNodeRpcUrl(this.chainSymbol)})}chainType="SUI";chainSymbol="SUI";client;send(){throw new f("Method send not implemented.")}async buildRawTransactionSwap(r){let i=r.sourceToken.suiAddresses;if(!i)throw new f("SUI token must contain 'suiAddresses'");(0,Vr.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin);let o=Ve(this.chainType,r);return await this.buildRawTransactionSwapFromParams(o,i)}async buildRawTransactionSwapFromParams(r,i){let{amount:o,fromAccountAddress:c,fromTokenAddress:A,toTokenAddress:m,minimumReceiveAmount:u}=r,d=new Ur;d.setSender(c);let l={bridge:i.bridgeObjectAddress,coin:L({balance:BigInt(o),type:A}),receiveAmountMin:BigInt(u)},p=Na(d,[A,m],l),g=await Ze(h=>this.client.getCoins({owner:r.toAccountAddress,coinType:m,cursor:h}));return g.length===0||!g[0]?d.transferObjects([p],r.toAccountAddress):d.mergeCoins(g[0].coinObjectId,[p]),await d.toJSON({client:this.client})}async buildRawTransactionSendFromCustomTx(r,i,o){let c=Ur.from(r);return this.buildRawTransactionSendFromTx(o,c,i)}async buildRawTransactionSend(r){return this.buildRawTransactionSendFromTx(r,new Ur)}async buildRawTransactionSendFromTx(r,i,o){let c=await ke(this.chainType,r,this.api),{messenger:A}=c,m=r.sourceToken.suiAddresses;if(!m)throw new f("SUI token must contain 'suiAddresses'");switch((0,Vr.setAddress)(m.bridgeAddress,m.bridgeAddressOrigin),(0,Ha.setAddress)(m.utilsAddress),A){case 1:return this.buildRawTransactionAllbridgeSend(c,m,i,o);case 2:return this.buildRawTransactionWormholeSend(c,m,i,o);case 3:case 4:return this.buildRawTransactionCctpSend(r,c,m,i,o);case 5:throw new ae("Messenger OFT is not supported yet.")}}async buildRawTransactionAllbridgeSend(r,i,o,c){let{amount:A,fromAccountAddress:m,fromTokenAddress:u,toChainId:d,toAccountAddress:l,toTokenAddress:p,fee:g,gasFeePaymentMethod:h,extraGas:B}=r,T=g;if(B&&(T=Er(T).plus(B).toFixed()),o.setSender(m),h==="stablecoin"){let b=BigInt(A)-BigInt(T),w,y;if(c){let[F]=o.splitCoins(c,[T]);w=c,y=F}else w=L({balance:b,type:u}),y=L({balance:BigInt(T),type:u});let P={bridge:i.bridgeObjectAddress,messenger:i.allbridgeMessengerObjectAddress,amount:w,destinationChainId:d,nonce:Ee(),recipient:Me(o,ve(l)),receiveToken:Me(o,ve(p)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:y,feeSuiCoin:L({balance:BigInt(0),useGasCoin:!1})};kr(o,u,P)}else{let b=T==="0"?L({balance:BigInt(T),useGasCoin:!1}):L({balance:BigInt(T)}),w={bridge:i.bridgeObjectAddress,messenger:i.allbridgeMessengerObjectAddress,amount:c??L({balance:BigInt(A),type:u}),destinationChainId:d,nonce:Ee(),recipient:Me(o,ve(l)),receiveToken:Me(o,ve(p)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:L({balance:BigInt(0),type:u}),feeSuiCoin:b};kr(o,u,w)}return await o.toJSON({client:this.client})}async buildRawTransactionWormholeSend(r,i,o,c){let{amount:A,fromAccountAddress:m,fromTokenAddress:u,toChainId:d,toAccountAddress:l,toTokenAddress:p,fee:g,gasFeePaymentMethod:h,extraGas:B}=r,T=g;if(B&&(T=Er(T).plus(B).toFixed()),o.setSender(m),h==="stablecoin"){let b=BigInt(A)-BigInt(T),w,y;if(c){let[F]=o.splitCoins(c,[T]);w=c,y=F}else w=L({balance:b,type:u}),y=L({balance:BigInt(T),type:u});let P={bridge:i.bridgeObjectAddress,messenger:i.wormholeMessengerObjectAddress,wormholeState:i.wormholeStateObjectAddress,theClock:Xa,amount:w,destinationChainId:d,nonce:Ee(),recipient:Me(o,ve(l)),receiveToken:Me(o,ve(p)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:y,feeSuiCoin:L({balance:BigInt(0),useGasCoin:!1})};vr(o,u,P)}else{let b=T==="0"?L({balance:BigInt(T),useGasCoin:!1}):L({balance:BigInt(T)}),w={bridge:i.bridgeObjectAddress,messenger:i.wormholeMessengerObjectAddress,wormholeState:i.wormholeStateObjectAddress,theClock:Xa,amount:c??L({balance:BigInt(A),type:u}),destinationChainId:d,nonce:Ee(),recipient:Me(o,ve(l)),receiveToken:Me(o,ve(p)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:L({balance:BigInt(0),type:u}),feeSuiCoin:b};vr(o,u,w)}return await o.toJSON({client:this.client})}async buildRawTransactionCctpSend(r,i,o,c,A){let{amount:m,fromAccountAddress:u,fromTokenAddress:d,toChainId:l,toAccountAddress:p,fee:g,gasFeePaymentMethod:h,extraGas:B}=i;(0,Ka.setAddress)(o.cctpAddress,o.cctpAddressOrigin);let T=g;B&&(T=Er(T).plus(B).toFixed()),c.setSender(u);let b=Me(c,ve(p)),w;if(r.destinationToken.chainType==="SOLANA"){let y=await hn(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));w=Me(c,ve(y))}else w=b;if(h==="stablecoin"){let y=BigInt(m)-BigInt(T),P,F;if(A){let[G]=c.splitCoins(A,[T]);P=A,F=G}else P=L({balance:y,type:d}),F=L({balance:BigInt(T),type:d});let j={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:P,destinationChainId:l,recipient:w,recipientWalletAddress:b,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:F,feeSuiCoin:L({balance:BigInt(0),useGasCoin:!1})};Mr(c,d,j)}else{let y=T==="0"?L({balance:BigInt(T),useGasCoin:!1}):L({balance:BigInt(T)}),P={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:A??L({balance:BigInt(m),type:d}),destinationChainId:l,recipient:w,recipientWalletAddress:b,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:L({balance:BigInt(0),type:d}),feeSuiCoin:y};Mr(c,d,P)}return await c.toJSON({client:this.client})}};import{Big as bs}from"big.js";import hs from"bn.js";function xn(s){return"0x"+new hs(s).toString("hex")}function Qa(s){return new Promise(a=>setTimeout(()=>a(),s))}async function Mn(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 Ts(s,o),{txId:o}}async function Ts(s,a,r=1e4){let i=Date.now();for(;;){if(Date.now()-i>r)throw new Nt("Transaction not found");let o=await s.trx.getUnconfirmedTransactionInfo(a);if(!o?.receipt){await Qa(2e3);continue}if(o.receipt.result==="SUCCESS")return o;throw new Nt(`Transaction status is ${o.receipt.result}`)}}var Lt=class extends pe{constructor(r,i){super();this.tronWeb=r;this.api=i}chainType="TRX";async send(r){let i=await ke(this.chainType,r,this.api),o=await this.buildRawTransactionSendFromParams(r,i);return await Mn(this.tronWeb,o)}async buildRawTransactionSwap(r){let i=Ve(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:c,fromTokenAddress:A,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:d}=r,l=[{type:"uint256",value:i},{type:"bytes32",value:A},{type:"bytes32",value:u},{type:"address",value:m},{type:"uint256",value:d}];return this.buildRawTransaction(o,"swap(uint256,bytes32,bytes32,address,uint256)",l,"0",c)}async buildRawTransactionSend(r){let i=await ke(this.chainType,r,this.api);return this.buildRawTransactionSendFromParams(r,i)}async buildRawTransactionSendFromParams(r,i){let{amount:o,contractAddress:c,fromAccountAddress:A,fromTokenAddress:m,toChainId:u,toAccountAddress:d,toTokenAddress:l,messenger:p,fee:g,gasFeePaymentMethod:h,extraGas:B,extraGasDest:T}=i,b=g;B&&(b=bs(b).plus(B).toFixed());let w=Ee().toString(),y,P,F;switch(p){case 3:case 4:h==="stablecoin"?(y=[{type:"uint256",value:o},{type:"bytes32",value:d},{type:"uint256",value:u},{type:"uint256",value:b}],P="0"):(y=[{type:"uint256",value:o},{type:"bytes32",value:d},{type:"uint256",value:u},{type:"uint256",value:0}],P=b),F="bridge(uint256,bytes32,uint256,uint256)";break;case 5:h==="stablecoin"?(y=[{type:"address",value:r.sourceToken.tokenAddress},{type:"uint256",value:o},{type:"bytes32",value:d},{type:"uint256",value:u},{type:"uint256",value:b},{type:"uint256",value:T??"0"},{type:"uint256",value:"10"}],P="0"):(y=[{type:"address",value:r.sourceToken.tokenAddress},{type:"uint256",value:o},{type:"bytes32",value:d},{type:"uint256",value:u},{type:"uint256",value:0},{type:"uint256",value:T??"0"},{type:"uint256",value:"10"}],P=b),F="bridge(address,uint256,bytes32,uint256,uint256,uint256,uint256)";break;case 1:case 2:h==="stablecoin"?(y=[{type:"bytes32",value:m},{type:"uint256",value:o},{type:"bytes32",value:d},{type:"uint256",value:u},{type:"bytes32",value:l},{type:"uint256",value:w},{type:"uint8",value:p},{type:"uint256",value:b}],P="0"):(y=[{type:"bytes32",value:m},{type:"uint256",value:o},{type:"bytes32",value:d},{type:"uint256",value:u},{type:"bytes32",value:l},{type:"uint256",value:w},{type:"uint8",value:p},{type:"uint256",value:0}],P=b),F="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)";break}return this.buildRawTransaction(c,F,y,P,A)}async buildRawTransaction(r,i,o,c,A){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+c},o,A);if(!m?.result?.result)throw new f("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var On=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new Tn(a,r,i,o)}rawTxBuilder;async getAllowance(a,r){let i,o;r?(i=a,o=r):o=a;let c=_t(o.token,o.messenger);return await this.tokenService.getAllowance({...o,spender:c},i)}async checkAllowance(a,r){let i,o;r?(i=a,o=r):o=a;let c=_t(o.token,o.messenger);return this.tokenService.checkAllowance({...o,spender:c},i)}async approve(a,r){let i=_t(r.token,r.messenger);return this.tokenService.approve(a,{...r,spender:i})}async send(a,r){return M(r.amount),W("amount",r.amount,r.sourceToken.decimals),bn(r.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).send(r)}};function _t(s,a=1){switch(a){case 3:if(s.cctpAddress)return s.cctpAddress;throw new re("Such route does not support CCTP protocol");case 4:if(s.cctpV2Address)return s.cctpV2Address;throw new re("Such route does not support CCTP V2 protocol");case 5:if(s.oftBridgeAddress)return s.oftBridgeAddress;throw new ae("Such route does not support OFT protocol");case 1:case 2:return s.bridgeAddress}}function bn(s,a,r,i,o){switch(x.getChainProperty(s).chainType){case"EVM":{if(o)return new Zt(o,a,r);{let c=r.getNodeRpcUrl(s);return new Zt(new Ps(c),a,r)}}case"TRX":{if(o)return new Lt(o,a);{let c=r.getNodeRpcUrl(s);return new Lt(new Ss({fullHost:c,solidityNode:c,eventServer:c}),a)}}case"SOLANA":return new Cn(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 Bn(r,i,a);case"SUI":return new St(r,a)}}import{Big as Vs}from"big.js";import js from"timed-cache";import{TronWeb as Zs}from"tronweb";import{FMT_BYTES as _s,FMT_NUMBER as $s,Web3 as Js}from"web3";import{Big as Xe}from"big.js";function za(s,a,r,i,o){let c=I(s,3),A=Xe(c),m=Xe(r),u=Xe(i).plus(o),d,l;if(m.eq(0)||u.eq(0)){let g=A.div(2);d=Xe(i).plus(g),l=Xe(o).plus(g)}else d=Xe(i).plus(A.mul(i).div(u)),l=Xe(o).plus(A.mul(o).div(u));return Xe(pa(a,d.toFixed(),l.toFixed())).minus(m).toFixed()}function qa(s){let a=I(s,3);return Xe(a).round().toFixed()}import{Web3 as tt}from"web3";var ws={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"}]},Xt=ws;var oe=class{lpAmount;rewardDebt;constructor(a){this.lpAmount=a.lpAmount,this.rewardDebt=a.rewardDebt}get userLiquidity(){return R(this.lpAmount,3).toFixed()}earned(a,r){let i=da(this.lpAmount,this.rewardDebt,a.accRewardPerShareP,a.p);return r?R(i,r).toFixed():i}};var ge=class{};var Kt=class extends ge{constructor(r,i){super();this.web3=r;this.api=i}chainType="EVM";P=52;async getUserBalanceInfo(r,i){let o;try{o=await pn(this.getUserBalanceInfoByBatch(r,i),`Cannot get UserBalanceInfo for ${i.name} on ${i.chainSymbol}`,5e3)}catch{o=await pr(()=>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 pn(this.getPoolInfoByBatch(r),`Cannot get PoolInfo for ${r.name} on ${r.chainSymbol}`,5e3)}catch{i=await pr(()=>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,c=this.getPoolContract(i.poolAddress),A=c.methods.userRewardDebt(r).encodeABI(),m=c.methods.balanceOf(r).encodeABI();o.add({method:"eth_call",params:[{to:i.poolAddress,data:A},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:m},"latest"]});let[u,d]=await o.execute();if(u&&d&&!u.error&&!d.error)return new oe({lpAmount:tt.utils.toBigInt(d.result).toString(),rewardDebt:tt.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(),c=(await this.getPoolContract(i.poolAddress).methods.balanceOf(r).call()).toString();return new oe({lpAmount:c,rewardDebt:o})}async getPoolInfoByBatch(r){let i=new this.web3.eth.BatchRequest,o=this.getPoolContract(r.poolAddress),c=o.methods.a().encodeABI(),A=o.methods.d().encodeABI(),m=o.methods.tokenBalance().encodeABI(),u=o.methods.vUsdBalance().encodeABI(),d=o.methods.totalSupply().encodeABI(),l=o.methods.accRewardPerShareP().encodeABI();i.add({method:"eth_call",params:[{to:r.poolAddress,data:c},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:A},"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:d},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:l},"latest"]});let[p,g,h,B,T,b]=await i.execute();if(p&&g&&h&&B&&T&&b&&!p.error&&!g.error&&!h.error&&!B.error&&!T.error&&!b.error){let w=tt.utils.toBigInt(h.result).toString(),y=tt.utils.toBigInt(B.result).toString(),P=se({tokenBalance:w,vUsdBalance:y});return{aValue:tt.utils.toBigInt(p.result).toString(),dValue:tt.utils.toBigInt(g.result).toString(),tokenBalance:w,vUsdBalance:y,totalLpAmount:tt.utils.toBigInt(T.result).toString(),accRewardPerShareP:tt.utils.toBigInt(b.result).toString(),p:this.P,imbalance:P}}throw new Error("Batched failed")}async getPoolInfoPerProperty(r){let i=this.getPoolContract(r.poolAddress),o=(await i.methods.a().call()).toString(),c=(await i.methods.d().call()).toString(),A=(await i.methods.tokenBalance().call()).toString(),m=(await i.methods.vUsdBalance().call()).toString(),u=(await i.methods.totalSupply().call()).toString(),d=(await i.methods.accRewardPerShareP().call()).toString(),l=se({tokenBalance:A,vUsdBalance:m});return{aValue:o,dValue:c,tokenBalance:A,vUsdBalance:m,totalLpAmount:u,accRewardPerShareP:d,p:this.P,imbalance:l}}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(Xt.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){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 M(a.amount),W("amount",a.amount,a.token.decimals),a.amount=I(a.amount,a.token.decimals).toFixed(),Pt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionDeposit(a)}async withdraw(a,r){return M(a.amount),W("amount",a.amount,a.token.decimals),a.amount=I(a.amount,3).toFixed(),Pt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionWithdraw(a)}async claimRewards(a,r){return Pt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionClaimRewards(a)}};import{AnchorProvider as Cs,BN as ei,Program as Bs,Spl as Rs,web3 as Is}from"@project-serum/anchor";import{Connection as vs,PublicKey as nt}from"@solana/web3.js";var Wn=class extends ge{constructor(r,i){super();this.solanaRpcUrl=r;this.api=i}chainType="SOLANA";P=48;async getUserBalanceInfo(r,i){let o=this.buildAnchorProvider(r),c=this.getBridge(i.bridgeAddress,o),A=new nt(i.poolAddress),m=await c.account.pool.fetch(A);try{let u=await yr(new nt(r),m.mint,c.programId),{lpAmount:d,rewardDebt:l}=await c.account.userDeposit.fetch(u);return new oe({lpAmount:d.toString(),rewardDebt:l.toString()})}catch{return new oe({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),c=o.vUsdBalance.toString(),A=o.tokenBalance.toString(),m=se({tokenBalance:A,vUsdBalance:c});return{dValue:o.d.toString(),aValue:o.a.toString(),totalLpAmount:o.totalLpAmount.toString(),vUsdBalance:c,tokenBalance:A,accRewardPerShareP:o.accRewardPerShareP.toString(),p:this.P,imbalance:m}}async buildRawTransactionDeposit(r){let{bridge:i,accounts:o,preInstructions:c}=await this.prepareDataForTransaction(r),A=await i.methods.deposit(new ei(r.amount)).accounts(o).preInstructions(c).transaction();return A.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,A.feePayer=new nt(r.accountAddress),await ht(A,r.txFeeParams,this.solanaRpcUrl),A}async buildRawTransactionWithdraw(r){let{bridge:i,accounts:o,preInstructions:c}=await this.prepareDataForTransaction(r),A=await i.methods.withdraw(new ei(r.amount)).accounts(o).preInstructions(c).transaction();return A.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,A.feePayer=new nt(r.accountAddress),await ht(A,r.txFeeParams,this.solanaRpcUrl),A}async buildRawTransactionClaimRewards(r){let{bridge:i,accounts:o,preInstructions:c}=await this.prepareDataForTransaction(r),A=await i.methods.claimRewards().accounts(o).preInstructions(c).transaction();return A.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,A.feePayer=new nt(r.accountAddress),await ht(A,r.txFeeParams,this.solanaRpcUrl),A}async prepareDataForTransaction(r){let i=this.buildAnchorProvider(r.accountAddress),o=this.getBridge(r.token.bridgeAddress,i),{accounts:c,preInstructions:A}=await this._getLPTransactionData(o,r.token.poolAddress,r.accountAddress,i);return{bridge:o,accounts:c,preInstructions:A}}getBridge(r,i){return new Bs($t,r,i)}buildAnchorProvider(r){let i=new vs(this.solanaRpcUrl,"confirmed"),o=new nt(r);return new Cs(i,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(r,i,o,c){let A=new nt(o),m=await Ke(r.programId),u=await gt(r.programId),d=new nt(i),p=(await r.account.pool.fetch(d)).mint,g=await Ie(A,p),h=await ft(p,r.programId),B=await yr(A,p,r.programId),T=[Is.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await yt(g,c)}catch{let P=await Rs.associatedToken(c).methods.create().accounts({mint:p,owner:A,associatedAccount:g}).instruction();T.push(P)}try{await r.account.userDeposit.fetch(B)}catch{let y=await r.methods.initDepositAccount().accounts({mint:p,user:A,userDeposit:B}).instruction();T.push(y)}return{accounts:{mint:p,user:A,config:m,pool:d,bridgeAuthority:u,userDeposit:B,userToken:g,bridgeToken:h},preInstructions:T}}};import{contract as $P}from"@stellar/stellar-sdk";import{contract as t}from"@stellar/stellar-sdk";var ks=t.Spec,Fs=t.Client;var Nn=class extends Fs{constructor(r){super(new ks(["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 xs}from"@stellar/stellar-sdk";var ti=xs.Api;function wt(s){let{simulation:a,options:r}=s;if(!a)throw new Error("Soroban assembled transaction does not have simulation");if(ti.isSimulationSuccess(a))return a.result==null?void 0:r.parseResultXdr(a.result.retval);throw new Error(a.error)}function Ct(s){let{simulation:a}=s;if(!a)throw new Error("Soroban assembled transaction does not have simulation");return ti.isSimulationError(a)}var Gn=class extends ge{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";P=48;async getUserBalanceInfo(r,i){let c=await this.getContract(i.poolAddress).get_user_deposit({user:r});if(Ct(c))throw new f;let A=wt(c);if(!A)throw new f;let m=A.unwrap();return new oe({lpAmount:m.lp_amount.toString(),rewardDebt:m.reward_debt.toString()})}async getPoolInfoFromChain(r){let o=await this.getContract(r.poolAddress).get_pool();if(Ct(o))throw new f;let c=wt(o);if(!c)throw new f;let A=c.unwrap();return{aValue:A.a.toString(),accRewardPerShareP:A.acc_reward_per_share_p.toString(),dValue:A.d.toString(),tokenBalance:A.token_balance.toString(),p:this.P,totalLpAmount:A.total_lp_amount.toString(),vUsdBalance:A.v_usd_balance.toString(),imbalance:se({tokenBalance:A.token_balance.toString(),vUsdBalance:A.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 Nn(o)}};import{SuiClient as Us}from"@mysten/sui/client";import{Transaction as Yn}from"@mysten/sui/transactions";var Rt=Re(ze());z();z();import{bcs as ni}from"@mysten/sui/bcs";import{fromB64 as Ms}from"@mysten/sui/utils";function Un(s){return s=C(s),s.startsWith(`${et}::balance::Balance<`)}var ne=class s{__StructClass=!0;static get $typeName(){return`${et}::balance::Balance`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;value;constructor(a,r){this.$fullTypeName=U(s.$typeName,...a),this.$typeArgs=a,this.value=r.value}static reified(a){return{typeName:s.$typeName,fullTypeName:U(s.$typeName,k(a)),typeArgs:[k(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([k(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Y(s.reified(a))}static get p(){return s.phantom}static get bcs(){return ni.struct("Balance",{value:ni.u64()})}static fromFields(a,r){return s.reified(a).new({value:N("u64",r.value)})}static fromFieldsWithTypes(a,r){if(!Un(r.type))throw new Error("not a Balance type");return je(r,[a]),s.reified(a).new({value:O("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:D("u64",r.value)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(U(s.$typeName,k(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 Balance 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 Balance object");let i=te(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=C(i[0]),c=C(k(a));if(o!==C(k(a)))throw new Error(`type argument mismatch: expected '${c}' 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 Balance 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 Balance object`);return s.fromSuiObjectData(r,o.data)}};var _r=Re(ze());z();var jr=Re(ze());import{bcs as En}from"@mysten/sui/bcs";import{fromB64 as Os}from"@mysten/sui/utils";function Vn(s){return s=C(s),s.startsWith(`${jr.PKG_V1}::pool_rewards::PoolRewards<`)}var mt=class s{__StructClass=!0;static get $typeName(){return`${jr.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=U(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:U(s.$typeName,k(a)),typeArgs:[k(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([k(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Y(s.reified(a))}static get p(){return s.phantom}static get bcs(){return En.struct("PoolRewards",{acc_reward_per_share_p:En.u128(),admin_fee_share_bp:En.u64(),admin_fee:ne.bcs,rewards:ne.bcs,lp_supply:En.u64()})}static fromFields(a,r){return s.reified(a).new({accRewardPerShareP:N("u128",r.acc_reward_per_share_p),adminFeeShareBp:N("u64",r.admin_fee_share_bp),adminFee:N(ne.reified(a),r.admin_fee),rewards:N(ne.reified(a),r.rewards),lpSupply:N("u64",r.lp_supply)})}static fromFieldsWithTypes(a,r){if(!Vn(r.type))throw new Error("not a PoolRewards type");return je(r,[a]),s.reified(a).new({accRewardPerShareP:O("u128",r.fields.acc_reward_per_share_p),adminFeeShareBp:O("u64",r.fields.admin_fee_share_bp),adminFee:O(ne.reified(a),r.fields.admin_fee),rewards:O(ne.reified(a),r.fields.rewards),lpSupply:O("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:D("u128",r.accRewardPerShareP),adminFeeShareBp:D("u64",r.adminFeeShareBp),adminFee:D(ne.reified(a),r.adminFee),rewards:D(ne.reified(a),r.rewards),lpSupply:D("u64",r.lpSupply)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(U(s.$typeName,k(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 PoolRewards 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 PoolRewards object");let i=te(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=C(i[0]),c=C(k(a));if(o!==C(k(a)))throw new Error(`type argument mismatch: expected '${c}' but got '${o}'`);return s.fromBcs(a,Os(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"||!Vn(o.data.bcs.type))throw new Error(`object at id ${i} is not a PoolRewards object`);return s.fromSuiObjectData(r,o.data)}};z();var Zr=Re(ze());import{bcs as Bt}from"@mysten/sui/bcs";import{fromB64 as Ds}from"@mysten/sui/utils";function jn(s){return s=C(s),s.startsWith(`${Zr.PKG_V1}::pool_state::PoolState<`)}var ut=class s{__StructClass=!0;static get $typeName(){return`${Zr.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=U(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:U(s.$typeName,k(a)),typeArgs:[k(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([k(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Y(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Bt.struct("PoolState",{token_balance:Bt.u64(),vusd_balance:Bt.u64(),d:Bt.u64(),a:Bt.u64(),balance_ratio_min_bp:Bt.u64()})}static fromFields(a,r){return s.reified(a).new({tokenBalance:N("u64",r.token_balance),vusdBalance:N("u64",r.vusd_balance),d:N("u64",r.d),a:N("u64",r.a),balanceRatioMinBp:N("u64",r.balance_ratio_min_bp)})}static fromFieldsWithTypes(a,r){if(!jn(r.type))throw new Error("not a PoolState type");return je(r,[a]),s.reified(a).new({tokenBalance:O("u64",r.fields.token_balance),vusdBalance:O("u64",r.fields.vusd_balance),d:O("u64",r.fields.d),a:O("u64",r.fields.a),balanceRatioMinBp:O("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:D("u64",r.tokenBalance),vusdBalance:D("u64",r.vusdBalance),d:D("u64",r.d),a:D("u64",r.a),balanceRatioMinBp:D("u64",r.balanceRatioMinBp)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(U(s.$typeName,k(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!jn(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"||!jn(r.bcs.type))throw new Error("object at is not a PoolState object");let i=te(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=C(i[0]),c=C(k(a));if(o!==C(k(a)))throw new Error(`type argument mismatch: expected '${c}' but got '${o}'`);return s.fromBcs(a,Ds(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"||!jn(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 Ht}from"@mysten/sui/bcs";import{fromB64 as Ws}from"@mysten/sui/utils";function Zn(s){return s=C(s),s.startsWith(`${_r.PKG_V1}::pool::Pool<`)}var _n=class s{__StructClass=!0;static get $typeName(){return`${_r.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=U(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:U(s.$typeName,k(a)),typeArgs:[k(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([k(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Y(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Ht.struct("Pool",{id:Pe.bcs,state:ut.bcs,rewards:mt.bcs,fee_share_bp:Ht.u64(),can_deposit:Ht.bool(),can_withdraw:Ht.bool(),decimals:Ht.u8(),balance:ne.bcs})}static fromFields(a,r){return s.reified(a).new({id:N(Pe.reified(),r.id),state:N(ut.reified(a),r.state),rewards:N(mt.reified(a),r.rewards),feeShareBp:N("u64",r.fee_share_bp),canDeposit:N("bool",r.can_deposit),canWithdraw:N("bool",r.can_withdraw),decimals:N("u8",r.decimals),balance:N(ne.reified(a),r.balance)})}static fromFieldsWithTypes(a,r){if(!Zn(r.type))throw new Error("not a Pool type");return je(r,[a]),s.reified(a).new({id:O(Pe.reified(),r.fields.id),state:O(ut.reified(a),r.fields.state),rewards:O(mt.reified(a),r.fields.rewards),feeShareBp:O("u64",r.fields.fee_share_bp),canDeposit:O("bool",r.fields.can_deposit),canWithdraw:O("bool",r.fields.can_withdraw),decimals:O("u8",r.fields.decimals),balance:O(ne.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:D(Pe.reified(),r.id),state:D(ut.reified(a),r.state),rewards:D(mt.reified(a),r.rewards),feeShareBp:D("u64",r.feeShareBp),canDeposit:D("bool",r.canDeposit),canWithdraw:D("bool",r.canWithdraw),decimals:D("u8",r.decimals),balance:D(ne.reified(a),r.balance)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(U(s.$typeName,k(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Zn(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"||!Zn(r.bcs.type))throw new Error("object at is not a Pool object");let i=te(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=C(i[0]),c=C(k(a));if(o!==C(k(a)))throw new Error(`type argument mismatch: expected '${c}' but got '${o}'`);return s.fromBcs(a,Ws(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"||!Zn(o.data.bcs.type))throw new Error(`object at id ${i} is not a Pool object`);return s.fromSuiObjectData(r,o.data)}};z();var Jr=Re(ze());import{bcs as $r}from"@mysten/sui/bcs";import{fromB64 as Ns}from"@mysten/sui/utils";function $n(s){return s=C(s),s.startsWith(`${Jr.PKG_V1}::user_deposit::UserDeposit<`)}var Jn=class s{__StructClass=!0;static get $typeName(){return`${Jr.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=U(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:U(s.$typeName,k(a)),typeArgs:[k(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([k(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Y(s.reified(a))}static get p(){return s.phantom}static get bcs(){return $r.struct("UserDeposit",{id:Pe.bcs,lp_amount:$r.u64(),reward_debt:$r.u64()})}static fromFields(a,r){return s.reified(a).new({id:N(Pe.reified(),r.id),lpAmount:N("u64",r.lp_amount),rewardDebt:N("u64",r.reward_debt)})}static fromFieldsWithTypes(a,r){if(!$n(r.type))throw new Error("not a UserDeposit type");return je(r,[a]),s.reified(a).new({id:O(Pe.reified(),r.fields.id),lpAmount:O("u64",r.fields.lp_amount),rewardDebt:O("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:D(Pe.reified(),r.id),lpAmount:D("u64",r.lpAmount),rewardDebt:D("u64",r.rewardDebt)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(U(s.$typeName,k(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!$n(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"||!$n(r.bcs.type))throw new Error("object at is not a UserDeposit object");let i=te(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=C(i[0]),c=C(k(a));if(o!==C(k(a)))throw new Error(`type argument mismatch: expected '${c}' but got '${o}'`);return s.fromBcs(a,Ns(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"||!$n(o.data.bcs.type))throw new Error(`object at id ${i} is not a UserDeposit object`);return s.fromSuiObjectData(r,o.data)}};function ai(s,a,r){if(a.length===0||!a[0])return[];let i=a[0],o=s.reduce((m,u)=>m+BigInt(u),BigInt(0)),c=BigInt(i.balance),A=[];for(let m of a.slice(1)){if(c>o)return ri(r,i,A,s);c+=BigInt(m.balance),A.push(m)}return c>=o?ri(r,i,A,s):[]}function ri(s,a,r,i){let o=i.map(c=>s.pure.u64(c));return r.length>0&&s.mergeCoins(a.coinObjectId,r.map(c=>c.coinObjectId)),s.splitCoins(a.coinObjectId,o)}var Gs="0x0000000000000000000000000000000000000000000000000000000000000000";async function ii(s,a,r){let i=await s.devInspectTransactionBlock({sender:Gs,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[c,A]=o;return typeof r=="object"?r.fromBcs(Uint8Array.from(c)).toJSONField():Yt(r).parse(Uint8Array.from(c))}var Ln=class extends ge{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.client=new Us({url:r})}chainType="SUI";client;async getUserBalanceInfo(r,i){if(!i.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let o=i.suiAddresses;if(!o)throw new f("SUI token must contain 'suiAddresses'");(0,Rt.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin);let A=(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 f("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new oe({lpAmount:A.lpAmount.toString(),rewardDebt:A.rewardDebt.toString()})}async fetchDeposits(r,i){return await Ze(o=>this.client.getOwnedObjects({owner:r,filter:{StructType:Jn.phantom(Y(i)).phantomType},options:{showContent:!0},cursor:o}))}async getPoolInfoFromChain(r){let i=r.suiAddresses;if(!i)throw new f("SUI token must contain 'suiAddresses'");if((0,Rt.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let o=48,c=new Yn;Va(c,r.originTokenAddress,i.bridgeObjectAddress);let A=await ii(this.client,c,_n.reified(Y(r.originTokenAddress))),m=A.state.tokenBalance,u=A.state.vusdBalance,d=se({tokenBalance:m,vUsdBalance:u});return{dValue:A.state.d,aValue:A.state.a,totalLpAmount:A.rewards.lpSupply,vUsdBalance:u,tokenBalance:m,accRewardPerShareP:A.rewards.accRewardPerShareP,p:o,imbalance:d}}async buildRawTransactionDeposit(r){let i=r.token.suiAddresses;if(!i)throw new f("SUI token must contain 'suiAddresses'");if((0,Rt.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new f("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 c=o[0],A=new Yn;A.setSender(r.accountAddress);let{depositObj:m,isNewDeposit:u}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,A),[d]=ai([r.amount],o,A);if(!d)throw new $e("No coins to deposit");if(!r.token.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let l=Ga(A,r.token.originTokenAddress,{bridge:i.bridgeObjectAddress,userDeposit:m,coin:d});return A.mergeCoins(c.coinObjectId,[l]),u&&A.transferObjects([m],r.accountAddress),await A.toJSON({client:this.client})}async getDepositObject(r,i,o){let c=await this.fetchDeposits(r,i);if(c.length===0||!c[0]){let A=Y(i).phantomType;return{depositObj:ja(o,A),isNewDeposit:!0}}else{if(c[0].data?.objectId)return{depositObj:c[0].data.objectId,isNewDeposit:!1};throw new f("Something went wrong while deposit")}}async buildRawTransactionWithdraw(r){let i=r.token.suiAddresses;if(!i)throw new f("SUI token must contain 'suiAddresses'");if((0,Rt.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let o=Y(r.token.originTokenAddress).phantomType,c=new Yn;c.setSender(r.accountAddress);let{depositObj:A,isNewDeposit:m}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,c);if(m)throw new $e("No deposit found");let u=Ua(c,o,{bridge:i.bridgeObjectAddress,userDeposit:A,amountLp:BigInt(r.amount)}),d=await Ze(l=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:l}));if(!u[0]||!u[1])throw new f("No rewards found");return d[0]?c.mergeCoins(d[0].coinObjectId,[u[0],u[1]]):(c.mergeCoins(u[0],[u[1]]),c.transferObjects([u[0]],r.accountAddress)),await c.toJSON({client:this.client})}async buildRawTransactionClaimRewards(r){let i=r.token.suiAddresses;if(!i)throw new f("SUI token must contain 'suiAddresses'");if((0,Rt.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new f("SUI token must contain 'originTokenAddress'");let o=Y(r.token.originTokenAddress).phantomType,c=new Yn;c.setSender(r.accountAddress);let{depositObj:A,isNewDeposit:m}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,c);if(m)throw new $e("No deposit found");let u=Ea(c,o,{bridge:i.bridgeObjectAddress,userDeposit:A}),d=await Ze(l=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:l}));return d[0]?c.mergeCoins(d[0].coinObjectId,[u]):c.transferObjects([u],r.accountAddress),await c.toJSON({client:this.client})}};import{Web3 as Xn}from"web3";import{encodeFunctionCall as Es}from"web3-eth-abi";var Qt=class extends ge{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 c=jt(o.poolAddress),A=jt(i),m=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:c,data:this.getFunctionAbi("userRewardDebt",A)},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:c,data:this.getFunctionAbi("balanceOf",A)},"latest"]}],d=await(await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(m)})).json();if(Array.isArray(d)&&d.length===2){let l=p=>{let g=d.find(h=>h.id===p);if(!g||!g.result)throw new Error(`Missing or invalid result for id ${p}`);return Xn.utils.toBigInt(g.result).toString()};return new oe({lpAmount:Xn.utils.toBigInt(l(2)).toString(),rewardDebt:Xn.utils.toBigInt(l(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),c=(await o.methods.userRewardDebt(r).call()).toString(),A=(await o.methods.balanceOf(r).call()).toString();return new oe({lpAmount:A,rewardDebt:c})}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=jt(i.poolAddress),c=[{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(c)})).json();if(Array.isArray(m)&&m.length===6){let u=g=>{let h=m.find(B=>B.id===g);if(!h||!h.result)throw new Error(`Missing or invalid result for id ${g}`);return Xn.utils.toBigInt(h.result).toString()},d=u(3),l=u(4),p=se({tokenBalance:d,vUsdBalance:l});return{aValue:u(1),dValue:u(2),tokenBalance:d,vUsdBalance:l,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,c,A,m,u,d]=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()]),l=A.toString(),p=m.toString(),g=se({tokenBalance:l,vUsdBalance:p});return{aValue:o.toString(),dValue:c.toString(),tokenBalance:l,vUsdBalance:p,totalLpAmount:u.toString(),accRewardPerShareP:d.toString(),p:this.P,imbalance:g}}buildRawTransactionDeposit(r){let{amount:i,accountAddress:o}=r,c=[{type:"uint256",value:i}];return this.buildRawTransaction(r.token.poolAddress,"deposit(uint256)",c,"0",o)}buildRawTransactionWithdraw(r){let{amount:i,accountAddress:o}=r,c=[{type:"uint256",value:i}];return this.buildRawTransaction(r.token.poolAddress,"withdraw(uint256)",c,"0",o)}buildRawTransactionClaimRewards(r){let{accountAddress:i}=r,o=[];return this.buildRawTransaction(r.token.poolAddress,"claimRewards()",o,"0",i)}async buildRawTransaction(r,i,o,c,A){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+c},o,A);if(!m?.result?.result)throw new f("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}getContract(r){return this.tronWeb.contract(Xt.abi,r)}getFunctionAbi(r,...i){let o=Xt.abi.find(c=>c.type==="function"&&"name"in c&&c.name===r);if(!o)throw new Error(`${r} method not found in Pool ABI`);return Es(o,i)}};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,this.params,o);let c=i.cachePoolInfoChainSec>0?i.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new js({defaultTtl:c})}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){M(a),W("amount",a,r.decimals);let o=await this.getPoolInfoFromChain(r,i),{vUsdBalance:c,tokenBalance:A,aValue:m,dValue:u}=o,d=za(a,m,u,A,c);return R(d,3).toFixed()}async getAmountToBeWithdrawn(a,r,i,o){M(a),W("amount",a,i.decimals);let c=await this.getPoolInfoFromChain(i,o),A=qa(a),m=de(A,i.decimals),d=(await this.getUserBalanceInfo(r,i,o)).earned(c)||"0",l=Vs(m).plus(d).toFixed();return R(l,i.decimals).toFixed()}async getUserBalanceInfo(a,r,i){return Pt(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 c=await Pt(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).getPoolInfoFromChain(a);return this.cache.put(i,c),this.api.cachePut({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress},c),c}}};function Pt(s,a,r,i,o){switch(x.getChainProperty(s).chainType){case"EVM":{if(o)return new Kt(o,a);{let c=r.getNodeRpcUrl(s),A=new Js(c);return A.defaultReturnFormat={number:$s.STR,bytes:_s.HEX},new Kt(A,a)}}case"TRX":{let c=r.getNodeRpcUrl(s),A=i.tronJsonRpc;if(o)return new Qt(o,a,A);{let m=new Zs({fullHost:c});return new Qt(m,a,A)}}case"SOLANA":{let c=r.getNodeRpcUrl(s);return new Wn(c,a)}case"SRB":return new Gn(r,i,a);case"SUI":return new Ln(r.getNodeRpcUrl(s),a)}}import{TronWeb as Xs}from"tronweb";import{FMT_BYTES as Ks,FMT_NUMBER as Hs,Web3 as Qs}from"web3";var Ys={abi:[{inputs:[{internalType:"string",name:"tokenName_",type:"string"},{internalType:"string",name:"tokenSymbol_",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:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"lpAmount",type:"uint256"}],name:"Deposited",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"DepositedRewards",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[4]",name:"values",type:"uint256[4]"}],name:"MultiTransfer",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:"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:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdrawn",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"NUM_TOKENS",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:"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"},{internalType:"uint256",name:"index",type:"uint256"},{internalType:"uint256",name:"minVirtualAmount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"depositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"getEstimatedAmountOnDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"getRewardsAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"getWithdrawProportionAmount",outputs:[{internalType:"uint256[4]",name:"",type:"uint256[4]"}],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:"uint256",name:"",type:"uint256"}],name:"pools",outputs:[{internalType:"contract IPool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"},{internalType:"contract IPool",name:"pool",type:"address"}],name:"setPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subBalanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subDepositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subTotalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransfer",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"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"tokens",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],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:"uint256",name:"virtualAmount",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Hn=Ys;var dt=class{};var zt=class extends dt{constructor(r,i){super();this.web3=r;this.api=i}chainType="EVM";async balanceOf(r){let i=(await this.getYieldContract(r.token.yieldAddress).methods.balanceOf(r.owner).call()).toString();return R(i,3).toFixed()}async getEstimatedAmountOnDeposit(r){let i=I(r.amount,r.token.decimals).toFixed(),o=(await this.getYieldContract(r.token.yieldAddress).methods.getEstimatedAmountOnDeposit(i,r.token.yieldId).call()).toString();return R(o,3).toFixed()}async getWithdrawProportionAmount(r){let i=I(r.amount,3).toFixed();return await this.getYieldContract(r.cydToken.yieldAddress).methods.getWithdrawProportionAmount(r.owner,i).call()}async buildRawTransactionDeposit(r){return Promise.resolve({...this.buildTxParams({owner:r.owner,yieldAddress:r.token.yieldAddress}),data:this.getYieldContract(r.token.yieldAddress).methods.deposit(r.amount,r.token.yieldId,r.minVirtualAmount).encodeABI()})}async buildRawTransactionWithdraw(r){return Promise.resolve({...this.buildTxParams({owner:r.owner,yieldAddress:r.token.yieldAddress}),data:this.getYieldContract(r.token.yieldAddress).methods.withdraw(r.amount).encodeABI()})}buildTxParams(r){return{from:r.owner,to:r.yieldAddress,value:"0"}}getYieldContract(r){return new this.web3.eth.Contract(Hn.abi,r)}};var Qn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o}async approve(a,r){return this.tokenService.buildRawTransactionApprove({...a,spender:a.token.yieldAddress},r)}async deposit(a,r){return M(a.amount),W("amount",a.amount,a.token.decimals),M(a.minVirtualAmount),W("minVirtualAmount",a.minVirtualAmount,3),a.amount=I(a.amount,a.token.decimals).toFixed(),a.minVirtualAmount=I(a.minVirtualAmount,3).toFixed(),It(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,a.owner,r).buildRawTransactionDeposit(a)}async withdraw(a,r){return M(a.amount),W("amount",a.amount,3),a.amount=I(a.amount,3).toFixed(),It(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,a.owner,r).buildRawTransactionWithdraw(a)}};var qt=class extends dt{constructor(r,i){super();this.tronWeb=r;this.api=i}chainType="TRX";async balanceOf(r){let i=(await(await this.getContract(r.token.yieldAddress)).methods.balanceOf(r.owner).call()).toString();return R(i,3).toFixed()}async getEstimatedAmountOnDeposit(r){let i=I(r.amount,r.token.decimals).toFixed(),o=(await(await this.getContract(r.token.yieldAddress)).methods.getEstimatedAmountOnDeposit(i,r.token.yieldId).call()).toString();return R(o,3).toFixed()}async getWithdrawProportionAmount(r){let i=I(r.amount,3).toFixed();return(await(await this.getContract(r.cydToken.yieldAddress)).methods.getWithdrawProportionAmount(r.owner,i).call()).toString().split(",")}async buildRawTransactionDeposit(r){let{amount:i,owner:o,token:c,minVirtualAmount:A}=r,m=[{type:"uint256",value:i},{type:"uint256",value:c.yieldId},{type:"uint256",value:A}];return this.buildRawTransaction(r.token.yieldAddress,"deposit(uint256,uint256,uint256)",m,"0",o)}async buildRawTransactionWithdraw(r){let{amount:i,owner:o}=r,c=[{type:"uint256",value:i}];return this.buildRawTransaction(r.token.yieldAddress,"withdraw(uint256)",c,"0",o)}async buildRawTransaction(r,i,o,c,A){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+c},o,A);if(!m?.result?.result)throw new f("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}getContract(r){return this.tronWeb.contract(Hn.abi,r)}};function Ls(s){if(!zn(s))throw new dn("Token does not support Yield")}function zn(s){return!!s.yieldAddress&&s.yieldId!==void 0}var qn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new Qn(a,r,i,o)}rawTxBuilder;async getCYDTokens(){let a=[],r=await this.api.getChainDetailsMap("pool");return Object.values(r).forEach(i=>{if(i.yieldAddress){let o=i.tokens.find(A=>A.tokenAddress===i.yieldAddress),c=i.tokens.filter(zn);if(c.length>0){let A=o??{allbridgeChainId:i.allbridgeChainId,apr:"",apr30d:"",apr7d:"",bridgeAddress:i.bridgeAddress,chainId:i.chainId,chainName:i.name,chainSymbol:i.chainSymbol,chainType:i.chainType,confirmations:i.confirmations,decimals:3,feeShare:"",lpRate:"",name:"Core Yield",poolAddress:"",symbol:"CYD",tokenAddress:i.yieldAddress,transferTime:{},txCostAmount:{maxAmount:"0",swap:"0",transfer:"0"},yieldAddress:i.yieldAddress};a.push({...A,yieldAddress:i.yieldAddress,tokens:c})}}}),a}async getAllowance(a,r){return await this.tokenService.getAllowance({...a,spender:a.token.yieldAddress},r)}async checkAllowance(a,r){return this.tokenService.checkAllowance({...a,spender:a.token.yieldAddress},r)}async balanceOf(a,r){return It(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,a.owner,r).balanceOf(a)}async getEstimatedAmountOnDeposit(a,r){return M(a.amount),W("amount",a.amount,a.token.decimals),It(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,a.token.yieldAddress,r).getEstimatedAmountOnDeposit(a)}async getWithdrawAmounts(a,r){M(a.amount),W("amount",a.amount,3);let i=await It(a.cydToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,a.owner,r).getWithdrawProportionAmount(a);return a.cydToken.tokens.filter(o=>i[o.yieldId]!==void 0).map(o=>({amount:R(i[o.yieldId],o.decimals).toFixed(),token:o}))}};function It(s,a,r,i,o){switch(x.getChainProperty(s).chainType){case"EVM":{if(o)return new zt(o,a);{let c=r.getNodeRpcUrl(s),A=new Qs(c);return A.defaultReturnFormat={number:Hs.STR,bytes:Ks.HEX},new zt(A,a)}}case"TRX":{if(o)return new qt(o,a);{let c=r.getNodeRpcUrl(s),A=new Xs({fullHost:c});return A.setAddress(i),new qt(A,a)}}case"SOLANA":throw new J;case"SRB":throw new J;case"SUI":throw new J}}import{Big as X}from"big.js";function ci(s,a,r){let i=zs(s,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),o=qs(i.amountIncludingCommissionInSystemPrecision,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo);return{swapToVUsdCalcResult:i,swapFromVUsdCalcResult:o}}function Ai(s,a,r){let i=eo(s,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo),o=to(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=X(s),c=o.times(a),A=o.minus(c);return{bridgeFeeInTokenPrecision:c.round().toFixed(),amountIncludingCommissionInSystemPrecision:si(it(A,r),i),amountExcludingCommissionInSystemPrecision:si(it(o,r),i)}}function si(s,a){if(s.eq(0))return"0";let r=X(a.tokenBalance).plus(s),i=Ue(r.toFixed(),a.aValue,a.dValue);return X(a.vUsdBalance).minus(i).round().toFixed()}function qs(s,{feeShare:a,decimals:r},i){if(X(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let c=X(s).plus(i.vUsdBalance),A=Ue(c,i.aValue,i.dValue),m=de(X(i.tokenBalance).minus(A),r),u=X(m).times(a),d=X(m).minus(u).round();return{bridgeFeeInTokenPrecision:u.round().toFixed(),amountIncludingCommissionInTokenPrecision:d.toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}function eo(s,{feeShare:a,decimals:r},i){let o=X(a).div(X(1).minus(a)),c=X(s).times(o),A=X(s).plus(c);return{bridgeFeeInTokenPrecision:c.round().toFixed(),amountIncludingCommissionInSystemPrecision:oi(it(A,r),i),amountExcludingCommissionInSystemPrecision:oi(it(s,r),i)}}function oi(s,a){let r=X(a.tokenBalance).minus(s),i=Ue(r.toFixed(),a.aValue,a.dValue);return X(i).minus(a.vUsdBalance).round().toFixed()}function to(s,{feeShare:a,decimals:r},i){if(X(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let o=X(i.vUsdBalance).minus(s),c=Ue(o.toFixed(),i.aValue,i.dValue),A=X(c).minus(i.tokenBalance),m=de(A.toFixed(),r),u=X(a).div(X(1).minus(a)),d=X(m).times(u),l=X(m).plus(d);return{bridgeFeeInTokenPrecision:d.round().toFixed(),amountIncludingCommissionInTokenPrecision:l.round().toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}import{Big as rt}from"big.js";function mi(s,a,r,i,o){let c=Ge(s,a,r),A=de(c,a.decimals),m=Vt(c,i,o),u=rt(s).times(a.feeShare),d=rt(m).div(rt(1).minus(i.feeShare)).minus(m);return{sourceLPSwap:{fee:R(u,a.decimals).neg().round(a.decimals,rt.roundUp).toFixed(),swap:R(rt(s).minus(A).minus(u),a.decimals).neg().round(a.decimals,rt.roundUp).toFixed()},destLPSwap:{fee:R(d,i.decimals).neg().round(i.decimals,rt.roundUp).toFixed(),swap:R(de(c,i.decimals).minus(m).minus(d),i.decimals).neg().round(i.decimals,rt.roundUp).toFixed()}}}import oo from"axios";var ui="3.27.1";function di(s){return Object.entries(s).reduce((a,r)=>{let i=r[0],o=r[1],c=so(i,o);return c&&(a[i]=c),a},{})}function li(s){let a={};for(let[r,i]of Object.entries(s)){let o=r;for(let c of i.tokens){let A=vt({chainSymbol:o,poolAddress:c.poolAddress}),m=se(c.poolInfo);a[A]={...c.poolInfo,imbalance:m}}}return a}function no(s,a){let{name:r,...i}=s,{poolInfo:o,...c}=a;return{...c,...i,chainName:r}}function ro(s){switch(s){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4;case"oft":return 5}}function ao(s){return Object.entries(s).reduce((a,[r,i])=>(a[r]=io(i),a),{})}function io(s){return Object.entries(s).reduce((a,[r,i])=>{let o=ro(r);return o&&i!=null&&(a[o]=i),a},{})}function so(s,a){let r=x.getChainsProperties()[s];if(!r)return null;let i={...r,allbridgeChainId:a.chainId,bridgeAddress:a.bridgeAddress,oftBridgeAddress:a.oftBridgeAddress,yieldAddress:a.yieldAddress,transferTime:ao(a.transferTime),txCostAmount:a.txCostAmount,confirmations:a.confirmations,suiAddresses:a.suiAddresses};return{...i,tokens:a.tokens.map(o=>no(i,o))}}function vt(s){return s.chainSymbol+"_"+s.poolAddress}function pi(s){let a=[];for(let[r,i]of Object.entries(s)){let o=r;for(let c of i.tokens)a.push({chainSymbol:o,poolAddress:c.poolAddress})}return a}function gi(s){let a={};for(let[r,i]of Object.entries(s)){let o=r;for(let[c,A]of Object.entries(i))A.imbalance=se(A),a[vt({chainSymbol:o,poolAddress:c})]=A}return a}var kt=class{api;constructor(a){this.api=oo.create({baseURL:a.coreApiUrl,headers:{Accept:"application/json",...a.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+ui},params:a.coreApiQueryParams})}async getTokenInfo(){let{data:a}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:di(a),poolInfoMap:li(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){if(a.messenger===5&&!a.sourceToken)throw new cn("For OFT sourceToken required");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,adminFeeShareWithExtras:r.adminFeeShareWithExtras}}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 gi(i)}};import er from"timed-cache";var Yr=20*1e3,co=55*1e3,Ft=class{constructor(a){this.apiClient=a;this.tokenInfoCache=new er({defaultTtl:co}),this.receivedTransactionCache=new er({defaultTtl:Yr}),this.pendingInfoCache=new er({defaultTtl:Yr}),this.gasBalanceCache=new er({defaultTtl:Yr})}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 c=this.apiClient.getGasBalance(a,r);return this.gasBalanceCache.put(i,c),c}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}${a.sourceToken?"_"+a.sourceToken:""}`,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 xt=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 Mt=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 c=r[o];c&&(i[o]={...c,tokens:fi(c.tokens,a,this.isStaging)})}return i}async tokens(a){return fi(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 fi(s,a,r){return s.filter(i=>r?!0:i.flags[a]).map(Ao)}function Ao(s){let{flags:a,...r}=s;return r}import mo from"timed-cache";var uo=55*1e3,Ot=class{constructor(a){this.client=a;this.poolInfoCache=new Lr}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[vt(a)];if(o)return o;throw new f("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(pi(i.chainDetailsMap))}this.poolInfoCache.putAll(r)}cachePut(a,r){this.poolInfoCache.put(vt(a),r)}},Lr=class{cache;constructor(){this.cache=new mo({defaultTtl:uo})}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=vt(a);return this.cache.get(r)}};import{Big as Po}from"big.js";import{TronWeb as wo}from"tronweb";import{Web3 as Co}from"web3";var lo={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"}]},tr=lo;import{Big as yi}from"big.js";var fe=class{async checkAllowance(a){let r=await this.getAllowance(a);return yi(r).gte(yi(a.amount))}};var po="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",go="0xdac17f958d2ee523a2206206994597c13d831ec7",fo=1e5,en=class extends fe{constructor(r,i){super();this.web3=r;this.api=i}chainType="EVM";getAllowance(r){let i=r.token.tokenAddress,o=r.owner,c=r.spender;return this.getAllowanceByTokenAddress(i,o,c)}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 c=await this.buildRawTransactionApprove({...r,amount:"0"});await this.sendRawTransaction(c,r.chainSymbol)}let i=await this.buildRawTransactionApprove(r);return await this.sendRawTransaction(i,r.chainSymbol)}isUsdt(r){return r.toLowerCase()===go}buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:c,amount:A}=r,u=this.getERC20Contract(i).methods.approve(o,A==null?po:xn(A));return Promise.resolve({from:c,to:i,value:"0",data:u.encodeABI()})}async sendRawTransaction(r,i){let o=r,c={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};i==="POL"?o.gas=fo:o.gas=await this.web3.eth.estimateGas(r);let{transactionHash:A}=await this.web3.eth.sendTransaction({...o,...c});return{txId:A.toString()}}getERC20Contract(r){return new this.web3.eth.Contract(tr.abi,r)}};import{AnchorProvider as yo}from"@project-serum/anchor";import{Connection as ho,PublicKey as nr}from"@solana/web3.js";var rr=class extends fe{constructor(r,i){super();this.solanaRpcUrl=r;this.api=i}chainType="SOLANA";approve(r){throw new J}buildRawTransactionApprove(r){throw new J}buildAnchorProvider(r){let i=new ho(this.solanaRpcUrl,"confirmed"),o=new nr(r);return new yo(i,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(r){throw new J}async getTokenBalance(r){let{account:i,token:o}=r;try{let c=await Ie(new nr(i),new nr(o.tokenAddress));return(await yt(c,this.buildAnchorProvider(i))).amount.toString()}catch(c){if(c instanceof Error)return c.message.startsWith("Account does not exist"),"0";throw c}}async getNativeTokenBalance(r){return(await this.buildAnchorProvider(r.account).connection.getBalance(new nr(r.account))).toString()}};import{Horizon as tT,NotFoundError as To}from"@stellar/stellar-sdk";var ar=class extends fe{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";getAllowance(){throw new J}async getTokenBalance(r){if(!r.token.originTokenAddress)throw new f("OriginTokenAddress missing");let[i,o]=r.token.originTokenAddress.split(":"),c=new tT.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),A;try{A=await c.loadAccount(r.account)}catch(d){if(d instanceof To)return"0";throw d}let u=A.balances.find(d=>(d.asset_type==="credit_alphanum4"||d.asset_type==="credit_alphanum12")&&d.asset_code==i&&d.asset_issuer==o);return u?.balance?I(u.balance,x.getChainDecimalsByType(x.getChainProperty(r.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(r){let A=(await new tT.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(r.account)).balances.find(m=>m.asset_type==="native");return A?.balance?I(A.balance,x.getChainDecimalsByType(x.getChainProperty(r.chainSymbol).chainType)).toFixed():"0"}approve(){throw new J}buildRawTransactionApprove(){throw new J}};import{SuiClient as bo}from"@mysten/sui/client";var ir=class extends fe{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.suiClient=new bo({url:this.suiRpcUrl})}chainType="SUI";suiClient;approve(r){throw new J}buildRawTransactionApprove(r){throw new J}getAllowance(r){throw new J}async getTokenBalance(r){if(!r.token.originTokenAddress)throw new f("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,c)=>o+BigInt(c.balance),BigInt(0)).toString()}};var So="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",tn=class extends fe{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 Mn(this.tronWeb,i)}async buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:c,amount:A}=r,m=A==null?So:xn(A),u=[{type:"address",value:o},{type:"uint256",value:m}];return this.buildRawTransaction(i,"approve(address,uint256)",u,"0",c)}getContract(r){return this.tronWeb.contract(tr.abi,r)}async buildRawTransaction(r,i,o,c,A){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+c},o,A);if(!m?.result?.result)throw new f("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var Dt=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 R(i,a.token.decimals).toFixed()}async checkAllowance(a,r){return M(a.amount),W("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&&(M(r.amount),W("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&&(M(a.amount),W("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?R(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:R(i,x.getChainDecimalsByType(x.getChainProperty(a.chainSymbol).chainType)).toFixed()}}getChainTokenService(a,r,i){switch(x.getChainProperty(a).chainType){case"EVM":{if(i)return new en(i,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new en(new Co(o),this.api)}}case"TRX":{if(i)return new tn(i,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a),c=new wo({fullHost:o});return c.setAddress(r),new tn(c,this.api)}}case"SOLANA":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new rr(o,this.api)}case"SRB":return new ar(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new ir(this.nodeRpcUrlsConfig.getNodeRpcUrl(a),this.api)}}prepareCheckAllowanceParams(a){return{...a,amount:I(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 sr=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r;let i=new kt(r),o=new Ft(i),c=new xt(o),A=new Ot(c);this.api=new Mt(A,r),this.tokenService=new Dt(this.api,a,r)}api;tokenService;buildRawTransactionApprove(a,r){return this.tokenService.buildRawTransactionApprove(a,r)}checkAllowance(a,r){return this.tokenService.checkAllowance(a,r)}getAllowance(a,r){return this.tokenService.getAllowance(a,r)}};import{Connection as Bo,PublicKey as Ro,TransactionMessage as Io}from"@solana/web3.js";var or=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}async addMemoToTx(a,r){if(r.length>28)throw new f("InvalidArgumentException memo cannot be more than 28 characters");let i=new Bo(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),o=await ot(a,i),c=Io.decompile(a.message,{addressLookupTableAccounts:o}),A=c.instructions[c.instructions.length-1];if(!A?.keys)throw new f("Last instruction or its keys are invalid.");A.keys.push({pubkey:new Ro(Buffer.from(r)),isSigner:!1,isWritable:!1}),a.message=c.compileToV0Message(o)}};import{Asset as Fo,BASE_FEE as xo,contract as JP,Horizon as hi,Operation as Mo,Operation as Oo,rpc as rn,TimeoutInfinite as Do,TransactionBuilder as Xr,TransactionBuilder as Ti}from"@stellar/stellar-sdk";import{contract as e}from"@stellar/stellar-sdk";var vo=e.Spec,ko=e.Client;var nn=class extends ko{constructor(r){super(new vo(["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 Wo=100,No=180,cr=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}async buildChangeTrustLineXdrTx(a){let i=await new hi.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.sender),c=await this.getContract(nn,a.tokenAddress).name();if(Ct(c))throw new f;let A=wt(c);if(!A)throw new f;let[m,u]=A.split(":");if(m===void 0||u===void 0)throw new f("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let d=new Fo(m,u),l=Oo.changeTrust({asset:d,limit:a.limit});return new Ti(i,{fee:Wo.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(l).setTimeout(No).build().toXDR()}async getBalanceLine(a,r){let o=await this.getContract(nn,r).name();if(Ct(o))throw new f;let c=wt(o);if(!c)throw new f;let[A,m]=c.split(":"),u=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new hi.Server(u).loadAccount(a)).balances.find(g=>(g.asset_type==="credit_alphanum4"||g.asset_type==="credit_alphanum12")&&g.asset_code==A&&g.asset_issuer==m)}async submitTransactionStellar(a){let r=new hi.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),i=Ti.fromXDR(a,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await r.submitTransaction(i)}async simulateAndCheckRestoreTxRequiredSoroban(a,r){let i=new rn.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await i.getAccount(r),c=Xr.fromXDR(a,this.params.sorobanNetworkPassphrase),A=await i.simulateTransaction(c);if(rn.Api.isSimulationRestore(A))return new Xr(o,{fee:(+xo+ +A.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(A.restorePreamble.transactionData.build()).addOperation(Mo.restoreFootprint({})).setTimeout(Do).build().toXDR()}async sendTransactionSoroban(a){let r=new rn.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),i=Xr.fromXDR(a,this.params.sorobanNetworkPassphrase);return r.sendTransaction(i)}async confirmTx(a,r=15){let i=new rn.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await Qr(()=>i.getTransaction(a),A=>A.status===rn.Api.GetTransactionStatus.NOT_FOUND,r);if(o.length===0)throw new f("No transaction responses found.");let c=o[o.length-1];if(!c)throw new f("Unexpected error: last response is undefined.");return c}getContract(a,r){let i={contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(i)}};var Ar=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.api=r}_suiBridgeService;async buildSendTxFromCustomTx(a,r,i){return this.suiBridgeService.buildRawTransactionSendFromCustomTx(a,r,i)}get suiBridgeService(){return this._suiBridgeService||(this._suiBridgeService=new St(this.nodeRpcUrlsConfig,this.api)),this._suiBridgeService}};var mr=class{constructor(a){this.service=a;this.srb=new cr(a.nodeRpcUrlsConfig,a.params),this.sol=new or(a.nodeRpcUrlsConfig,a.params),this.sui=new Ar(a.nodeRpcUrlsConfig,a.api),this.evm=new sr(a.nodeRpcUrlsConfig,a.params)}srb;sol;sui;evm};var st=(r=>(r.WITH_NATIVE_CURRENCY="native",r.WITH_STABLECOIN="stablecoin",r))(st||{}),fn=(r=>(r.INT="int",r.FLOAT="float",r))(fn||{});import{Big as Q}from"big.js";var an=class{constructor(a){this.nodeRpcUrls=a}getNodeRpcUrl(a){let r=this.nodeRpcUrls[a];if(r!==void 0)return r;throw new un(a)}},ur=class{constructor(a,r=on){this.nodeRpcUrlsConfig=a;x.addChainsProperties(r.additionalChainsProperties);let i=new kt(r),o=new Ft(i),c=new xt(o),A=new Ot(c);this.api=new Mt(A,r),this.tokenService=new Dt(this.api,a,r),this.bridge=new On(this.api,a,r,this.tokenService),this.pool=new Kn(this.api,a,r,this.tokenService),this.yield=new qn(this.api,a,r,this.tokenService),this.params=r}api;tokenService;params;bridge;pool;yield;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){M(a);let c;r=="float"?(W("amount",a,i.decimals),c=I(a,i.decimals).toFixed()):c=a;let A=Ge(c,i,await H(this.api,i)),m=await H(this.api,o),u=this.getAmountFromVUsdFormatted(A,o,m),d,l=await this.api.getPendingInfo();for(let p in l[o.chainSymbol]){let g=l[o.chainSymbol];if(!g)throw new f("Cannot find pending info for "+o.chainSymbol);d=g[p]}if(d){let p=Aa(d.totalSentAmount,m),g=this.getAmountFromVUsdFormatted(A,o,p),h;return Q(g.int).gt(u.int)?h={min:u,max:g}:h={min:g,max:u},{pendingTxs:d.pendingTxs,pendingAmount:{int:be(d.totalSentAmount,3,o.decimals).toFixed(0),float:R(d.totalSentAmount,3).toFixed()},estimatedAmount:h}}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){M(a),W("amountFloat",a,r.decimals);let i=I(a,r.decimals);if(i.eq(0))return 0;let o=Ge(i,r,await H(this.api,r)),c=de(o,r.decimals);return Tr(i,c)}async calculateFeePercentOnDestinationChain(a,r,i){M(a),W("amountFloat",a,r.decimals);let o=I(a,r.decimals);if(o.eq(0))return 0;let c=Ge(o,r,await H(this.api,r)),A=Vt(c,i,await H(this.api,i)),m=de(c,i.decimals);return Tr(m,A)}async getAmountToBeReceivedAndGasFeeOptions(a,r,i,o){return M(a),W("amountToSendFloat",a,r.decimals),{amountToSendFloat:Q(a).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(a,r,i,o),gasFeeOptions:await this.getGasFeeOptions(r,i,o)}}async getAmountToSendAndGasFeeOptions(a,r,i,o){return M(a),W("amountToBeReceivedFloat",a,i.decimals),{amountToSendFloat:await this.getAmountToSend(a,r,i,o),amountToBeReceivedFloat:Q(a).toFixed(),gasFeeOptions:await this.getGasFeeOptions(r,i,o)}}async getAmountToBeReceived(a,r,i,o){return this.getAmountToBeReceivedCompute(a,r,i,o,async()=>await H(this.api,r),async()=>await H(this.api,i))}async getAmountToBeReceivedFromChain(a,r,i,o,c,A){return this.getAmountToBeReceivedCompute(a,r,i,o,async()=>await this.pool.getPoolInfoFromChain(r,c),async()=>await this.pool.getPoolInfoFromChain(i,A))}async getAmountToBeReceivedCompute(a,r,i,o=1,c,A){switch(o){case 1:case 2:return this.getAmountToBeReceivedComputeWithPools(a,r,i,await c(),await A());case 3:case 4:return this.getAmountToBeReceivedComputeCctp(a,r,i,o);case 5:return this.getAmountToBeReceivedComputeOft(a,r,i)}}getAmountToBeReceivedComputeWithPools(a,r,i,o,c){M(a),W("amountToSendFloat",a,r.decimals);let A=I(a,r.decimals),m=Ge(A,r,o);return this.getAmountFromVUsdFormatted(m,i,c).float}getAmountToBeReceivedComputeCctp(a,r,i,o){M(a),W("amountToSendFloat",a,r.decimals);let c=I(a,r.decimals);switch(o){case 3:{if(!r.cctpAddress||!i.cctpAddress||!r.cctpFeeShare)throw new re("Such route does not support CCTP protocol");let A=c.mul(Q(1).minus(r.cctpFeeShare)).round(0,Q.roundUp),m=be(A,r.decimals,i.decimals).round(0);return R(m,i.decimals).toFixed()}case 4:{if(!r.cctpV2Address||!i.cctpV2Address||!r.cctpV2FeeShare)throw new re("Such route does not support CCTP V2 protocol");let A=c.mul(Q(1).minus(r.cctpV2FeeShare)).round(0,Q.roundUp),m=be(A,r.decimals,i.decimals).round(0);return R(m,i.decimals).toFixed()}}}async getAmountToBeReceivedComputeOft(a,r,i){M(a),W("amountToSendFloat",a,r.decimals);let o=I(a,r.decimals);if(!r.oftBridgeAddress||!i.oftBridgeAddress||r.oftId!==i.oftId)throw new ae("Such route does not support OFT protocol");let{adminFeeShareWithExtras:c}=await this.api.getReceiveTransactionCost({sourceChainId:r.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:5,sourceToken:r.tokenAddress});if(!c)throw new ae("Such route does not support OFT protocol");let A=o.mul(Q(1).minus(c)).round(0,Q.roundUp),m=be(A,r.decimals,i.decimals).round(0);return R(m,i.decimals).toFixed()}async getAmountToSend(a,r,i,o){return this.getAmountToSendCompute(a,r,i,o,()=>H(this.api,r),()=>H(this.api,i))}async getAmountToSendFromChain(a,r,i,o,c,A){return this.getAmountToSendCompute(a,r,i,o,()=>this.pool.getPoolInfoFromChain(r,c),()=>this.pool.getPoolInfoFromChain(i,A))}async getAmountToSendCompute(a,r,i,o=1,c,A){switch(o){case 1:case 2:return this.getAmountToSendComputeWithPools(a,r,i,await c(),await A());case 3:case 4:return this.getAmountToSendComputeCctp(a,r,i,o);case 5:return this.getAmountToSendComputeOft(a,r,i)}}getAmountToSendComputeWithPools(a,r,i,o,c){M(a),W("amountToBeReceivedFloat",a,i.decimals);let A=I(a,i.decimals),m=ua(A,i,c),u=ma(m,r,o);if(Q(u).lte(0))throw new Je;return R(u,r.decimals).toFixed()}getAmountToSendComputeCctp(a,r,i,o){M(a),W("amountToBeReceivedFloat",a,i.decimals);let c=I(a,i.decimals);switch(o){case 3:{if(!r.cctpAddress||!i.cctpAddress||!r.cctpFeeShare)throw new re("Such route does not support CCTP protocol");let A=c.div(Q(1).minus(r.cctpFeeShare)).round(0,Q.roundDown),m=be(A,i.decimals,r.decimals).round(0);return R(m,r.decimals).toFixed()}case 4:{if(!r.cctpV2Address||!i.cctpV2Address||!r.cctpV2FeeShare)throw new re("Such route does not support CCTP V2 protocol");let A=c.div(Q(1).minus(r.cctpV2FeeShare)).round(0,Q.roundDown),m=be(A,i.decimals,r.decimals).round(0);return R(m,r.decimals).toFixed()}}}async getAmountToSendComputeOft(a,r,i){M(a),W("amountToBeReceivedFloat",a,i.decimals);let o=I(a,i.decimals);if(!r.oftId||!i.oftId||!r.oftBridgeAddress||r.oftId!==i.oftId)throw new ae("Such route does not support OFT protocol");let{adminFeeShareWithExtras:c}=await this.api.getReceiveTransactionCost({sourceChainId:r.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:5,sourceToken:r.tokenAddress});if(!c)throw new ae("Such route does not support OFT protocol");let A=o.div(Q(1).minus(c)).round(0,Q.roundDown),m=be(A,i.decimals,r.decimals).round(0);return R(m,r.decimals).toFixed()}async getGasFeeOptions(a,r,i){return br(a,r.allbridgeChainId,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 la(a)}async getExtraGasMaxLimits(a,r,i){return await Sr(a,r,i,this.api)}async getVUsdFromAmount(a,r,i){M(a);let o;r=="float"?(W("amount",a,i.decimals),o=I(a,i.decimals).toFixed()):o=a;let c=Ge(o,i,await H(this.api,i));return{int:c,float:R(c,3).toFixed()}}async getAmountFromVUsd(a,r){return this.getAmountFromVUsdFormatted(a,r,await H(this.api,r))}getAmountFromVUsdFormatted(a,r,i){M(a);let o=Vt(a,r,i);if(Q(o).lt(0))throw new Je;return{int:o,float:R(o,r.decimals).toFixed()}}async swapAndBridgeFeeCalculation(a,r,i){return ci(a,{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await H(this.api,r)},{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await H(this.api,i)})}async swapAndBridgeFeeCalculationReverse(a,r,i){let o=Ai(a,{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await H(this.api,r)},{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await H(this.api,i)}),c=o.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(Q(c).lt(0))throw new Je;return o}async getSendAmountDetails(a,r,i,o){M(a);let c;return r=="float"?(W("amount",a,i.decimals),c=I(a,i.decimals).toFixed()):c=a,mi(c,i,await H(this.api,i),o,await H(this.api,o))}};function Go(s){return"solanaRpcUrl"in s}var bi=class{params;bridge;pool;yield;utils;service;constructor(a,r=on){let i;Go(a)?i=new an({SOL:a.solanaRpcUrl,TRX:a.tronRpcUrl}):i=new an(a),this.service=new ur(i,r),this.bridge=this.service.bridge,this.pool=this.service.pool,this.yield=this.service.yield,this.utils=new mr(this.service),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=1){return this.service.getAmountToBeReceived(a,r,i,o)}async getAmountToBeReceivedFromChain(a,r,i,o=1,c,A){return this.service.getAmountToBeReceivedFromChain(a,r,i,o,c,A)}getAmountToBeReceivedFromPools(a,r,i,o,c,A=1){switch(A){case 1:case 2:return this.service.getAmountToBeReceivedComputeWithPools(a,r,i,o,c);case 3:case 4:return this.service.getAmountToBeReceivedComputeCctp(a,r,i,A)}}async getAmountToSend(a,r,i,o=1){return this.service.getAmountToSend(a,r,i,o)}async getAmountToSendFromChain(a,r,i,o=1,c,A){return this.service.getAmountToSendFromChain(a,r,i,o,c,A)}getAmountToSendFromPools(a,r,i,o,c,A=1){switch(A){case 1:case 2:return this.service.getAmountToSendComputeWithPools(a,r,i,o,c);case 3:case 4:return this.service.getAmountToSendComputeCctp(a,r,i,A)}}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,i=1){return this.service.getExtraGasMaxLimits(a,r,i)}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{lr as AddressStatus,bi as AllbridgeCoreSdk,fn as AmountFormat,lt as AmountNotEnoughError,mn as ArgumentInvalidDecimalsError,re as CCTPDoesNotSupportedError,he as ChainSymbol,Z as ChainType,ki as ErrorCode,An as ExtraGasMaxLimitExceededError,st as FeePaymentMethod,Je as InsufficientPoolLiquidityError,$e as InvalidAmountError,Wt as InvalidGasFeePaymentOptionError,cn as InvalidMessengerOptionError,pt as InvalidTxError,q as JupiterError,Te as Messenger,J as MethodNotSupportedError,un as NodeRpcUrlNotInitializedError,ae as OFTDoesNotSupportedError,f as SdkError,$ as SdkRootError,Pr as SolanaAutoTxFee,Gt as TimeoutError,ln as TxTooLargeError,Nt as VerifyTxError,dn as YieldDoesNotSupportedError,Ls as assertYieldIsSupported,zn as isYieldSupported,on as mainnet,Vo as nodeRpcUrlsDefault,Eo as nodeUrlsDefault};
2
2
  //# sourceMappingURL=index.js.map