@allbridge/bridge-core-sdk 3.23.0 → 3.23.1-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/index.js +1 -1
- package/dist/browser/index.js.map +2 -2
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +2 -2
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +2 -2
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/package.json +2 -2
package/dist/esm/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var di=Object.create;var Vr=Object.defineProperty;var pi=Object.getOwnPropertyDescriptor;var gi=Object.getOwnPropertyNames;var fi=Object.getPrototypeOf,yi=Object.prototype.hasOwnProperty;var hi=(s,a)=>()=>(s&&(a=s(s=0)),a);var ar=(s,a)=>()=>(a||s((a={exports:{}}).exports,a),a.exports);var Ti=(s,a,r,i)=>{if(a&&typeof a=="object"||typeof a=="function")for(let o of gi(a))!yi.call(s,o)&&o!==r&&Vr(s,o,{get:()=>a[o],enumerable:!(i=pi(a,o))||i.enumerable});return s};var Ie=(s,a,r)=>(r=s!=null?di(fi(s)):{},Ti(a||!s||!s.__esModule?Vr(r,"default",{value:s,enumerable:!0}):r,s));import{bcs as ce}from"@mysten/sui/bcs";function Hi(s,a=["<",">"]){let[r,i]=a,o=[],A="",c=0;for(let m=0;m<s.length;m++){let u=s[m];if(u===r&&c++,u===i&&c--,c===0&&u===","){o.push(A.trim()),A="";continue}A+=u}return o.push(A.trim()),o}function 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 A=s.slice(0,i),c=Hi(s.slice(i+1,s.length-o-1),[a,r]);return{typeName:A,typeArgs:c}}function Ba(s){return!s||typeof s!="object"||Array.isArray(s)?!1:"GasCoin"in s||"Input"in s||"Result"in s||"NestedResult"in s}function C(s,a){return Ba(a)?a:s.object(a)}function Se(s,a,r){if(Ba(a))return C(s,a);function i(l){let{typeName:d,typeArgs:p}=te(l);switch(d){case"bool":return ce.Bool;case"u8":return ce.U8;case"u16":return ce.U16;case"u32":return ce.U32;case"u64":return ce.U64;case"u128":return ce.U128;case"u256":return ce.U256;case"address":return ce.Address;case"0x1::string::String":case"0x1::ascii::String":return ce.String;case"0x2::object::ID":return ce.Address;case"0x1::option::Option":return ce.option(i(p[0]));case"vector":return ce.vector(i(p[0]));default:throw new Error(`invalid primitive type ${l}`)}}function o(l){for(let d of l){if(typeof d>"u"||d===null)return!0;if(Array.isArray(d))return o(d)}return!1}function A(l){for(let d of l){if(!Array.isArray(d)){if(d===null)continue;switch(typeof d){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return A(d)}return!0}function c(l){for(let d of l){if(!Array.isArray(d))switch(typeof d){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return c(d)}return!1}let{typeName:m,typeArgs:u}=te(r);switch(m){case"0x1::option::Option":if(a===null)return s.pure.option("bool",null);if(A([a]))return s.pure(i(r).serialize(a));if(c([a]))throw new Error("mixing primitive and TransactionArgument values is not supported");return s.moveCall({target:"0x1::option::some",typeArguments:[u[0]],arguments:[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(ce.vector(ce.Bool).serialize([]));if(o(a))throw new Error("the provided array contains undefined or null values");if(A(a))return s.pure(i(r).serialize(a));if(c(a))throw new Error("mixing primitive and TransactionArgument values is not supported");return s.makeMoveVec({type:u[0],elements:a});default:return s.pure(i(r).serialize(a))}}function Qi(s){let a=s.split("0x").join("");for(let r=0;r<a.length;r++)if(a[r]!=="0")return`0x${a.substring(r)}`;return"0x0"}function P(s){let{typeName:a,typeArgs:r}=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<${P(r[0])}>`;default:{let i=a.split("::");i[0]=Qi(i[0]);let o=i.join("::");return r.length>0?`${o}<${r.map(A=>P(A)).join(",")}>`:o}}}function D(s,...a){return a.length>0?`${s}<${a.join(", ")}>`:s}var Q=hi(()=>{"use strict"});var ze=ar((km,Ia)=>{"use strict";Q();var Tr=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},zi=new Tr;Ia.exports=zi});var wr=ar((Om,Oa)=>{"use strict";Q();var Pr=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},qi=new Pr;Oa.exports=qi});var Ir=ar((Gm,Na)=>{"use strict";Q();var Br=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},es=new Br;Na.exports=es});var tn={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},Bo={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},Io={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 ls}from"tronweb";import{Web3 as ds}from"web3";var J=class extends Error{errorCode;constructor(a,r){super(r),this.errorCode=a}},h=class extends J{constructor(a){super("SdkError",a)}},$e=class extends J{constructor(a){super("InvalidAmountError",a)}},lt=class extends J{constructor(a){super("AmountNotEnoughError",a)}},Je=class extends J{constructor(a){super("InsufficientPoolLiquidityError",a)}},z=class extends J{constructor(a){super("JupiterError",a)}},Mt=class extends J{constructor(a){super("InvalidGasFeePaymentOptionError",a)}},nn=class extends J{constructor(a){super("InvalidMessengerOptionError",a)}},Y=class extends J{constructor(a){super("MethodNotSupportedError",a)}},Ot=class extends J{constructor(a){super("VerifyTxError",a)}},dt=class extends J{constructor(a){super("InvalidTxError",a)}},rn=class extends J{constructor(a){super("ExtraGasMaxLimitExceededError",a)}},an=class extends J{constructor(a,r,i){super("ArgumentInvalidDecimalsError",`Argument '${a}' decimals '${r}' cannot be greater than '${i}'`)}},Dt=class extends J{constructor(a){super("TimeoutError",a)}},sn=class extends J{constructor(a){super("NodeRpcUrlNotInitializedError",`For chain '${a}' Node RPC URL not initialized`)}},re=class extends J{constructor(a){super("CCTPDoesNotSupportedError",a)}},ae=class extends J{constructor(a){super("OFTDoesNotSupportedError",a)}},on=class extends J{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},bi=(b=>(b.SDK_ERROR="SdkError",b.INVALID_AMOUNT_ERROR="InvalidAmountError",b.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",b.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",b.JUPITER_ERROR="JupiterError",b.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",b.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",b.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",b.VERIFY_TX_ERROR="VerifyTxError",b.INVALID_TX_ERROR="InvalidTxError",b.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",b.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",b.TIMEOUT_ERROR="TimeoutError",b.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",b.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",b.OFT_DOES_NOT_SUPPORTED_ERROR="OFTDoesNotSupportedError",b.TX_TOO_LARGE="TxTooLargeError",b))(bi||{});var he=(y=>(y.BSC="BSC",y.ETH="ETH",y.BAS="BAS",y.SOL="SOL",y.TRX="TRX",y.POL="POL",y.ARB="ARB",y.CEL="CEL",y.AVA="AVA",y.SRB="SRB",y.STLR="STLR",y.OPT="OPT",y.SUI="SUI",y.SNC="SNC",y))(he||{}),j=(A=>(A.EVM="EVM",A.SOLANA="SOLANA",A.TRX="TRX",A.SRB="SRB",A.SUI="SUI",A))(j||{});var Si={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9},Pi={BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SNC:{chainSymbol:"SNC",chainId:"0x92",name:"Sonic",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"},SUI:{chainSymbol:"SUI",name:"Sui",chainType:"SUI"}},M=(()=>{let s={...Pi};return{addChainsProperties(a){s={...s,...a}},getChainProperty(a){let r=s[a];if(!r)throw new h(`Cannot find chain properties for ${a}`);return r},getChainsProperties(){return s},getChainDecimalsByType(a){return Si[a]}}})();var ir=(c=>(c.OK="OK",c.INVALID="INVALID",c.FORBIDDEN="FORBIDDEN",c.UNINITIALIZED="UNINITIALIZED",c.CONTRACT_ADDRESS="CONTRACT_ADDRESS",c.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",c))(ir||{});var Te=(A=>(A[A.ALLBRIDGE=1]="ALLBRIDGE",A[A.WORMHOLE=2]="WORMHOLE",A[A.CCTP=3]="CCTP",A[A.CCTP_V2=4]="CCTP_V2",A[A.OFT=5]="OFT",A))(Te||{});import{Big as Zr}from"big.js";async function K(s,a){return await s.getPoolInfoByKey({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress})}function U(s){if(Zr(s).lte(0))throw new $e("Amount must be greater than zero")}function E(s,a,r){let i=Zr(a).toFixed(),[o,A]=i.split(".");if(A&&A.length>r)throw new an(s,A.length,r)}async function An(s,a,r){return await Promise.race([s,new Promise((i,o)=>{setTimeout(()=>o(new Dt(a)),r)})])}async function sr(s,a,r,i){if(r<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${r} was received.`);let o=0;for(;;)try{return await An(s(),a,i)}catch{if(++o>=r)throw new Dt(a)}}async function jr(s,a,r,i=1.5,o=!1){let A=[],c=0,m=await s();if(A.push(m),!a(m))return A;let u=new Date(Date.now()+r*1e3).valueOf(),l=1e3,d=l;for(;Date.now()<u;){let p=A[A.length-1];if(p===void 0||!a(p))break;c++,o&&console.info(`Waiting ${l}ms before trying again (bringing the total wait time to ${d}ms so far, of total ${r*1e3}ms)`),await new Promise(f=>setTimeout(f,l)),l=l*i,new Date(Date.now()+l).valueOf()>u&&(l=u-Date.now(),o&&console.info(`was gonna wait too long; new waitTime: ${l}ms`)),d=l+d;let g=await s(p);A.push(g),o&&a(g)&&console.info(`${c}. Called ${s.name}; ${A.length} prev attempts. Most recent: ${JSON.stringify(A[A.length-1],null,2)}`)}return A}import{Big as Ni}from"big.js";var wi={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"}]},_r=wi;var Ci={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"}]},$r=Ci;var Bi={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"}]},Jr=Bi;import*as un from"@project-serum/anchor";import{PublicKey as ua}from"@solana/web3.js";import*as q from"@project-serum/anchor";import{PublicKey as ie}from"@solana/web3.js";async function Re(s,a){return q.utils.token.associatedAddress({mint:a,owner:s})}async function Ke(s){let[a]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("config")],s);return a}async function Lr(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("lock"),Uint8Array.from(s)],a);return r}async function Nt(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([s])],a);return r}async function pt(s){let a=await Ke(s),[r]=await ie.findProgramAddress([a.toBuffer()],s);return r}async function Xr(s,a){let[r]=await ie.findProgramAddress([s.toBuffer()],a);return r}async function gt(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("token"),s.toBytes()],a);return r}async function Yr(s,a,r){let[i]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([s]),a],r);return i}async function or(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([s])],a);return r}async function Ar(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([s])],a);return r}async function Kr(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("sent_message"),s],a);return r}async function cr(s,a,r){let[i]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("user_deposit"),a.toBytes(),s.toBytes()],r);return i}async function Hr(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("cctp_bridge"),s.toBytes()],a);return r}async function Qr(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("token"),s.toBytes()],a);return r}function zr(s,a){let[r]=ie.findProgramAddressSync([q.utils.bytes.utf8.encode("lock"),a.toBuffer()],s);return r}function qr(s,a,r,i){let o=at("message_transmitter",r),A=at("token_messenger",i),c=at("__event_authority",i),m=at("token_minter",i),u=at("local_token",i,[a]),l=at("remote_token_messenger",i,[s.toString()]),d=at("sender_authority",i);return{messageTransmitterAccount:o,tokenMessenger:A,tokenMessengerEventAuthority:c,tokenMinter:m,localToken:u,remoteTokenMessengerKey:l,authorityPda:d}}function at(s,a,r=[]){let i=[Buffer.from(q.utils.bytes.utf8.encode(s))];for(let A of r)typeof A=="string"?i.push(Buffer.from(q.utils.bytes.utf8.encode(A))):Array.isArray(A)||Buffer.isBuffer(A)?i.push(Buffer.from(Uint8Array.from(A))):i.push(Buffer.from(Uint8Array.from(A.toBuffer())));return ie.findProgramAddressSync(i,a)[0]}import{AnchorProvider as Ii}from"@project-serum/anchor";import{Connection as Ri,PublicKey as vi}from"@solana/web3.js";function He(s,a){let r=new Ri(s,"confirmed"),i=new vi(a);return new Ii(r,{publicKey:i},{preflightCommitment:"confirmed",commitment:"confirmed"})}import{PublicKey as ki}from"@solana/web3.js";import{Address as Fi}from"@stellar/stellar-sdk";import{Big as de}from"big.js";import Aa from"randombytes";import{utils as sa}from"tronweb";import{Big as T}from"big.js";import mr from"bn.js";function ur(s,a){return T(100).minus(T(100).times(a).div(s)).toNumber()}function it(s,a){return be(s,a,3).round(0,T.roundDown)}function le(s,a){return be(s,3,a)}function be(s,a,r){let i=T(r).minus(a).toNumber();return T(s).times(Wt(i))}function Wt(s){return T(10).pow(s)}function O(s,a){return T(s).times(Wt(a))}function v(s,a){let r=T(s);return r.eq(0)?T(0):T(r).div(Wt(a))}function se(s){return v(T(s.tokenBalance).minus(s.vUsdBalance).toFixed(),3).div(2).toFixed()}function Ge(s,{feeShare:a,decimals:r},i){let o=T(s);if(o.lte(0))return"0";let A=o.times(a),c=o.minus(A),m=it(c,r),u=T(i.tokenBalance).plus(m),l=Ue(u,i.aValue,i.dValue);return T(i.vUsdBalance).minus(l).round(0,T.roundDown).toFixed()}function Gt(s,{feeShare:a,decimals:r},i){let o=T(s);if(o.lte(0))return T(0).toFixed();let A=o.plus(i.vUsdBalance),c=Ue(A,i.aValue,i.dValue),m=le(T(i.tokenBalance).minus(c),r),u=T(m).times(a);return T(m).minus(u).round(0,T.roundDown).toFixed()}function ea(s,a){let r=T(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 ta(s,{feeShare:a,decimals:r},i){if(T(s).lte(0))return T(0);let o=T(i.vUsdBalance).minus(s);if(o.lte(0))throw new Je;let A=Ue(o,i.aValue,i.dValue),c=T(A).minus(i.tokenBalance),m=le(c,r),u=T(a).div(T(1).minus(a)),l=T(m).times(u).round(0,T.roundUp);return T(m).plus(l).round(0,T.roundDown)}function na(s,{feeShare:a,decimals:r},i){if(T(s).lte(0))return T(0);let o=T(a).div(T(1).minus(a)),A=T(s).times(o).round(0,T.roundUp),c=T(s).plus(A),m=it(c,r),u=T(i.tokenBalance).minus(m);if(u.lte(0))throw new Je;let l=Ue(u,i.aValue,i.dValue);return T(l).minus(i.vUsdBalance).round(0,T.roundDown)}function Ue(s,a,r){let i=T(4).times(a).times(T(r).minus(s)).minus(r),o=T(r).pow(3),A=i.pow(2),c=T(s).times(T(s).times(A).plus(T(4).times(a).times(o))).sqrt().round(0,T.roundDown),m=T(8).times(a).times(s),u=i.times(s).plus(c).div(m).round(0,T.roundDown);return u.eq(0)?T(0):u.plus(1)}function ra(s,a,r,i){let o=new mr(s),A=new mr(r),c=new mr(a);return o.mul(A).shrn(i).sub(c).toString()}function aa(s){return T(s).gt(0)?`${Number(T(s).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function ia(s,a,r){let i=T(a).times(r),o=T(a).plus(r),A=T(8).times(s).times(i).times(o),c=i.times(T(16).times(s).minus(4)).div(3),m=A.times(A),u=c.times(c).times(c),l=m.plus(u),d=T(l).sqrt(),p=T(Math.cbrt(+A.plus(d).toFixed())),g=T(Math.cbrt(+A.minus(d).toFixed()));return p.plus(g).toFixed()}function Le(s,a,r){let i;switch(a){case"EVM":{i=oa(s);break}case"SOLANA":{i=new ki(s).toBuffer();break}case"TRX":{i=xi(s);break}case"SRB":{i=new Fi(s).toBuffer();break}case"SUI":{i=oa(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 ca(s){return Buffer.from(s.replace(/^0x/i,""),"hex")}function oa(s){let r=ca(s);return Buffer.concat([Buffer.alloc(32-r.length,0),r],32)}function xi(s){let a=Ut(s),r=ca(a);return Mi(r,32)}function Ut(s){let a=sa.crypto.decodeBase58Address(s);return a?sa.bytes.byteArray2hexStr(a).replace(/^41/,"0x"):""}function Mi(s,a){if(s.length>=a)return s;let r=Buffer.alloc(a,0);return s.copy(r,a-s.length),r}function cn(){return Aa(32)}function Ee(){let s=Aa(32).readBigInt64BE();return s<0?s*-1n:s}function Ve(s,a){let r={},i=a.sourceToken;if(r.amount=O(a.amount,i.decimals).toFixed(),r.contractAddress=i.bridgeAddress,r.fromAccountAddress=a.fromAccountAddress,s==="SUI"){if(!i.originTokenAddress)throw new h("SUI sourceToken must contain 'originTokenAddress'");r.fromTokenAddress=i.originTokenAddress}else r.fromTokenAddress=Le(i.tokenAddress,s,s);if(r.toAccountAddress=a.toAccountAddress,s==="SUI"){if(!a.destinationToken.originTokenAddress)throw new h("SUI destinationToken must contain 'originTokenAddress'");r.toTokenAddress=a.destinationToken.originTokenAddress}else r.toTokenAddress=Le(a.destinationToken.tokenAddress,s,s);return r.minimumReceiveAmount=a.minimumReceiveAmount?O(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=M.getChainProperty(a.destinationToken.chainSymbol).chainType;if(s==="SUI"){if(!a.sourceToken.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");i.fromTokenAddress=a.sourceToken.originTokenAddress}else i.fromTokenAddress=a.sourceToken.tokenAddress;i.toChainId=a.destinationToken.allbridgeChainId,i.toTokenAddress=a.destinationToken.tokenAddress,a.gasFeePaymentMethod==="stablecoin"?i.gasFeePaymentMethod="stablecoin":i.gasFeePaymentMethod="native";let A=a.sourceToken;switch(a.messenger){case 3:if(!A.cctpAddress||!a.destinationToken.cctpAddress)throw new re("Such route does not support CCTP protocol");i.contractAddress=A.cctpAddress;break;case 4:if(!A.cctpV2Address||!a.destinationToken.cctpV2Address)throw new re("Such route does not support CCTP V2 protocol");i.contractAddress=A.cctpV2Address;break;case 5:if(!A.oftBridgeAddress||!a.destinationToken.oftBridgeAddress||A.oftId!==a.destinationToken.oftId)throw new ae("Such route does not support OFT protocol");i.contractAddress=A.oftBridgeAddress;break;case 1:case 2:i.contractAddress=A.bridgeAddress;break}i.messenger=a.messenger,i.fromAccountAddress=a.fromAccountAddress,i.amount=O(a.amount,A.decimals).toFixed();let{fee:c,feeFormat:m}=a;if(!c){let p=(await lr(a.sourceToken,i.toChainId,i.messenger,r))[i.gasFeePaymentMethod];if(!p)throw new Mt;c=p.int,m="int"}if(m=="float")switch(i.gasFeePaymentMethod){case"native":i.fee=O(c,M.getChainDecimalsByType(A.chainType)).toFixed(0);break;case"stablecoin":i.fee=O(c,A.decimals).toFixed(0);break}else i.fee=c;let{extraGas:u,extraGasFormat:l}=a;if(u&&+u>0){let d=await dr(A,a.destinationToken,i.messenger,r),p,g;switch(i.gasFeePaymentMethod){case"native":p=M.getChainDecimalsByType(A.chainType),g=de(d.exchangeRate);break;case"stablecoin":p=A.decimals,g=de(d.exchangeRate).div(d.sourceNativeTokenPrice);break}switch(l??"int"){case"float":{i.extraGas=O(u,p).toFixed(0);let f=g.mul(u);i.extraGasDest=O(f,M.getChainDecimalsByType(a.destinationToken.chainType)).toFixed(0,de.roundDown);break}case"int":{i.extraGas=u;let f=v(i.extraGas,M.getChainDecimalsByType(A.chainType)),y=g.mul(f);i.extraGasDest=O(y,M.getChainDecimalsByType(a.destinationToken.chainType)).toFixed(0,de.roundDown);break}}Di(i.extraGas,i.gasFeePaymentMethod,d)}return s!=="SUI"&&(i.fromTokenAddress=Le(i.fromTokenAddress,s,s)),i.toAccountAddress=Le(a.toAccountAddress,o,s),i.toTokenAddress=Le(i.toTokenAddress,o,s),i.gasFeePaymentMethod=="stablecoin"&&Oi(i.amount,A.decimals,i.fee,i.extraGas),i}function Oi(s,a,r,i){let o=de(s).minus(r).minus(i??0);if(o.lte(0))throw new lt(`Amount not enough to pay fee, ${v(de(o).minus(1).neg(),a).toFixed()} stables is missing`)}async function lr(s,a,r,i){let o=await i.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:a,messenger:r,sourceToken:s.tokenAddress}),A={native:{int:o.fee,float:v(o.fee,M.getChainDecimalsByType(s.chainType)).toFixed()},adminFeeShareWithExtras:o.adminFeeShareWithExtras};if(o.sourceNativeTokenPrice){let c=be(new de(o.fee).mul(o.sourceNativeTokenPrice),M.getChainDecimalsByType(s.chainType),s.decimals).toFixed(0,de.roundUp);A.stablecoin={int:c,float:v(c,s.decimals).toFixed()}}return A}function Di(s,a,r){let i=r.extraGasMax[a];if(!i)throw new Mt(`Impossible to pay extra gas by '${a}' payment method`);let o=i.int;if(de(s).gt(o))throw new rn(`Extra gas ${s} in int format, exceeded limit ${o} for '${a}' payment method`)}async function dr(s,a,r,i){let o={},A=await i.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:a.allbridgeChainId,messenger:r,sourceToken:s.tokenAddress}),c=a.txCostAmount.maxAmount,m=v(c,M.getChainDecimalsByType(a.chainType)).toFixed(),u=de(m).div(A.exchangeRate).toFixed(M.getChainDecimalsByType(s.chainType),de.roundDown),l=O(u,M.getChainDecimalsByType(s.chainType)).toFixed(0);if(o.native={int:l,float:u},A.sourceNativeTokenPrice){let d=de(u).mul(A.sourceNativeTokenPrice).toFixed(s.decimals,de.roundDown);o.stablecoin={int:O(d,s.decimals).toFixed(0),float:d}}return{extraGasMax:o,destinationChain:{gasAmountMax:{int:c,float:m},swap:{int:a.txCostAmount.swap,float:v(a.txCostAmount.swap,M.getChainDecimalsByType(a.chainType)).toFixed()},transfer:{int:a.txCostAmount.transfer,float:v(a.txCostAmount.transfer,M.getChainDecimalsByType(a.chainType)).toFixed()}},exchangeRate:A.exchangeRate,sourceNativeTokenPrice:A.sourceNativeTokenPrice}}function ma(s){return s.sourceToken.chainSymbol!==s.destinationToken.chainSymbol}async function ln(s,a,r,i){let o,A=new ua(a),c=new ua(r),m=await Re(A,c),u=He(i,a);un.setProvider(u);let l=await un.Spl.token(u).account.token.fetchNullable(m);if(l?.authority.equals(A))o=Le(m.toBase58(),"SOLANA",s);else{let d=await u.connection.getTokenAccountsByOwner(A,{mint:c});if(d.value.length===0&&!l)o=Le(m.toBase58(),"SOLANA",s);else if(d.value.length>0){let p=d.value[0];if(!p?.pubkey)throw new h("First token account or its public key is undefined");o=Le(p.pubkey.toBase58(),"SOLANA",s)}else throw new h("Associated account has wrong owner")}return o}var pe=class{};var Et=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:A,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=r,p=this.getBridgeContract(o).methods.swap(i,c,u,m,l);return Promise.resolve({from:A,to:o,data:p.encodeABI()})}async buildRawTransactionSend(r){let i=await ke(this.chainType,r,this.api),{amount:o,contractAddress:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,toTokenAddress:d,messenger:p,fee:g,gasFeePaymentMethod:f,extraGas:y,extraGasDest:S}=i,w="0x"+cn().toString("hex"),b,R,I=g;switch(y&&(I=Ni(I).plus(y).toFixed()),p){case 3:case 4:{let W=await this.buildRawTransactionCctpSend(r,i,I);b=W.sendMethod,R=W.value;break}case 5:{let W=this.buildRawTransactionOftSend(r,i,I,S);b=W.sendMethod,R=W.value;break}case 1:case 2:{let W=this.getBridgeContract(A);f==="stablecoin"?(b=W.methods.swapAndBridge(m,o,l,u,d,w,p,I),R="0"):(b=W.methods.swapAndBridge(m,o,l,u,d,w,p,0),R=I)}break}return Promise.resolve({from:c,to:A,value:R,data:b.encodeABI()})}async buildRawTransactionCctpSend(r,i,o){let{amount:A,contractAddress:c,toChainId:m,toAccountAddress:u,gasFeePaymentMethod:l}=i,d=this.getCctpBridgeContract(c),p,g;if(r.destinationToken.chainType==="SOLANA"){let f=await ln(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));l==="stablecoin"?(p=d.methods.bridgeWithWalletAddress(A,f,u,m,o),g="0"):(p=d.methods.bridgeWithWalletAddress(A,f,u,m,0),g=o)}else l==="stablecoin"?(p=d.methods.bridge(A,u,m,o),g="0"):(p=d.methods.bridge(A,u,m,0),g=o);return{sendMethod:p,value:g}}buildRawTransactionOftSend(r,i,o,A){let{amount:c,contractAddress:m,toChainId:u,toAccountAddress:l,gasFeePaymentMethod:d}=i,p=this.getOftBridgeContract(m),g,f;return d==="stablecoin"?(g=p.methods.bridge(r.sourceToken.tokenAddress,c,l,u,o,A??"0","10"),f="0"):(g=p.methods.bridge(r.sourceToken.tokenAddress,c,l,u,0,A??"0","10"),f=o),{sendMethod:g,value:f}}async sendRawTransaction(r){let i=await this.web3.eth.estimateGas(r),o={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:A}=await this.web3.eth.sendTransaction({...r,gas:i,...o});return{txId:A.toString()}}getBridgeContract(r){return new this.web3.eth.Contract(_r.abi,r)}getCctpBridgeContract(r){return new this.web3.eth.Contract($r.abi,r)}getOftBridgeContract(r){return new this.web3.eth.Contract(Jr.abi,r)}};var dn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o}async approve(a,r){let i,o;r?(i=a,o=r):o=a;let A=Vt(o.token,o.messenger);return this.tokenService.buildRawTransactionApprove({...o,spender:A},i)}async send(a,r){return U(a.amount),E("amount",a.amount,a.sourceToken.decimals),ma(a)?pn(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionSend(a):pn(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionSwap(a)}};import{BN as ht,Program as fr,Spl as Ji,web3 as Qe}from"@project-serum/anchor";import{Keypair as wa,PublicKey as Z,SystemProgram as Li}from"@solana/web3.js";import{Big as Fe}from"big.js";var Zt={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 la={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 Wi}from"@project-serum/anchor";import Gi from"big.js";import{Web3 as gn}from"web3";async function ft(s,a){return await Wi.token(a).account.token.fetch(s)}async function da(s,a,r){let i=await a.account.pool.fetch(r),o=i.decimals,A=Gi(i.feeShareBp.toString()).div(1e4).toFixed(),c={aValue:i.a.toString(),dValue:i.d.toString(),totalLpAmount:i.totalLpAmount.toString(),tokenBalance:i.tokenBalance.toString(),vUsdBalance:i.vUsdBalance.toString(),accRewardPerShareP:i.accRewardPerShareP.toString()};return Ge(s,{decimals:o,feeShare:A},c)}function pa(s){let a=s.amount,r="0x"+s.recipient.toString("hex"),i=s.sourceChainId,o=s.destinationChainId,A="0x"+s.receiveToken.toString("hex"),c="0x"+s.nonce.toString("hex"),m=1,u="0x"+s.chainBridge.toString("hex"),l=gn.utils.encodePacked({t:"uint256",v:a},{t:"bytes32",v:r},{t:"uint256",v:i},{t:"bytes32",v:A},{t:"uint256",v:c},{t:"uint8",v:m});if(!l)throw new h("message cannot be undefined");let d=gn.utils.keccak256(Buffer.from(l.replace("0x",""),"hex")),p=Buffer.from(d.replace("0x",""),"hex");p[0]=i,p[1]=o;let g=gn.utils.encodePacked({t:"bytes32",v:"0x"+p.toString("hex")},{t:"bytes32",v:u});if(!g)throw new dt("messageWithSigner cannot be undefined");let f=gn.utils.keccak256(Buffer.from(g.replace("0x",""),"hex")),y=Buffer.from(f.replace("0x",""),"hex");return y[0]=p[0],y[1]=p[1],y}import{ComputeBudgetInstruction as fa,ComputeBudgetProgram as fn,Connection as ya,TransactionMessage as Ui}from"@solana/web3.js";import{Big as Ei}from"big.js";import{AddressLookupTableAccount as ga}from"@solana/web3.js";async function ot(s,a){return await Promise.all(s.message.addressTableLookups.map(async r=>new ga({key:r.accountKey,state:ga.deserialize(await a.getAccountInfo(r.accountKey).then(i=>{if(!i)throw new h("Cannot get AccountInfo");return i.data}))})))}var pr="AUTO";async function yt(s,a,r){let i=new ya(r,"confirmed"),o=(await i.simulateTransaction(s)).value.unitsConsumed;await Ta(s.instructions,o,a,i)}async function ha(s,a,r){let i=new ya(r,"confirmed"),o=await ot(s,i),A=Ui.decompile(s.message,{addressLookupTableAccounts:o});if(s.serialize().length>1232)throw new on;await Ta(A.instructions,769230,a,i),s.message=A.compileToV0Message(o)}async function Ta(s,a,r,i){if(a>0){let o=Vi(a,s);if(r?.solana){let A=r.solana;if(A===pr)await gr(s,i);else if("pricePerUnitInMicroLamports"in A)await gr(s,i,A.pricePerUnitInMicroLamports);else{let c=Ei(A.extraFeeInLamports).div(o).mul(Wt(6)).toFixed(0);await gr(s,i,c)}}}}function Vi(s,a){let r=a.findIndex(A=>A.programId.equals(fn.programId)&&fa.decodeInstructionType(A)==="SetComputeUnitLimit"),i=Number((s*1.3).toFixed(0)),o=fn.setComputeUnitLimit({units:i});return r>=0?a[r]=o:a.push(o),i.toString()}async function gr(s,a,r){let i=s.findIndex(c=>c.programId.equals(fn.programId)&&fa.decodeInstructionType(c)==="SetComputeUnitPrice"),o=BigInt(r||await Zi(a)),A=fn.setComputeUnitPrice({microLamports:o});return i>=0?s[i]=A:s.push(A),o.toString()}async function Zi(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 ji}from"@solana/spl-token";import{Connection as _i,TransactionMessage as ba,VersionedTransaction as $i}from"@solana/web3.js";import Sa,{AxiosError as Pa}from"axios";var yn=class{connection;jupiterUrl;apiKeyHeader;maxAccounts;constructor(a,r){this.connection=new _i(a),this.jupiterUrl=r.jupiterUrl.replace(/\/$/,""),this.apiKeyHeader=r.jupiterApiKeyHeader,this.maxAccounts=r.jupiterMaxAccounts}async getJupiterSwapTx(a,r,i,o){let A;try{let p=o?"ExactOut":"ExactIn",g=`${this.jupiterUrl}/quote?inputMint=${r}&outputMint=${ji.toString()}&amount=${i}&swapMode=${p}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(g+=`&maxAccounts=${this.maxAccounts}`),A=await Sa.get(g,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(p){throw p instanceof Pa&&p.response&&p.response.data&&p.response.data.error?new z(p.response.data.error):new z("Cannot get route")}let c;if(o&&A?.data?.inAmount)c=A.data.inAmount;else if(o)throw new z("Cannot get inAmount");let m;try{m=await Sa.post(`${this.jupiterUrl}/swap`,{quoteResponse:A.data,userPublicKey:a,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(p){throw p instanceof Pa&&p.response&&p.response.data&&p.response.data.error?new z(p.response.data.error):new z("Cannot get swap transaction")}let u;if(m?.data?.swapTransaction)u=m.data.swapTransaction;else throw new z("Cannot get swap transaction");let l=Buffer.from(u,"base64"),d=$i.deserialize(l);return o?{tx:d,amountIn:c}:{tx:d}}async amendJupiterWithSdkTx(a,r){try{let i=await ot(a,this.connection),o=await ot(r,this.connection),A=ba.decompile(a.message,{addressLookupTableAccounts:i}),c=ba.decompile(r.message,{addressLookupTableAccounts:o});if(c.instructions.shift(),A.instructions.push(...c.instructions),i.push(...o),a.message=A.compileToV0Message(i),r.message.header.numRequiredSignatures===2&&a.signatures.length===1){let m=r.signatures[0];if(!m)throw new h("Signature is undefined");a.signatures.push(m)}return a}catch(i){throw i instanceof Error&&i.message?new z(`Some error occurred during creation final swap and bridge transaction. ${i.message}`):new z("Some error occurred during creation final swap and bridge transaction")}}};var yr=1e6,Ca=1.1,hn=class extends pe{constructor(r,i,o){super();this.solanaRpcUrl=r;this.params=i;this.api=o;this.jupiterService=new yn(r,i.jupiterParams)}chainType="SOLANA";jupiterService;async buildRawTransactionSwap(r){let i=Ve(this.chainType,r);return await this.buildSwapTransaction(i,r.sourceToken.poolAddress,r.destinationToken.poolAddress,r.txFeeParams)}async buildSwapTransaction(r,i,o,A){let{fromAccountAddress:c,amount:m,contractAddress:u,fromTokenAddress:l,toTokenAddress:d,toAccountAddress:p,minimumReceiveAmount:g}=r,f=c,y=u,S=l,w=d,b=o,R=p,I=new Z(f),W=He(this.solanaRpcUrl,I.toString()),V=new fr(Zt,y,W),N=await pt(V.programId),me=await Ke(V.programId),X=new Z(S),Oe=await gt(X,V.programId),De=new Z(i),_e=await Re(I,X),we=new Z(R),Ae=new Z(w),ye=await gt(Ae,V.programId),Ce=new Z(b),ue=await Re(we,Ae),Ne=[Qe.ComputeBudgetProgram.setComputeUnitLimit({units:yr})];try{await ft(ue,W)}catch{let li=await Ji.associatedToken(W).methods.create().accounts({mint:Ae,owner:we,associatedAccount:ue}).instruction();Ne.push(li)}let We=await V.methods.swap(new ht(m),new ht(g||0)).accounts({payer:I,config:me,bridgeAuthority:N,user:I,sendBridgeToken:Oe,sendMint:X,sendPool:De,sendUserToken:_e,receiveBridgeToken:ye,receiveMint:Ae,receivePool:Ce,receiveUserToken:ue}).preInstructions(Ne).transaction(),Be=W.connection;return We.recentBlockhash=(await Be.getLatestBlockhash()).blockhash,We.feePayer=I,await yt(We,A,this.solanaRpcUrl),await this.convertToVersionedTransaction(We,Be)}async buildRawTransactionSend(r){let i=await ke(this.chainType,r,this.api),o=this.addPoolAddress(r,i),A=o.gasFeePaymentMethod=="stablecoin",c;if(A)try{let{tx:l,solTxSendUpdatedParams:d}=await this.processJup(o,r,!0);c=l,o={...o,...d}}catch{try{let{tx:d,solTxSendUpdatedParams:p}=await this.processJup(o,r,!1);c=d,o={...o,...p}}catch(d){throw d instanceof J?d:d instanceof Error&&d.message?new z(`Some error occurred during creation Jupiter swap transaction. ${d.message}`):new z("Some error occurred during creation Jupiter swap transaction")}}let m,u;switch(i.messenger){case 1:{let l=await this.prepareSwapAndBridgeData(o);m=await this.buildSwapAndBridgeAllbridgeTransaction(l);break}case 2:{let l=await this.prepareSwapAndBridgeData(o),{transaction:d,messageAccount:p}=await this.buildSwapAndBridgeWormholeTransaction(l);m=d,u=p;break}case 3:case 4:{let l=await this.prepareSwapAndBridgeCctpData(o),{transaction:d,messageSentEventDataKeypair:p}=await this.buildSwapAndBridgeCctpTransaction(r.destinationToken.chainSymbol,l);m=d,u=p;break}case 5:throw new ae("Messenger OFT is not supported yet.")}if(A){if(!c)throw new z("Swap tx is absent");m=await this.jupiterService.amendJupiterWithSdkTx(c,m)}return await ha(m,r.txFeeParams,this.solanaRpcUrl),u&&m.sign([u]),m}async processJup(r,i,o){let{fee:A,extraGas:c,gasFeePaymentMethod:m}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(i.sourceToken,r),u=o?Fe(A):Fe(r.fee);c&&(u=u.plus(c)),o||(u=u.mul(Ca));let{tx:l,amountIn:d}=await this.jupiterService.getJupiterSwapTx(i.fromAccountAddress,i.sourceToken.tokenAddress,u.toFixed(0),o),p;if(o){if(!d)throw new z("Cannot get inAmount");p=Fe(r.amount).minus(Fe(d).mul(Ca)).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, ${v(Fe(p).minus(1).neg(),i.sourceToken.decimals).toFixed()} stables is missing`);return{tx:l,solTxSendUpdatedParams:{amount:p,fee:A,extraGas:c,gasFeePaymentMethod:m}}}addPoolAddress(r,i){return{...i,poolAddress:r.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(r,i){if(i.gasFeePaymentMethod=="stablecoin"){let o=(await this.api.getReceiveTransactionCost({sourceChainId:i.fromChainId,destinationChainId:i.toChainId,messenger:i.messenger,sourceToken:r.tokenAddress})).sourceNativeTokenPrice,A=Fe(i.fee).div(o).mul(Fe(10).pow(M.getChainDecimalsByType("SOLANA")-r.decimals)).toFixed(0),c;return i.extraGas&&(c=Fe(i.extraGas).div(o).mul(Fe(10).pow(M.getChainDecimalsByType("SOLANA")-r.decimals)).toFixed(0)),{fee:A,extraGas:c,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:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,toTokenAddress:d,poolAddress:p,extraGas:g}=r,f=m,y=c,S=u,w=d,b=l,R=o,I=A,W=He(this.solanaRpcUrl,y),V=new fr(Zt,R,W),N=Array.from(cn()),me=new Z(p),X=await da(i,V,me),Oe=await Lr(N,V.programId),De=await pt(V.programId),_e=await Re(new Z(y),new Z(f)),we=await gt(new Z(f),V.programId),Ae=await or(S,V.programId),ye=await Yr(S,Buffer.from(w),V.programId),Ce=await Ke(V.programId),ue=await V.account.config.fetch(Ce),Ne=await Nt(S,ue.gasOracleProgramId),We=await Nt(I,ue.gasOracleProgramId),Be=pa({amount:X,recipient:Buffer.from(b),nonce:Buffer.from(N),receiveToken:Buffer.from(w),destinationChainId:S,sourceChainId:I,chainBridge:(await pt(V.programId)).toBuffer()}),G={};return G.bridge=V,G.amount=new ht(i),G.vusdAmount=new ht(X),G.nonce=N,G.recipient=Array.from(b),G.receiveToken=Array.from(w),G.poolAccount=me,G.lockAccount=Oe,G.bridgeAuthority=De,G.userToken=_e,G.bridgeTokenAccount=we,G.chainBridgeAccount=Ae,G.otherBridgeTokenAccount=ye,G.userAccount=new Z(y),G.destinationChainId=S,G.mint=new Z(f),G.config=Ce,G.configAccountInfo=ue,G.gasPrice=Ne,G.thisGasPrice=We,G.message=Be,g&&(G.extraGasInstruction=this.getExtraGasInstruction(g,G.userAccount,Ce)),G}async buildSwapAndBridgeAllbridgeTransaction(r){let{bridge:i,vusdAmount:o,nonce:A,recipient:c,receiveToken:m,poolAccount:u,lockAccount:l,bridgeAuthority:d,userToken:p,bridgeTokenAccount:g,chainBridgeAccount:f,otherBridgeTokenAccount:y,userAccount:S,destinationChainId:w,mint:b,config:R,configAccountInfo:I,gasPrice:W,thisGasPrice:V,message:N,extraGasInstruction:me}=r,X=I.allbridgeMessengerProgramId,Oe=await Ar(w,X),De=await Ke(X),_e=await Kr(N,X),we=[];me&&we.push(me);let Ae=await i.methods.swapAndBridge({vusdAmount:o,nonce:A,destinationChainId:w,recipient:c,receiveToken:m}).accounts({mint:b,user:S,config:R,lock:l,pool:u,gasPrice:W,thisGasPrice:V,bridgeAuthority:d,userToken:p,bridgeToken:g,chainBridge:f,messenger:X,messengerGasUsage:Oe,messengerConfig:De,sentMessageAccount:_e,otherBridgeToken:y}).preInstructions([Qe.ComputeBudgetProgram.setComputeUnitLimit({units:yr})]).postInstructions(we).transaction(),ye=He(this.solanaRpcUrl,S.toString()).connection;return Ae.recentBlockhash=(await ye.getLatestBlockhash()).blockhash,Ae.feePayer=S,await this.convertToVersionedTransaction(Ae,ye)}async convertToVersionedTransaction(r,i){let o=await i.getAddressLookupTable(new Z(this.params.solanaLookUpTable)).then(c=>c.value);if(!o)throw new h("Cannot find allbridgeLookupTableAccount");let A=new Qe.TransactionMessage({payerKey:r.feePayer,recentBlockhash:r.recentBlockhash,instructions:r.instructions}).compileToV0Message([o]);return new Qe.VersionedTransaction(A)}async buildSwapAndBridgeWormholeTransaction(r){let{bridge:i,vusdAmount:o,nonce:A,recipient:c,receiveToken:m,poolAccount:u,lockAccount:l,bridgeAuthority:d,userToken:p,bridgeTokenAccount:g,chainBridgeAccount:f,otherBridgeTokenAccount:y,userAccount:S,destinationChainId:w,mint:b,config:R,configAccountInfo:I,gasPrice:W,thisGasPrice:V,message:N,extraGasInstruction:me}=r,X=this.params.wormholeMessengerProgramId,[Oe]=Z.findProgramAddressSync([Buffer.from("Bridge")],new Z(X)),[De]=Z.findProgramAddressSync([Buffer.from("fee_collector")],new Z(X)),[_e]=Z.findProgramAddressSync([Buffer.from("Sequence"),d.toBuffer()],new Z(X)),we=await Ar(w,I.wormholeMessengerProgramId),Ae=await Ke(I.wormholeMessengerProgramId),ye=wa.generate(),Ce=He(this.solanaRpcUrl,S.toString()),ue=await Ce.connection.getAccountInfo(Oe);if(ue==null)throw new h("Cannot fetch wormhole bridge account info");let Ne=new ht(ue.data.slice(16,24),"le").toString(),We=Li.transfer({fromPubkey:S,toPubkey:De,lamports:+Ne}),Be=[];me&&Be.push(me);let G={mint:b,user:S,config:R,lock:l,pool:u,gasPrice:W,thisGasPrice:V,bridgeAuthority:d,userToken:p,bridgeToken:g,chainBridge:f,otherBridgeToken:y,messengerGasUsage:we,wormholeProgram:X,bridge:Oe,message:ye.publicKey,wormholeMessenger:I.wormholeMessengerProgramId,sequence:_e,feeCollector:De,wormholeMessengerConfig:Ae,clock:Qe.SYSVAR_CLOCK_PUBKEY},en=await i.methods.swapAndBridgeWormhole({vusdAmount:o,nonce:A,destinationChainId:w,recipient:c,receiveToken:m}).accounts(G).preInstructions([Qe.ComputeBudgetProgram.setComputeUnitLimit({units:yr}),We]).postInstructions(Be).signers([ye]).transaction();return en.recentBlockhash=(await Ce.connection.getLatestBlockhash()).blockhash,en.feePayer=S,{transaction:await this.convertToVersionedTransaction(en,Ce.connection),messageAccount:ye}}async prepareSwapAndBridgeCctpData(r){let{contractAddress:i,amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,extraGas:d}=r,p=i;if(!p)throw new re("Such route does not support CCTP protocol");let g=4,f=A,y=l,S=u,w=He(this.solanaRpcUrl,f),b=new fr(la,p,w),R=new Z(c),I=await Hr(R,b.programId),W=new Z(f),V=await b.account.cctpBridge.fetch(I),N={};return N.cctpBridge=b,N.cctpBridgeAccount=I,N.cctpAddressAccount=new Z(p),N.amount=new ht(o),N.recipient=Array.from(S),N.receiveToken=Array.from(y),N.userToken=await Re(W,R),N.bridgeAuthority=await Xr(I,b.programId),N.bridgeTokenAccount=await Qr(R,b.programId),N.chainBridgeAccount=await or(m,b.programId),N.userAccount=W,N.destinationChainId=m,N.mint=R,N.gasPrice=await Nt(m,V.gasOracleProgramId),N.thisGasPrice=await Nt(g,V.gasOracleProgramId),N.provider=w,d&&(N.extraGasInstruction=this.getExtraGasInstruction(d,N.userAccount,I)),N}async buildSwapAndBridgeCctpTransaction(r,i){let{cctpBridge:o,cctpBridgeAccount:A,amount:c,recipient:m,receiveToken:u,bridgeAuthority:l,userToken:d,bridgeTokenAccount:p,chainBridgeAccount:g,userAccount:f,destinationChainId:y,mint:S,gasPrice:w,thisGasPrice:b,extraGasInstruction:R,provider:I}=i,W=this.params.cctpParams.cctpDomains[r],V=this.params.cctpParams.cctpTransmitterProgramId,N=this.params.cctpParams.cctpTokenMessengerMinter;if(W==null||!V||!N)throw new h("CCTP is not configured");let me=new Z(V),X=new Z(N),{messageTransmitterAccount:Oe,tokenMessenger:De,tokenMessengerEventAuthority:_e,tokenMinter:we,localToken:Ae,remoteTokenMessengerKey:ye,authorityPda:Ce}=qr(W,S,me,X),ue=[];R&&ue.push(R);let Ne=wa.generate(),We=zr(o.programId,Ne.publicKey),Be=await o.methods.bridge({amount:c,destinationChainId:y,recipient:m,receiveToken:u}).accounts({mint:S,user:f,cctpBridge:A,messageSentEventData:Ne.publicKey,lock:We,cctpMessenger:X,messageTransmitterProgram:me,messageTransmitterAccount:Oe,tokenMessenger:De,tokenMinter:we,localToken:Ae,remoteTokenMessengerKey:ye,authorityPda:Ce,eventAuthority:_e,bridgeToken:p,gasPrice:w,thisGasPrice:b,chainBridge:g,userToken:d,bridgeAuthority:l}).preInstructions([Qe.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(ue).transaction(),G=I.connection;return Be.recentBlockhash=(await G.getLatestBlockhash()).blockhash,Be.feePayer=f,{transaction:await this.convertToVersionedTransaction(Be,G),messageSentEventDataKeypair:Ne}}send(r){throw new Y}};import{Address as hr,contract as CS}from"@stellar/stellar-sdk";import{Big as Ki}from"big.js";import{contract as n}from"@stellar/stellar-sdk";var Xi=n.Spec,Yi=n.Client;var jt=class extends Yi{constructor(r){super(new Xi(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),r);this.options=r}fromJSON={initialize:this.txFromJSON,swap_and_bridge:this.txFromJSON,receive_tokens:this.txFromJSON,swap:this.txFromJSON,stop_swap:this.txFromJSON,start_swap:this.txFromJSON,set_gas_oracle:this.txFromJSON,set_stop_authority:this.txFromJSON,set_rebalancer:this.txFromJSON,set_messenger:this.txFromJSON,set_gas_usage:this.txFromJSON,register_bridge:this.txFromJSON,add_bridge_token:this.txFromJSON,remove_bridge_token:this.txFromJSON,add_pool:this.txFromJSON,withdraw_gas_tokens:this.txFromJSON,withdraw_bridging_fee_in_tokens:this.txFromJSON,has_processed_message:this.txFromJSON,has_received_message:this.txFromJSON,get_pool_address:this.txFromJSON,get_config:this.txFromJSON,get_stop_authority:this.txFromJSON,get_transaction_cost:this.txFromJSON,get_gas_usage:this.txFromJSON,get_admin:this.txFromJSON,get_gas_oracle:this.txFromJSON,get_another_bridge:this.txFromJSON,set_admin:this.txFromJSON,upgrade:this.txFromJSON}};var Tn=class extends 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:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:g}=r,f=d;g&&(f=Ki(f).plus(g).toFixed());let y=this.getContract(jt,o,A),S;return p==="stablecoin"?S=await y.swap_and_bridge({sender:A,token:hr.contract(Buffer.from(c)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(l),nonce:Ee(),gas_amount:BigInt(0),fee_token_amount:BigInt(f)}):S=await y.swap_and_bridge({sender:A,token:hr.contract(Buffer.from(c)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(l),nonce:Ee(),gas_amount:BigInt(f),fee_token_amount:BigInt(0)}),S.toXDR()}async buildRawTransactionSwap(r){let i=Ve(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=r;return(await this.getContract(jt,o,A).swap({sender:A,amount:BigInt(i),token:hr.contract(Buffer.from(c)).toBuffer(),receive_token:Buffer.from(u),recipient:m,receive_amount_min:BigInt(l)})).toXDR()}send(r){throw new Y}getContract(r,i,o){let A={publicKey:o,contractId:i,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new r(A)}};import{SuiClient as As}from"@mysten/sui/client";import{coinWithBalance as $,Transaction as Bn}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as Ea}from"@mysten/sui/utils";import{Big as Fr}from"big.js";var xr=Ie(ze());var Xe=Ie(ze());Q();function Ra(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::swap`,typeArguments:a,arguments:[C(s,r.bridge),C(s,r.coin),Se(s,r.receiveAmountMin,"u64")]})}function va(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::deposit`,typeArguments:[a],arguments:[C(s,r.bridge),C(s,r.userDeposit),C(s,r.coin)]})}function ka(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::withdraw`,typeArguments:[a],arguments:[C(s,r.bridge),C(s,r.userDeposit),Se(s,r.amountLp,"u64")]})}function Fa(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::claim_reward`,typeArguments:[a],arguments:[C(s,r.bridge),C(s,r.userDeposit)]})}function xa(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::pool`,typeArguments:[a],arguments:[C(s,r)]})}function br(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::swap_and_bridge_wormhole`,typeArguments:[a],arguments:[C(s,r.bridge),C(s,r.messenger),C(s,r.wormholeState),C(s,r.theClock),C(s,r.gasOracle),C(s,r.amount),C(s,r.recipient),Se(s,r.destinationChainId,"u8"),C(s,r.receiveToken),Se(s,r.nonce,"u256"),C(s,r.feeSuiCoin),C(s,r.feeTokenCoin)]})}function Ma(s,a){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::new_user_deposit`,typeArguments:[a],arguments:[]})}function Sr(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::swap_and_bridge`,typeArguments:[a],arguments:[C(s,r.bridge),C(s,r.messenger),C(s,r.gasOracle),C(s,r.amount),C(s,r.recipient),Se(s,r.destinationChainId,"u8"),C(s,r.receiveToken),Se(s,r.nonce,"u256"),C(s,r.feeSuiCoin),C(s,r.feeTokenCoin)]})}var Va=Ie(wr());var Da=Ie(wr());Q();function Cr(s,a,r){return s.moveCall({target:`${Da.PUBLISHED_AT}::cctp_bridge_interface::bridge`,typeArguments:[a],arguments:[C(s,r.cctpBridge),C(s,r.gasOracle),C(s,r.tokenMessengerMinterState),C(s,r.messageTransmitterState),C(s,r.treasury),C(s,r.denyList),C(s,r.amount),C(s,r.feeSuiCoin),C(s,r.feeTokenCoin),Se(s,r.destinationChainId,"u8"),C(s,r.recipient),C(s,r.recipientWalletAddress)]})}var Za=Ie(Ir());var Ua=Ie(Ir());Q();import{bcs as qe}from"@mysten/sui/bcs";import{fromHEX as ns,toHEX as rs}from"@mysten/sui/utils";import{bcs as ts}from"@mysten/sui/bcs";Q();var Rr=class s{__VectorClass=!0;static $typeName="vector";static $numTypeParams=1;static $isPhantom=[!1];$typeName="vector";$fullTypeName;$typeArgs;$isPhantom=[!1];elements;constructor(a,r){this.$fullTypeName=D(this.$typeName,...a),this.$typeArgs=a,this.elements=r}static reified(a){return{typeName:s.$typeName,fullTypeName:D(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs(_t(a)),fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),new:r=>new s([B(a)],r),kind:"VectorClassReified"}}static get r(){return s.reified}static get bcs(){return ts.vector}static fromFields(a,r){return s.reified(a).new(r.map(i=>x(a,i)))}static fromFieldsWithTypes(a,r){return s.reified(a).new(r.map(i=>k(a,i)))}static fromBcs(a,r){return s.fromFields(a,s.bcs(_t(a)).parse(r))}toJSONField(){return this.elements.map(a=>At(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=>F(a,i)))}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a vector json object");return s.fromJSONField(a,r.elements)}};function Tt(s){return Rr.r(s)}function _(s){return typeof s=="string"?{phantomType:s,kind:"PhantomReified"}:{phantomType:s.fullTypeName,kind:"PhantomReified"}}var as=qe.bytes(32).transform({input:s=>ns(s),output:s=>rs(s)});function _t(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 as;default:return s.bcs}}function B(s){switch(s){case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"bool":case"address":return s}switch(s.kind){case"PhantomReified":return s.phantomType;case"StructClassReified":return s.fullTypeName;case"VectorClassReified":return s.fullTypeName}throw new Error("unreachable")}function x(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 k(s,a){switch(s){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return 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:k(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(P(a[i])!==P(B(r[i])))throw new Error(`provided item has mismatching type argments ${s} (expected ${B(r[i])}, got ${a[i]}))`)}function Ze(s,a){let{typeArgs:r}=te(s.type);xe(s.type,r,a)}function At(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=>At(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:At(i[0],a);default:return a.toJSONField()}}function F(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:F(s.reifiedTypeArgs[0],a);default:return s.fromJSONField(a)}}Q();var bn="0x1";import{bcs as du}from"@mysten/sui/bcs";import{fromB64 as gu}from"@mysten/sui/utils";Q();import{bcs as vr}from"@mysten/sui/bcs";import{fromB64 as is}from"@mysten/sui/utils";function Sn(s){return s=P(s),s===`${bn}::string::String`}var Pn=class s{__StructClass=!0;static get $typeName(){return`${bn}::string::String`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;bytes;constructor(a,r){this.$fullTypeName=D(s.$typeName,...a),this.$typeArgs=a,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:D(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 _(s.reified())}static get p(){return s.phantom()}static get bcs(){return vr.struct("String",{bytes:vr.vector(vr.u8())})}static fromFields(a){return s.reified().new({bytes:x(Tt("u8"),a.bytes)})}static fromFieldsWithTypes(a){if(!Sn(a.type))throw new Error("not a String type");return s.reified().new({bytes:k(Tt("u8"),a.fields.bytes)})}static fromBcs(a){return s.fromFields(s.bcs.parse(a))}toJSONField(){return{bytes:At("vector<u8>",this.bytes)}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return s.reified().new({bytes:F(Tt("u8"),a.bytes)})}static fromJSON(a){if(a.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(a)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!Sn(a.type))throw new Error(`object at ${a.fields.id} is not a String object`);return s.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!Sn(a.bcs.type))throw new Error("object at is not a String object");return s.fromBcs(is(a.bcs.bcsBytes))}if(a.content)return s.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r){let i=await a.getObject({id:r,options:{showBcs:!0}});if(i.error)throw new Error(`error fetching String object at id ${r}: ${i.error.code}`);if(i.data?.bcs?.dataType!=="moveObject"||!Sn(i.data.bcs.type))throw new Error(`object at id ${r} is not a String object`);return s.fromSuiObjectData(i.data)}};Q();Q();var et="0x2";import{bcs as kr}from"@mysten/sui/bcs";import{fromB64 as Ga,fromHEX as ss,toHEX as os}from"@mysten/sui/utils";function wn(s){return s=P(s),s===`${et}::object::ID`}var ct=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=D(s.$typeName,...a),this.$typeArgs=a,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:D(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 _(s.reified())}static get p(){return s.phantom()}static get bcs(){return kr.struct("ID",{bytes:kr.bytes(32).transform({input:a=>ss(a),output:a=>os(a)})})}static fromFields(a){return s.reified().new({bytes:x("address",a.bytes)})}static fromFieldsWithTypes(a){if(!wn(a.type))throw new Error("not a ID type");return s.reified().new({bytes:k("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:F("address",a.bytes)})}static fromJSON(a){if(a.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(a)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!wn(a.type))throw new Error(`object at ${a.fields.id} is not a ID object`);return s.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!wn(a.bcs.type))throw new Error("object at is not a ID object");return s.fromBcs(Ga(a.bcs.bcsBytes))}if(a.content)return s.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r){let i=await a.getObject({id:r,options:{showBcs:!0}});if(i.error)throw new Error(`error fetching ID object at id ${r}: ${i.error.code}`);if(i.data?.bcs?.dataType!=="moveObject"||!wn(i.data.bcs.type))throw new Error(`object at id ${r} is not a ID object`);return s.fromSuiObjectData(i.data)}};function Cn(s){return s=P(s),s===`${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=D(s.$typeName,...a),this.$typeArgs=a,this.id=r.id}static reified(){return{typeName:s.$typeName,fullTypeName:D(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 _(s.reified())}static get p(){return s.phantom()}static get bcs(){return kr.struct("UID",{id:ct.bcs})}static fromFields(a){return s.reified().new({id:x(ct.reified(),a.id)})}static fromFieldsWithTypes(a){if(!Cn(a.type))throw new Error("not a UID type");return s.reified().new({id:k(ct.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:F(ct.reified(),a.id)})}static fromJSON(a){if(a.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(a)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!Cn(a.type))throw new Error(`object at ${a.fields.id} is not a UID object`);return s.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!Cn(a.bcs.type))throw new Error("object at is not a UID object");return s.fromBcs(Ga(a.bcs.bcsBytes))}if(a.content)return s.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r){let i=await a.getObject({id:r,options:{showBcs:!0}});if(i.error)throw new Error(`error fetching UID object at id ${r}: ${i.error.code}`);if(i.data?.bcs?.dataType!=="moveObject"||!Cn(i.data.bcs.type))throw new Error(`object at id ${r} is not a UID object`);return s.fromSuiObjectData(i.data)}};function Me(s,a){return s.moveCall({target:`${Ua.PUBLISHED_AT}::bytes32::from_hex`,arguments:[Se(s,a,`${Pn.$typeName}`)]})}async function je(s,a,r=[]){let i=await s(a),o=r.concat(i.data);return i.hasNextPage&&i.nextCursor?je(s,i.nextCursor,o):o}var In=class extends pe{constructor(r,i){super();this.nodeRpcUrlsConfig=r;this.api=i;this.client=new As({url:r.getNodeRpcUrl(this.chainSymbol)})}chainType="SUI";chainSymbol="SUI";client;send(){throw new h("Method send not implemented.")}async buildRawTransactionSwap(r){let i=r.sourceToken.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");(0,xr.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:A,fromTokenAddress:c,toTokenAddress:m,minimumReceiveAmount:u}=r,l=new Bn;l.setSender(A);let d={bridge:i.bridgeObjectAddress,coin:$({balance:BigInt(o),type:c}),receiveAmountMin:BigInt(u)},p=Ra(l,[c,m],d),g=await je(f=>this.client.getCoins({owner:r.toAccountAddress,coinType:m,cursor:f}));return g.length===0||!g[0]?l.transferObjects([p],r.toAccountAddress):l.mergeCoins(g[0].coinObjectId,[p]),await l.toJSON({client:this.client})}async buildRawTransactionSend(r){let i=await ke(this.chainType,r,this.api),{messenger:o}=i,A=r.sourceToken.suiAddresses;if(!A)throw new h("SUI token must contain 'suiAddresses'");switch((0,xr.setAddress)(A.bridgeAddress,A.bridgeAddressOrigin),(0,Za.setAddress)(A.utilsAddress),o){case 1:return this.buildRawTransactionAllbridgeSend(i,A);case 2:return this.buildRawTransactionWormholeSend(i,A);case 3:case 4:return this.buildRawTransactionCctpSend(r,i,A);case 5:throw new ae("Messenger OFT is not supported yet.")}}async buildRawTransactionAllbridgeSend(r,i){let{amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:g}=r,f=d;g&&(f=Fr(f).plus(g).toFixed());let y=new Bn;if(y.setSender(A),p==="stablecoin"){let S=BigInt(o)-BigInt(f),w={bridge:i.bridgeObjectAddress,messenger:i.allbridgeMessengerObjectAddress,amount:$({balance:S,type:c}),destinationChainId:m,nonce:Ee(),recipient:Me(y,ve(u)),receiveToken:Me(y,ve(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(f),type:c}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};Sr(y,c,w)}else{let S=f==="0"?$({balance:BigInt(f),useGasCoin:!1}):$({balance:BigInt(f)}),w={bridge:i.bridgeObjectAddress,messenger:i.allbridgeMessengerObjectAddress,amount:$({balance:BigInt(o),type:c}),destinationChainId:m,nonce:Ee(),recipient:Me(y,ve(u)),receiveToken:Me(y,ve(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:c}),feeSuiCoin:S};Sr(y,c,w)}return await y.toJSON({client:this.client})}async buildRawTransactionWormholeSend(r,i){let{amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:g}=r,f=d;g&&(f=Fr(f).plus(g).toFixed());let y=new Bn;if(y.setSender(A),p==="stablecoin"){let S=BigInt(o)-BigInt(f),w={bridge:i.bridgeObjectAddress,messenger:i.wormholeMessengerObjectAddress,wormholeState:i.wormholeStateObjectAddress,theClock:Ea,amount:$({balance:S,type:c}),destinationChainId:m,nonce:Ee(),recipient:Me(y,ve(u)),receiveToken:Me(y,ve(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(f),type:c}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};br(y,c,w)}else{let S=f==="0"?$({balance:BigInt(f),useGasCoin:!1}):$({balance:BigInt(f)}),w={bridge:i.bridgeObjectAddress,messenger:i.wormholeMessengerObjectAddress,wormholeState:i.wormholeStateObjectAddress,theClock:Ea,amount:$({balance:BigInt(o),type:c}),destinationChainId:m,nonce:Ee(),recipient:Me(y,ve(u)),receiveToken:Me(y,ve(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:c}),feeSuiCoin:S};br(y,c,w)}return await y.toJSON({client:this.client})}async buildRawTransactionCctpSend(r,i,o){let{amount:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:g}=i;(0,Va.setAddress)(o.cctpAddress,o.cctpAddressOrigin);let f=d;g&&(f=Fr(f).plus(g).toFixed());let y=new Bn;y.setSender(c);let S=Me(y,ve(l)),w;if(r.destinationToken.chainType==="SOLANA"){let b=await ln(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));w=Me(y,ve(b))}else w=S;if(p==="stablecoin"){let b=BigInt(A)-BigInt(f),R={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:$({balance:b,type:m}),destinationChainId:u,recipient:w,recipientWalletAddress:S,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(f),type:m}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};Cr(y,m,R)}else{let b=f==="0"?$({balance:BigInt(f),useGasCoin:!1}):$({balance:BigInt(f)}),R={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:$({balance:BigInt(A),type:m}),destinationChainId:u,recipient:w,recipientWalletAddress:S,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:m}),feeSuiCoin:b};Cr(y,m,R)}return await y.toJSON({client:this.client})}};import{Big as us}from"big.js";import cs from"bn.js";function Rn(s){return"0x"+new cs(s).toString("hex")}function ja(s){return new Promise(a=>setTimeout(()=>a(),s))}async function vn(s,a){let r=await s.trx.sign(a);if(!r.signature)throw new dt("Transaction was not signed properly");let o=(await s.trx.sendRawTransaction(r)).transaction.txID;return await ms(s,o),{txId:o}}async function ms(s,a,r=1e4){let i=Date.now();for(;;){if(Date.now()-i>r)throw new Ot("Transaction not found");let o=await s.trx.getUnconfirmedTransactionInfo(a);if(!o?.receipt){await ja(2e3);continue}if(o.receipt.result==="SUCCESS")return o;throw new Ot(`Transaction status is ${o.receipt.result}`)}}var $t=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 vn(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:A,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=r,d=[{type:"uint256",value:i},{type:"bytes32",value:c},{type:"bytes32",value:u},{type:"address",value:m},{type:"uint256",value:l}];return this.buildRawTransaction(o,"swap(uint256,bytes32,bytes32,address,uint256)",d,"0",A)}async buildRawTransactionSend(r){let i=await ke(this.chainType,r,this.api);return this.buildRawTransactionSendFromParams(r,i)}async buildRawTransactionSendFromParams(r,i){let{amount:o,contractAddress:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,toTokenAddress:d,messenger:p,fee:g,gasFeePaymentMethod:f,extraGas:y,extraGasDest:S}=i,w=g;y&&(w=us(w).plus(y).toFixed());let b=Ee().toString(),R,I,W;switch(p){case 3:case 4:f==="stablecoin"?(R=[{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:u},{type:"uint256",value:w}],I="0"):(R=[{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:u},{type:"uint256",value:0}],I=w),W="bridge(uint256,bytes32,uint256,uint256)";break;case 5:f==="stablecoin"?(R=[{type:"address",value:r.sourceToken.tokenAddress},{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:u},{type:"uint256",value:w},{type:"uint256",value:S??"0"},{type:"uint256",value:"10"}],I="0"):(R=[{type:"address",value:r.sourceToken.tokenAddress},{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:u},{type:"uint256",value:0},{type:"uint256",value:S??"0"},{type:"uint256",value:"10"}],I=w),W="bridge(address,uint256,bytes32,uint256,uint256,uint256,uint256)";break;case 1:case 2:f==="stablecoin"?(R=[{type:"bytes32",value:m},{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:u},{type:"bytes32",value:d},{type:"uint256",value:b},{type:"uint8",value:p},{type:"uint256",value:w}],I="0"):(R=[{type:"bytes32",value:m},{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:u},{type:"bytes32",value:d},{type:"uint256",value:b},{type:"uint8",value:p},{type:"uint256",value:0}],I=w),W="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)";break}return this.buildRawTransaction(A,W,R,I,c)}async buildRawTransaction(r,i,o,A,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+A},o,c);if(!m?.result?.result)throw new h("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var kn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new dn(a,r,i,o)}rawTxBuilder;async getAllowance(a,r){let i,o;r?(i=a,o=r):o=a;let A=Vt(o.token,o.messenger);return await this.tokenService.getAllowance({...o,spender:A},i)}async checkAllowance(a,r){let i,o;r?(i=a,o=r):o=a;let A=Vt(o.token,o.messenger);return this.tokenService.checkAllowance({...o,spender:A},i)}async approve(a,r){let i=Vt(r.token,r.messenger);return this.tokenService.approve(a,{...r,spender:i})}async send(a,r){return U(r.amount),E("amount",r.amount,r.sourceToken.decimals),pn(r.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).send(r)}};function Vt(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 pn(s,a,r,i,o){switch(M.getChainProperty(s).chainType){case"EVM":{if(o)return new Et(o,a,r);{let A=r.getNodeRpcUrl(s);return new Et(new ds(A),a,r)}}case"TRX":{if(o)return new $t(o,a);{let A=r.getNodeRpcUrl(s);return new $t(new ls({fullHost:A,solidityNode:A,eventServer:A}),a)}}case"SOLANA":return new hn(r.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:i.wormholeMessengerProgramId,solanaLookUpTable:i.solanaLookUpTable,cctpParams:i.cctpParams,jupiterParams:{jupiterUrl:i.jupiterUrl,jupiterApiKeyHeader:i.jupiterApiKeyHeader,jupiterMaxAccounts:i.jupiterMaxAccounts}},a);case"SRB":return new Tn(r,i,a);case"SUI":return new In(r,a)}}import{Big as xs}from"big.js";import Ms from"timed-cache";import{TronWeb as Os}from"tronweb";import{FMT_BYTES as Ds,FMT_NUMBER as Ns,Web3 as Ws}from"web3";import{Big as Ye}from"big.js";function _a(s,a,r,i,o){let A=O(s,3),c=Ye(A),m=Ye(r),u=Ye(i).plus(o),l,d;if(m.eq(0)||u.eq(0)){let g=c.div(2);l=Ye(i).plus(g),d=Ye(o).plus(g)}else l=Ye(i).plus(c.mul(i).div(u)),d=Ye(o).plus(c.mul(o).div(u));return Ye(ia(a,l.toFixed(),d.toFixed())).minus(m).toFixed()}function $a(s){let a=O(s,3);return Ye(a).round().toFixed()}import{Web3 as tt}from"web3";var ps={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"}]},Jt=ps;var oe=class{lpAmount;rewardDebt;constructor(a){this.lpAmount=a.lpAmount,this.rewardDebt=a.rewardDebt}get userLiquidity(){return v(this.lpAmount,3).toFixed()}earned(a,r){let i=ra(this.lpAmount,this.rewardDebt,a.accRewardPerShareP,a.p);return r?v(i,r).toFixed():i}};var ge=class{};var Lt=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 An(this.getUserBalanceInfoByBatch(r,i),`Cannot get UserBalanceInfo for ${i.name} on ${i.chainSymbol}`,5e3)}catch{o=await sr(()=>this.getUserBalanceInfoPerProperty(r,i),`Cannot get UserBalanceInfo for ${i.name} on ${i.chainSymbol}`,5,2e3)}return o}async getPoolInfoFromChain(r){let i;try{i=await An(this.getPoolInfoByBatch(r),`Cannot get PoolInfo for ${r.name} on ${r.chainSymbol}`,5e3)}catch{i=await sr(()=>this.getPoolInfoPerProperty(r),`Cannot get PoolInfo for ${r.name} on ${r.chainSymbol}`,5,2e3)}return i}async getUserBalanceInfoByBatch(r,i){let o=new this.web3.eth.BatchRequest,A=this.getPoolContract(i.poolAddress),c=A.methods.userRewardDebt(r).encodeABI(),m=A.methods.balanceOf(r).encodeABI();o.add({method:"eth_call",params:[{to:i.poolAddress,data:c},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:m},"latest"]});let[u,l]=await o.execute();if(u&&l&&!u.error&&!l.error)return new oe({lpAmount:tt.utils.toBigInt(l.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(),A=(await this.getPoolContract(i.poolAddress).methods.balanceOf(r).call()).toString();return new oe({lpAmount:A,rewardDebt:o})}async getPoolInfoByBatch(r){let i=new this.web3.eth.BatchRequest,o=this.getPoolContract(r.poolAddress),A=o.methods.a().encodeABI(),c=o.methods.d().encodeABI(),m=o.methods.tokenBalance().encodeABI(),u=o.methods.vUsdBalance().encodeABI(),l=o.methods.totalSupply().encodeABI(),d=o.methods.accRewardPerShareP().encodeABI();i.add({method:"eth_call",params:[{to:r.poolAddress,data:A},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:c},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:m},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:u},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:l},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:d},"latest"]});let[p,g,f,y,S,w]=await i.execute();if(p&&g&&f&&y&&S&&w&&!p.error&&!g.error&&!f.error&&!y.error&&!S.error&&!w.error){let b=tt.utils.toBigInt(f.result).toString(),R=tt.utils.toBigInt(y.result).toString(),I=se({tokenBalance:b,vUsdBalance:R});return{aValue:tt.utils.toBigInt(p.result).toString(),dValue:tt.utils.toBigInt(g.result).toString(),tokenBalance:b,vUsdBalance:R,totalLpAmount:tt.utils.toBigInt(S.result).toString(),accRewardPerShareP:tt.utils.toBigInt(w.result).toString(),p:this.P,imbalance:I}}throw new Error("Batched failed")}async getPoolInfoPerProperty(r){let i=this.getPoolContract(r.poolAddress),o=(await i.methods.a().call()).toString(),A=(await i.methods.d().call()).toString(),c=(await i.methods.tokenBalance().call()).toString(),m=(await i.methods.vUsdBalance().call()).toString(),u=(await i.methods.totalSupply().call()).toString(),l=(await i.methods.accRewardPerShareP().call()).toString(),d=se({tokenBalance:c,vUsdBalance:m});return{aValue:o,dValue:A,tokenBalance:c,vUsdBalance:m,totalLpAmount:u,accRewardPerShareP:l,p:this.P,imbalance:d}}async buildRawTransactionDeposit(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.deposit(r.amount).encodeABI()})}async buildRawTransactionWithdraw(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.withdraw(r.amount).encodeABI()})}async buildRawTransactionClaimRewards(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(r){return{from:r.accountAddress,to:r.token.poolAddress,value:"0"}}getPoolContract(r){return new this.web3.eth.Contract(Jt.abi,r)}};var Fn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o}async approve(a,r){if(r){let i=a,o=r;return this.tokenService.buildRawTransactionApprove({...o,spender:o.token.poolAddress},i)}else{let i=a;return this.tokenService.buildRawTransactionApprove({...i,spender:i.token.poolAddress})}}async deposit(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),a.amount=O(a.amount,a.token.decimals).toFixed(),bt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionDeposit(a)}async withdraw(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),a.amount=O(a.amount,3).toFixed(),bt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionWithdraw(a)}async claimRewards(a,r){return bt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionClaimRewards(a)}};import{AnchorProvider as gs,BN as Ja,Program as fs,Spl as ys,web3 as hs}from"@project-serum/anchor";import{Connection as Ts,PublicKey as nt}from"@solana/web3.js";var xn=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),A=this.getBridge(i.bridgeAddress,o),c=new nt(i.poolAddress),m=await A.account.pool.fetch(c);try{let u=await cr(new nt(r),m.mint,A.programId),{lpAmount:l,rewardDebt:d}=await A.account.userDeposit.fetch(u);return new oe({lpAmount:l.toString(),rewardDebt:d.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),A=o.vUsdBalance.toString(),c=o.tokenBalance.toString(),m=se({tokenBalance:c,vUsdBalance:A});return{dValue:o.d.toString(),aValue:o.a.toString(),totalLpAmount:o.totalLpAmount.toString(),vUsdBalance:A,tokenBalance:c,accRewardPerShareP:o.accRewardPerShareP.toString(),p:this.P,imbalance:m}}async buildRawTransactionDeposit(r){let{bridge:i,accounts:o,preInstructions:A}=await this.prepareDataForTransaction(r),c=await i.methods.deposit(new Ja(r.amount)).accounts(o).preInstructions(A).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new nt(r.accountAddress),await yt(c,r.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionWithdraw(r){let{bridge:i,accounts:o,preInstructions:A}=await this.prepareDataForTransaction(r),c=await i.methods.withdraw(new Ja(r.amount)).accounts(o).preInstructions(A).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new nt(r.accountAddress),await yt(c,r.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionClaimRewards(r){let{bridge:i,accounts:o,preInstructions:A}=await this.prepareDataForTransaction(r),c=await i.methods.claimRewards().accounts(o).preInstructions(A).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new nt(r.accountAddress),await yt(c,r.txFeeParams,this.solanaRpcUrl),c}async prepareDataForTransaction(r){let i=this.buildAnchorProvider(r.accountAddress),o=this.getBridge(r.token.bridgeAddress,i),{accounts:A,preInstructions:c}=await this._getLPTransactionData(o,r.token.poolAddress,r.accountAddress,i);return{bridge:o,accounts:A,preInstructions:c}}getBridge(r,i){return new fs(Zt,r,i)}buildAnchorProvider(r){let i=new Ts(this.solanaRpcUrl,"confirmed"),o=new nt(r);return new gs(i,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(r,i,o,A){let c=new nt(o),m=await Ke(r.programId),u=await pt(r.programId),l=new nt(i),p=(await r.account.pool.fetch(l)).mint,g=await Re(c,p),f=await gt(p,r.programId),y=await cr(c,p,r.programId),S=[hs.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await ft(g,A)}catch{let I=await ys.associatedToken(A).methods.create().accounts({mint:p,owner:c,associatedAccount:g}).instruction();S.push(I)}try{await r.account.userDeposit.fetch(y)}catch{let R=await r.methods.initDepositAccount().accounts({mint:p,user:c,userDeposit:y}).instruction();S.push(R)}return{accounts:{mint:p,user:c,config:m,pool:l,bridgeAuthority:u,userDeposit:y,userToken:g,bridgeToken:f},preInstructions:S}}};import{contract as BS}from"@stellar/stellar-sdk";import{contract as t}from"@stellar/stellar-sdk";var bs=t.Spec,Ss=t.Client;var Mn=class extends Ss{constructor(r){super(new bs(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),r);this.options=r}fromJSON={initialize:this.txFromJSON,deposit:this.txFromJSON,withdraw:this.txFromJSON,swap_to_v_usd:this.txFromJSON,swap_from_v_usd:this.txFromJSON,claim_rewards:this.txFromJSON,set_fee_share:this.txFromJSON,adjust_total_lp_amount:this.txFromJSON,set_balance_ratio_min_bp:this.txFromJSON,stop_deposit:this.txFromJSON,start_deposit:this.txFromJSON,stop_withdraw:this.txFromJSON,start_withdraw:this.txFromJSON,set_stop_authority:this.txFromJSON,set_bridge:this.txFromJSON,set_admin:this.txFromJSON,set_admin_fee_share:this.txFromJSON,claim_admin_fee:this.txFromJSON,pending_reward:this.txFromJSON,get_pool:this.txFromJSON,get_admin:this.txFromJSON,get_stop_authority:this.txFromJSON,get_bridge:this.txFromJSON,get_user_deposit:this.txFromJSON,upgrade:this.txFromJSON}};import{contract as Zd,rpc as Ps}from"@stellar/stellar-sdk";var La=Ps.Api;function St(s){let{simulation:a,options:r}=s;if(!a)throw new Error("Soroban assembled transaction does not have simulation");if(La.isSimulationSuccess(a))return a.result==null?void 0:r.parseResultXdr(a.result.retval);throw new Error(a.error)}function Pt(s){let{simulation:a}=s;if(!a)throw new Error("Soroban assembled transaction does not have simulation");return La.isSimulationError(a)}var On=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 A=await this.getContract(i.poolAddress).get_user_deposit({user:r});if(Pt(A))throw new h;let c=St(A);if(!c)throw new h;let m=c.unwrap();return new oe({lpAmount:m.lp_amount.toString(),rewardDebt:m.reward_debt.toString()})}async getPoolInfoFromChain(r){let o=await this.getContract(r.poolAddress).get_pool();if(Pt(o))throw new h;let A=St(o);if(!A)throw new h;let c=A.unwrap();return{aValue:c.a.toString(),accRewardPerShareP:c.acc_reward_per_share_p.toString(),dValue:c.d.toString(),tokenBalance:c.token_balance.toString(),p:this.P,totalLpAmount:c.total_lp_amount.toString(),vUsdBalance:c.v_usd_balance.toString(),imbalance:se({tokenBalance:c.token_balance.toString(),vUsdBalance:c.v_usd_balance.toString()})}}async buildRawTransactionDeposit(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).deposit({sender:r.accountAddress,amount:BigInt(r.amount)})).toXDR()}async buildRawTransactionWithdraw(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).withdraw({sender:r.accountAddress,amount_lp:BigInt(r.amount)})).toXDR()}async buildRawTransactionClaimRewards(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).claim_rewards({sender:r.accountAddress})).toXDR()}getContract(r,i){let o={publicKey:i,contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new Mn(o)}};import{SuiClient as ks}from"@mysten/sui/client";import{Transaction as jn}from"@mysten/sui/transactions";var Ct=Ie(ze());Q();Q();import{bcs as Xa}from"@mysten/sui/bcs";import{fromB64 as ws}from"@mysten/sui/utils";function Dn(s){return s=P(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=D(s.$typeName,...a),this.$typeArgs=a,this.value=r.value}static reified(a){return{typeName:s.$typeName,fullTypeName:D(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([B(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return _(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Xa.struct("Balance",{value:Xa.u64()})}static fromFields(a,r){return s.reified(a).new({value:x("u64",r.value)})}static fromFieldsWithTypes(a,r){if(!Dn(r.type))throw new Error("not a Balance type");return Ze(r,[a]),s.reified(a).new({value:k("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:F("u64",r.value)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(D(s.$typeName,B(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Dn(r.type))throw new Error(`object at ${r.fields.id} is not a Balance object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Dn(r.bcs.type))throw new Error("object at is not a 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=P(i[0]),A=P(B(a));if(o!==P(B(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,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 Balance object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Dn(o.data.bcs.type))throw new Error(`object at id ${i} is not a Balance object`);return s.fromSuiObjectData(r,o.data)}};var Dr=Ie(ze());Q();var Mr=Ie(ze());import{bcs as Nn}from"@mysten/sui/bcs";import{fromB64 as Cs}from"@mysten/sui/utils";function Wn(s){return s=P(s),s.startsWith(`${Mr.PKG_V1}::pool_rewards::PoolRewards<`)}var mt=class s{__StructClass=!0;static get $typeName(){return`${Mr.PKG_V1}::pool_rewards::PoolRewards`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;accRewardPerShareP;adminFeeShareBp;adminFee;rewards;lpSupply;constructor(a,r){this.$fullTypeName=D(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:D(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([B(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return _(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Nn.struct("PoolRewards",{acc_reward_per_share_p:Nn.u128(),admin_fee_share_bp:Nn.u64(),admin_fee:ne.bcs,rewards:ne.bcs,lp_supply:Nn.u64()})}static fromFields(a,r){return s.reified(a).new({accRewardPerShareP:x("u128",r.acc_reward_per_share_p),adminFeeShareBp:x("u64",r.admin_fee_share_bp),adminFee:x(ne.reified(a),r.admin_fee),rewards:x(ne.reified(a),r.rewards),lpSupply:x("u64",r.lp_supply)})}static fromFieldsWithTypes(a,r){if(!Wn(r.type))throw new Error("not a PoolRewards type");return Ze(r,[a]),s.reified(a).new({accRewardPerShareP:k("u128",r.fields.acc_reward_per_share_p),adminFeeShareBp:k("u64",r.fields.admin_fee_share_bp),adminFee:k(ne.reified(a),r.fields.admin_fee),rewards:k(ne.reified(a),r.fields.rewards),lpSupply:k("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:F("u128",r.accRewardPerShareP),adminFeeShareBp:F("u64",r.adminFeeShareBp),adminFee:F(ne.reified(a),r.adminFee),rewards:F(ne.reified(a),r.rewards),lpSupply:F("u64",r.lpSupply)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(D(s.$typeName,B(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Wn(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"||!Wn(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=P(i[0]),A=P(B(a));if(o!==P(B(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,Cs(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"||!Wn(o.data.bcs.type))throw new Error(`object at id ${i} is not a PoolRewards object`);return s.fromSuiObjectData(r,o.data)}};Q();var Or=Ie(ze());import{bcs as wt}from"@mysten/sui/bcs";import{fromB64 as Bs}from"@mysten/sui/utils";function Gn(s){return s=P(s),s.startsWith(`${Or.PKG_V1}::pool_state::PoolState<`)}var ut=class s{__StructClass=!0;static get $typeName(){return`${Or.PKG_V1}::pool_state::PoolState`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;tokenBalance;vusdBalance;d;a;balanceRatioMinBp;constructor(a,r){this.$fullTypeName=D(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:D(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([B(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return _(s.reified(a))}static get p(){return s.phantom}static get bcs(){return wt.struct("PoolState",{token_balance:wt.u64(),vusd_balance:wt.u64(),d:wt.u64(),a:wt.u64(),balance_ratio_min_bp:wt.u64()})}static fromFields(a,r){return s.reified(a).new({tokenBalance:x("u64",r.token_balance),vusdBalance:x("u64",r.vusd_balance),d:x("u64",r.d),a:x("u64",r.a),balanceRatioMinBp:x("u64",r.balance_ratio_min_bp)})}static fromFieldsWithTypes(a,r){if(!Gn(r.type))throw new Error("not a PoolState type");return Ze(r,[a]),s.reified(a).new({tokenBalance:k("u64",r.fields.token_balance),vusdBalance:k("u64",r.fields.vusd_balance),d:k("u64",r.fields.d),a:k("u64",r.fields.a),balanceRatioMinBp:k("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:F("u64",r.tokenBalance),vusdBalance:F("u64",r.vusdBalance),d:F("u64",r.d),a:F("u64",r.a),balanceRatioMinBp:F("u64",r.balanceRatioMinBp)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(D(s.$typeName,B(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Gn(r.type))throw new Error(`object at ${r.fields.id} is not a PoolState object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Gn(r.bcs.type))throw new Error("object at is not a PoolState object");let i=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=P(i[0]),A=P(B(a));if(o!==P(B(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,Bs(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching PoolState object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Gn(o.data.bcs.type))throw new Error(`object at id ${i} is not a PoolState object`);return s.fromSuiObjectData(r,o.data)}};import{bcs as Xt}from"@mysten/sui/bcs";import{fromB64 as Is}from"@mysten/sui/utils";function Un(s){return s=P(s),s.startsWith(`${Dr.PKG_V1}::pool::Pool<`)}var En=class s{__StructClass=!0;static get $typeName(){return`${Dr.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=D(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:D(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([B(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return _(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Xt.struct("Pool",{id:Pe.bcs,state:ut.bcs,rewards:mt.bcs,fee_share_bp:Xt.u64(),can_deposit:Xt.bool(),can_withdraw:Xt.bool(),decimals:Xt.u8(),balance:ne.bcs})}static fromFields(a,r){return s.reified(a).new({id:x(Pe.reified(),r.id),state:x(ut.reified(a),r.state),rewards:x(mt.reified(a),r.rewards),feeShareBp:x("u64",r.fee_share_bp),canDeposit:x("bool",r.can_deposit),canWithdraw:x("bool",r.can_withdraw),decimals:x("u8",r.decimals),balance:x(ne.reified(a),r.balance)})}static fromFieldsWithTypes(a,r){if(!Un(r.type))throw new Error("not a Pool type");return Ze(r,[a]),s.reified(a).new({id:k(Pe.reified(),r.fields.id),state:k(ut.reified(a),r.fields.state),rewards:k(mt.reified(a),r.fields.rewards),feeShareBp:k("u64",r.fields.fee_share_bp),canDeposit:k("bool",r.fields.can_deposit),canWithdraw:k("bool",r.fields.can_withdraw),decimals:k("u8",r.fields.decimals),balance:k(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:F(Pe.reified(),r.id),state:F(ut.reified(a),r.state),rewards:F(mt.reified(a),r.rewards),feeShareBp:F("u64",r.feeShareBp),canDeposit:F("bool",r.canDeposit),canWithdraw:F("bool",r.canWithdraw),decimals:F("u8",r.decimals),balance:F(ne.reified(a),r.balance)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(D(s.$typeName,B(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Un(r.type))throw new Error(`object at ${r.fields.id} is not a Pool object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Un(r.bcs.type))throw new Error("object at is not a Pool object");let i=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=P(i[0]),A=P(B(a));if(o!==P(B(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,Is(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching Pool object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Un(o.data.bcs.type))throw new Error(`object at id ${i} is not a Pool object`);return s.fromSuiObjectData(r,o.data)}};Q();var Wr=Ie(ze());import{bcs as Nr}from"@mysten/sui/bcs";import{fromB64 as Rs}from"@mysten/sui/utils";function Vn(s){return s=P(s),s.startsWith(`${Wr.PKG_V1}::user_deposit::UserDeposit<`)}var Zn=class s{__StructClass=!0;static get $typeName(){return`${Wr.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=D(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:D(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([B(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return _(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Nr.struct("UserDeposit",{id:Pe.bcs,lp_amount:Nr.u64(),reward_debt:Nr.u64()})}static fromFields(a,r){return s.reified(a).new({id:x(Pe.reified(),r.id),lpAmount:x("u64",r.lp_amount),rewardDebt:x("u64",r.reward_debt)})}static fromFieldsWithTypes(a,r){if(!Vn(r.type))throw new Error("not a UserDeposit type");return Ze(r,[a]),s.reified(a).new({id:k(Pe.reified(),r.fields.id),lpAmount:k("u64",r.fields.lp_amount),rewardDebt:k("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:F(Pe.reified(),r.id),lpAmount:F("u64",r.lpAmount),rewardDebt:F("u64",r.rewardDebt)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(D(s.$typeName,B(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Vn(r.type))throw new Error(`object at ${r.fields.id} is not a UserDeposit object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Vn(r.bcs.type))throw new Error("object at is not a UserDeposit object");let i=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=P(i[0]),A=P(B(a));if(o!==P(B(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,Rs(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching UserDeposit object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Vn(o.data.bcs.type))throw new Error(`object at id ${i} is not a UserDeposit object`);return s.fromSuiObjectData(r,o.data)}};function Ka(s,a,r){if(a.length===0||!a[0])return[];let i=a[0],o=s.reduce((m,u)=>m+BigInt(u),BigInt(0)),A=BigInt(i.balance),c=[];for(let m of a.slice(1)){if(A>o)return Ya(r,i,c,s);A+=BigInt(m.balance),c.push(m)}return A>=o?Ya(r,i,c,s):[]}function Ya(s,a,r,i){let o=i.map(A=>s.pure.u64(A));return r.length>0&&s.mergeCoins(a.coinObjectId,r.map(A=>A.coinObjectId)),s.splitCoins(a.coinObjectId,o)}var vs="0x0000000000000000000000000000000000000000000000000000000000000000";async function Ha(s,a,r){let i=await s.devInspectTransactionBlock({sender:vs,transactionBlock:a});if(i.effects.status.status!=="success")throw new Error(`inspectionResult failed. ${JSON.stringify(i,null,2)}`);let o=i.results?.pop()?.returnValues?.pop();if(!o)throw new Error(`Something with inspectionResult went wrong. ${JSON.stringify(i,null,2)}`);let[A,c]=o;return typeof r=="object"?r.fromBcs(Uint8Array.from(A)).toJSONField():_t(r).parse(Uint8Array.from(A))}var _n=class extends ge{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.client=new ks({url:r})}chainType="SUI";client;async getUserBalanceInfo(r,i){if(!i.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=i.suiAddresses;if(!o)throw new h("SUI token must contain 'suiAddresses'");(0,Ct.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin);let c=(await this.fetchDeposits(r,i.originTokenAddress)).reduce((m,u)=>{if(u.data)return m.lpAmount+=BigInt(u.data.content.fields.lp_amount),m.rewardDebt+=BigInt(u.data.content.fields.reward_debt),m;throw new h("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new oe({lpAmount:c.lpAmount.toString(),rewardDebt:c.rewardDebt.toString()})}async fetchDeposits(r,i){return await je(o=>this.client.getOwnedObjects({owner:r,filter:{StructType:Zn.phantom(_(i)).phantomType},options:{showContent:!0},cursor:o}))}async getPoolInfoFromChain(r){let i=r.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");if((0,Ct.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=48,A=new jn;xa(A,r.originTokenAddress,i.bridgeObjectAddress);let c=await Ha(this.client,A,En.reified(_(r.originTokenAddress))),m=c.state.tokenBalance,u=c.state.vusdBalance,l=se({tokenBalance:m,vUsdBalance:u});return{dValue:c.state.d,aValue:c.state.a,totalLpAmount:c.rewards.lpSupply,vUsdBalance:u,tokenBalance:m,accRewardPerShareP:c.rewards.accRewardPerShareP,p:o,imbalance:l}}async buildRawTransactionDeposit(r){let i=r.token.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");if((0,Ct.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=await je(p=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:p}));if(o.length===0||!o[0])throw new $e("No coins to deposit");let A=o[0],c=new jn;c.setSender(r.accountAddress);let{depositObj:m,isNewDeposit:u}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,c),[l]=Ka([r.amount],o,c);if(!l)throw new $e("No coins to deposit");if(!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let d=va(c,r.token.originTokenAddress,{bridge:i.bridgeObjectAddress,userDeposit:m,coin:l});return c.mergeCoins(A.coinObjectId,[d]),u&&c.transferObjects([m],r.accountAddress),await c.toJSON({client:this.client})}async getDepositObject(r,i,o){let A=await this.fetchDeposits(r,i);if(A.length===0||!A[0]){let c=_(i).phantomType;return{depositObj:Ma(o,c),isNewDeposit:!0}}else{if(A[0].data?.objectId)return{depositObj:A[0].data.objectId,isNewDeposit:!1};throw new h("Something went wrong while deposit")}}async buildRawTransactionWithdraw(r){let i=r.token.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");if((0,Ct.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=_(r.token.originTokenAddress).phantomType,A=new jn;A.setSender(r.accountAddress);let{depositObj:c,isNewDeposit:m}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,A);if(m)throw new $e("No deposit found");let u=ka(A,o,{bridge:i.bridgeObjectAddress,userDeposit:c,amountLp:BigInt(r.amount)}),l=await je(d=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:d}));if(!u[0]||!u[1])throw new h("No rewards found");return l[0]?A.mergeCoins(l[0].coinObjectId,[u[0],u[1]]):(A.mergeCoins(u[0],[u[1]]),A.transferObjects([u[0]],r.accountAddress)),await A.toJSON({client:this.client})}async buildRawTransactionClaimRewards(r){let i=r.token.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");if((0,Ct.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=_(r.token.originTokenAddress).phantomType,A=new jn;A.setSender(r.accountAddress);let{depositObj:c,isNewDeposit:m}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,A);if(m)throw new $e("No deposit found");let u=Fa(A,o,{bridge:i.bridgeObjectAddress,userDeposit:c}),l=await je(d=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:d}));return l[0]?A.mergeCoins(l[0].coinObjectId,[u]):A.transferObjects([u],r.accountAddress),await A.toJSON({client:this.client})}};import{Web3 as $n}from"web3";import{encodeFunctionCall as Fs}from"web3-eth-abi";var Yt=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 A=Ut(o.poolAddress),c=Ut(i),m=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:A,data:this.getFunctionAbi("userRewardDebt",c)},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:A,data:this.getFunctionAbi("balanceOf",c)},"latest"]}],l=await(await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(m)})).json();if(Array.isArray(l)&&l.length===2){let d=p=>{let g=l.find(f=>f.id===p);if(!g||!g.result)throw new Error(`Missing or invalid result for id ${p}`);return $n.utils.toBigInt(g.result).toString()};return new oe({lpAmount:$n.utils.toBigInt(d(2)).toString(),rewardDebt:$n.utils.toBigInt(d(1)).toString()})}throw new Error("Batched HTTP call failed")}async getUserBalanceInfoPerProperty(r,i){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(r);let o=this.getContract(i.poolAddress),A=(await o.methods.userRewardDebt(r).call()).toString(),c=(await o.methods.balanceOf(r).call()).toString();return new oe({lpAmount:c,rewardDebt:A})}async getPoolInfoFromChain(r){let i;if(this.tronJsonRpc)try{i=await this.getPoolInfoByBatch(this.tronJsonRpc,r)}catch{i=await this.getPoolInfoPerProperty(r)}else i=await this.getPoolInfoPerProperty(r);return i}async getPoolInfoByBatch(r,i){let o=Ut(i.poolAddress),A=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("a")},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("d")},"latest"]},{jsonrpc:"2.0",id:3,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("tokenBalance")},"latest"]},{jsonrpc:"2.0",id:4,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("vUsdBalance")},"latest"]},{jsonrpc:"2.0",id:5,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("totalSupply")},"latest"]},{jsonrpc:"2.0",id:6,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("accRewardPerShareP")},"latest"]}],m=await(await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(A)})).json();if(Array.isArray(m)&&m.length===6){let u=g=>{let f=m.find(y=>y.id===g);if(!f||!f.result)throw new Error(`Missing or invalid result for id ${g}`);return $n.utils.toBigInt(f.result).toString()},l=u(3),d=u(4),p=se({tokenBalance:l,vUsdBalance:d});return{aValue:u(1),dValue:u(2),tokenBalance:l,vUsdBalance:d,totalLpAmount:u(5),accRewardPerShareP:u(6),p:this.P,imbalance:p}}throw new Error("Batched pool info call failed")}async getPoolInfoPerProperty(r){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(r.poolAddress);let i=this.getContract(r.poolAddress),[o,A,c,m,u,l]=await Promise.all([i.methods.a().call(),i.methods.d().call(),i.methods.tokenBalance().call(),i.methods.vUsdBalance().call(),i.methods.totalSupply().call(),i.methods.accRewardPerShareP().call()]),d=c.toString(),p=m.toString(),g=se({tokenBalance:d,vUsdBalance:p});return{aValue:o.toString(),dValue:A.toString(),tokenBalance:d,vUsdBalance:p,totalLpAmount:u.toString(),accRewardPerShareP:l.toString(),p:this.P,imbalance:g}}buildRawTransactionDeposit(r){let{amount:i,accountAddress:o}=r,A=[{type:"uint256",value:i}];return this.buildRawTransaction(r.token.poolAddress,"deposit(uint256)",A,"0",o)}buildRawTransactionWithdraw(r){let{amount:i,accountAddress:o}=r,A=[{type:"uint256",value:i}];return this.buildRawTransaction(r.token.poolAddress,"withdraw(uint256)",A,"0",o)}buildRawTransactionClaimRewards(r){let{accountAddress:i}=r,o=[];return this.buildRawTransaction(r.token.poolAddress,"claimRewards()",o,"0",i)}async buildRawTransaction(r,i,o,A,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+A},o,c);if(!m?.result?.result)throw new h("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}getContract(r){return this.tronWeb.contract(Jt.abi,r)}getFunctionAbi(r,...i){let o=Jt.abi.find(A=>A.type==="function"&&"name"in A&&A.name===r);if(!o)throw new Error(`${r} method not found in Pool ABI`);return Fs(o,i)}};var Jn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new Fn(a,r,this.params,o);let A=i.cachePoolInfoChainSec>0?i.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new Ms({defaultTtl:A})}rawTxBuilder;cache;async getAllowance(a,r){if(r){let i=a,o=r;return await this.tokenService.getAllowance({...o,spender:o.token.poolAddress},i)}else{let i=a;return await this.tokenService.getAllowance({...i,spender:i.token.poolAddress})}}async checkAllowance(a,r){if(r){let i=a,o=r;return this.tokenService.checkAllowance({...o,spender:o.token.poolAddress},i)}else{let i=a;return this.tokenService.checkAllowance({...i,spender:i.token.poolAddress})}}async approve(a,r){return this.tokenService.approve(a,{...r,spender:r.token.poolAddress})}async getAmountToBeDeposited(a,r,i){U(a),E("amount",a,r.decimals);let o=await this.getPoolInfoFromChain(r,i),{vUsdBalance:A,tokenBalance:c,aValue:m,dValue:u}=o,l=_a(a,m,u,c,A);return v(l,3).toFixed()}async getAmountToBeWithdrawn(a,r,i,o){U(a),E("amount",a,i.decimals);let A=await this.getPoolInfoFromChain(i,o),c=$a(a),m=le(c,i.decimals),l=(await this.getUserBalanceInfo(r,i,o)).earned(A)||"0",d=xs(m).plus(l).toFixed();return v(d,i.decimals).toFixed()}async getUserBalanceInfo(a,r,i){return bt(r.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).getUserBalanceInfo(a,r)}async getPoolInfoFromChain(a,r){let i={chainSymbol:a.chainSymbol,poolAddress:a.poolAddress},o=this.cache.get(i);if(o)return o;{let A=await bt(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).getPoolInfoFromChain(a);return this.cache.put(i,A),this.api.cachePut({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress},A),A}}};function bt(s,a,r,i,o){switch(M.getChainProperty(s).chainType){case"EVM":{if(o)return new Lt(o,a);{let A=r.getNodeRpcUrl(s),c=new Ws(A);return c.defaultReturnFormat={number:Ns.STR,bytes:Ds.HEX},new Lt(c,a)}}case"TRX":{let A=r.getNodeRpcUrl(s),c=i.tronJsonRpc;if(o)return new Yt(o,a,c);{let m=new Os({fullHost:A});return new Yt(m,a,c)}}case"SOLANA":{let A=r.getNodeRpcUrl(s);return new xn(A,a)}case"SRB":return new On(r,i,a);case"SUI":return new _n(r.getNodeRpcUrl(s),a)}}import{Big as L}from"big.js";function qa(s,a,r){let i=Gs(s,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),o=Us(i.amountIncludingCommissionInSystemPrecision,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo);return{swapToVUsdCalcResult:i,swapFromVUsdCalcResult:o}}function ei(s,a,r){let i=Es(s,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo),o=Vs(i.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:i,swapFromVUsdCalcResult:o}}function Gs(s,{feeShare:a,decimals:r},i){let o=L(s),A=o.times(a),c=o.minus(A);return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInSystemPrecision:Qa(it(c,r),i),amountExcludingCommissionInSystemPrecision:Qa(it(o,r),i)}}function Qa(s,a){if(s.eq(0))return"0";let r=L(a.tokenBalance).plus(s),i=Ue(r.toFixed(),a.aValue,a.dValue);return L(a.vUsdBalance).minus(i).round().toFixed()}function Us(s,{feeShare:a,decimals:r},i){if(L(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let A=L(s).plus(i.vUsdBalance),c=Ue(A,i.aValue,i.dValue),m=le(L(i.tokenBalance).minus(c),r),u=L(m).times(a),l=L(m).minus(u).round();return{bridgeFeeInTokenPrecision:u.round().toFixed(),amountIncludingCommissionInTokenPrecision:l.toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}function Es(s,{feeShare:a,decimals:r},i){let o=L(a).div(L(1).minus(a)),A=L(s).times(o),c=L(s).plus(A);return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInSystemPrecision:za(it(c,r),i),amountExcludingCommissionInSystemPrecision:za(it(s,r),i)}}function za(s,a){let r=L(a.tokenBalance).minus(s),i=Ue(r.toFixed(),a.aValue,a.dValue);return L(i).minus(a.vUsdBalance).round().toFixed()}function Vs(s,{feeShare:a,decimals:r},i){if(L(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let o=L(i.vUsdBalance).minus(s),A=Ue(o.toFixed(),i.aValue,i.dValue),c=L(A).minus(i.tokenBalance),m=le(c.toFixed(),r),u=L(a).div(L(1).minus(a)),l=L(m).times(u),d=L(m).plus(l);return{bridgeFeeInTokenPrecision:l.round().toFixed(),amountIncludingCommissionInTokenPrecision:d.round().toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}import{Big as rt}from"big.js";function ti(s,a,r,i,o){let A=Ge(s,a,r),c=le(A,a.decimals),m=Gt(A,i,o),u=rt(s).times(a.feeShare),l=rt(m).div(rt(1).minus(i.feeShare)).minus(m);return{sourceLPSwap:{fee:v(u,a.decimals).neg().round(a.decimals,rt.roundUp).toFixed(),swap:v(rt(s).minus(c).minus(u),a.decimals).neg().round(a.decimals,rt.roundUp).toFixed()},destLPSwap:{fee:v(l,i.decimals).neg().round(i.decimals,rt.roundUp).toFixed(),swap:v(le(A,i.decimals).minus(m).minus(l),i.decimals).neg().round(i.decimals,rt.roundUp).toFixed()}}}import Ls from"axios";var ni="3.23.0";function ri(s){return Object.entries(s).reduce((a,r)=>{let i=r[0],o=r[1],A=Js(i,o);return A&&(a[i]=A),a},{})}function ai(s){let a={};for(let[r,i]of Object.entries(s)){let o=r;for(let A of i.tokens){let c=Bt({chainSymbol:o,poolAddress:A.poolAddress}),m=se(A.poolInfo);a[c]={...A.poolInfo,imbalance:m}}}return a}function Zs(s,a){let{name:r,...i}=s,{poolInfo:o,...A}=a;return{...A,...i,chainName:r}}function js(s){switch(s){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4;case"oft":return 5}}function _s(s){return Object.entries(s).reduce((a,[r,i])=>(a[r]=$s(i),a),{})}function $s(s){return Object.entries(s).reduce((a,[r,i])=>{let o=js(r);return o&&(a[o]=i),a},{})}function Js(s,a){let r=M.getChainsProperties()[s];if(!r)return null;let i={...r,allbridgeChainId:a.chainId,bridgeAddress:a.bridgeAddress,oftBridgeAddress:a.oftBridgeAddress,transferTime:_s(a.transferTime),txCostAmount:a.txCostAmount,confirmations:a.confirmations,suiAddresses:a.suiAddresses};return{...i,tokens:a.tokens.map(o=>Zs(i,o))}}function Bt(s){return s.chainSymbol+"_"+s.poolAddress}function ii(s){let a=[];for(let[r,i]of Object.entries(s)){let o=r;for(let A of i.tokens)a.push({chainSymbol:o,poolAddress:A.poolAddress})}return a}function si(s){let a={};for(let[r,i]of Object.entries(s)){let o=r;for(let[A,c]of Object.entries(i))c.imbalance=se(c),a[Bt({chainSymbol:o,poolAddress:A})]=c}return a}var It=class{api;constructor(a){this.api=Ls.create({baseURL:a.coreApiUrl,headers:{Accept:"application/json",...a.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+ni},params:a.coreApiQueryParams})}async getTokenInfo(){let{data:a}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:ri(a),poolInfoMap:ai(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 nn("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 si(i)}};import Ln from"timed-cache";var Gr=20*1e3,Xs=55*1e3,Rt=class{constructor(a){this.apiClient=a;this.tokenInfoCache=new Ln({defaultTtl:Xs}),this.receivedTransactionCache=new Ln({defaultTtl:Gr}),this.pendingInfoCache=new Ln({defaultTtl:Gr}),this.gasBalanceCache=new Ln({defaultTtl:Gr})}tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let a="TOKEN_INFO_CACHE_KEY",r=this.tokenInfoCache.get(a);if(r)return r;let i=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(a,i),i}async getGasBalance(a,r){let i=`GAS_BALANCE_${a}_${r}`,o=this.gasBalanceCache.get(i);if(o)return o;let A=this.apiClient.getGasBalance(a,r);return this.gasBalanceCache.put(i,A),A}async getPendingInfo(){let a="PENDING_INFO_CACHE_KEY",r=this.pendingInfoCache.get(a);if(r)return r;let i=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(a,i),i}async getReceiveTransactionCost(a){let r=`RECEIVE_TX_COST_${a.sourceChainId}_${a.destinationChainId}_${a.messenger}${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 vt=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 kt=class{constructor(a,r){this.client=a;this.isStaging=r.coreApiQueryParams?.staging==="true"}isStaging;async getChainDetailsMap(a){let r=await this.client.getChainDetailsMap(),i={};for(let o in r){let A=r[o];A&&(i[o]={...A,tokens:oi(A.tokens,a,this.isStaging)})}return i}async tokens(a){return oi(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 oi(s,a,r){return s.filter(i=>r?!0:i.flags[a]).map(Ys)}function Ys(s){let{flags:a,...r}=s;return r}import Ks from"timed-cache";var Hs=55*1e3,Ft=class{constructor(a){this.client=a;this.poolInfoCache=new Ur}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[Bt(a)];if(o)return o;throw new h("Cannot find pool info for "+a.poolAddress+" on chain "+a.chainSymbol)}}async refreshPoolInfo(a){let r;if(a)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),r=await this.client.getPoolInfoMap(a);else{let i=await this.client.getChainDetailsMapAndPoolInfoMap();r=await this.client.getPoolInfoMap(ii(i.chainDetailsMap))}this.poolInfoCache.putAll(r)}cachePut(a,r){this.poolInfoCache.put(Bt(a),r)}},Ur=class{cache;constructor(){this.cache=new Ks({defaultTtl:Hs})}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=Bt(a);return this.cache.get(r)}};import{Big as so}from"big.js";import{TronWeb as oo}from"tronweb";import{Web3 as Ao}from"web3";var Qs={abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}]},Xn=Qs;import{Big as Ai}from"big.js";var fe=class{async checkAllowance(a){let r=await this.getAllowance(a);return Ai(r).gte(Ai(a.amount))}};var zs="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",qs="0xdac17f958d2ee523a2206206994597c13d831ec7",eo=1e5,Kt=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,A=r.spender;return this.getAllowanceByTokenAddress(i,o,A)}getAllowanceByTokenAddress(r,i,o){return this.getERC20Contract(r).methods.allowance(i,o).call()}async getTokenBalance(r){return await this.getERC20Contract(r.token.tokenAddress).methods.balanceOf(r.account).call()}async getNativeTokenBalance(r){return(await this.web3.eth.getBalance(r.account)).toString()}async approve(r){if(this.isUsdt(r.tokenAddress)&&await this.getAllowanceByTokenAddress(r.tokenAddress,r.owner,r.spender)!=="0"){let A=await this.buildRawTransactionApprove({...r,amount:"0"});await this.sendRawTransaction(A,r.chainSymbol)}let i=await this.buildRawTransactionApprove(r);return await this.sendRawTransaction(i,r.chainSymbol)}isUsdt(r){return r.toLowerCase()===qs}buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:A,amount:c}=r,u=this.getERC20Contract(i).methods.approve(o,c==null?zs:Rn(c));return Promise.resolve({from:A,to:i,value:"0",data:u.encodeABI()})}async sendRawTransaction(r,i){let o=r,A={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};i==="POL"?o.gas=eo:o.gas=await this.web3.eth.estimateGas(r);let{transactionHash:c}=await this.web3.eth.sendTransaction({...o,...A});return{txId:c.toString()}}getERC20Contract(r){return new this.web3.eth.Contract(Xn.abi,r)}};import{AnchorProvider as to}from"@project-serum/anchor";import{Connection as no,PublicKey as Yn}from"@solana/web3.js";var Kn=class extends fe{constructor(r,i){super();this.solanaRpcUrl=r;this.api=i}chainType="SOLANA";approve(r){throw new Y}buildRawTransactionApprove(r){throw new Y}buildAnchorProvider(r){let i=new no(this.solanaRpcUrl,"confirmed"),o=new Yn(r);return new to(i,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(r){throw new Y}async getTokenBalance(r){let{account:i,token:o}=r;try{let A=await Re(new Yn(i),new Yn(o.tokenAddress));return(await ft(A,this.buildAnchorProvider(i))).amount.toString()}catch(A){if(A instanceof Error)return A.message.startsWith("Account does not exist"),"0";throw A}}async getNativeTokenBalance(r){return(await this.buildAnchorProvider(r.account).connection.getBalance(new Yn(r.account))).toString()}};import{Horizon as _y,NotFoundError as ro}from"@stellar/stellar-sdk";var Hn=class extends fe{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";getAllowance(){throw new Y}async getTokenBalance(r){if(!r.token.originTokenAddress)throw new h("OriginTokenAddress missing");let[i,o]=r.token.originTokenAddress.split(":"),A=new _y.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),c;try{c=await A.loadAccount(r.account)}catch(l){if(l instanceof ro)return"0";throw l}let u=c.balances.find(l=>(l.asset_type==="credit_alphanum4"||l.asset_type==="credit_alphanum12")&&l.asset_code==i&&l.asset_issuer==o);return u?.balance?O(u.balance,M.getChainDecimalsByType(M.getChainProperty(r.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(r){let c=(await new _y.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(r.account)).balances.find(m=>m.asset_type==="native");return c?.balance?O(c.balance,M.getChainDecimalsByType(M.getChainProperty(r.chainSymbol).chainType)).toFixed():"0"}approve(){throw new Y}buildRawTransactionApprove(){throw new Y}};import{SuiClient as ao}from"@mysten/sui/client";var Qn=class extends fe{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.suiClient=new ao({url:this.suiRpcUrl})}chainType="SUI";suiClient;approve(r){throw new Y}buildRawTransactionApprove(r){throw new Y}getAllowance(r){throw new Y}async getTokenBalance(r){if(!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");return(await this.suiClient.getBalance({owner:r.account,coinType:r.token.originTokenAddress})).totalBalance}async getNativeTokenBalance(r){let i=await je(o=>this.suiClient.getCoins({owner:r.account,cursor:o}));return i.length===0?"0":i.reduce((o,A)=>o+BigInt(A.balance),BigInt(0)).toString()}};var io="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Ht=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 vn(this.tronWeb,i)}async buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:A,amount:c}=r,m=c==null?io:Rn(c),u=[{type:"address",value:o},{type:"uint256",value:m}];return this.buildRawTransaction(i,"approve(address,uint256)",u,"0",A)}getContract(r){return this.tronWeb.contract(Xn.abi,r)}async buildRawTransaction(r,i,o,A,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+A},o,c);if(!m?.result?.result)throw new h("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var xt=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 v(i,a.token.decimals).toFixed()}async checkAllowance(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),this.getChainTokenService(a.token.chainSymbol,a.owner,r).checkAllowance(this.prepareCheckAllowanceParams(a))}async approve(a,r){return r.amount&&(U(r.amount),E("amount",r.amount,r.token.decimals)),this.getChainTokenService(r.token.chainSymbol,r.owner,a).approve(this.prepareApproveParams(r))}async buildRawTransactionApprove(a,r){return a.amount&&(U(a.amount),E("amount",a.amount,a.token.decimals)),this.getChainTokenService(a.token.chainSymbol,a.owner,r).buildRawTransactionApprove(this.prepareApproveParams(a))}async getTokenBalance(a,r){let i=await this.getChainTokenService(a.token.chainSymbol,a.account,r).getTokenBalance(a);return a.token.decimals?v(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:v(i,M.getChainDecimalsByType(M.getChainProperty(a.chainSymbol).chainType)).toFixed()}}getChainTokenService(a,r,i){switch(M.getChainProperty(a).chainType){case"EVM":{if(i)return new Kt(i,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new Kt(new Ao(o),this.api)}}case"TRX":{if(i)return new Ht(i,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a),A=new oo({fullHost:o});return A.setAddress(r),new Ht(A,this.api)}}case"SOLANA":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new Kn(o,this.api)}case"SRB":return new Hn(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new Qn(this.nodeRpcUrlsConfig.getNodeRpcUrl(a),this.api)}}prepareCheckAllowanceParams(a){return{...a,amount:O(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:so(a.amount).toFixed()}}};var zn=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r;let i=new It(r),o=new Rt(i),A=new vt(o),c=new Ft(A);this.api=new kt(c,r),this.tokenService=new xt(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 co,PublicKey as mo,TransactionMessage as uo}from"@solana/web3.js";var qn=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}async addMemoToTx(a,r){if(r.length>28)throw new h("InvalidArgumentException memo cannot be more than 28 characters");let i=new co(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),o=await ot(a,i),A=uo.decompile(a.message,{addressLookupTableAccounts:o}),c=A.instructions[A.instructions.length-1];if(!c?.keys)throw new h("Last instruction or its keys are invalid.");c.keys.push({pubkey:new mo(Buffer.from(r)),isSigner:!1,isWritable:!1}),a.message=A.compileToV0Message(o)}};import{Asset as go,BASE_FEE as fo,contract as IS,Horizon as ci,Operation as yo,Operation as ho,rpc as zt,TimeoutInfinite as To,TransactionBuilder as Er,TransactionBuilder as mi}from"@stellar/stellar-sdk";import{contract as e}from"@stellar/stellar-sdk";var lo=e.Spec,po=e.Client;var Qt=class extends po{constructor(r){super(new lo(["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 bo=100,So=180,er=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}async buildChangeTrustLineXdrTx(a){let i=await new ci.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.sender),A=await this.getContract(Qt,a.tokenAddress).name();if(Pt(A))throw new h;let c=St(A);if(!c)throw new h;let[m,u]=c.split(":");if(m===void 0||u===void 0)throw new h("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let l=new go(m,u),d=ho.changeTrust({asset:l,limit:a.limit});return new mi(i,{fee:bo.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(d).setTimeout(So).build().toXDR()}async getBalanceLine(a,r){let o=await this.getContract(Qt,r).name();if(Pt(o))throw new h;let A=St(o);if(!A)throw new h;let[c,m]=A.split(":"),u=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new ci.Server(u).loadAccount(a)).balances.find(g=>(g.asset_type==="credit_alphanum4"||g.asset_type==="credit_alphanum12")&&g.asset_code==c&&g.asset_issuer==m)}async submitTransactionStellar(a){let r=new ci.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),i=mi.fromXDR(a,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await r.submitTransaction(i)}async simulateAndCheckRestoreTxRequiredSoroban(a,r){let i=new zt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await i.getAccount(r),A=Er.fromXDR(a,this.params.sorobanNetworkPassphrase),c=await i.simulateTransaction(A);if(zt.Api.isSimulationRestore(c))return new Er(o,{fee:(+fo+ +c.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(c.restorePreamble.transactionData.build()).addOperation(yo.restoreFootprint({})).setTimeout(To).build().toXDR()}async sendTransactionSoroban(a){let r=new zt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),i=Er.fromXDR(a,this.params.sorobanNetworkPassphrase);return r.sendTransaction(i)}async confirmTx(a,r=15){let i=new zt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await jr(()=>i.getTransaction(a),c=>c.status===zt.Api.GetTransactionStatus.NOT_FOUND,r);if(o.length===0)throw new h("No transaction responses found.");let A=o[o.length-1];if(!A)throw new h("Unexpected error: last response is undefined.");return A}getContract(a,r){let i={contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(i)}};import{Transaction as Po}from"@mysten/sui/transactions";var tr=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}keyMap={SplitCoins:"amounts",MoveCall:"arguments",MergeCoins:"sources",TransferObjects:"objects",MakeMoveVec:"elements",Upgrade:"ticket"};offset(a,r,i){return a.Input!==void 0?(a.Input=a.Input+r,a):a.NestedResult!==void 0?(a.NestedResult=[a.NestedResult[0]+i,a.NestedResult[1]],a):(a.Result!==void 0&&(a.Result=a.Result+i),a)}async merge(a,r){let i=JSON.parse(a),o=i.inputs.length,A=i.commands.length,c=JSON.parse(r);i.inputs=i.inputs.concat(c.inputs);for(let u of c.commands){let l=Object.keys(u)[0],d=this.keyMap[l];if(!d)continue;let p=u[l][d];Array.isArray(p)&&(u[l][d]=p.map(g=>this.offset(g,o,A)),i.commands.push(u))}return Po.from(JSON.stringify(i)).toJSON()}};var nr=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.srb=new er(a,r),this.sol=new qn(a,r),this.sui=new tr(a,r),this.evm=new zn(a,r)}srb;sol;sui;evm};var st=(r=>(r.WITH_NATIVE_CURRENCY="native",r.WITH_STABLECOIN="stablecoin",r))(st||{}),mn=(r=>(r.INT="int",r.FLOAT="float",r))(mn||{});import{Big as H}from"big.js";var qt=class{constructor(a){this.nodeRpcUrls=a}getNodeRpcUrl(a){let r=this.nodeRpcUrls[a];if(r!==void 0)return r;throw new sn(a)}},rr=class{api;tokenService;params;bridge;pool;constructor(a,r=tn){M.addChainsProperties(r.additionalChainsProperties);let i=new It(r),o=new Rt(i),A=new vt(o),c=new Ft(A);this.api=new kt(c,r),this.tokenService=new xt(this.api,a,r),this.bridge=new kn(this.api,a,r,this.tokenService),this.pool=new Jn(this.api,a,r,this.tokenService),this.params=r}async chainDetailsMap(a){return this.api.getChainDetailsMap(a)}async tokens(a){return this.api.tokens(a)}async tokensByChain(a,r){let o=(await this.api.getChainDetailsMap(r))[a];return o?o.tokens:[]}async getTransferStatus(a,r){return this.api.getTransferStatus(a,r)}async getGasBalance(a,r){return this.api.getGasBalance(a,r)}async checkAddress(){return new Promise(a=>{a({status:"OK",gasBalance:null})})}async getPendingStatusInfo(a,r,i,o){U(a);let A;r=="float"?(E("amount",a,i.decimals),A=O(a,i.decimals).toFixed()):A=a;let c=Ge(A,i,await K(this.api,i)),m=await K(this.api,o),u=this.getAmountFromVUsdFormatted(c,o,m),l,d=await this.api.getPendingInfo();for(let p in d[o.chainSymbol]){let g=d[o.chainSymbol];if(!g)throw new h("Cannot find pending info for "+o.chainSymbol);l=g[p]}if(l){let p=ea(l.totalSentAmount,m),g=this.getAmountFromVUsdFormatted(c,o,p),f;return H(g.int).gt(u.int)?f={min:u,max:g}:f={min:g,max:u},{pendingTxs:l.pendingTxs,pendingAmount:{int:be(l.totalSentAmount,3,o.decimals).toFixed(0),float:v(l.totalSentAmount,3).toFixed()},estimatedAmount:f}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:u,max:u}}}async getTokenBalance(a,r){return this.tokenService.getTokenBalance(a,r)}async getNativeTokenBalance(a,r){return this.tokenService.getNativeTokenBalance(a,r)}async calculateFeePercentOnSourceChain(a,r){U(a),E("amountFloat",a,r.decimals);let i=O(a,r.decimals);if(i.eq(0))return 0;let o=Ge(i,r,await K(this.api,r)),A=le(o,r.decimals);return ur(i,A)}async calculateFeePercentOnDestinationChain(a,r,i){U(a),E("amountFloat",a,r.decimals);let o=O(a,r.decimals);if(o.eq(0))return 0;let A=Ge(o,r,await K(this.api,r)),c=Gt(A,i,await K(this.api,i)),m=le(A,i.decimals);return ur(m,c)}async getAmountToBeReceivedAndGasFeeOptions(a,r,i,o){return U(a),E("amountToSendFloat",a,r.decimals),{amountToSendFloat:H(a).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(a,r,i,o),gasFeeOptions:await this.getGasFeeOptions(r,i,o)}}async getAmountToSendAndGasFeeOptions(a,r,i,o){return U(a),E("amountToBeReceivedFloat",a,i.decimals),{amountToSendFloat:await this.getAmountToSend(a,r,i,o),amountToBeReceivedFloat:H(a).toFixed(),gasFeeOptions:await this.getGasFeeOptions(r,i,o)}}async getAmountToBeReceived(a,r,i,o){return this.getAmountToBeReceivedCompute(a,r,i,o,async()=>await K(this.api,r),async()=>await K(this.api,i))}async getAmountToBeReceivedFromChain(a,r,i,o,A,c){return this.getAmountToBeReceivedCompute(a,r,i,o,async()=>await this.pool.getPoolInfoFromChain(r,A),async()=>await this.pool.getPoolInfoFromChain(i,c))}async getAmountToBeReceivedCompute(a,r,i,o=1,A,c){switch(o){case 1:case 2:return this.getAmountToBeReceivedComputeWithPools(a,r,i,await A(),await c());case 3:case 4:return this.getAmountToBeReceivedComputeCctp(a,r,i,o);case 5:return this.getAmountToBeReceivedComputeOft(a,r,i)}}getAmountToBeReceivedComputeWithPools(a,r,i,o,A){U(a),E("amountToSendFloat",a,r.decimals);let c=O(a,r.decimals),m=Ge(c,r,o);return this.getAmountFromVUsdFormatted(m,i,A).float}getAmountToBeReceivedComputeCctp(a,r,i,o){U(a),E("amountToSendFloat",a,r.decimals);let A=O(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 c=A.mul(H(1).minus(r.cctpFeeShare)).round(0,H.roundUp),m=be(c,r.decimals,i.decimals).round(0);return v(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 c=A.mul(H(1).minus(r.cctpV2FeeShare)).round(0,H.roundUp),m=be(c,r.decimals,i.decimals).round(0);return v(m,i.decimals).toFixed()}}}async getAmountToBeReceivedComputeOft(a,r,i){U(a),E("amountToSendFloat",a,r.decimals);let o=O(a,r.decimals);if(!r.oftBridgeAddress||!i.oftBridgeAddress||r.oftId!==i.oftId)throw new ae("Such route does not support OFT protocol");let{adminFeeShareWithExtras:A}=await this.api.getReceiveTransactionCost({sourceChainId:r.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:5,sourceToken:r.tokenAddress});if(!A)throw new ae("Such route does not support OFT protocol");let c=o.mul(H(1).minus(A)).round(0,H.roundUp),m=be(c,r.decimals,i.decimals).round(0);return v(m,i.decimals).toFixed()}async getAmountToSend(a,r,i,o){return this.getAmountToSendCompute(a,r,i,o,()=>K(this.api,r),()=>K(this.api,i))}async getAmountToSendFromChain(a,r,i,o,A,c){return this.getAmountToSendCompute(a,r,i,o,()=>this.pool.getPoolInfoFromChain(r,A),()=>this.pool.getPoolInfoFromChain(i,c))}async getAmountToSendCompute(a,r,i,o=1,A,c){switch(o){case 1:case 2:return this.getAmountToSendComputeWithPools(a,r,i,await A(),await c());case 3:case 4:return this.getAmountToSendComputeCctp(a,r,i,o);case 5:return this.getAmountToSendComputeOft(a,r,i)}}getAmountToSendComputeWithPools(a,r,i,o,A){U(a),E("amountToBeReceivedFloat",a,i.decimals);let c=O(a,i.decimals),m=na(c,i,A),u=ta(m,r,o);if(H(u).lte(0))throw new Je;return v(u,r.decimals).toFixed()}getAmountToSendComputeCctp(a,r,i,o){U(a),E("amountToBeReceivedFloat",a,i.decimals);let A=O(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 c=A.div(H(1).minus(r.cctpFeeShare)).round(0,H.roundDown),m=be(c,i.decimals,r.decimals).round(0);return v(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 c=A.div(H(1).minus(r.cctpV2FeeShare)).round(0,H.roundDown),m=be(c,i.decimals,r.decimals).round(0);return v(m,r.decimals).toFixed()}}}async getAmountToSendComputeOft(a,r,i){U(a),E("amountToBeReceivedFloat",a,i.decimals);let o=O(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:A}=await this.api.getReceiveTransactionCost({sourceChainId:r.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:5,sourceToken:r.tokenAddress});if(!A)throw new ae("Such route does not support OFT protocol");let c=o.div(H(1).minus(A)).round(0,H.roundDown),m=be(c,i.decimals,r.decimals).round(0);return v(m,r.decimals).toFixed()}async getGasFeeOptions(a,r,i){return lr(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 aa(a)}async getExtraGasMaxLimits(a,r,i){return await dr(a,r,i,this.api)}async getVUsdFromAmount(a,r,i){U(a);let o;r=="float"?(E("amount",a,i.decimals),o=O(a,i.decimals).toFixed()):o=a;let A=Ge(o,i,await K(this.api,i));return{int:A,float:v(A,3).toFixed()}}async getAmountFromVUsd(a,r){return this.getAmountFromVUsdFormatted(a,r,await K(this.api,r))}getAmountFromVUsdFormatted(a,r,i){U(a);let o=Gt(a,r,i);if(H(o).lt(0))throw new Je;return{int:o,float:v(o,r.decimals).toFixed()}}async swapAndBridgeFeeCalculation(a,r,i){return qa(a,{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await K(this.api,r)},{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await K(this.api,i)})}async swapAndBridgeFeeCalculationReverse(a,r,i){let o=ei(a,{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await K(this.api,r)},{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await K(this.api,i)}),A=o.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(H(A).lt(0))throw new Je;return o}async getSendAmountDetails(a,r,i,o){U(a);let A;return r=="float"?(E("amount",a,i.decimals),A=O(a,i.decimals).toFixed()):A=a,ti(A,i,await K(this.api,i),o,await K(this.api,o))}};function wo(s){return"solanaRpcUrl"in s}var ui=class{params;bridge;pool;utils;service;constructor(a,r=tn){let i;wo(a)?i=new qt({SOL:a.solanaRpcUrl,TRX:a.tronRpcUrl}):i=new qt(a),this.service=new rr(i,r),this.bridge=this.service.bridge,this.pool=this.service.pool,this.utils=new nr(i,r),this.params=r}async chainDetailsMap(a="swap"){return this.service.chainDetailsMap(a)}async tokens(a="swap"){return this.service.tokens(a)}async tokensByChain(a,r="swap"){return this.service.tokensByChain(a,r)}async getTransferStatus(a,r){return this.service.getTransferStatus(a,r)}async getGasBalance(a,r){return this.service.getGasBalance(a,r)}async checkAddress(a,r,i){return await this.service.checkAddress()}async getPendingStatusInfo(a,r,i,o){return this.service.getPendingStatusInfo(a,r,i,o)}async getTokenBalance(a,r){return this.service.getTokenBalance(a,r)}async getNativeTokenBalance(a,r){return this.service.getNativeTokenBalance(a,r)}async calculateFeePercentOnSourceChain(a,r){return this.service.calculateFeePercentOnSourceChain(a,r)}async calculateFeePercentOnDestinationChain(a,r,i){return this.service.calculateFeePercentOnDestinationChain(a,r,i)}async getAmountToBeReceivedAndGasFeeOptions(a,r,i,o){return this.service.getAmountToBeReceivedAndGasFeeOptions(a,r,i,o)}async getAmountToSendAndGasFeeOptions(a,r,i,o){return this.service.getAmountToSendAndGasFeeOptions(a,r,i,o)}async getAmountToBeReceived(a,r,i,o=1){return this.service.getAmountToBeReceived(a,r,i,o)}async getAmountToBeReceivedFromChain(a,r,i,o=1,A,c){return this.service.getAmountToBeReceivedFromChain(a,r,i,o,A,c)}getAmountToBeReceivedFromPools(a,r,i,o,A,c=1){switch(c){case 1:case 2:return this.service.getAmountToBeReceivedComputeWithPools(a,r,i,o,A);case 3:case 4:return this.service.getAmountToBeReceivedComputeCctp(a,r,i,c)}}async getAmountToSend(a,r,i,o=1){return this.service.getAmountToSend(a,r,i,o)}async getAmountToSendFromChain(a,r,i,o=1,A,c){return this.service.getAmountToSendFromChain(a,r,i,o,A,c)}getAmountToSendFromPools(a,r,i,o,A,c=1){switch(c){case 1:case 2:return this.service.getAmountToSendComputeWithPools(a,r,i,o,A);case 3:case 4:return this.service.getAmountToSendComputeCctp(a,r,i,c)}}async getGasFeeOptions(a,r,i){return this.service.getGasFeeOptions(a,r,i)}getAverageTransferTime(a,r,i){return this.service.getAverageTransferTime(a,r,i)}async getPoolInfoByToken(a){return this.service.getPoolInfoByToken(a)}async refreshPoolInfo(a){return this.service.refreshPoolInfo(a)}aprInPercents(a){return this.service.aprInPercents(a)}async getExtraGasMaxLimits(a,r,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{ir as AddressStatus,ui as AllbridgeCoreSdk,mn as AmountFormat,lt as AmountNotEnoughError,an as ArgumentInvalidDecimalsError,re as CCTPDoesNotSupportedError,he as ChainSymbol,j as ChainType,bi as ErrorCode,rn as ExtraGasMaxLimitExceededError,st as FeePaymentMethod,Je as InsufficientPoolLiquidityError,$e as InvalidAmountError,Mt as InvalidGasFeePaymentOptionError,nn as InvalidMessengerOptionError,dt as InvalidTxError,z as JupiterError,Te as Messenger,Y as MethodNotSupportedError,sn as NodeRpcUrlNotInitializedError,ae as OFTDoesNotSupportedError,h as SdkError,J as SdkRootError,pr as SolanaAutoTxFee,Dt as TimeoutError,on as TxTooLargeError,Ot as VerifyTxError,tn as mainnet,Io as nodeRpcUrlsDefault,Bo as nodeUrlsDefault};
|
|
1
|
+
var di=Object.create;var Vr=Object.defineProperty;var pi=Object.getOwnPropertyDescriptor;var gi=Object.getOwnPropertyNames;var fi=Object.getPrototypeOf,yi=Object.prototype.hasOwnProperty;var hi=(s,a)=>()=>(s&&(a=s(s=0)),a);var ar=(s,a)=>()=>(a||s((a={exports:{}}).exports,a),a.exports);var Ti=(s,a,r,i)=>{if(a&&typeof a=="object"||typeof a=="function")for(let o of gi(a))!yi.call(s,o)&&o!==r&&Vr(s,o,{get:()=>a[o],enumerable:!(i=pi(a,o))||i.enumerable});return s};var Ie=(s,a,r)=>(r=s!=null?di(fi(s)):{},Ti(a||!s||!s.__esModule?Vr(r,"default",{value:s,enumerable:!0}):r,s));import{bcs as ce}from"@mysten/sui/bcs";function Hi(s,a=["<",">"]){let[r,i]=a,o=[],A="",c=0;for(let m=0;m<s.length;m++){let u=s[m];if(u===r&&c++,u===i&&c--,c===0&&u===","){o.push(A.trim()),A="";continue}A+=u}return o.push(A.trim()),o}function 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 A=s.slice(0,i),c=Hi(s.slice(i+1,s.length-o-1),[a,r]);return{typeName:A,typeArgs:c}}function Ba(s){return!s||typeof s!="object"||Array.isArray(s)?!1:"GasCoin"in s||"Input"in s||"Result"in s||"NestedResult"in s}function C(s,a){return Ba(a)?a:s.object(a)}function Se(s,a,r){if(Ba(a))return C(s,a);function i(l){let{typeName:d,typeArgs:p}=te(l);switch(d){case"bool":return ce.Bool;case"u8":return ce.U8;case"u16":return ce.U16;case"u32":return ce.U32;case"u64":return ce.U64;case"u128":return ce.U128;case"u256":return ce.U256;case"address":return ce.Address;case"0x1::string::String":case"0x1::ascii::String":return ce.String;case"0x2::object::ID":return ce.Address;case"0x1::option::Option":return ce.option(i(p[0]));case"vector":return ce.vector(i(p[0]));default:throw new Error(`invalid primitive type ${l}`)}}function o(l){for(let d of l){if(typeof d>"u"||d===null)return!0;if(Array.isArray(d))return o(d)}return!1}function A(l){for(let d of l){if(!Array.isArray(d)){if(d===null)continue;switch(typeof d){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return A(d)}return!0}function c(l){for(let d of l){if(!Array.isArray(d))switch(typeof d){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return c(d)}return!1}let{typeName:m,typeArgs:u}=te(r);switch(m){case"0x1::option::Option":if(a===null)return s.pure.option("bool",null);if(A([a]))return s.pure(i(r).serialize(a));if(c([a]))throw new Error("mixing primitive and TransactionArgument values is not supported");return s.moveCall({target:"0x1::option::some",typeArguments:[u[0]],arguments:[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(ce.vector(ce.Bool).serialize([]));if(o(a))throw new Error("the provided array contains undefined or null values");if(A(a))return s.pure(i(r).serialize(a));if(c(a))throw new Error("mixing primitive and TransactionArgument values is not supported");return s.makeMoveVec({type:u[0],elements:a});default:return s.pure(i(r).serialize(a))}}function Qi(s){let a=s.split("0x").join("");for(let r=0;r<a.length;r++)if(a[r]!=="0")return`0x${a.substring(r)}`;return"0x0"}function P(s){let{typeName:a,typeArgs:r}=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<${P(r[0])}>`;default:{let i=a.split("::");i[0]=Qi(i[0]);let o=i.join("::");return r.length>0?`${o}<${r.map(A=>P(A)).join(",")}>`:o}}}function D(s,...a){return a.length>0?`${s}<${a.join(", ")}>`:s}var Q=hi(()=>{"use strict"});var ze=ar((km,Ia)=>{"use strict";Q();var Tr=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},zi=new Tr;Ia.exports=zi});var wr=ar((Om,Oa)=>{"use strict";Q();var Pr=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},qi=new Pr;Oa.exports=qi});var Ir=ar((Gm,Na)=>{"use strict";Q();var Br=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},es=new Br;Na.exports=es});var tn={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},Bo={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},Io={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 ls}from"tronweb";import{Web3 as ds}from"web3";var J=class extends Error{errorCode;constructor(a,r){super(r),this.errorCode=a}},h=class extends J{constructor(a){super("SdkError",a)}},$e=class extends J{constructor(a){super("InvalidAmountError",a)}},lt=class extends J{constructor(a){super("AmountNotEnoughError",a)}},Je=class extends J{constructor(a){super("InsufficientPoolLiquidityError",a)}},z=class extends J{constructor(a){super("JupiterError",a)}},Mt=class extends J{constructor(a){super("InvalidGasFeePaymentOptionError",a)}},nn=class extends J{constructor(a){super("InvalidMessengerOptionError",a)}},Y=class extends J{constructor(a){super("MethodNotSupportedError",a)}},Ot=class extends J{constructor(a){super("VerifyTxError",a)}},dt=class extends J{constructor(a){super("InvalidTxError",a)}},rn=class extends J{constructor(a){super("ExtraGasMaxLimitExceededError",a)}},an=class extends J{constructor(a,r,i){super("ArgumentInvalidDecimalsError",`Argument '${a}' decimals '${r}' cannot be greater than '${i}'`)}},Dt=class extends J{constructor(a){super("TimeoutError",a)}},sn=class extends J{constructor(a){super("NodeRpcUrlNotInitializedError",`For chain '${a}' Node RPC URL not initialized`)}},re=class extends J{constructor(a){super("CCTPDoesNotSupportedError",a)}},ae=class extends J{constructor(a){super("OFTDoesNotSupportedError",a)}},on=class extends J{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},bi=(b=>(b.SDK_ERROR="SdkError",b.INVALID_AMOUNT_ERROR="InvalidAmountError",b.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",b.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",b.JUPITER_ERROR="JupiterError",b.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",b.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",b.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",b.VERIFY_TX_ERROR="VerifyTxError",b.INVALID_TX_ERROR="InvalidTxError",b.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",b.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",b.TIMEOUT_ERROR="TimeoutError",b.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",b.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",b.OFT_DOES_NOT_SUPPORTED_ERROR="OFTDoesNotSupportedError",b.TX_TOO_LARGE="TxTooLargeError",b))(bi||{});var he=(y=>(y.BSC="BSC",y.ETH="ETH",y.BAS="BAS",y.SOL="SOL",y.TRX="TRX",y.POL="POL",y.ARB="ARB",y.CEL="CEL",y.AVA="AVA",y.SRB="SRB",y.STLR="STLR",y.OPT="OPT",y.SUI="SUI",y.SNC="SNC",y))(he||{}),j=(A=>(A.EVM="EVM",A.SOLANA="SOLANA",A.TRX="TRX",A.SRB="SRB",A.SUI="SUI",A))(j||{});var Si={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9},Pi={BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SNC:{chainSymbol:"SNC",chainId:"0x92",name:"Sonic",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"},SUI:{chainSymbol:"SUI",name:"Sui",chainType:"SUI"}},M=(()=>{let s={...Pi};return{addChainsProperties(a){s={...s,...a}},getChainProperty(a){let r=s[a];if(!r)throw new h(`Cannot find chain properties for ${a}`);return r},getChainsProperties(){return s},getChainDecimalsByType(a){return Si[a]}}})();var ir=(c=>(c.OK="OK",c.INVALID="INVALID",c.FORBIDDEN="FORBIDDEN",c.UNINITIALIZED="UNINITIALIZED",c.CONTRACT_ADDRESS="CONTRACT_ADDRESS",c.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",c))(ir||{});var Te=(A=>(A[A.ALLBRIDGE=1]="ALLBRIDGE",A[A.WORMHOLE=2]="WORMHOLE",A[A.CCTP=3]="CCTP",A[A.CCTP_V2=4]="CCTP_V2",A[A.OFT=5]="OFT",A))(Te||{});import{Big as Zr}from"big.js";async function K(s,a){return await s.getPoolInfoByKey({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress})}function U(s){if(Zr(s).lte(0))throw new $e("Amount must be greater than zero")}function E(s,a,r){let i=Zr(a).toFixed(),[o,A]=i.split(".");if(A&&A.length>r)throw new an(s,A.length,r)}async function An(s,a,r){return await Promise.race([s,new Promise((i,o)=>{setTimeout(()=>o(new Dt(a)),r)})])}async function sr(s,a,r,i){if(r<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${r} was received.`);let o=0;for(;;)try{return await An(s(),a,i)}catch{if(++o>=r)throw new Dt(a)}}async function jr(s,a,r,i=1.5,o=!1){let A=[],c=0,m=await s();if(A.push(m),!a(m))return A;let u=new Date(Date.now()+r*1e3).valueOf(),l=1e3,d=l;for(;Date.now()<u;){let p=A[A.length-1];if(p===void 0||!a(p))break;c++,o&&console.info(`Waiting ${l}ms before trying again (bringing the total wait time to ${d}ms so far, of total ${r*1e3}ms)`),await new Promise(f=>setTimeout(f,l)),l=l*i,new Date(Date.now()+l).valueOf()>u&&(l=u-Date.now(),o&&console.info(`was gonna wait too long; new waitTime: ${l}ms`)),d=l+d;let g=await s(p);A.push(g),o&&a(g)&&console.info(`${c}. Called ${s.name}; ${A.length} prev attempts. Most recent: ${JSON.stringify(A[A.length-1],null,2)}`)}return A}import{Big as Ni}from"big.js";var wi={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"}]},_r=wi;var Ci={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"}]},$r=Ci;var Bi={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"}]},Jr=Bi;import*as un from"@project-serum/anchor";import{PublicKey as ua}from"@solana/web3.js";import*as q from"@project-serum/anchor";import{PublicKey as ie}from"@solana/web3.js";async function Re(s,a){return q.utils.token.associatedAddress({mint:a,owner:s})}async function Ke(s){let[a]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("config")],s);return a}async function Lr(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("lock"),Uint8Array.from(s)],a);return r}async function Nt(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([s])],a);return r}async function pt(s){let a=await Ke(s),[r]=await ie.findProgramAddress([a.toBuffer()],s);return r}async function Xr(s,a){let[r]=await ie.findProgramAddress([s.toBuffer()],a);return r}async function gt(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("token"),s.toBytes()],a);return r}async function Yr(s,a,r){let[i]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([s]),a],r);return i}async function or(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([s])],a);return r}async function Ar(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([s])],a);return r}async function Kr(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("sent_message"),s],a);return r}async function cr(s,a,r){let[i]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("user_deposit"),a.toBytes(),s.toBytes()],r);return i}async function Hr(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("cctp_bridge"),s.toBytes()],a);return r}async function Qr(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("token"),s.toBytes()],a);return r}function zr(s,a){let[r]=ie.findProgramAddressSync([q.utils.bytes.utf8.encode("lock"),a.toBuffer()],s);return r}function qr(s,a,r,i){let o=at("message_transmitter",r),A=at("token_messenger",i),c=at("__event_authority",i),m=at("token_minter",i),u=at("local_token",i,[a]),l=at("remote_token_messenger",i,[s.toString()]),d=at("sender_authority",i);return{messageTransmitterAccount:o,tokenMessenger:A,tokenMessengerEventAuthority:c,tokenMinter:m,localToken:u,remoteTokenMessengerKey:l,authorityPda:d}}function at(s,a,r=[]){let i=[Buffer.from(q.utils.bytes.utf8.encode(s))];for(let A of r)typeof A=="string"?i.push(Buffer.from(q.utils.bytes.utf8.encode(A))):Array.isArray(A)||Buffer.isBuffer(A)?i.push(Buffer.from(Uint8Array.from(A))):i.push(Buffer.from(Uint8Array.from(A.toBuffer())));return ie.findProgramAddressSync(i,a)[0]}import{AnchorProvider as Ii}from"@project-serum/anchor";import{Connection as Ri,PublicKey as vi}from"@solana/web3.js";function He(s,a){let r=new Ri(s,"confirmed"),i=new vi(a);return new Ii(r,{publicKey:i},{preflightCommitment:"confirmed",commitment:"confirmed"})}import{PublicKey as ki}from"@solana/web3.js";import{Address as Fi}from"@stellar/stellar-sdk";import{Big as de}from"big.js";import Aa from"randombytes";import{utils as sa}from"tronweb";import{Big as T}from"big.js";import mr from"bn.js";function ur(s,a){return T(100).minus(T(100).times(a).div(s)).toNumber()}function it(s,a){return be(s,a,3).round(0,T.roundDown)}function le(s,a){return be(s,3,a)}function be(s,a,r){let i=T(r).minus(a).toNumber();return T(s).times(Wt(i))}function Wt(s){return T(10).pow(s)}function O(s,a){return T(s).times(Wt(a))}function v(s,a){let r=T(s);return r.eq(0)?T(0):T(r).div(Wt(a))}function se(s){return v(T(s.tokenBalance).minus(s.vUsdBalance).toFixed(),3).div(2).toFixed()}function Ge(s,{feeShare:a,decimals:r},i){let o=T(s);if(o.lte(0))return"0";let A=o.times(a),c=o.minus(A),m=it(c,r),u=T(i.tokenBalance).plus(m),l=Ue(u,i.aValue,i.dValue);return T(i.vUsdBalance).minus(l).round(0,T.roundDown).toFixed()}function Gt(s,{feeShare:a,decimals:r},i){let o=T(s);if(o.lte(0))return T(0).toFixed();let A=o.plus(i.vUsdBalance),c=Ue(A,i.aValue,i.dValue),m=le(T(i.tokenBalance).minus(c),r),u=T(m).times(a);return T(m).minus(u).round(0,T.roundDown).toFixed()}function ea(s,a){let r=T(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 ta(s,{feeShare:a,decimals:r},i){if(T(s).lte(0))return T(0);let o=T(i.vUsdBalance).minus(s);if(o.lte(0))throw new Je;let A=Ue(o,i.aValue,i.dValue),c=T(A).minus(i.tokenBalance),m=le(c,r),u=T(a).div(T(1).minus(a)),l=T(m).times(u).round(0,T.roundUp);return T(m).plus(l).round(0,T.roundDown)}function na(s,{feeShare:a,decimals:r},i){if(T(s).lte(0))return T(0);let o=T(a).div(T(1).minus(a)),A=T(s).times(o).round(0,T.roundUp),c=T(s).plus(A),m=it(c,r),u=T(i.tokenBalance).minus(m);if(u.lte(0))throw new Je;let l=Ue(u,i.aValue,i.dValue);return T(l).minus(i.vUsdBalance).round(0,T.roundDown)}function Ue(s,a,r){let i=T(4).times(a).times(T(r).minus(s)).minus(r),o=T(r).pow(3),A=i.pow(2),c=T(s).times(T(s).times(A).plus(T(4).times(a).times(o))).sqrt().round(0,T.roundDown),m=T(8).times(a).times(s),u=i.times(s).plus(c).div(m).round(0,T.roundDown);return u.eq(0)?T(0):u.plus(1)}function ra(s,a,r,i){let o=new mr(s),A=new mr(r),c=new mr(a);return o.mul(A).shrn(i).sub(c).toString()}function aa(s){return T(s).gt(0)?`${Number(T(s).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function ia(s,a,r){let i=T(a).times(r),o=T(a).plus(r),A=T(8).times(s).times(i).times(o),c=i.times(T(16).times(s).minus(4)).div(3),m=A.times(A),u=c.times(c).times(c),l=m.plus(u),d=T(l).sqrt(),p=T(Math.cbrt(+A.plus(d).toFixed())),g=T(Math.cbrt(+A.minus(d).toFixed()));return p.plus(g).toFixed()}function Le(s,a,r){let i;switch(a){case"EVM":{i=oa(s);break}case"SOLANA":{i=new ki(s).toBuffer();break}case"TRX":{i=xi(s);break}case"SRB":{i=new Fi(s).toBuffer();break}case"SUI":{i=oa(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 ca(s){return Buffer.from(s.replace(/^0x/i,""),"hex")}function oa(s){let r=ca(s);return Buffer.concat([Buffer.alloc(32-r.length,0),r],32)}function xi(s){let a=Ut(s),r=ca(a);return Mi(r,32)}function Ut(s){let a=sa.crypto.decodeBase58Address(s);return a?sa.bytes.byteArray2hexStr(a).replace(/^41/,"0x"):""}function Mi(s,a){if(s.length>=a)return s;let r=Buffer.alloc(a,0);return s.copy(r,a-s.length),r}function cn(){return Aa(32)}function Ee(){let s=Aa(32).readBigInt64BE();return s<0?s*-1n:s}function Ve(s,a){let r={},i=a.sourceToken;if(r.amount=O(a.amount,i.decimals).toFixed(),r.contractAddress=i.bridgeAddress,r.fromAccountAddress=a.fromAccountAddress,s==="SUI"){if(!i.originTokenAddress)throw new h("SUI sourceToken must contain 'originTokenAddress'");r.fromTokenAddress=i.originTokenAddress}else r.fromTokenAddress=Le(i.tokenAddress,s,s);if(r.toAccountAddress=a.toAccountAddress,s==="SUI"){if(!a.destinationToken.originTokenAddress)throw new h("SUI destinationToken must contain 'originTokenAddress'");r.toTokenAddress=a.destinationToken.originTokenAddress}else r.toTokenAddress=Le(a.destinationToken.tokenAddress,s,s);return r.minimumReceiveAmount=a.minimumReceiveAmount?O(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=M.getChainProperty(a.destinationToken.chainSymbol).chainType;if(s==="SUI"){if(!a.sourceToken.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");i.fromTokenAddress=a.sourceToken.originTokenAddress}else i.fromTokenAddress=a.sourceToken.tokenAddress;i.toChainId=a.destinationToken.allbridgeChainId,i.toTokenAddress=a.destinationToken.tokenAddress,a.gasFeePaymentMethod==="stablecoin"?i.gasFeePaymentMethod="stablecoin":i.gasFeePaymentMethod="native";let A=a.sourceToken;switch(a.messenger){case 3:if(!A.cctpAddress||!a.destinationToken.cctpAddress)throw new re("Such route does not support CCTP protocol");i.contractAddress=A.cctpAddress;break;case 4:if(!A.cctpV2Address||!a.destinationToken.cctpV2Address)throw new re("Such route does not support CCTP V2 protocol");i.contractAddress=A.cctpV2Address;break;case 5:if(!A.oftBridgeAddress||!a.destinationToken.oftBridgeAddress||A.oftId!==a.destinationToken.oftId)throw new ae("Such route does not support OFT protocol");i.contractAddress=A.oftBridgeAddress;break;case 1:case 2:i.contractAddress=A.bridgeAddress;break}i.messenger=a.messenger,i.fromAccountAddress=a.fromAccountAddress,i.amount=O(a.amount,A.decimals).toFixed();let{fee:c,feeFormat:m}=a;if(!c){let p=(await lr(a.sourceToken,i.toChainId,i.messenger,r))[i.gasFeePaymentMethod];if(!p)throw new Mt;c=p.int,m="int"}if(m=="float")switch(i.gasFeePaymentMethod){case"native":i.fee=O(c,M.getChainDecimalsByType(A.chainType)).toFixed(0);break;case"stablecoin":i.fee=O(c,A.decimals).toFixed(0);break}else i.fee=c;let{extraGas:u,extraGasFormat:l}=a;if(u&&+u>0){let d=await dr(A,a.destinationToken,i.messenger,r),p,g;switch(i.gasFeePaymentMethod){case"native":p=M.getChainDecimalsByType(A.chainType),g=de(d.exchangeRate);break;case"stablecoin":p=A.decimals,g=de(d.exchangeRate).div(d.sourceNativeTokenPrice);break}switch(l??"int"){case"float":{i.extraGas=O(u,p).toFixed(0);let f=g.mul(u);i.extraGasDest=O(f,M.getChainDecimalsByType(a.destinationToken.chainType)).toFixed(0,de.roundDown);break}case"int":{i.extraGas=u;let f=v(i.extraGas,M.getChainDecimalsByType(A.chainType)),y=g.mul(f);i.extraGasDest=O(y,M.getChainDecimalsByType(a.destinationToken.chainType)).toFixed(0,de.roundDown);break}}Di(i.extraGas,i.gasFeePaymentMethod,d)}return s!=="SUI"&&(i.fromTokenAddress=Le(i.fromTokenAddress,s,s)),i.toAccountAddress=Le(a.toAccountAddress,o,s),i.toTokenAddress=Le(i.toTokenAddress,o,s),i.gasFeePaymentMethod=="stablecoin"&&Oi(i.amount,A.decimals,i.fee,i.extraGas),i}function Oi(s,a,r,i){let o=de(s).minus(r).minus(i??0);if(o.lte(0))throw new lt(`Amount not enough to pay fee, ${v(de(o).minus(1).neg(),a).toFixed()} stables is missing`)}async function lr(s,a,r,i){let o=await i.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:a,messenger:r,sourceToken:s.tokenAddress}),A={native:{int:o.fee,float:v(o.fee,M.getChainDecimalsByType(s.chainType)).toFixed()},adminFeeShareWithExtras:o.adminFeeShareWithExtras};if(o.sourceNativeTokenPrice){let c=be(new de(o.fee).mul(o.sourceNativeTokenPrice),M.getChainDecimalsByType(s.chainType),s.decimals).toFixed(0,de.roundUp);A.stablecoin={int:c,float:v(c,s.decimals).toFixed()}}return A}function Di(s,a,r){let i=r.extraGasMax[a];if(!i)throw new Mt(`Impossible to pay extra gas by '${a}' payment method`);let o=i.int;if(de(s).gt(o))throw new rn(`Extra gas ${s} in int format, exceeded limit ${o} for '${a}' payment method`)}async function dr(s,a,r,i){let o={},A=await i.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:a.allbridgeChainId,messenger:r,sourceToken:s.tokenAddress}),c=a.txCostAmount.maxAmount,m=v(c,M.getChainDecimalsByType(a.chainType)).toFixed(),u=de(m).div(A.exchangeRate).toFixed(M.getChainDecimalsByType(s.chainType),de.roundDown),l=O(u,M.getChainDecimalsByType(s.chainType)).toFixed(0);if(o.native={int:l,float:u},A.sourceNativeTokenPrice){let d=de(u).mul(A.sourceNativeTokenPrice).toFixed(s.decimals,de.roundDown);o.stablecoin={int:O(d,s.decimals).toFixed(0),float:d}}return{extraGasMax:o,destinationChain:{gasAmountMax:{int:c,float:m},swap:{int:a.txCostAmount.swap,float:v(a.txCostAmount.swap,M.getChainDecimalsByType(a.chainType)).toFixed()},transfer:{int:a.txCostAmount.transfer,float:v(a.txCostAmount.transfer,M.getChainDecimalsByType(a.chainType)).toFixed()}},exchangeRate:A.exchangeRate,sourceNativeTokenPrice:A.sourceNativeTokenPrice}}function ma(s){return s.sourceToken.chainSymbol!==s.destinationToken.chainSymbol}async function ln(s,a,r,i){let o,A=new ua(a),c=new ua(r),m=await Re(A,c),u=He(i,a);un.setProvider(u);let l=await un.Spl.token(u).account.token.fetchNullable(m);if(l?.authority.equals(A))o=Le(m.toBase58(),"SOLANA",s);else{let d=await u.connection.getTokenAccountsByOwner(A,{mint:c});if(d.value.length===0&&!l)o=Le(m.toBase58(),"SOLANA",s);else if(d.value.length>0){let p=d.value[0];if(!p?.pubkey)throw new h("First token account or its public key is undefined");o=Le(p.pubkey.toBase58(),"SOLANA",s)}else throw new h("Associated account has wrong owner")}return o}var pe=class{};var Et=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:A,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=r,p=this.getBridgeContract(o).methods.swap(i,c,u,m,l);return Promise.resolve({from:A,to:o,data:p.encodeABI()})}async buildRawTransactionSend(r){let i=await ke(this.chainType,r,this.api),{amount:o,contractAddress:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,toTokenAddress:d,messenger:p,fee:g,gasFeePaymentMethod:f,extraGas:y,extraGasDest:S}=i,w="0x"+cn().toString("hex"),b,R,I=g;switch(y&&(I=Ni(I).plus(y).toFixed()),p){case 3:case 4:{let W=await this.buildRawTransactionCctpSend(r,i,I);b=W.sendMethod,R=W.value;break}case 5:{let W=this.buildRawTransactionOftSend(r,i,I,S);b=W.sendMethod,R=W.value;break}case 1:case 2:{let W=this.getBridgeContract(A);f==="stablecoin"?(b=W.methods.swapAndBridge(m,o,l,u,d,w,p,I),R="0"):(b=W.methods.swapAndBridge(m,o,l,u,d,w,p,0),R=I)}break}return Promise.resolve({from:c,to:A,value:R,data:b.encodeABI()})}async buildRawTransactionCctpSend(r,i,o){let{amount:A,contractAddress:c,toChainId:m,toAccountAddress:u,gasFeePaymentMethod:l}=i,d=this.getCctpBridgeContract(c),p,g;if(r.destinationToken.chainType==="SOLANA"){let f=await ln(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));l==="stablecoin"?(p=d.methods.bridgeWithWalletAddress(A,f,u,m,o),g="0"):(p=d.methods.bridgeWithWalletAddress(A,f,u,m,0),g=o)}else l==="stablecoin"?(p=d.methods.bridge(A,u,m,o),g="0"):(p=d.methods.bridge(A,u,m,0),g=o);return{sendMethod:p,value:g}}buildRawTransactionOftSend(r,i,o,A){let{amount:c,contractAddress:m,toChainId:u,toAccountAddress:l,gasFeePaymentMethod:d}=i,p=this.getOftBridgeContract(m),g,f;return d==="stablecoin"?(g=p.methods.bridge(r.sourceToken.tokenAddress,c,l,u,o,A??"0","10"),f="0"):(g=p.methods.bridge(r.sourceToken.tokenAddress,c,l,u,0,A??"0","10"),f=o),{sendMethod:g,value:f}}async sendRawTransaction(r){let i=await this.web3.eth.estimateGas(r),o={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:A}=await this.web3.eth.sendTransaction({...r,gas:i,...o});return{txId:A.toString()}}getBridgeContract(r){return new this.web3.eth.Contract(_r.abi,r)}getCctpBridgeContract(r){return new this.web3.eth.Contract($r.abi,r)}getOftBridgeContract(r){return new this.web3.eth.Contract(Jr.abi,r)}};var dn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o}async approve(a,r){let i,o;r?(i=a,o=r):o=a;let A=Vt(o.token,o.messenger);return this.tokenService.buildRawTransactionApprove({...o,spender:A},i)}async send(a,r){return U(a.amount),E("amount",a.amount,a.sourceToken.decimals),ma(a)?pn(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionSend(a):pn(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionSwap(a)}};import{BN as ht,Program as fr,Spl as Ji,web3 as Qe}from"@project-serum/anchor";import{Keypair as wa,PublicKey as Z,SystemProgram as Li}from"@solana/web3.js";import{Big as Fe}from"big.js";var Zt={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 la={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 Wi}from"@project-serum/anchor";import Gi from"big.js";import{Web3 as gn}from"web3";async function ft(s,a){return await Wi.token(a).account.token.fetch(s)}async function da(s,a,r){let i=await a.account.pool.fetch(r),o=i.decimals,A=Gi(i.feeShareBp.toString()).div(1e4).toFixed(),c={aValue:i.a.toString(),dValue:i.d.toString(),totalLpAmount:i.totalLpAmount.toString(),tokenBalance:i.tokenBalance.toString(),vUsdBalance:i.vUsdBalance.toString(),accRewardPerShareP:i.accRewardPerShareP.toString()};return Ge(s,{decimals:o,feeShare:A},c)}function pa(s){let a=s.amount,r="0x"+s.recipient.toString("hex"),i=s.sourceChainId,o=s.destinationChainId,A="0x"+s.receiveToken.toString("hex"),c="0x"+s.nonce.toString("hex"),m=1,u="0x"+s.chainBridge.toString("hex"),l=gn.utils.encodePacked({t:"uint256",v:a},{t:"bytes32",v:r},{t:"uint256",v:i},{t:"bytes32",v:A},{t:"uint256",v:c},{t:"uint8",v:m});if(!l)throw new h("message cannot be undefined");let d=gn.utils.keccak256(Buffer.from(l.replace("0x",""),"hex")),p=Buffer.from(d.replace("0x",""),"hex");p[0]=i,p[1]=o;let g=gn.utils.encodePacked({t:"bytes32",v:"0x"+p.toString("hex")},{t:"bytes32",v:u});if(!g)throw new dt("messageWithSigner cannot be undefined");let f=gn.utils.keccak256(Buffer.from(g.replace("0x",""),"hex")),y=Buffer.from(f.replace("0x",""),"hex");return y[0]=p[0],y[1]=p[1],y}import{ComputeBudgetInstruction as fa,ComputeBudgetProgram as fn,Connection as ya,TransactionMessage as Ui}from"@solana/web3.js";import{Big as Ei}from"big.js";import{AddressLookupTableAccount as ga}from"@solana/web3.js";async function ot(s,a){return await Promise.all(s.message.addressTableLookups.map(async r=>new ga({key:r.accountKey,state:ga.deserialize(await a.getAccountInfo(r.accountKey).then(i=>{if(!i)throw new h("Cannot get AccountInfo");return i.data}))})))}var pr="AUTO";async function yt(s,a,r){let i=new ya(r,"confirmed"),o=(await i.simulateTransaction(s)).value.unitsConsumed;await Ta(s.instructions,o,a,i)}async function ha(s,a,r){let i=new ya(r,"confirmed"),o=await ot(s,i),A=Ui.decompile(s.message,{addressLookupTableAccounts:o});if(s.serialize().length>1232)throw new on;await Ta(A.instructions,769230,a,i),s.message=A.compileToV0Message(o)}async function Ta(s,a,r,i){if(a>0){let o=Vi(a,s);if(r?.solana){let A=r.solana;if(A===pr)await gr(s,i);else if("pricePerUnitInMicroLamports"in A)await gr(s,i,A.pricePerUnitInMicroLamports);else{let c=Ei(A.extraFeeInLamports).div(o).mul(Wt(6)).toFixed(0);await gr(s,i,c)}}}}function Vi(s,a){let r=a.findIndex(A=>A.programId.equals(fn.programId)&&fa.decodeInstructionType(A)==="SetComputeUnitLimit"),i=Number((s*1.3).toFixed(0)),o=fn.setComputeUnitLimit({units:i});return r>=0?a[r]=o:a.push(o),i.toString()}async function gr(s,a,r){let i=s.findIndex(c=>c.programId.equals(fn.programId)&&fa.decodeInstructionType(c)==="SetComputeUnitPrice"),o=BigInt(r||await Zi(a)),A=fn.setComputeUnitPrice({microLamports:o});return i>=0?s[i]=A:s.push(A),o.toString()}async function Zi(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 ji}from"@solana/spl-token";import{Connection as _i,TransactionMessage as ba,VersionedTransaction as $i}from"@solana/web3.js";import Sa,{AxiosError as Pa}from"axios";var yn=class{connection;jupiterUrl;apiKeyHeader;maxAccounts;constructor(a,r){this.connection=new _i(a),this.jupiterUrl=r.jupiterUrl.replace(/\/$/,""),this.apiKeyHeader=r.jupiterApiKeyHeader,this.maxAccounts=r.jupiterMaxAccounts}async getJupiterSwapTx(a,r,i,o){let A;try{let p=o?"ExactOut":"ExactIn",g=`${this.jupiterUrl}/quote?inputMint=${r}&outputMint=${ji.toString()}&amount=${i}&swapMode=${p}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(g+=`&maxAccounts=${this.maxAccounts}`),A=await Sa.get(g,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(p){throw p instanceof Pa&&p.response&&p.response.data&&p.response.data.error?new z(p.response.data.error):new z("Cannot get route")}let c;if(o&&A?.data?.inAmount)c=A.data.inAmount;else if(o)throw new z("Cannot get inAmount");let m;try{m=await Sa.post(`${this.jupiterUrl}/swap`,{quoteResponse:A.data,userPublicKey:a,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(p){throw p instanceof Pa&&p.response&&p.response.data&&p.response.data.error?new z(p.response.data.error):new z("Cannot get swap transaction")}let u;if(m?.data?.swapTransaction)u=m.data.swapTransaction;else throw new z("Cannot get swap transaction");let l=Buffer.from(u,"base64"),d=$i.deserialize(l);return o?{tx:d,amountIn:c}:{tx:d}}async amendJupiterWithSdkTx(a,r){try{let i=await ot(a,this.connection),o=await ot(r,this.connection),A=ba.decompile(a.message,{addressLookupTableAccounts:i}),c=ba.decompile(r.message,{addressLookupTableAccounts:o});if(c.instructions.shift(),A.instructions.push(...c.instructions),i.push(...o),a.message=A.compileToV0Message(i),r.message.header.numRequiredSignatures===2&&a.signatures.length===1){let m=r.signatures[0];if(!m)throw new h("Signature is undefined");a.signatures.push(m)}return a}catch(i){throw i instanceof Error&&i.message?new z(`Some error occurred during creation final swap and bridge transaction. ${i.message}`):new z("Some error occurred during creation final swap and bridge transaction")}}};var yr=1e6,Ca=1.1,hn=class extends pe{constructor(r,i,o){super();this.solanaRpcUrl=r;this.params=i;this.api=o;this.jupiterService=new yn(r,i.jupiterParams)}chainType="SOLANA";jupiterService;async buildRawTransactionSwap(r){let i=Ve(this.chainType,r);return await this.buildSwapTransaction(i,r.sourceToken.poolAddress,r.destinationToken.poolAddress,r.txFeeParams)}async buildSwapTransaction(r,i,o,A){let{fromAccountAddress:c,amount:m,contractAddress:u,fromTokenAddress:l,toTokenAddress:d,toAccountAddress:p,minimumReceiveAmount:g}=r,f=c,y=u,S=l,w=d,b=o,R=p,I=new Z(f),W=He(this.solanaRpcUrl,I.toString()),V=new fr(Zt,y,W),N=await pt(V.programId),me=await Ke(V.programId),X=new Z(S),Oe=await gt(X,V.programId),De=new Z(i),_e=await Re(I,X),we=new Z(R),Ae=new Z(w),ye=await gt(Ae,V.programId),Ce=new Z(b),ue=await Re(we,Ae),Ne=[Qe.ComputeBudgetProgram.setComputeUnitLimit({units:yr})];try{await ft(ue,W)}catch{let li=await Ji.associatedToken(W).methods.create().accounts({mint:Ae,owner:we,associatedAccount:ue}).instruction();Ne.push(li)}let We=await V.methods.swap(new ht(m),new ht(g||0)).accounts({payer:I,config:me,bridgeAuthority:N,user:I,sendBridgeToken:Oe,sendMint:X,sendPool:De,sendUserToken:_e,receiveBridgeToken:ye,receiveMint:Ae,receivePool:Ce,receiveUserToken:ue}).preInstructions(Ne).transaction(),Be=W.connection;return We.recentBlockhash=(await Be.getLatestBlockhash()).blockhash,We.feePayer=I,await yt(We,A,this.solanaRpcUrl),await this.convertToVersionedTransaction(We,Be)}async buildRawTransactionSend(r){let i=await ke(this.chainType,r,this.api),o=this.addPoolAddress(r,i),A=o.gasFeePaymentMethod=="stablecoin",c;if(A)try{let{tx:l,solTxSendUpdatedParams:d}=await this.processJup(o,r,!0);c=l,o={...o,...d}}catch{try{let{tx:d,solTxSendUpdatedParams:p}=await this.processJup(o,r,!1);c=d,o={...o,...p}}catch(d){throw d instanceof J?d:d instanceof Error&&d.message?new z(`Some error occurred during creation Jupiter swap transaction. ${d.message}`):new z("Some error occurred during creation Jupiter swap transaction")}}let m,u;switch(i.messenger){case 1:{let l=await this.prepareSwapAndBridgeData(o);m=await this.buildSwapAndBridgeAllbridgeTransaction(l);break}case 2:{let l=await this.prepareSwapAndBridgeData(o),{transaction:d,messageAccount:p}=await this.buildSwapAndBridgeWormholeTransaction(l);m=d,u=p;break}case 3:case 4:{let l=await this.prepareSwapAndBridgeCctpData(o),{transaction:d,messageSentEventDataKeypair:p}=await this.buildSwapAndBridgeCctpTransaction(r.destinationToken.chainSymbol,l);m=d,u=p;break}case 5:throw new ae("Messenger OFT is not supported yet.")}if(A){if(!c)throw new z("Swap tx is absent");m=await this.jupiterService.amendJupiterWithSdkTx(c,m)}return await ha(m,r.txFeeParams,this.solanaRpcUrl),u&&m.sign([u]),m}async processJup(r,i,o){let{fee:A,extraGas:c,gasFeePaymentMethod:m}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(i.sourceToken,r),u=o?Fe(A):Fe(r.fee);c&&(u=u.plus(c)),o||(u=u.mul(Ca));let{tx:l,amountIn:d}=await this.jupiterService.getJupiterSwapTx(i.fromAccountAddress,i.sourceToken.tokenAddress,u.toFixed(0),o),p;if(o){if(!d)throw new z("Cannot get inAmount");p=Fe(r.amount).minus(Fe(d).mul(Ca)).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, ${v(Fe(p).minus(1).neg(),i.sourceToken.decimals).toFixed()} stables is missing`);return{tx:l,solTxSendUpdatedParams:{amount:p,fee:A,extraGas:c,gasFeePaymentMethod:m}}}addPoolAddress(r,i){return{...i,poolAddress:r.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(r,i){if(i.gasFeePaymentMethod=="stablecoin"){let o=(await this.api.getReceiveTransactionCost({sourceChainId:i.fromChainId,destinationChainId:i.toChainId,messenger:i.messenger,sourceToken:r.tokenAddress})).sourceNativeTokenPrice,A=Fe(i.fee).div(o).mul(Fe(10).pow(M.getChainDecimalsByType("SOLANA")-r.decimals)).toFixed(0),c;return i.extraGas&&(c=Fe(i.extraGas).div(o).mul(Fe(10).pow(M.getChainDecimalsByType("SOLANA")-r.decimals)).toFixed(0)),{fee:A,extraGas:c,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:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,toTokenAddress:d,poolAddress:p,extraGas:g}=r,f=m,y=c,S=u,w=d,b=l,R=o,I=A,W=He(this.solanaRpcUrl,y),V=new fr(Zt,R,W),N=Array.from(cn()),me=new Z(p),X=await da(i,V,me),Oe=await Lr(N,V.programId),De=await pt(V.programId),_e=await Re(new Z(y),new Z(f)),we=await gt(new Z(f),V.programId),Ae=await or(S,V.programId),ye=await Yr(S,Buffer.from(w),V.programId),Ce=await Ke(V.programId),ue=await V.account.config.fetch(Ce),Ne=await Nt(S,ue.gasOracleProgramId),We=await Nt(I,ue.gasOracleProgramId),Be=pa({amount:X,recipient:Buffer.from(b),nonce:Buffer.from(N),receiveToken:Buffer.from(w),destinationChainId:S,sourceChainId:I,chainBridge:(await pt(V.programId)).toBuffer()}),G={};return G.bridge=V,G.amount=new ht(i),G.vusdAmount=new ht(X),G.nonce=N,G.recipient=Array.from(b),G.receiveToken=Array.from(w),G.poolAccount=me,G.lockAccount=Oe,G.bridgeAuthority=De,G.userToken=_e,G.bridgeTokenAccount=we,G.chainBridgeAccount=Ae,G.otherBridgeTokenAccount=ye,G.userAccount=new Z(y),G.destinationChainId=S,G.mint=new Z(f),G.config=Ce,G.configAccountInfo=ue,G.gasPrice=Ne,G.thisGasPrice=We,G.message=Be,g&&(G.extraGasInstruction=this.getExtraGasInstruction(g,G.userAccount,Ce)),G}async buildSwapAndBridgeAllbridgeTransaction(r){let{bridge:i,vusdAmount:o,nonce:A,recipient:c,receiveToken:m,poolAccount:u,lockAccount:l,bridgeAuthority:d,userToken:p,bridgeTokenAccount:g,chainBridgeAccount:f,otherBridgeTokenAccount:y,userAccount:S,destinationChainId:w,mint:b,config:R,configAccountInfo:I,gasPrice:W,thisGasPrice:V,message:N,extraGasInstruction:me}=r,X=I.allbridgeMessengerProgramId,Oe=await Ar(w,X),De=await Ke(X),_e=await Kr(N,X),we=[];me&&we.push(me);let Ae=await i.methods.swapAndBridge({vusdAmount:o,nonce:A,destinationChainId:w,recipient:c,receiveToken:m}).accounts({mint:b,user:S,config:R,lock:l,pool:u,gasPrice:W,thisGasPrice:V,bridgeAuthority:d,userToken:p,bridgeToken:g,chainBridge:f,messenger:X,messengerGasUsage:Oe,messengerConfig:De,sentMessageAccount:_e,otherBridgeToken:y}).preInstructions([Qe.ComputeBudgetProgram.setComputeUnitLimit({units:yr})]).postInstructions(we).transaction(),ye=He(this.solanaRpcUrl,S.toString()).connection;return Ae.recentBlockhash=(await ye.getLatestBlockhash()).blockhash,Ae.feePayer=S,await this.convertToVersionedTransaction(Ae,ye)}async convertToVersionedTransaction(r,i){let o=await i.getAddressLookupTable(new Z(this.params.solanaLookUpTable)).then(c=>c.value);if(!o)throw new h("Cannot find allbridgeLookupTableAccount");let A=new Qe.TransactionMessage({payerKey:r.feePayer,recentBlockhash:r.recentBlockhash,instructions:r.instructions}).compileToV0Message([o]);return new Qe.VersionedTransaction(A)}async buildSwapAndBridgeWormholeTransaction(r){let{bridge:i,vusdAmount:o,nonce:A,recipient:c,receiveToken:m,poolAccount:u,lockAccount:l,bridgeAuthority:d,userToken:p,bridgeTokenAccount:g,chainBridgeAccount:f,otherBridgeTokenAccount:y,userAccount:S,destinationChainId:w,mint:b,config:R,configAccountInfo:I,gasPrice:W,thisGasPrice:V,message:N,extraGasInstruction:me}=r,X=this.params.wormholeMessengerProgramId,[Oe]=Z.findProgramAddressSync([Buffer.from("Bridge")],new Z(X)),[De]=Z.findProgramAddressSync([Buffer.from("fee_collector")],new Z(X)),[_e]=Z.findProgramAddressSync([Buffer.from("Sequence"),d.toBuffer()],new Z(X)),we=await Ar(w,I.wormholeMessengerProgramId),Ae=await Ke(I.wormholeMessengerProgramId),ye=wa.generate(),Ce=He(this.solanaRpcUrl,S.toString()),ue=await Ce.connection.getAccountInfo(Oe);if(ue==null)throw new h("Cannot fetch wormhole bridge account info");let Ne=new ht(ue.data.slice(16,24),"le").toString(),We=Li.transfer({fromPubkey:S,toPubkey:De,lamports:+Ne}),Be=[];me&&Be.push(me);let G={mint:b,user:S,config:R,lock:l,pool:u,gasPrice:W,thisGasPrice:V,bridgeAuthority:d,userToken:p,bridgeToken:g,chainBridge:f,otherBridgeToken:y,messengerGasUsage:we,wormholeProgram:X,bridge:Oe,message:ye.publicKey,wormholeMessenger:I.wormholeMessengerProgramId,sequence:_e,feeCollector:De,wormholeMessengerConfig:Ae,clock:Qe.SYSVAR_CLOCK_PUBKEY},en=await i.methods.swapAndBridgeWormhole({vusdAmount:o,nonce:A,destinationChainId:w,recipient:c,receiveToken:m}).accounts(G).preInstructions([Qe.ComputeBudgetProgram.setComputeUnitLimit({units:yr}),We]).postInstructions(Be).signers([ye]).transaction();return en.recentBlockhash=(await Ce.connection.getLatestBlockhash()).blockhash,en.feePayer=S,{transaction:await this.convertToVersionedTransaction(en,Ce.connection),messageAccount:ye}}async prepareSwapAndBridgeCctpData(r){let{contractAddress:i,amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,extraGas:d}=r,p=i;if(!p)throw new re("Such route does not support CCTP protocol");let g=4,f=A,y=l,S=u,w=He(this.solanaRpcUrl,f),b=new fr(la,p,w),R=new Z(c),I=await Hr(R,b.programId),W=new Z(f),V=await b.account.cctpBridge.fetch(I),N={};return N.cctpBridge=b,N.cctpBridgeAccount=I,N.cctpAddressAccount=new Z(p),N.amount=new ht(o),N.recipient=Array.from(S),N.receiveToken=Array.from(y),N.userToken=await Re(W,R),N.bridgeAuthority=await Xr(I,b.programId),N.bridgeTokenAccount=await Qr(R,b.programId),N.chainBridgeAccount=await or(m,b.programId),N.userAccount=W,N.destinationChainId=m,N.mint=R,N.gasPrice=await Nt(m,V.gasOracleProgramId),N.thisGasPrice=await Nt(g,V.gasOracleProgramId),N.provider=w,d&&(N.extraGasInstruction=this.getExtraGasInstruction(d,N.userAccount,I)),N}async buildSwapAndBridgeCctpTransaction(r,i){let{cctpBridge:o,cctpBridgeAccount:A,amount:c,recipient:m,receiveToken:u,bridgeAuthority:l,userToken:d,bridgeTokenAccount:p,chainBridgeAccount:g,userAccount:f,destinationChainId:y,mint:S,gasPrice:w,thisGasPrice:b,extraGasInstruction:R,provider:I}=i,W=this.params.cctpParams.cctpDomains[r],V=this.params.cctpParams.cctpTransmitterProgramId,N=this.params.cctpParams.cctpTokenMessengerMinter;if(W==null||!V||!N)throw new h("CCTP is not configured");let me=new Z(V),X=new Z(N),{messageTransmitterAccount:Oe,tokenMessenger:De,tokenMessengerEventAuthority:_e,tokenMinter:we,localToken:Ae,remoteTokenMessengerKey:ye,authorityPda:Ce}=qr(W,S,me,X),ue=[];R&&ue.push(R);let Ne=wa.generate(),We=zr(o.programId,Ne.publicKey),Be=await o.methods.bridge({amount:c,destinationChainId:y,recipient:m,receiveToken:u}).accounts({mint:S,user:f,cctpBridge:A,messageSentEventData:Ne.publicKey,lock:We,cctpMessenger:X,messageTransmitterProgram:me,messageTransmitterAccount:Oe,tokenMessenger:De,tokenMinter:we,localToken:Ae,remoteTokenMessengerKey:ye,authorityPda:Ce,eventAuthority:_e,bridgeToken:p,gasPrice:w,thisGasPrice:b,chainBridge:g,userToken:d,bridgeAuthority:l}).preInstructions([Qe.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(ue).transaction(),G=I.connection;return Be.recentBlockhash=(await G.getLatestBlockhash()).blockhash,Be.feePayer=f,{transaction:await this.convertToVersionedTransaction(Be,G),messageSentEventDataKeypair:Ne}}send(r){throw new Y}};import{Address as hr,contract as CS}from"@stellar/stellar-sdk";import{Big as Ki}from"big.js";import{contract as n}from"@stellar/stellar-sdk";var Xi=n.Spec,Yi=n.Client;var jt=class extends Yi{constructor(r){super(new Xi(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),r);this.options=r}fromJSON={initialize:this.txFromJSON,swap_and_bridge:this.txFromJSON,receive_tokens:this.txFromJSON,swap:this.txFromJSON,stop_swap:this.txFromJSON,start_swap:this.txFromJSON,set_gas_oracle:this.txFromJSON,set_stop_authority:this.txFromJSON,set_rebalancer:this.txFromJSON,set_messenger:this.txFromJSON,set_gas_usage:this.txFromJSON,register_bridge:this.txFromJSON,add_bridge_token:this.txFromJSON,remove_bridge_token:this.txFromJSON,add_pool:this.txFromJSON,withdraw_gas_tokens:this.txFromJSON,withdraw_bridging_fee_in_tokens:this.txFromJSON,has_processed_message:this.txFromJSON,has_received_message:this.txFromJSON,get_pool_address:this.txFromJSON,get_config:this.txFromJSON,get_stop_authority:this.txFromJSON,get_transaction_cost:this.txFromJSON,get_gas_usage:this.txFromJSON,get_admin:this.txFromJSON,get_gas_oracle:this.txFromJSON,get_another_bridge:this.txFromJSON,set_admin:this.txFromJSON,upgrade:this.txFromJSON}};var Tn=class extends 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:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:g}=r,f=d;g&&(f=Ki(f).plus(g).toFixed());let y=this.getContract(jt,o,A),S;return p==="stablecoin"?S=await y.swap_and_bridge({sender:A,token:hr.contract(Buffer.from(c)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(l),nonce:Ee(),gas_amount:BigInt(0),fee_token_amount:BigInt(f)}):S=await y.swap_and_bridge({sender:A,token:hr.contract(Buffer.from(c)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(l),nonce:Ee(),gas_amount:BigInt(f),fee_token_amount:BigInt(0)}),S.toXDR()}async buildRawTransactionSwap(r){let i=Ve(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=r;return(await this.getContract(jt,o,A).swap({sender:A,amount:BigInt(i),token:hr.contract(Buffer.from(c)).toBuffer(),receive_token:Buffer.from(u),recipient:m,receive_amount_min:BigInt(l)})).toXDR()}send(r){throw new Y}getContract(r,i,o){let A={publicKey:o,contractId:i,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new r(A)}};import{SuiClient as As}from"@mysten/sui/client";import{coinWithBalance as $,Transaction as Bn}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as Ea}from"@mysten/sui/utils";import{Big as Fr}from"big.js";var xr=Ie(ze());var Xe=Ie(ze());Q();function Ra(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::swap`,typeArguments:a,arguments:[C(s,r.bridge),C(s,r.coin),Se(s,r.receiveAmountMin,"u64")]})}function va(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::deposit`,typeArguments:[a],arguments:[C(s,r.bridge),C(s,r.userDeposit),C(s,r.coin)]})}function ka(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::withdraw`,typeArguments:[a],arguments:[C(s,r.bridge),C(s,r.userDeposit),Se(s,r.amountLp,"u64")]})}function Fa(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::claim_reward`,typeArguments:[a],arguments:[C(s,r.bridge),C(s,r.userDeposit)]})}function xa(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::pool`,typeArguments:[a],arguments:[C(s,r)]})}function br(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::swap_and_bridge_wormhole`,typeArguments:[a],arguments:[C(s,r.bridge),C(s,r.messenger),C(s,r.wormholeState),C(s,r.theClock),C(s,r.gasOracle),C(s,r.amount),C(s,r.recipient),Se(s,r.destinationChainId,"u8"),C(s,r.receiveToken),Se(s,r.nonce,"u256"),C(s,r.feeSuiCoin),C(s,r.feeTokenCoin)]})}function Ma(s,a){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::new_user_deposit`,typeArguments:[a],arguments:[]})}function Sr(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::swap_and_bridge`,typeArguments:[a],arguments:[C(s,r.bridge),C(s,r.messenger),C(s,r.gasOracle),C(s,r.amount),C(s,r.recipient),Se(s,r.destinationChainId,"u8"),C(s,r.receiveToken),Se(s,r.nonce,"u256"),C(s,r.feeSuiCoin),C(s,r.feeTokenCoin)]})}var Va=Ie(wr());var Da=Ie(wr());Q();function Cr(s,a,r){return s.moveCall({target:`${Da.PUBLISHED_AT}::cctp_bridge_interface::bridge`,typeArguments:[a],arguments:[C(s,r.cctpBridge),C(s,r.gasOracle),C(s,r.tokenMessengerMinterState),C(s,r.messageTransmitterState),C(s,r.treasury),C(s,r.denyList),C(s,r.amount),C(s,r.feeSuiCoin),C(s,r.feeTokenCoin),Se(s,r.destinationChainId,"u8"),C(s,r.recipient),C(s,r.recipientWalletAddress)]})}var Za=Ie(Ir());var Ua=Ie(Ir());Q();import{bcs as qe}from"@mysten/sui/bcs";import{fromHEX as ns,toHEX as rs}from"@mysten/sui/utils";import{bcs as ts}from"@mysten/sui/bcs";Q();var Rr=class s{__VectorClass=!0;static $typeName="vector";static $numTypeParams=1;static $isPhantom=[!1];$typeName="vector";$fullTypeName;$typeArgs;$isPhantom=[!1];elements;constructor(a,r){this.$fullTypeName=D(this.$typeName,...a),this.$typeArgs=a,this.elements=r}static reified(a){return{typeName:s.$typeName,fullTypeName:D(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs(_t(a)),fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),new:r=>new s([B(a)],r),kind:"VectorClassReified"}}static get r(){return s.reified}static get bcs(){return ts.vector}static fromFields(a,r){return s.reified(a).new(r.map(i=>x(a,i)))}static fromFieldsWithTypes(a,r){return s.reified(a).new(r.map(i=>k(a,i)))}static fromBcs(a,r){return s.fromFields(a,s.bcs(_t(a)).parse(r))}toJSONField(){return this.elements.map(a=>At(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=>F(a,i)))}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a vector json object");return s.fromJSONField(a,r.elements)}};function Tt(s){return Rr.r(s)}function _(s){return typeof s=="string"?{phantomType:s,kind:"PhantomReified"}:{phantomType:s.fullTypeName,kind:"PhantomReified"}}var as=qe.bytes(32).transform({input:s=>ns(s),output:s=>rs(s)});function _t(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 as;default:return s.bcs}}function B(s){switch(s){case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"bool":case"address":return s}switch(s.kind){case"PhantomReified":return s.phantomType;case"StructClassReified":return s.fullTypeName;case"VectorClassReified":return s.fullTypeName}throw new Error("unreachable")}function x(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 k(s,a){switch(s){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return 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:k(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(P(a[i])!==P(B(r[i])))throw new Error(`provided item has mismatching type argments ${s} (expected ${B(r[i])}, got ${a[i]}))`)}function Ze(s,a){let{typeArgs:r}=te(s.type);xe(s.type,r,a)}function At(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=>At(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:At(i[0],a);default:return a.toJSONField()}}function F(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:F(s.reifiedTypeArgs[0],a);default:return s.fromJSONField(a)}}Q();var bn="0x1";import{bcs as du}from"@mysten/sui/bcs";import{fromB64 as gu}from"@mysten/sui/utils";Q();import{bcs as vr}from"@mysten/sui/bcs";import{fromB64 as is}from"@mysten/sui/utils";function Sn(s){return s=P(s),s===`${bn}::string::String`}var Pn=class s{__StructClass=!0;static get $typeName(){return`${bn}::string::String`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;bytes;constructor(a,r){this.$fullTypeName=D(s.$typeName,...a),this.$typeArgs=a,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:D(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 _(s.reified())}static get p(){return s.phantom()}static get bcs(){return vr.struct("String",{bytes:vr.vector(vr.u8())})}static fromFields(a){return s.reified().new({bytes:x(Tt("u8"),a.bytes)})}static fromFieldsWithTypes(a){if(!Sn(a.type))throw new Error("not a String type");return s.reified().new({bytes:k(Tt("u8"),a.fields.bytes)})}static fromBcs(a){return s.fromFields(s.bcs.parse(a))}toJSONField(){return{bytes:At("vector<u8>",this.bytes)}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return s.reified().new({bytes:F(Tt("u8"),a.bytes)})}static fromJSON(a){if(a.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(a)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!Sn(a.type))throw new Error(`object at ${a.fields.id} is not a String object`);return s.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!Sn(a.bcs.type))throw new Error("object at is not a String object");return s.fromBcs(is(a.bcs.bcsBytes))}if(a.content)return s.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r){let i=await a.getObject({id:r,options:{showBcs:!0}});if(i.error)throw new Error(`error fetching String object at id ${r}: ${i.error.code}`);if(i.data?.bcs?.dataType!=="moveObject"||!Sn(i.data.bcs.type))throw new Error(`object at id ${r} is not a String object`);return s.fromSuiObjectData(i.data)}};Q();Q();var et="0x2";import{bcs as kr}from"@mysten/sui/bcs";import{fromB64 as Ga,fromHEX as ss,toHEX as os}from"@mysten/sui/utils";function wn(s){return s=P(s),s===`${et}::object::ID`}var ct=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=D(s.$typeName,...a),this.$typeArgs=a,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:D(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 _(s.reified())}static get p(){return s.phantom()}static get bcs(){return kr.struct("ID",{bytes:kr.bytes(32).transform({input:a=>ss(a),output:a=>os(a)})})}static fromFields(a){return s.reified().new({bytes:x("address",a.bytes)})}static fromFieldsWithTypes(a){if(!wn(a.type))throw new Error("not a ID type");return s.reified().new({bytes:k("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:F("address",a.bytes)})}static fromJSON(a){if(a.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(a)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!wn(a.type))throw new Error(`object at ${a.fields.id} is not a ID object`);return s.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!wn(a.bcs.type))throw new Error("object at is not a ID object");return s.fromBcs(Ga(a.bcs.bcsBytes))}if(a.content)return s.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r){let i=await a.getObject({id:r,options:{showBcs:!0}});if(i.error)throw new Error(`error fetching ID object at id ${r}: ${i.error.code}`);if(i.data?.bcs?.dataType!=="moveObject"||!wn(i.data.bcs.type))throw new Error(`object at id ${r} is not a ID object`);return s.fromSuiObjectData(i.data)}};function Cn(s){return s=P(s),s===`${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=D(s.$typeName,...a),this.$typeArgs=a,this.id=r.id}static reified(){return{typeName:s.$typeName,fullTypeName:D(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 _(s.reified())}static get p(){return s.phantom()}static get bcs(){return kr.struct("UID",{id:ct.bcs})}static fromFields(a){return s.reified().new({id:x(ct.reified(),a.id)})}static fromFieldsWithTypes(a){if(!Cn(a.type))throw new Error("not a UID type");return s.reified().new({id:k(ct.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:F(ct.reified(),a.id)})}static fromJSON(a){if(a.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(a)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!Cn(a.type))throw new Error(`object at ${a.fields.id} is not a UID object`);return s.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!Cn(a.bcs.type))throw new Error("object at is not a UID object");return s.fromBcs(Ga(a.bcs.bcsBytes))}if(a.content)return s.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r){let i=await a.getObject({id:r,options:{showBcs:!0}});if(i.error)throw new Error(`error fetching UID object at id ${r}: ${i.error.code}`);if(i.data?.bcs?.dataType!=="moveObject"||!Cn(i.data.bcs.type))throw new Error(`object at id ${r} is not a UID object`);return s.fromSuiObjectData(i.data)}};function Me(s,a){return s.moveCall({target:`${Ua.PUBLISHED_AT}::bytes32::from_hex`,arguments:[Se(s,a,`${Pn.$typeName}`)]})}async function je(s,a,r=[]){let i=await s(a),o=r.concat(i.data);return i.hasNextPage&&i.nextCursor?je(s,i.nextCursor,o):o}var In=class extends pe{constructor(r,i){super();this.nodeRpcUrlsConfig=r;this.api=i;this.client=new As({url:r.getNodeRpcUrl(this.chainSymbol)})}chainType="SUI";chainSymbol="SUI";client;send(){throw new h("Method send not implemented.")}async buildRawTransactionSwap(r){let i=r.sourceToken.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");(0,xr.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:A,fromTokenAddress:c,toTokenAddress:m,minimumReceiveAmount:u}=r,l=new Bn;l.setSender(A);let d={bridge:i.bridgeObjectAddress,coin:$({balance:BigInt(o),type:c}),receiveAmountMin:BigInt(u)},p=Ra(l,[c,m],d),g=await je(f=>this.client.getCoins({owner:r.toAccountAddress,coinType:m,cursor:f}));return g.length===0||!g[0]?l.transferObjects([p],r.toAccountAddress):l.mergeCoins(g[0].coinObjectId,[p]),await l.toJSON({client:this.client})}async buildRawTransactionSend(r){let i=await ke(this.chainType,r,this.api),{messenger:o}=i,A=r.sourceToken.suiAddresses;if(!A)throw new h("SUI token must contain 'suiAddresses'");switch((0,xr.setAddress)(A.bridgeAddress,A.bridgeAddressOrigin),(0,Za.setAddress)(A.utilsAddress),o){case 1:return this.buildRawTransactionAllbridgeSend(i,A);case 2:return this.buildRawTransactionWormholeSend(i,A);case 3:case 4:return this.buildRawTransactionCctpSend(r,i,A);case 5:throw new ae("Messenger OFT is not supported yet.")}}async buildRawTransactionAllbridgeSend(r,i){let{amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:g}=r,f=d;g&&(f=Fr(f).plus(g).toFixed());let y=new Bn;if(y.setSender(A),p==="stablecoin"){let S=BigInt(o)-BigInt(f),w={bridge:i.bridgeObjectAddress,messenger:i.allbridgeMessengerObjectAddress,amount:$({balance:S,type:c}),destinationChainId:m,nonce:Ee(),recipient:Me(y,ve(u)),receiveToken:Me(y,ve(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(f),type:c}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};Sr(y,c,w)}else{let S=f==="0"?$({balance:BigInt(f),useGasCoin:!1}):$({balance:BigInt(f)}),w={bridge:i.bridgeObjectAddress,messenger:i.allbridgeMessengerObjectAddress,amount:$({balance:BigInt(o),type:c}),destinationChainId:m,nonce:Ee(),recipient:Me(y,ve(u)),receiveToken:Me(y,ve(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:c}),feeSuiCoin:S};Sr(y,c,w)}return await y.toJSON({client:this.client})}async buildRawTransactionWormholeSend(r,i){let{amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:g}=r,f=d;g&&(f=Fr(f).plus(g).toFixed());let y=new Bn;if(y.setSender(A),p==="stablecoin"){let S=BigInt(o)-BigInt(f),w={bridge:i.bridgeObjectAddress,messenger:i.wormholeMessengerObjectAddress,wormholeState:i.wormholeStateObjectAddress,theClock:Ea,amount:$({balance:S,type:c}),destinationChainId:m,nonce:Ee(),recipient:Me(y,ve(u)),receiveToken:Me(y,ve(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(f),type:c}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};br(y,c,w)}else{let S=f==="0"?$({balance:BigInt(f),useGasCoin:!1}):$({balance:BigInt(f)}),w={bridge:i.bridgeObjectAddress,messenger:i.wormholeMessengerObjectAddress,wormholeState:i.wormholeStateObjectAddress,theClock:Ea,amount:$({balance:BigInt(o),type:c}),destinationChainId:m,nonce:Ee(),recipient:Me(y,ve(u)),receiveToken:Me(y,ve(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:c}),feeSuiCoin:S};br(y,c,w)}return await y.toJSON({client:this.client})}async buildRawTransactionCctpSend(r,i,o){let{amount:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:g}=i;(0,Va.setAddress)(o.cctpAddress,o.cctpAddressOrigin);let f=d;g&&(f=Fr(f).plus(g).toFixed());let y=new Bn;y.setSender(c);let S=Me(y,ve(l)),w;if(r.destinationToken.chainType==="SOLANA"){let b=await ln(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));w=Me(y,ve(b))}else w=S;if(p==="stablecoin"){let b=BigInt(A)-BigInt(f),R={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:$({balance:b,type:m}),destinationChainId:u,recipient:w,recipientWalletAddress:S,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(f),type:m}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};Cr(y,m,R)}else{let b=f==="0"?$({balance:BigInt(f),useGasCoin:!1}):$({balance:BigInt(f)}),R={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:$({balance:BigInt(A),type:m}),destinationChainId:u,recipient:w,recipientWalletAddress:S,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:m}),feeSuiCoin:b};Cr(y,m,R)}return await y.toJSON({client:this.client})}};import{Big as us}from"big.js";import cs from"bn.js";function Rn(s){return"0x"+new cs(s).toString("hex")}function ja(s){return new Promise(a=>setTimeout(()=>a(),s))}async function vn(s,a){let r=await s.trx.sign(a);if(!r.signature)throw new dt("Transaction was not signed properly");let o=(await s.trx.sendRawTransaction(r)).transaction.txID;return await ms(s,o),{txId:o}}async function ms(s,a,r=1e4){let i=Date.now();for(;;){if(Date.now()-i>r)throw new Ot("Transaction not found");let o=await s.trx.getUnconfirmedTransactionInfo(a);if(!o?.receipt){await ja(2e3);continue}if(o.receipt.result==="SUCCESS")return o;throw new Ot(`Transaction status is ${o.receipt.result}`)}}var $t=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 vn(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:A,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=r,d=[{type:"uint256",value:i},{type:"bytes32",value:c},{type:"bytes32",value:u},{type:"address",value:m},{type:"uint256",value:l}];return this.buildRawTransaction(o,"swap(uint256,bytes32,bytes32,address,uint256)",d,"0",A)}async buildRawTransactionSend(r){let i=await ke(this.chainType,r,this.api);return this.buildRawTransactionSendFromParams(r,i)}async buildRawTransactionSendFromParams(r,i){let{amount:o,contractAddress:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,toTokenAddress:d,messenger:p,fee:g,gasFeePaymentMethod:f,extraGas:y,extraGasDest:S}=i,w=g;y&&(w=us(w).plus(y).toFixed());let b=Ee().toString(),R,I,W;switch(p){case 3:case 4:f==="stablecoin"?(R=[{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:u},{type:"uint256",value:w}],I="0"):(R=[{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:u},{type:"uint256",value:0}],I=w),W="bridge(uint256,bytes32,uint256,uint256)";break;case 5:f==="stablecoin"?(R=[{type:"address",value:r.sourceToken.tokenAddress},{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:u},{type:"uint256",value:w},{type:"uint256",value:S??"0"},{type:"uint256",value:"10"}],I="0"):(R=[{type:"address",value:r.sourceToken.tokenAddress},{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:u},{type:"uint256",value:0},{type:"uint256",value:S??"0"},{type:"uint256",value:"10"}],I=w),W="bridge(address,uint256,bytes32,uint256,uint256,uint256,uint256)";break;case 1:case 2:f==="stablecoin"?(R=[{type:"bytes32",value:m},{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:u},{type:"bytes32",value:d},{type:"uint256",value:b},{type:"uint8",value:p},{type:"uint256",value:w}],I="0"):(R=[{type:"bytes32",value:m},{type:"uint256",value:o},{type:"bytes32",value:l},{type:"uint256",value:u},{type:"bytes32",value:d},{type:"uint256",value:b},{type:"uint8",value:p},{type:"uint256",value:0}],I=w),W="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)";break}return this.buildRawTransaction(A,W,R,I,c)}async buildRawTransaction(r,i,o,A,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+A},o,c);if(!m?.result?.result)throw new h("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var kn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new dn(a,r,i,o)}rawTxBuilder;async getAllowance(a,r){let i,o;r?(i=a,o=r):o=a;let A=Vt(o.token,o.messenger);return await this.tokenService.getAllowance({...o,spender:A},i)}async checkAllowance(a,r){let i,o;r?(i=a,o=r):o=a;let A=Vt(o.token,o.messenger);return this.tokenService.checkAllowance({...o,spender:A},i)}async approve(a,r){let i=Vt(r.token,r.messenger);return this.tokenService.approve(a,{...r,spender:i})}async send(a,r){return U(r.amount),E("amount",r.amount,r.sourceToken.decimals),pn(r.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).send(r)}};function Vt(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 pn(s,a,r,i,o){switch(M.getChainProperty(s).chainType){case"EVM":{if(o)return new Et(o,a,r);{let A=r.getNodeRpcUrl(s);return new Et(new ds(A),a,r)}}case"TRX":{if(o)return new $t(o,a);{let A=r.getNodeRpcUrl(s);return new $t(new ls({fullHost:A,solidityNode:A,eventServer:A}),a)}}case"SOLANA":return new hn(r.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:i.wormholeMessengerProgramId,solanaLookUpTable:i.solanaLookUpTable,cctpParams:i.cctpParams,jupiterParams:{jupiterUrl:i.jupiterUrl,jupiterApiKeyHeader:i.jupiterApiKeyHeader,jupiterMaxAccounts:i.jupiterMaxAccounts}},a);case"SRB":return new Tn(r,i,a);case"SUI":return new In(r,a)}}import{Big as xs}from"big.js";import Ms from"timed-cache";import{TronWeb as Os}from"tronweb";import{FMT_BYTES as Ds,FMT_NUMBER as Ns,Web3 as Ws}from"web3";import{Big as Ye}from"big.js";function _a(s,a,r,i,o){let A=O(s,3),c=Ye(A),m=Ye(r),u=Ye(i).plus(o),l,d;if(m.eq(0)||u.eq(0)){let g=c.div(2);l=Ye(i).plus(g),d=Ye(o).plus(g)}else l=Ye(i).plus(c.mul(i).div(u)),d=Ye(o).plus(c.mul(o).div(u));return Ye(ia(a,l.toFixed(),d.toFixed())).minus(m).toFixed()}function $a(s){let a=O(s,3);return Ye(a).round().toFixed()}import{Web3 as tt}from"web3";var ps={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"}]},Jt=ps;var oe=class{lpAmount;rewardDebt;constructor(a){this.lpAmount=a.lpAmount,this.rewardDebt=a.rewardDebt}get userLiquidity(){return v(this.lpAmount,3).toFixed()}earned(a,r){let i=ra(this.lpAmount,this.rewardDebt,a.accRewardPerShareP,a.p);return r?v(i,r).toFixed():i}};var ge=class{};var Lt=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 An(this.getUserBalanceInfoByBatch(r,i),`Cannot get UserBalanceInfo for ${i.name} on ${i.chainSymbol}`,5e3)}catch{o=await sr(()=>this.getUserBalanceInfoPerProperty(r,i),`Cannot get UserBalanceInfo for ${i.name} on ${i.chainSymbol}`,5,2e3)}return o}async getPoolInfoFromChain(r){let i;try{i=await An(this.getPoolInfoByBatch(r),`Cannot get PoolInfo for ${r.name} on ${r.chainSymbol}`,5e3)}catch{i=await sr(()=>this.getPoolInfoPerProperty(r),`Cannot get PoolInfo for ${r.name} on ${r.chainSymbol}`,5,2e3)}return i}async getUserBalanceInfoByBatch(r,i){let o=new this.web3.eth.BatchRequest,A=this.getPoolContract(i.poolAddress),c=A.methods.userRewardDebt(r).encodeABI(),m=A.methods.balanceOf(r).encodeABI();o.add({method:"eth_call",params:[{to:i.poolAddress,data:c},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:m},"latest"]});let[u,l]=await o.execute();if(u&&l&&!u.error&&!l.error)return new oe({lpAmount:tt.utils.toBigInt(l.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(),A=(await this.getPoolContract(i.poolAddress).methods.balanceOf(r).call()).toString();return new oe({lpAmount:A,rewardDebt:o})}async getPoolInfoByBatch(r){let i=new this.web3.eth.BatchRequest,o=this.getPoolContract(r.poolAddress),A=o.methods.a().encodeABI(),c=o.methods.d().encodeABI(),m=o.methods.tokenBalance().encodeABI(),u=o.methods.vUsdBalance().encodeABI(),l=o.methods.totalSupply().encodeABI(),d=o.methods.accRewardPerShareP().encodeABI();i.add({method:"eth_call",params:[{to:r.poolAddress,data:A},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:c},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:m},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:u},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:l},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:d},"latest"]});let[p,g,f,y,S,w]=await i.execute();if(p&&g&&f&&y&&S&&w&&!p.error&&!g.error&&!f.error&&!y.error&&!S.error&&!w.error){let b=tt.utils.toBigInt(f.result).toString(),R=tt.utils.toBigInt(y.result).toString(),I=se({tokenBalance:b,vUsdBalance:R});return{aValue:tt.utils.toBigInt(p.result).toString(),dValue:tt.utils.toBigInt(g.result).toString(),tokenBalance:b,vUsdBalance:R,totalLpAmount:tt.utils.toBigInt(S.result).toString(),accRewardPerShareP:tt.utils.toBigInt(w.result).toString(),p:this.P,imbalance:I}}throw new Error("Batched failed")}async getPoolInfoPerProperty(r){let i=this.getPoolContract(r.poolAddress),o=(await i.methods.a().call()).toString(),A=(await i.methods.d().call()).toString(),c=(await i.methods.tokenBalance().call()).toString(),m=(await i.methods.vUsdBalance().call()).toString(),u=(await i.methods.totalSupply().call()).toString(),l=(await i.methods.accRewardPerShareP().call()).toString(),d=se({tokenBalance:c,vUsdBalance:m});return{aValue:o,dValue:A,tokenBalance:c,vUsdBalance:m,totalLpAmount:u,accRewardPerShareP:l,p:this.P,imbalance:d}}async buildRawTransactionDeposit(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.deposit(r.amount).encodeABI()})}async buildRawTransactionWithdraw(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.withdraw(r.amount).encodeABI()})}async buildRawTransactionClaimRewards(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(r){return{from:r.accountAddress,to:r.token.poolAddress,value:"0"}}getPoolContract(r){return new this.web3.eth.Contract(Jt.abi,r)}};var Fn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o}async approve(a,r){if(r){let i=a,o=r;return this.tokenService.buildRawTransactionApprove({...o,spender:o.token.poolAddress},i)}else{let i=a;return this.tokenService.buildRawTransactionApprove({...i,spender:i.token.poolAddress})}}async deposit(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),a.amount=O(a.amount,a.token.decimals).toFixed(),bt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionDeposit(a)}async withdraw(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),a.amount=O(a.amount,3).toFixed(),bt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionWithdraw(a)}async claimRewards(a,r){return bt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionClaimRewards(a)}};import{AnchorProvider as gs,BN as Ja,Program as fs,Spl as ys,web3 as hs}from"@project-serum/anchor";import{Connection as Ts,PublicKey as nt}from"@solana/web3.js";var xn=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),A=this.getBridge(i.bridgeAddress,o),c=new nt(i.poolAddress),m=await A.account.pool.fetch(c);try{let u=await cr(new nt(r),m.mint,A.programId),{lpAmount:l,rewardDebt:d}=await A.account.userDeposit.fetch(u);return new oe({lpAmount:l.toString(),rewardDebt:d.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),A=o.vUsdBalance.toString(),c=o.tokenBalance.toString(),m=se({tokenBalance:c,vUsdBalance:A});return{dValue:o.d.toString(),aValue:o.a.toString(),totalLpAmount:o.totalLpAmount.toString(),vUsdBalance:A,tokenBalance:c,accRewardPerShareP:o.accRewardPerShareP.toString(),p:this.P,imbalance:m}}async buildRawTransactionDeposit(r){let{bridge:i,accounts:o,preInstructions:A}=await this.prepareDataForTransaction(r),c=await i.methods.deposit(new Ja(r.amount)).accounts(o).preInstructions(A).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new nt(r.accountAddress),await yt(c,r.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionWithdraw(r){let{bridge:i,accounts:o,preInstructions:A}=await this.prepareDataForTransaction(r),c=await i.methods.withdraw(new Ja(r.amount)).accounts(o).preInstructions(A).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new nt(r.accountAddress),await yt(c,r.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionClaimRewards(r){let{bridge:i,accounts:o,preInstructions:A}=await this.prepareDataForTransaction(r),c=await i.methods.claimRewards().accounts(o).preInstructions(A).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new nt(r.accountAddress),await yt(c,r.txFeeParams,this.solanaRpcUrl),c}async prepareDataForTransaction(r){let i=this.buildAnchorProvider(r.accountAddress),o=this.getBridge(r.token.bridgeAddress,i),{accounts:A,preInstructions:c}=await this._getLPTransactionData(o,r.token.poolAddress,r.accountAddress,i);return{bridge:o,accounts:A,preInstructions:c}}getBridge(r,i){return new fs(Zt,r,i)}buildAnchorProvider(r){let i=new Ts(this.solanaRpcUrl,"confirmed"),o=new nt(r);return new gs(i,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(r,i,o,A){let c=new nt(o),m=await Ke(r.programId),u=await pt(r.programId),l=new nt(i),p=(await r.account.pool.fetch(l)).mint,g=await Re(c,p),f=await gt(p,r.programId),y=await cr(c,p,r.programId),S=[hs.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await ft(g,A)}catch{let I=await ys.associatedToken(A).methods.create().accounts({mint:p,owner:c,associatedAccount:g}).instruction();S.push(I)}try{await r.account.userDeposit.fetch(y)}catch{let R=await r.methods.initDepositAccount().accounts({mint:p,user:c,userDeposit:y}).instruction();S.push(R)}return{accounts:{mint:p,user:c,config:m,pool:l,bridgeAuthority:u,userDeposit:y,userToken:g,bridgeToken:f},preInstructions:S}}};import{contract as BS}from"@stellar/stellar-sdk";import{contract as t}from"@stellar/stellar-sdk";var bs=t.Spec,Ss=t.Client;var Mn=class extends Ss{constructor(r){super(new bs(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),r);this.options=r}fromJSON={initialize:this.txFromJSON,deposit:this.txFromJSON,withdraw:this.txFromJSON,swap_to_v_usd:this.txFromJSON,swap_from_v_usd:this.txFromJSON,claim_rewards:this.txFromJSON,set_fee_share:this.txFromJSON,adjust_total_lp_amount:this.txFromJSON,set_balance_ratio_min_bp:this.txFromJSON,stop_deposit:this.txFromJSON,start_deposit:this.txFromJSON,stop_withdraw:this.txFromJSON,start_withdraw:this.txFromJSON,set_stop_authority:this.txFromJSON,set_bridge:this.txFromJSON,set_admin:this.txFromJSON,set_admin_fee_share:this.txFromJSON,claim_admin_fee:this.txFromJSON,pending_reward:this.txFromJSON,get_pool:this.txFromJSON,get_admin:this.txFromJSON,get_stop_authority:this.txFromJSON,get_bridge:this.txFromJSON,get_user_deposit:this.txFromJSON,upgrade:this.txFromJSON}};import{contract as Zd,rpc as Ps}from"@stellar/stellar-sdk";var La=Ps.Api;function St(s){let{simulation:a,options:r}=s;if(!a)throw new Error("Soroban assembled transaction does not have simulation");if(La.isSimulationSuccess(a))return a.result==null?void 0:r.parseResultXdr(a.result.retval);throw new Error(a.error)}function Pt(s){let{simulation:a}=s;if(!a)throw new Error("Soroban assembled transaction does not have simulation");return La.isSimulationError(a)}var On=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 A=await this.getContract(i.poolAddress).get_user_deposit({user:r});if(Pt(A))throw new h;let c=St(A);if(!c)throw new h;let m=c.unwrap();return new oe({lpAmount:m.lp_amount.toString(),rewardDebt:m.reward_debt.toString()})}async getPoolInfoFromChain(r){let o=await this.getContract(r.poolAddress).get_pool();if(Pt(o))throw new h;let A=St(o);if(!A)throw new h;let c=A.unwrap();return{aValue:c.a.toString(),accRewardPerShareP:c.acc_reward_per_share_p.toString(),dValue:c.d.toString(),tokenBalance:c.token_balance.toString(),p:this.P,totalLpAmount:c.total_lp_amount.toString(),vUsdBalance:c.v_usd_balance.toString(),imbalance:se({tokenBalance:c.token_balance.toString(),vUsdBalance:c.v_usd_balance.toString()})}}async buildRawTransactionDeposit(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).deposit({sender:r.accountAddress,amount:BigInt(r.amount)})).toXDR()}async buildRawTransactionWithdraw(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).withdraw({sender:r.accountAddress,amount_lp:BigInt(r.amount)})).toXDR()}async buildRawTransactionClaimRewards(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).claim_rewards({sender:r.accountAddress})).toXDR()}getContract(r,i){let o={publicKey:i,contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new Mn(o)}};import{SuiClient as ks}from"@mysten/sui/client";import{Transaction as jn}from"@mysten/sui/transactions";var Ct=Ie(ze());Q();Q();import{bcs as Xa}from"@mysten/sui/bcs";import{fromB64 as ws}from"@mysten/sui/utils";function Dn(s){return s=P(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=D(s.$typeName,...a),this.$typeArgs=a,this.value=r.value}static reified(a){return{typeName:s.$typeName,fullTypeName:D(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([B(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return _(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Xa.struct("Balance",{value:Xa.u64()})}static fromFields(a,r){return s.reified(a).new({value:x("u64",r.value)})}static fromFieldsWithTypes(a,r){if(!Dn(r.type))throw new Error("not a Balance type");return Ze(r,[a]),s.reified(a).new({value:k("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:F("u64",r.value)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(D(s.$typeName,B(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Dn(r.type))throw new Error(`object at ${r.fields.id} is not a Balance object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Dn(r.bcs.type))throw new Error("object at is not a 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=P(i[0]),A=P(B(a));if(o!==P(B(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,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 Balance object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Dn(o.data.bcs.type))throw new Error(`object at id ${i} is not a Balance object`);return s.fromSuiObjectData(r,o.data)}};var Dr=Ie(ze());Q();var Mr=Ie(ze());import{bcs as Nn}from"@mysten/sui/bcs";import{fromB64 as Cs}from"@mysten/sui/utils";function Wn(s){return s=P(s),s.startsWith(`${Mr.PKG_V1}::pool_rewards::PoolRewards<`)}var mt=class s{__StructClass=!0;static get $typeName(){return`${Mr.PKG_V1}::pool_rewards::PoolRewards`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;accRewardPerShareP;adminFeeShareBp;adminFee;rewards;lpSupply;constructor(a,r){this.$fullTypeName=D(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:D(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([B(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return _(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Nn.struct("PoolRewards",{acc_reward_per_share_p:Nn.u128(),admin_fee_share_bp:Nn.u64(),admin_fee:ne.bcs,rewards:ne.bcs,lp_supply:Nn.u64()})}static fromFields(a,r){return s.reified(a).new({accRewardPerShareP:x("u128",r.acc_reward_per_share_p),adminFeeShareBp:x("u64",r.admin_fee_share_bp),adminFee:x(ne.reified(a),r.admin_fee),rewards:x(ne.reified(a),r.rewards),lpSupply:x("u64",r.lp_supply)})}static fromFieldsWithTypes(a,r){if(!Wn(r.type))throw new Error("not a PoolRewards type");return Ze(r,[a]),s.reified(a).new({accRewardPerShareP:k("u128",r.fields.acc_reward_per_share_p),adminFeeShareBp:k("u64",r.fields.admin_fee_share_bp),adminFee:k(ne.reified(a),r.fields.admin_fee),rewards:k(ne.reified(a),r.fields.rewards),lpSupply:k("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:F("u128",r.accRewardPerShareP),adminFeeShareBp:F("u64",r.adminFeeShareBp),adminFee:F(ne.reified(a),r.adminFee),rewards:F(ne.reified(a),r.rewards),lpSupply:F("u64",r.lpSupply)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(D(s.$typeName,B(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Wn(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"||!Wn(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=P(i[0]),A=P(B(a));if(o!==P(B(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,Cs(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"||!Wn(o.data.bcs.type))throw new Error(`object at id ${i} is not a PoolRewards object`);return s.fromSuiObjectData(r,o.data)}};Q();var Or=Ie(ze());import{bcs as wt}from"@mysten/sui/bcs";import{fromB64 as Bs}from"@mysten/sui/utils";function Gn(s){return s=P(s),s.startsWith(`${Or.PKG_V1}::pool_state::PoolState<`)}var ut=class s{__StructClass=!0;static get $typeName(){return`${Or.PKG_V1}::pool_state::PoolState`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;tokenBalance;vusdBalance;d;a;balanceRatioMinBp;constructor(a,r){this.$fullTypeName=D(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:D(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([B(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return _(s.reified(a))}static get p(){return s.phantom}static get bcs(){return wt.struct("PoolState",{token_balance:wt.u64(),vusd_balance:wt.u64(),d:wt.u64(),a:wt.u64(),balance_ratio_min_bp:wt.u64()})}static fromFields(a,r){return s.reified(a).new({tokenBalance:x("u64",r.token_balance),vusdBalance:x("u64",r.vusd_balance),d:x("u64",r.d),a:x("u64",r.a),balanceRatioMinBp:x("u64",r.balance_ratio_min_bp)})}static fromFieldsWithTypes(a,r){if(!Gn(r.type))throw new Error("not a PoolState type");return Ze(r,[a]),s.reified(a).new({tokenBalance:k("u64",r.fields.token_balance),vusdBalance:k("u64",r.fields.vusd_balance),d:k("u64",r.fields.d),a:k("u64",r.fields.a),balanceRatioMinBp:k("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:F("u64",r.tokenBalance),vusdBalance:F("u64",r.vusdBalance),d:F("u64",r.d),a:F("u64",r.a),balanceRatioMinBp:F("u64",r.balanceRatioMinBp)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(D(s.$typeName,B(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Gn(r.type))throw new Error(`object at ${r.fields.id} is not a PoolState object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Gn(r.bcs.type))throw new Error("object at is not a PoolState object");let i=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=P(i[0]),A=P(B(a));if(o!==P(B(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,Bs(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching PoolState object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Gn(o.data.bcs.type))throw new Error(`object at id ${i} is not a PoolState object`);return s.fromSuiObjectData(r,o.data)}};import{bcs as Xt}from"@mysten/sui/bcs";import{fromB64 as Is}from"@mysten/sui/utils";function Un(s){return s=P(s),s.startsWith(`${Dr.PKG_V1}::pool::Pool<`)}var En=class s{__StructClass=!0;static get $typeName(){return`${Dr.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=D(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:D(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([B(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return _(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Xt.struct("Pool",{id:Pe.bcs,state:ut.bcs,rewards:mt.bcs,fee_share_bp:Xt.u64(),can_deposit:Xt.bool(),can_withdraw:Xt.bool(),decimals:Xt.u8(),balance:ne.bcs})}static fromFields(a,r){return s.reified(a).new({id:x(Pe.reified(),r.id),state:x(ut.reified(a),r.state),rewards:x(mt.reified(a),r.rewards),feeShareBp:x("u64",r.fee_share_bp),canDeposit:x("bool",r.can_deposit),canWithdraw:x("bool",r.can_withdraw),decimals:x("u8",r.decimals),balance:x(ne.reified(a),r.balance)})}static fromFieldsWithTypes(a,r){if(!Un(r.type))throw new Error("not a Pool type");return Ze(r,[a]),s.reified(a).new({id:k(Pe.reified(),r.fields.id),state:k(ut.reified(a),r.fields.state),rewards:k(mt.reified(a),r.fields.rewards),feeShareBp:k("u64",r.fields.fee_share_bp),canDeposit:k("bool",r.fields.can_deposit),canWithdraw:k("bool",r.fields.can_withdraw),decimals:k("u8",r.fields.decimals),balance:k(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:F(Pe.reified(),r.id),state:F(ut.reified(a),r.state),rewards:F(mt.reified(a),r.rewards),feeShareBp:F("u64",r.feeShareBp),canDeposit:F("bool",r.canDeposit),canWithdraw:F("bool",r.canWithdraw),decimals:F("u8",r.decimals),balance:F(ne.reified(a),r.balance)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(D(s.$typeName,B(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Un(r.type))throw new Error(`object at ${r.fields.id} is not a Pool object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Un(r.bcs.type))throw new Error("object at is not a Pool object");let i=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=P(i[0]),A=P(B(a));if(o!==P(B(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,Is(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching Pool object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Un(o.data.bcs.type))throw new Error(`object at id ${i} is not a Pool object`);return s.fromSuiObjectData(r,o.data)}};Q();var Wr=Ie(ze());import{bcs as Nr}from"@mysten/sui/bcs";import{fromB64 as Rs}from"@mysten/sui/utils";function Vn(s){return s=P(s),s.startsWith(`${Wr.PKG_V1}::user_deposit::UserDeposit<`)}var Zn=class s{__StructClass=!0;static get $typeName(){return`${Wr.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=D(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:D(s.$typeName,B(a)),typeArgs:[B(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([B(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return _(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Nr.struct("UserDeposit",{id:Pe.bcs,lp_amount:Nr.u64(),reward_debt:Nr.u64()})}static fromFields(a,r){return s.reified(a).new({id:x(Pe.reified(),r.id),lpAmount:x("u64",r.lp_amount),rewardDebt:x("u64",r.reward_debt)})}static fromFieldsWithTypes(a,r){if(!Vn(r.type))throw new Error("not a UserDeposit type");return Ze(r,[a]),s.reified(a).new({id:k(Pe.reified(),r.fields.id),lpAmount:k("u64",r.fields.lp_amount),rewardDebt:k("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:F(Pe.reified(),r.id),lpAmount:F("u64",r.lpAmount),rewardDebt:F("u64",r.rewardDebt)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return xe(D(s.$typeName,B(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Vn(r.type))throw new Error(`object at ${r.fields.id} is not a UserDeposit object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Vn(r.bcs.type))throw new Error("object at is not a UserDeposit object");let i=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=P(i[0]),A=P(B(a));if(o!==P(B(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,Rs(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching UserDeposit object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Vn(o.data.bcs.type))throw new Error(`object at id ${i} is not a UserDeposit object`);return s.fromSuiObjectData(r,o.data)}};function Ka(s,a,r){if(a.length===0||!a[0])return[];let i=a[0],o=s.reduce((m,u)=>m+BigInt(u),BigInt(0)),A=BigInt(i.balance),c=[];for(let m of a.slice(1)){if(A>o)return Ya(r,i,c,s);A+=BigInt(m.balance),c.push(m)}return A>=o?Ya(r,i,c,s):[]}function Ya(s,a,r,i){let o=i.map(A=>s.pure.u64(A));return r.length>0&&s.mergeCoins(a.coinObjectId,r.map(A=>A.coinObjectId)),s.splitCoins(a.coinObjectId,o)}var vs="0x0000000000000000000000000000000000000000000000000000000000000000";async function Ha(s,a,r){let i=await s.devInspectTransactionBlock({sender:vs,transactionBlock:a});if(i.effects.status.status!=="success")throw new Error(`inspectionResult failed. ${JSON.stringify(i,null,2)}`);let o=i.results?.pop()?.returnValues?.pop();if(!o)throw new Error(`Something with inspectionResult went wrong. ${JSON.stringify(i,null,2)}`);let[A,c]=o;return typeof r=="object"?r.fromBcs(Uint8Array.from(A)).toJSONField():_t(r).parse(Uint8Array.from(A))}var _n=class extends ge{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.client=new ks({url:r})}chainType="SUI";client;async getUserBalanceInfo(r,i){if(!i.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=i.suiAddresses;if(!o)throw new h("SUI token must contain 'suiAddresses'");(0,Ct.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin);let c=(await this.fetchDeposits(r,i.originTokenAddress)).reduce((m,u)=>{if(u.data)return m.lpAmount+=BigInt(u.data.content.fields.lp_amount),m.rewardDebt+=BigInt(u.data.content.fields.reward_debt),m;throw new h("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new oe({lpAmount:c.lpAmount.toString(),rewardDebt:c.rewardDebt.toString()})}async fetchDeposits(r,i){return await je(o=>this.client.getOwnedObjects({owner:r,filter:{StructType:Zn.phantom(_(i)).phantomType},options:{showContent:!0},cursor:o}))}async getPoolInfoFromChain(r){let i=r.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");if((0,Ct.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=48,A=new jn;xa(A,r.originTokenAddress,i.bridgeObjectAddress);let c=await Ha(this.client,A,En.reified(_(r.originTokenAddress))),m=c.state.tokenBalance,u=c.state.vusdBalance,l=se({tokenBalance:m,vUsdBalance:u});return{dValue:c.state.d,aValue:c.state.a,totalLpAmount:c.rewards.lpSupply,vUsdBalance:u,tokenBalance:m,accRewardPerShareP:c.rewards.accRewardPerShareP,p:o,imbalance:l}}async buildRawTransactionDeposit(r){let i=r.token.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");if((0,Ct.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=await je(p=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:p}));if(o.length===0||!o[0])throw new $e("No coins to deposit");let A=o[0],c=new jn;c.setSender(r.accountAddress);let{depositObj:m,isNewDeposit:u}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,c),[l]=Ka([r.amount],o,c);if(!l)throw new $e("No coins to deposit");if(!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let d=va(c,r.token.originTokenAddress,{bridge:i.bridgeObjectAddress,userDeposit:m,coin:l});return c.mergeCoins(A.coinObjectId,[d]),u&&c.transferObjects([m],r.accountAddress),await c.toJSON({client:this.client})}async getDepositObject(r,i,o){let A=await this.fetchDeposits(r,i);if(A.length===0||!A[0]){let c=_(i).phantomType;return{depositObj:Ma(o,c),isNewDeposit:!0}}else{if(A[0].data?.objectId)return{depositObj:A[0].data.objectId,isNewDeposit:!1};throw new h("Something went wrong while deposit")}}async buildRawTransactionWithdraw(r){let i=r.token.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");if((0,Ct.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=_(r.token.originTokenAddress).phantomType,A=new jn;A.setSender(r.accountAddress);let{depositObj:c,isNewDeposit:m}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,A);if(m)throw new $e("No deposit found");let u=ka(A,o,{bridge:i.bridgeObjectAddress,userDeposit:c,amountLp:BigInt(r.amount)}),l=await je(d=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:d}));if(!u[0]||!u[1])throw new h("No rewards found");return l[0]?A.mergeCoins(l[0].coinObjectId,[u[0],u[1]]):(A.mergeCoins(u[0],[u[1]]),A.transferObjects([u[0]],r.accountAddress)),await A.toJSON({client:this.client})}async buildRawTransactionClaimRewards(r){let i=r.token.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");if((0,Ct.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=_(r.token.originTokenAddress).phantomType,A=new jn;A.setSender(r.accountAddress);let{depositObj:c,isNewDeposit:m}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,A);if(m)throw new $e("No deposit found");let u=Fa(A,o,{bridge:i.bridgeObjectAddress,userDeposit:c}),l=await je(d=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:d}));return l[0]?A.mergeCoins(l[0].coinObjectId,[u]):A.transferObjects([u],r.accountAddress),await A.toJSON({client:this.client})}};import{Web3 as $n}from"web3";import{encodeFunctionCall as Fs}from"web3-eth-abi";var Yt=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 A=Ut(o.poolAddress),c=Ut(i),m=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:A,data:this.getFunctionAbi("userRewardDebt",c)},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:A,data:this.getFunctionAbi("balanceOf",c)},"latest"]}],l=await(await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(m)})).json();if(Array.isArray(l)&&l.length===2){let d=p=>{let g=l.find(f=>f.id===p);if(!g||!g.result)throw new Error(`Missing or invalid result for id ${p}`);return $n.utils.toBigInt(g.result).toString()};return new oe({lpAmount:$n.utils.toBigInt(d(2)).toString(),rewardDebt:$n.utils.toBigInt(d(1)).toString()})}throw new Error("Batched HTTP call failed")}async getUserBalanceInfoPerProperty(r,i){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(r);let o=this.getContract(i.poolAddress),A=(await o.methods.userRewardDebt(r).call()).toString(),c=(await o.methods.balanceOf(r).call()).toString();return new oe({lpAmount:c,rewardDebt:A})}async getPoolInfoFromChain(r){let i;if(this.tronJsonRpc)try{i=await this.getPoolInfoByBatch(this.tronJsonRpc,r)}catch{i=await this.getPoolInfoPerProperty(r)}else i=await this.getPoolInfoPerProperty(r);return i}async getPoolInfoByBatch(r,i){let o=Ut(i.poolAddress),A=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("a")},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("d")},"latest"]},{jsonrpc:"2.0",id:3,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("tokenBalance")},"latest"]},{jsonrpc:"2.0",id:4,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("vUsdBalance")},"latest"]},{jsonrpc:"2.0",id:5,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("totalSupply")},"latest"]},{jsonrpc:"2.0",id:6,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("accRewardPerShareP")},"latest"]}],m=await(await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(A)})).json();if(Array.isArray(m)&&m.length===6){let u=g=>{let f=m.find(y=>y.id===g);if(!f||!f.result)throw new Error(`Missing or invalid result for id ${g}`);return $n.utils.toBigInt(f.result).toString()},l=u(3),d=u(4),p=se({tokenBalance:l,vUsdBalance:d});return{aValue:u(1),dValue:u(2),tokenBalance:l,vUsdBalance:d,totalLpAmount:u(5),accRewardPerShareP:u(6),p:this.P,imbalance:p}}throw new Error("Batched pool info call failed")}async getPoolInfoPerProperty(r){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(r.poolAddress);let i=this.getContract(r.poolAddress),[o,A,c,m,u,l]=await Promise.all([i.methods.a().call(),i.methods.d().call(),i.methods.tokenBalance().call(),i.methods.vUsdBalance().call(),i.methods.totalSupply().call(),i.methods.accRewardPerShareP().call()]),d=c.toString(),p=m.toString(),g=se({tokenBalance:d,vUsdBalance:p});return{aValue:o.toString(),dValue:A.toString(),tokenBalance:d,vUsdBalance:p,totalLpAmount:u.toString(),accRewardPerShareP:l.toString(),p:this.P,imbalance:g}}buildRawTransactionDeposit(r){let{amount:i,accountAddress:o}=r,A=[{type:"uint256",value:i}];return this.buildRawTransaction(r.token.poolAddress,"deposit(uint256)",A,"0",o)}buildRawTransactionWithdraw(r){let{amount:i,accountAddress:o}=r,A=[{type:"uint256",value:i}];return this.buildRawTransaction(r.token.poolAddress,"withdraw(uint256)",A,"0",o)}buildRawTransactionClaimRewards(r){let{accountAddress:i}=r,o=[];return this.buildRawTransaction(r.token.poolAddress,"claimRewards()",o,"0",i)}async buildRawTransaction(r,i,o,A,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+A},o,c);if(!m?.result?.result)throw new h("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}getContract(r){return this.tronWeb.contract(Jt.abi,r)}getFunctionAbi(r,...i){let o=Jt.abi.find(A=>A.type==="function"&&"name"in A&&A.name===r);if(!o)throw new Error(`${r} method not found in Pool ABI`);return Fs(o,i)}};var Jn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new Fn(a,r,this.params,o);let A=i.cachePoolInfoChainSec>0?i.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new Ms({defaultTtl:A})}rawTxBuilder;cache;async getAllowance(a,r){if(r){let i=a,o=r;return await this.tokenService.getAllowance({...o,spender:o.token.poolAddress},i)}else{let i=a;return await this.tokenService.getAllowance({...i,spender:i.token.poolAddress})}}async checkAllowance(a,r){if(r){let i=a,o=r;return this.tokenService.checkAllowance({...o,spender:o.token.poolAddress},i)}else{let i=a;return this.tokenService.checkAllowance({...i,spender:i.token.poolAddress})}}async approve(a,r){return this.tokenService.approve(a,{...r,spender:r.token.poolAddress})}async getAmountToBeDeposited(a,r,i){U(a),E("amount",a,r.decimals);let o=await this.getPoolInfoFromChain(r,i),{vUsdBalance:A,tokenBalance:c,aValue:m,dValue:u}=o,l=_a(a,m,u,c,A);return v(l,3).toFixed()}async getAmountToBeWithdrawn(a,r,i,o){U(a),E("amount",a,i.decimals);let A=await this.getPoolInfoFromChain(i,o),c=$a(a),m=le(c,i.decimals),l=(await this.getUserBalanceInfo(r,i,o)).earned(A)||"0",d=xs(m).plus(l).toFixed();return v(d,i.decimals).toFixed()}async getUserBalanceInfo(a,r,i){return bt(r.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).getUserBalanceInfo(a,r)}async getPoolInfoFromChain(a,r){let i={chainSymbol:a.chainSymbol,poolAddress:a.poolAddress},o=this.cache.get(i);if(o)return o;{let A=await bt(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).getPoolInfoFromChain(a);return this.cache.put(i,A),this.api.cachePut({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress},A),A}}};function bt(s,a,r,i,o){switch(M.getChainProperty(s).chainType){case"EVM":{if(o)return new Lt(o,a);{let A=r.getNodeRpcUrl(s),c=new Ws(A);return c.defaultReturnFormat={number:Ns.STR,bytes:Ds.HEX},new Lt(c,a)}}case"TRX":{let A=r.getNodeRpcUrl(s),c=i.tronJsonRpc;if(o)return new Yt(o,a,c);{let m=new Os({fullHost:A});return new Yt(m,a,c)}}case"SOLANA":{let A=r.getNodeRpcUrl(s);return new xn(A,a)}case"SRB":return new On(r,i,a);case"SUI":return new _n(r.getNodeRpcUrl(s),a)}}import{Big as L}from"big.js";function qa(s,a,r){let i=Gs(s,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),o=Us(i.amountIncludingCommissionInSystemPrecision,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo);return{swapToVUsdCalcResult:i,swapFromVUsdCalcResult:o}}function ei(s,a,r){let i=Es(s,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo),o=Vs(i.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:i,swapFromVUsdCalcResult:o}}function Gs(s,{feeShare:a,decimals:r},i){let o=L(s),A=o.times(a),c=o.minus(A);return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInSystemPrecision:Qa(it(c,r),i),amountExcludingCommissionInSystemPrecision:Qa(it(o,r),i)}}function Qa(s,a){if(s.eq(0))return"0";let r=L(a.tokenBalance).plus(s),i=Ue(r.toFixed(),a.aValue,a.dValue);return L(a.vUsdBalance).minus(i).round().toFixed()}function Us(s,{feeShare:a,decimals:r},i){if(L(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let A=L(s).plus(i.vUsdBalance),c=Ue(A,i.aValue,i.dValue),m=le(L(i.tokenBalance).minus(c),r),u=L(m).times(a),l=L(m).minus(u).round();return{bridgeFeeInTokenPrecision:u.round().toFixed(),amountIncludingCommissionInTokenPrecision:l.toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}function Es(s,{feeShare:a,decimals:r},i){let o=L(a).div(L(1).minus(a)),A=L(s).times(o),c=L(s).plus(A);return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInSystemPrecision:za(it(c,r),i),amountExcludingCommissionInSystemPrecision:za(it(s,r),i)}}function za(s,a){let r=L(a.tokenBalance).minus(s),i=Ue(r.toFixed(),a.aValue,a.dValue);return L(i).minus(a.vUsdBalance).round().toFixed()}function Vs(s,{feeShare:a,decimals:r},i){if(L(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let o=L(i.vUsdBalance).minus(s),A=Ue(o.toFixed(),i.aValue,i.dValue),c=L(A).minus(i.tokenBalance),m=le(c.toFixed(),r),u=L(a).div(L(1).minus(a)),l=L(m).times(u),d=L(m).plus(l);return{bridgeFeeInTokenPrecision:l.round().toFixed(),amountIncludingCommissionInTokenPrecision:d.round().toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}import{Big as rt}from"big.js";function ti(s,a,r,i,o){let A=Ge(s,a,r),c=le(A,a.decimals),m=Gt(A,i,o),u=rt(s).times(a.feeShare),l=rt(m).div(rt(1).minus(i.feeShare)).minus(m);return{sourceLPSwap:{fee:v(u,a.decimals).neg().round(a.decimals,rt.roundUp).toFixed(),swap:v(rt(s).minus(c).minus(u),a.decimals).neg().round(a.decimals,rt.roundUp).toFixed()},destLPSwap:{fee:v(l,i.decimals).neg().round(i.decimals,rt.roundUp).toFixed(),swap:v(le(A,i.decimals).minus(m).minus(l),i.decimals).neg().round(i.decimals,rt.roundUp).toFixed()}}}import Ls from"axios";var ni="3.23.1-alpha.1";function ri(s){return Object.entries(s).reduce((a,r)=>{let i=r[0],o=r[1],A=Js(i,o);return A&&(a[i]=A),a},{})}function ai(s){let a={};for(let[r,i]of Object.entries(s)){let o=r;for(let A of i.tokens){let c=Bt({chainSymbol:o,poolAddress:A.poolAddress}),m=se(A.poolInfo);a[c]={...A.poolInfo,imbalance:m}}}return a}function Zs(s,a){let{name:r,...i}=s,{poolInfo:o,...A}=a;return{...A,...i,chainName:r}}function js(s){switch(s){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4;case"oft":return 5}}function _s(s){return Object.entries(s).reduce((a,[r,i])=>(a[r]=$s(i),a),{})}function $s(s){return Object.entries(s).reduce((a,[r,i])=>{let o=js(r);return o&&(a[o]=i),a},{})}function Js(s,a){let r=M.getChainsProperties()[s];if(!r)return null;let i={...r,allbridgeChainId:a.chainId,bridgeAddress:a.bridgeAddress,oftBridgeAddress:a.oftBridgeAddress,transferTime:_s(a.transferTime),txCostAmount:a.txCostAmount,confirmations:a.confirmations,suiAddresses:a.suiAddresses};return{...i,tokens:a.tokens.map(o=>Zs(i,o))}}function Bt(s){return s.chainSymbol+"_"+s.poolAddress}function ii(s){let a=[];for(let[r,i]of Object.entries(s)){let o=r;for(let A of i.tokens)a.push({chainSymbol:o,poolAddress:A.poolAddress})}return a}function si(s){let a={};for(let[r,i]of Object.entries(s)){let o=r;for(let[A,c]of Object.entries(i))c.imbalance=se(c),a[Bt({chainSymbol:o,poolAddress:A})]=c}return a}var It=class{api;constructor(a){this.api=Ls.create({baseURL:a.coreApiUrl,headers:{Accept:"application/json",...a.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+ni},params:a.coreApiQueryParams})}async getTokenInfo(){let{data:a}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:ri(a),poolInfoMap:ai(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 nn("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 si(i)}};import Ln from"timed-cache";var Gr=20*1e3,Xs=55*1e3,Rt=class{constructor(a){this.apiClient=a;this.tokenInfoCache=new Ln({defaultTtl:Xs}),this.receivedTransactionCache=new Ln({defaultTtl:Gr}),this.pendingInfoCache=new Ln({defaultTtl:Gr}),this.gasBalanceCache=new Ln({defaultTtl:Gr})}tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let a="TOKEN_INFO_CACHE_KEY",r=this.tokenInfoCache.get(a);if(r)return r;let i=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(a,i),i}async getGasBalance(a,r){let i=`GAS_BALANCE_${a}_${r}`,o=this.gasBalanceCache.get(i);if(o)return o;let A=this.apiClient.getGasBalance(a,r);return this.gasBalanceCache.put(i,A),A}async getPendingInfo(){let a="PENDING_INFO_CACHE_KEY",r=this.pendingInfoCache.get(a);if(r)return r;let i=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(a,i),i}async getReceiveTransactionCost(a){let r=`RECEIVE_TX_COST_${a.sourceChainId}_${a.destinationChainId}_${a.messenger}${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 vt=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 kt=class{constructor(a,r){this.client=a;this.isStaging=r.coreApiQueryParams?.staging==="true"}isStaging;async getChainDetailsMap(a){let r=await this.client.getChainDetailsMap(),i={};for(let o in r){let A=r[o];A&&(i[o]={...A,tokens:oi(A.tokens,a,this.isStaging)})}return i}async tokens(a){return oi(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 oi(s,a,r){return s.filter(i=>r?!0:i.flags[a]).map(Ys)}function Ys(s){let{flags:a,...r}=s;return r}import Ks from"timed-cache";var Hs=55*1e3,Ft=class{constructor(a){this.client=a;this.poolInfoCache=new Ur}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[Bt(a)];if(o)return o;throw new h("Cannot find pool info for "+a.poolAddress+" on chain "+a.chainSymbol)}}async refreshPoolInfo(a){let r;if(a)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),r=await this.client.getPoolInfoMap(a);else{let i=await this.client.getChainDetailsMapAndPoolInfoMap();r=await this.client.getPoolInfoMap(ii(i.chainDetailsMap))}this.poolInfoCache.putAll(r)}cachePut(a,r){this.poolInfoCache.put(Bt(a),r)}},Ur=class{cache;constructor(){this.cache=new Ks({defaultTtl:Hs})}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=Bt(a);return this.cache.get(r)}};import{Big as so}from"big.js";import{TronWeb as oo}from"tronweb";import{Web3 as Ao}from"web3";var Qs={abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}]},Xn=Qs;import{Big as Ai}from"big.js";var fe=class{async checkAllowance(a){let r=await this.getAllowance(a);return Ai(r).gte(Ai(a.amount))}};var zs="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",qs="0xdac17f958d2ee523a2206206994597c13d831ec7",eo=1e5,Kt=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,A=r.spender;return this.getAllowanceByTokenAddress(i,o,A)}getAllowanceByTokenAddress(r,i,o){return this.getERC20Contract(r).methods.allowance(i,o).call()}async getTokenBalance(r){return await this.getERC20Contract(r.token.tokenAddress).methods.balanceOf(r.account).call()}async getNativeTokenBalance(r){return(await this.web3.eth.getBalance(r.account)).toString()}async approve(r){if(this.isUsdt(r.tokenAddress)&&await this.getAllowanceByTokenAddress(r.tokenAddress,r.owner,r.spender)!=="0"){let A=await this.buildRawTransactionApprove({...r,amount:"0"});await this.sendRawTransaction(A,r.chainSymbol)}let i=await this.buildRawTransactionApprove(r);return await this.sendRawTransaction(i,r.chainSymbol)}isUsdt(r){return r.toLowerCase()===qs}buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:A,amount:c}=r,u=this.getERC20Contract(i).methods.approve(o,c==null?zs:Rn(c));return Promise.resolve({from:A,to:i,value:"0",data:u.encodeABI()})}async sendRawTransaction(r,i){let o=r,A={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};i==="POL"?o.gas=eo:o.gas=await this.web3.eth.estimateGas(r);let{transactionHash:c}=await this.web3.eth.sendTransaction({...o,...A});return{txId:c.toString()}}getERC20Contract(r){return new this.web3.eth.Contract(Xn.abi,r)}};import{AnchorProvider as to}from"@project-serum/anchor";import{Connection as no,PublicKey as Yn}from"@solana/web3.js";var Kn=class extends fe{constructor(r,i){super();this.solanaRpcUrl=r;this.api=i}chainType="SOLANA";approve(r){throw new Y}buildRawTransactionApprove(r){throw new Y}buildAnchorProvider(r){let i=new no(this.solanaRpcUrl,"confirmed"),o=new Yn(r);return new to(i,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(r){throw new Y}async getTokenBalance(r){let{account:i,token:o}=r;try{let A=await Re(new Yn(i),new Yn(o.tokenAddress));return(await ft(A,this.buildAnchorProvider(i))).amount.toString()}catch(A){if(A instanceof Error)return A.message.startsWith("Account does not exist"),"0";throw A}}async getNativeTokenBalance(r){return(await this.buildAnchorProvider(r.account).connection.getBalance(new Yn(r.account))).toString()}};import{Horizon as _y,NotFoundError as ro}from"@stellar/stellar-sdk";var Hn=class extends fe{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";getAllowance(){throw new Y}async getTokenBalance(r){if(!r.token.originTokenAddress)throw new h("OriginTokenAddress missing");let[i,o]=r.token.originTokenAddress.split(":"),A=new _y.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),c;try{c=await A.loadAccount(r.account)}catch(l){if(l instanceof ro)return"0";throw l}let u=c.balances.find(l=>(l.asset_type==="credit_alphanum4"||l.asset_type==="credit_alphanum12")&&l.asset_code==i&&l.asset_issuer==o);return u?.balance?O(u.balance,M.getChainDecimalsByType(M.getChainProperty(r.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(r){let c=(await new _y.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(r.account)).balances.find(m=>m.asset_type==="native");return c?.balance?O(c.balance,M.getChainDecimalsByType(M.getChainProperty(r.chainSymbol).chainType)).toFixed():"0"}approve(){throw new Y}buildRawTransactionApprove(){throw new Y}};import{SuiClient as ao}from"@mysten/sui/client";var Qn=class extends fe{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.suiClient=new ao({url:this.suiRpcUrl})}chainType="SUI";suiClient;approve(r){throw new Y}buildRawTransactionApprove(r){throw new Y}getAllowance(r){throw new Y}async getTokenBalance(r){if(!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");return(await this.suiClient.getBalance({owner:r.account,coinType:r.token.originTokenAddress})).totalBalance}async getNativeTokenBalance(r){let i=await je(o=>this.suiClient.getCoins({owner:r.account,cursor:o}));return i.length===0?"0":i.reduce((o,A)=>o+BigInt(A.balance),BigInt(0)).toString()}};var io="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Ht=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 vn(this.tronWeb,i)}async buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:A,amount:c}=r,m=c==null?io:Rn(c),u=[{type:"address",value:o},{type:"uint256",value:m}];return this.buildRawTransaction(i,"approve(address,uint256)",u,"0",A)}getContract(r){return this.tronWeb.contract(Xn.abi,r)}async buildRawTransaction(r,i,o,A,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+A},o,c);if(!m?.result?.result)throw new h("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var xt=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 v(i,a.token.decimals).toFixed()}async checkAllowance(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),this.getChainTokenService(a.token.chainSymbol,a.owner,r).checkAllowance(this.prepareCheckAllowanceParams(a))}async approve(a,r){return r.amount&&(U(r.amount),E("amount",r.amount,r.token.decimals)),this.getChainTokenService(r.token.chainSymbol,r.owner,a).approve(this.prepareApproveParams(r))}async buildRawTransactionApprove(a,r){return a.amount&&(U(a.amount),E("amount",a.amount,a.token.decimals)),this.getChainTokenService(a.token.chainSymbol,a.owner,r).buildRawTransactionApprove(this.prepareApproveParams(a))}async getTokenBalance(a,r){let i=await this.getChainTokenService(a.token.chainSymbol,a.account,r).getTokenBalance(a);return a.token.decimals?v(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:v(i,M.getChainDecimalsByType(M.getChainProperty(a.chainSymbol).chainType)).toFixed()}}getChainTokenService(a,r,i){switch(M.getChainProperty(a).chainType){case"EVM":{if(i)return new Kt(i,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new Kt(new Ao(o),this.api)}}case"TRX":{if(i)return new Ht(i,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a),A=new oo({fullHost:o});return A.setAddress(r),new Ht(A,this.api)}}case"SOLANA":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new Kn(o,this.api)}case"SRB":return new Hn(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new Qn(this.nodeRpcUrlsConfig.getNodeRpcUrl(a),this.api)}}prepareCheckAllowanceParams(a){return{...a,amount:O(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:so(a.amount).toFixed()}}};var zn=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r;let i=new It(r),o=new Rt(i),A=new vt(o),c=new Ft(A);this.api=new kt(c,r),this.tokenService=new xt(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 co,PublicKey as mo,TransactionMessage as uo}from"@solana/web3.js";var qn=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}async addMemoToTx(a,r){if(r.length>28)throw new h("InvalidArgumentException memo cannot be more than 28 characters");let i=new co(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),o=await ot(a,i),A=uo.decompile(a.message,{addressLookupTableAccounts:o}),c=A.instructions[A.instructions.length-1];if(!c?.keys)throw new h("Last instruction or its keys are invalid.");c.keys.push({pubkey:new mo(Buffer.from(r)),isSigner:!1,isWritable:!1}),a.message=A.compileToV0Message(o)}};import{Asset as go,BASE_FEE as fo,contract as IS,Horizon as ci,Operation as yo,Operation as ho,rpc as zt,TimeoutInfinite as To,TransactionBuilder as Er,TransactionBuilder as mi}from"@stellar/stellar-sdk";import{contract as e}from"@stellar/stellar-sdk";var lo=e.Spec,po=e.Client;var Qt=class extends po{constructor(r){super(new lo(["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 bo=100,So=180,er=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}async buildChangeTrustLineXdrTx(a){let i=await new ci.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.sender),A=await this.getContract(Qt,a.tokenAddress).name();if(Pt(A))throw new h;let c=St(A);if(!c)throw new h;let[m,u]=c.split(":");if(m===void 0||u===void 0)throw new h("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let l=new go(m,u),d=ho.changeTrust({asset:l,limit:a.limit});return new mi(i,{fee:bo.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(d).setTimeout(So).build().toXDR()}async getBalanceLine(a,r){let o=await this.getContract(Qt,r).name();if(Pt(o))throw new h;let A=St(o);if(!A)throw new h;let[c,m]=A.split(":"),u=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new ci.Server(u).loadAccount(a)).balances.find(g=>(g.asset_type==="credit_alphanum4"||g.asset_type==="credit_alphanum12")&&g.asset_code==c&&g.asset_issuer==m)}async submitTransactionStellar(a){let r=new ci.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),i=mi.fromXDR(a,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await r.submitTransaction(i)}async simulateAndCheckRestoreTxRequiredSoroban(a,r){let i=new zt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await i.getAccount(r),A=Er.fromXDR(a,this.params.sorobanNetworkPassphrase),c=await i.simulateTransaction(A);if(zt.Api.isSimulationRestore(c))return new Er(o,{fee:(+fo+ +c.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(c.restorePreamble.transactionData.build()).addOperation(yo.restoreFootprint({})).setTimeout(To).build().toXDR()}async sendTransactionSoroban(a){let r=new zt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),i=Er.fromXDR(a,this.params.sorobanNetworkPassphrase);return r.sendTransaction(i)}async confirmTx(a,r=15){let i=new zt.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await jr(()=>i.getTransaction(a),c=>c.status===zt.Api.GetTransactionStatus.NOT_FOUND,r);if(o.length===0)throw new h("No transaction responses found.");let A=o[o.length-1];if(!A)throw new h("Unexpected error: last response is undefined.");return A}getContract(a,r){let i={contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(i)}};import{Transaction as Po}from"@mysten/sui/transactions";var tr=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}keyMap={SplitCoins:"amounts",MoveCall:"arguments",MergeCoins:"sources",TransferObjects:"objects",MakeMoveVec:"elements",Upgrade:"ticket"};offset(a,r,i){return a.Input!==void 0?(a.Input=a.Input+r,a):a.NestedResult!==void 0?(a.NestedResult=[a.NestedResult[0]+i,a.NestedResult[1]],a):(a.Result!==void 0&&(a.Result=a.Result+i),a)}async merge(a,r){let i=JSON.parse(a),o=i.inputs.length,A=i.commands.length,c=JSON.parse(r);i.inputs=i.inputs.concat(c.inputs);for(let u of c.commands){let l=Object.keys(u)[0],d=this.keyMap[l];if(!d)continue;let p=u[l][d];Array.isArray(p)&&(u[l][d]=p.map(g=>this.offset(g,o,A)),i.commands.push(u))}return Po.from(JSON.stringify(i)).toJSON()}};var nr=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.srb=new er(a,r),this.sol=new qn(a,r),this.sui=new tr(a,r),this.evm=new zn(a,r)}srb;sol;sui;evm};var st=(r=>(r.WITH_NATIVE_CURRENCY="native",r.WITH_STABLECOIN="stablecoin",r))(st||{}),mn=(r=>(r.INT="int",r.FLOAT="float",r))(mn||{});import{Big as H}from"big.js";var qt=class{constructor(a){this.nodeRpcUrls=a}getNodeRpcUrl(a){let r=this.nodeRpcUrls[a];if(r!==void 0)return r;throw new sn(a)}},rr=class{api;tokenService;params;bridge;pool;constructor(a,r=tn){M.addChainsProperties(r.additionalChainsProperties);let i=new It(r),o=new Rt(i),A=new vt(o),c=new Ft(A);this.api=new kt(c,r),this.tokenService=new xt(this.api,a,r),this.bridge=new kn(this.api,a,r,this.tokenService),this.pool=new Jn(this.api,a,r,this.tokenService),this.params=r}async chainDetailsMap(a){return this.api.getChainDetailsMap(a)}async tokens(a){return this.api.tokens(a)}async tokensByChain(a,r){let o=(await this.api.getChainDetailsMap(r))[a];return o?o.tokens:[]}async getTransferStatus(a,r){return this.api.getTransferStatus(a,r)}async getGasBalance(a,r){return this.api.getGasBalance(a,r)}async checkAddress(){return new Promise(a=>{a({status:"OK",gasBalance:null})})}async getPendingStatusInfo(a,r,i,o){U(a);let A;r=="float"?(E("amount",a,i.decimals),A=O(a,i.decimals).toFixed()):A=a;let c=Ge(A,i,await K(this.api,i)),m=await K(this.api,o),u=this.getAmountFromVUsdFormatted(c,o,m),l,d=await this.api.getPendingInfo();for(let p in d[o.chainSymbol]){let g=d[o.chainSymbol];if(!g)throw new h("Cannot find pending info for "+o.chainSymbol);l=g[p]}if(l){let p=ea(l.totalSentAmount,m),g=this.getAmountFromVUsdFormatted(c,o,p),f;return H(g.int).gt(u.int)?f={min:u,max:g}:f={min:g,max:u},{pendingTxs:l.pendingTxs,pendingAmount:{int:be(l.totalSentAmount,3,o.decimals).toFixed(0),float:v(l.totalSentAmount,3).toFixed()},estimatedAmount:f}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:u,max:u}}}async getTokenBalance(a,r){return this.tokenService.getTokenBalance(a,r)}async getNativeTokenBalance(a,r){return this.tokenService.getNativeTokenBalance(a,r)}async calculateFeePercentOnSourceChain(a,r){U(a),E("amountFloat",a,r.decimals);let i=O(a,r.decimals);if(i.eq(0))return 0;let o=Ge(i,r,await K(this.api,r)),A=le(o,r.decimals);return ur(i,A)}async calculateFeePercentOnDestinationChain(a,r,i){U(a),E("amountFloat",a,r.decimals);let o=O(a,r.decimals);if(o.eq(0))return 0;let A=Ge(o,r,await K(this.api,r)),c=Gt(A,i,await K(this.api,i)),m=le(A,i.decimals);return ur(m,c)}async getAmountToBeReceivedAndGasFeeOptions(a,r,i,o){return U(a),E("amountToSendFloat",a,r.decimals),{amountToSendFloat:H(a).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(a,r,i,o),gasFeeOptions:await this.getGasFeeOptions(r,i,o)}}async getAmountToSendAndGasFeeOptions(a,r,i,o){return U(a),E("amountToBeReceivedFloat",a,i.decimals),{amountToSendFloat:await this.getAmountToSend(a,r,i,o),amountToBeReceivedFloat:H(a).toFixed(),gasFeeOptions:await this.getGasFeeOptions(r,i,o)}}async getAmountToBeReceived(a,r,i,o){return this.getAmountToBeReceivedCompute(a,r,i,o,async()=>await K(this.api,r),async()=>await K(this.api,i))}async getAmountToBeReceivedFromChain(a,r,i,o,A,c){return this.getAmountToBeReceivedCompute(a,r,i,o,async()=>await this.pool.getPoolInfoFromChain(r,A),async()=>await this.pool.getPoolInfoFromChain(i,c))}async getAmountToBeReceivedCompute(a,r,i,o=1,A,c){switch(o){case 1:case 2:return this.getAmountToBeReceivedComputeWithPools(a,r,i,await A(),await c());case 3:case 4:return this.getAmountToBeReceivedComputeCctp(a,r,i,o);case 5:return this.getAmountToBeReceivedComputeOft(a,r,i)}}getAmountToBeReceivedComputeWithPools(a,r,i,o,A){U(a),E("amountToSendFloat",a,r.decimals);let c=O(a,r.decimals),m=Ge(c,r,o);return this.getAmountFromVUsdFormatted(m,i,A).float}getAmountToBeReceivedComputeCctp(a,r,i,o){U(a),E("amountToSendFloat",a,r.decimals);let A=O(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 c=A.mul(H(1).minus(r.cctpFeeShare)).round(0,H.roundUp),m=be(c,r.decimals,i.decimals).round(0);return v(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 c=A.mul(H(1).minus(r.cctpV2FeeShare)).round(0,H.roundUp),m=be(c,r.decimals,i.decimals).round(0);return v(m,i.decimals).toFixed()}}}async getAmountToBeReceivedComputeOft(a,r,i){U(a),E("amountToSendFloat",a,r.decimals);let o=O(a,r.decimals);if(!r.oftBridgeAddress||!i.oftBridgeAddress||r.oftId!==i.oftId)throw new ae("Such route does not support OFT protocol");let{adminFeeShareWithExtras:A}=await this.api.getReceiveTransactionCost({sourceChainId:r.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:5,sourceToken:r.tokenAddress});if(!A)throw new ae("Such route does not support OFT protocol");let c=o.mul(H(1).minus(A)).round(0,H.roundUp),m=be(c,r.decimals,i.decimals).round(0);return v(m,i.decimals).toFixed()}async getAmountToSend(a,r,i,o){return this.getAmountToSendCompute(a,r,i,o,()=>K(this.api,r),()=>K(this.api,i))}async getAmountToSendFromChain(a,r,i,o,A,c){return this.getAmountToSendCompute(a,r,i,o,()=>this.pool.getPoolInfoFromChain(r,A),()=>this.pool.getPoolInfoFromChain(i,c))}async getAmountToSendCompute(a,r,i,o=1,A,c){switch(o){case 1:case 2:return this.getAmountToSendComputeWithPools(a,r,i,await A(),await c());case 3:case 4:return this.getAmountToSendComputeCctp(a,r,i,o);case 5:return this.getAmountToSendComputeOft(a,r,i)}}getAmountToSendComputeWithPools(a,r,i,o,A){U(a),E("amountToBeReceivedFloat",a,i.decimals);let c=O(a,i.decimals),m=na(c,i,A),u=ta(m,r,o);if(H(u).lte(0))throw new Je;return v(u,r.decimals).toFixed()}getAmountToSendComputeCctp(a,r,i,o){U(a),E("amountToBeReceivedFloat",a,i.decimals);let A=O(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 c=A.div(H(1).minus(r.cctpFeeShare)).round(0,H.roundDown),m=be(c,i.decimals,r.decimals).round(0);return v(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 c=A.div(H(1).minus(r.cctpV2FeeShare)).round(0,H.roundDown),m=be(c,i.decimals,r.decimals).round(0);return v(m,r.decimals).toFixed()}}}async getAmountToSendComputeOft(a,r,i){U(a),E("amountToBeReceivedFloat",a,i.decimals);let o=O(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:A}=await this.api.getReceiveTransactionCost({sourceChainId:r.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:5,sourceToken:r.tokenAddress});if(!A)throw new ae("Such route does not support OFT protocol");let c=o.div(H(1).minus(A)).round(0,H.roundDown),m=be(c,i.decimals,r.decimals).round(0);return v(m,r.decimals).toFixed()}async getGasFeeOptions(a,r,i){return lr(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 aa(a)}async getExtraGasMaxLimits(a,r,i){return await dr(a,r,i,this.api)}async getVUsdFromAmount(a,r,i){U(a);let o;r=="float"?(E("amount",a,i.decimals),o=O(a,i.decimals).toFixed()):o=a;let A=Ge(o,i,await K(this.api,i));return{int:A,float:v(A,3).toFixed()}}async getAmountFromVUsd(a,r){return this.getAmountFromVUsdFormatted(a,r,await K(this.api,r))}getAmountFromVUsdFormatted(a,r,i){U(a);let o=Gt(a,r,i);if(H(o).lt(0))throw new Je;return{int:o,float:v(o,r.decimals).toFixed()}}async swapAndBridgeFeeCalculation(a,r,i){return qa(a,{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await K(this.api,r)},{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await K(this.api,i)})}async swapAndBridgeFeeCalculationReverse(a,r,i){let o=ei(a,{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await K(this.api,r)},{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await K(this.api,i)}),A=o.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(H(A).lt(0))throw new Je;return o}async getSendAmountDetails(a,r,i,o){U(a);let A;return r=="float"?(E("amount",a,i.decimals),A=O(a,i.decimals).toFixed()):A=a,ti(A,i,await K(this.api,i),o,await K(this.api,o))}};function wo(s){return"solanaRpcUrl"in s}var ui=class{params;bridge;pool;utils;service;constructor(a,r=tn){let i;wo(a)?i=new qt({SOL:a.solanaRpcUrl,TRX:a.tronRpcUrl}):i=new qt(a),this.service=new rr(i,r),this.bridge=this.service.bridge,this.pool=this.service.pool,this.utils=new nr(i,r),this.params=r}async chainDetailsMap(a="swap"){return this.service.chainDetailsMap(a)}async tokens(a="swap"){return this.service.tokens(a)}async tokensByChain(a,r="swap"){return this.service.tokensByChain(a,r)}async getTransferStatus(a,r){return this.service.getTransferStatus(a,r)}async getGasBalance(a,r){return this.service.getGasBalance(a,r)}async checkAddress(a,r,i){return await this.service.checkAddress()}async getPendingStatusInfo(a,r,i,o){return this.service.getPendingStatusInfo(a,r,i,o)}async getTokenBalance(a,r){return this.service.getTokenBalance(a,r)}async getNativeTokenBalance(a,r){return this.service.getNativeTokenBalance(a,r)}async calculateFeePercentOnSourceChain(a,r){return this.service.calculateFeePercentOnSourceChain(a,r)}async calculateFeePercentOnDestinationChain(a,r,i){return this.service.calculateFeePercentOnDestinationChain(a,r,i)}async getAmountToBeReceivedAndGasFeeOptions(a,r,i,o){return this.service.getAmountToBeReceivedAndGasFeeOptions(a,r,i,o)}async getAmountToSendAndGasFeeOptions(a,r,i,o){return this.service.getAmountToSendAndGasFeeOptions(a,r,i,o)}async getAmountToBeReceived(a,r,i,o=1){return this.service.getAmountToBeReceived(a,r,i,o)}async getAmountToBeReceivedFromChain(a,r,i,o=1,A,c){return this.service.getAmountToBeReceivedFromChain(a,r,i,o,A,c)}getAmountToBeReceivedFromPools(a,r,i,o,A,c=1){switch(c){case 1:case 2:return this.service.getAmountToBeReceivedComputeWithPools(a,r,i,o,A);case 3:case 4:return this.service.getAmountToBeReceivedComputeCctp(a,r,i,c)}}async getAmountToSend(a,r,i,o=1){return this.service.getAmountToSend(a,r,i,o)}async getAmountToSendFromChain(a,r,i,o=1,A,c){return this.service.getAmountToSendFromChain(a,r,i,o,A,c)}getAmountToSendFromPools(a,r,i,o,A,c=1){switch(c){case 1:case 2:return this.service.getAmountToSendComputeWithPools(a,r,i,o,A);case 3:case 4:return this.service.getAmountToSendComputeCctp(a,r,i,c)}}async getGasFeeOptions(a,r,i){return this.service.getGasFeeOptions(a,r,i)}getAverageTransferTime(a,r,i){return this.service.getAverageTransferTime(a,r,i)}async getPoolInfoByToken(a){return this.service.getPoolInfoByToken(a)}async refreshPoolInfo(a){return this.service.refreshPoolInfo(a)}aprInPercents(a){return this.service.aprInPercents(a)}async getExtraGasMaxLimits(a,r,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{ir as AddressStatus,ui as AllbridgeCoreSdk,mn as AmountFormat,lt as AmountNotEnoughError,an as ArgumentInvalidDecimalsError,re as CCTPDoesNotSupportedError,he as ChainSymbol,j as ChainType,bi as ErrorCode,rn as ExtraGasMaxLimitExceededError,st as FeePaymentMethod,Je as InsufficientPoolLiquidityError,$e as InvalidAmountError,Mt as InvalidGasFeePaymentOptionError,nn as InvalidMessengerOptionError,dt as InvalidTxError,z as JupiterError,Te as Messenger,Y as MethodNotSupportedError,sn as NodeRpcUrlNotInitializedError,ae as OFTDoesNotSupportedError,h as SdkError,J as SdkRootError,pr as SolanaAutoTxFee,Dt as TimeoutError,on as TxTooLargeError,Ot as VerifyTxError,tn as mainnet,Io as nodeRpcUrlsDefault,Bo as nodeUrlsDefault};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|