@allbridge/bridge-core-sdk 3.23.0-beta.1 → 3.23.0-beta.2

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.
Files changed (55) hide show
  1. package/README.md +8 -8
  2. package/dist/browser/index.js +1 -1
  3. package/dist/browser/index.js.map +4 -4
  4. package/dist/cjs/index.js +1 -1
  5. package/dist/cjs/index.js.map +4 -4
  6. package/dist/esm/index.js +1 -1
  7. package/dist/esm/index.js.map +4 -4
  8. package/dist/src/client/core-api/api-client-caching.js +1 -1
  9. package/dist/src/client/core-api/api-client-caching.js.map +1 -1
  10. package/dist/src/client/core-api/api-client.js +6 -0
  11. package/dist/src/client/core-api/api-client.js.map +1 -1
  12. package/dist/src/client/core-api/core-api-mapper.js +3 -0
  13. package/dist/src/client/core-api/core-api-mapper.js.map +1 -1
  14. package/dist/src/client/core-api/core-api.model.d.ts +8 -2
  15. package/dist/src/client/core-api/core-api.model.js +2 -0
  16. package/dist/src/client/core-api/core-api.model.js.map +1 -1
  17. package/dist/src/exceptions/exceptions.d.ts +4 -0
  18. package/dist/src/exceptions/exceptions.js +8 -1
  19. package/dist/src/exceptions/exceptions.js.map +1 -1
  20. package/dist/src/index.d.ts +10 -17
  21. package/dist/src/index.js +34 -26
  22. package/dist/src/index.js.map +1 -1
  23. package/dist/src/models/index.d.ts +1 -0
  24. package/dist/src/models/index.js.map +1 -1
  25. package/dist/src/services/bridge/evm/index.d.ts +3 -1
  26. package/dist/src/services/bridge/evm/index.js +46 -14
  27. package/dist/src/services/bridge/evm/index.js.map +1 -1
  28. package/dist/src/services/bridge/index.d.ts +1 -1
  29. package/dist/src/services/bridge/index.js +26 -19
  30. package/dist/src/services/bridge/index.js.map +1 -1
  31. package/dist/src/services/bridge/models/bridge.model.d.ts +4 -0
  32. package/dist/src/services/bridge/models/bridge.model.js.map +1 -1
  33. package/dist/src/services/bridge/sol/index.d.ts +2 -2
  34. package/dist/src/services/bridge/sol/index.js +7 -4
  35. package/dist/src/services/bridge/sol/index.js.map +1 -1
  36. package/dist/src/services/bridge/sui/index.js +2 -0
  37. package/dist/src/services/bridge/sui/index.js.map +1 -1
  38. package/dist/src/services/bridge/trx/index.d.ts +1 -1
  39. package/dist/src/services/bridge/trx/index.js +84 -53
  40. package/dist/src/services/bridge/trx/index.js.map +1 -1
  41. package/dist/src/services/bridge/utils.d.ts +2 -2
  42. package/dist/src/services/bridge/utils.js +64 -36
  43. package/dist/src/services/bridge/utils.js.map +1 -1
  44. package/dist/src/services/index.d.ts +13 -7
  45. package/dist/src/services/index.js +129 -48
  46. package/dist/src/services/index.js.map +1 -1
  47. package/dist/src/services/models/abi/OftBridge.d.ts +386 -0
  48. package/dist/src/services/models/abi/OftBridge.js +500 -0
  49. package/dist/src/services/models/abi/OftBridge.js.map +1 -0
  50. package/dist/src/tokens-info/tokens-info.model.d.ts +14 -0
  51. package/dist/src/tokens-info/tokens-info.model.js.map +1 -1
  52. package/dist/src/version.d.ts +1 -1
  53. package/dist/src/version.js +1 -1
  54. package/dist/src/version.js.map +1 -1
  55. package/package.json +7 -7
package/dist/esm/index.js CHANGED
@@ -1,2 +1,2 @@
1
- var ci=Object.create;var Dr=Object.defineProperty;var mi=Object.getOwnPropertyDescriptor;var ui=Object.getOwnPropertyNames;var li=Object.getPrototypeOf,di=Object.prototype.hasOwnProperty;var pi=(s,a)=>()=>(s&&(a=s(s=0)),a);var er=(s,a)=>()=>(a||s((a={exports:{}}).exports,a),a.exports);var gi=(s,a,r,i)=>{if(a&&typeof a=="object"||typeof a=="function")for(let o of ui(a))!di.call(s,o)&&o!==r&&Dr(s,o,{get:()=>a[o],enumerable:!(i=mi(a,o))||i.enumerable});return s};var Pe=(s,a,r)=>(r=s!=null?ci(li(s)):{},gi(a||!s||!s.__esModule?Dr(r,"default",{value:s,enumerable:!0}):r,s));import{bcs as oe}from"@mysten/sui/bcs";function ts(s,a=["<",">"]){let[r,i]=a,o=[],A="",c=0;for(let m=0;m<s.length;m++){let u=s[m];if(u===r&&c++,u===i&&c--,c===0&&u===","){o.push(A.trim()),A="";continue}A+=u}return o.push(A.trim()),o}function ee(s){if(typeof s!="string")throw new Error(`Illegal type passed as a name of the type: ${s}`);let[a,r]=["<",">"],i=s.indexOf(a),o=Array.from(s).reverse().indexOf(r);if(i===-1&&o===-1)return{typeName:s,typeArgs:[]};if(i===-1||o===-1)throw new Error(`Unclosed generic in name '${s}'`);let A=s.slice(0,i),c=ts(s.slice(i+1,s.length-o-1),[a,r]);return{typeName:A,typeArgs:c}}function Ra(s){return!s||typeof s!="object"||Array.isArray(s)?!1:"GasCoin"in s||"Input"in s||"Result"in s||"NestedResult"in s}function w(s,a){return Ra(a)?a:s.object(a)}function ye(s,a,r){if(Ra(a))return w(s,a);function i(l){let{typeName:d,typeArgs:p}=ee(l);switch(d){case"bool":return oe.Bool;case"u8":return oe.U8;case"u16":return oe.U16;case"u32":return oe.U32;case"u64":return oe.U64;case"u128":return oe.U128;case"u256":return oe.U256;case"address":return oe.Address;case"0x1::string::String":case"0x1::ascii::String":return oe.String;case"0x2::object::ID":return oe.Address;case"0x1::option::Option":return oe.option(i(p[0]));case"vector":return oe.vector(i(p[0]));default:throw new Error(`invalid primitive type ${l}`)}}function o(l){for(let d of l){if(typeof d>"u"||d===null)return!0;if(Array.isArray(d))return o(d)}return!1}function A(l){for(let d of l){if(!Array.isArray(d)){if(d===null)continue;switch(typeof d){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return A(d)}return!0}function c(l){for(let d of l){if(!Array.isArray(d))switch(typeof d){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return c(d)}return!1}let{typeName:m,typeArgs:u}=ee(r);switch(m){case"0x1::option::Option":if(a===null)return s.pure.option("bool",null);if(A([a]))return s.pure(i(r).serialize(a));if(c([a]))throw new Error("mixing primitive and TransactionArgument values is not supported");return s.moveCall({target:"0x1::option::some",typeArguments:[u[0]],arguments:[ye(s,a,u[0])]});case"vector":if(!Array.isArray(a))throw new Error("expected an array for vector type");if(a.length===0)return s.pure(oe.vector(oe.Bool).serialize([]));if(o(a))throw new Error("the provided array contains undefined or null values");if(A(a))return s.pure(i(r).serialize(a));if(c(a))throw new Error("mixing primitive and TransactionArgument values is not supported");return s.makeMoveVec({type:u[0],elements:a});default:return s.pure(i(r).serialize(a))}}function ns(s){let a=s.split("0x").join("");for(let r=0;r<a.length;r++)if(a[r]!=="0")return`0x${a.substring(r)}`;return"0x0"}function P(s){let{typeName:a,typeArgs:r}=ee(s);switch(a){case"bool":case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"address":case"signer":return a;case"vector":return`vector<${P(r[0])}>`;default:{let i=a.split("::");i[0]=ns(i[0]);let o=i.join("::");return r.length>0?`${o}<${r.map(A=>P(A)).join(",")}>`:o}}}function x(s,...a){return a.length>0?`${s}<${a.join(", ")}>`:s}var K=pi(()=>{"use strict"});var Qe=er((Jm,va)=>{"use strict";K();var yr=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},rs=new yr;va.exports=rs});var Sr=er((Km,Wa)=>{"use strict";K();var br=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},as=new br;Wa.exports=as});var Cr=er((qm,Ga)=>{"use strict";K();var wr=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},is=new wr;Ga.exports=is});var Yt={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://lite-api.jup.ag/swap/v1",wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7,SUI:8}},cachePoolInfoChainSec:20},To={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},bo={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org",SUI:"https://fullnode.mainnet.sui.io"};import{Big as Ae}from"big.js";var J=class extends Error{errorCode;constructor(a,r){super(r),this.errorCode=a}},h=class extends J{constructor(a){super("SdkError",a)}},Ze=class extends J{constructor(a){super("InvalidAmountError",a)}},ut=class extends J{constructor(a){super("AmountNotEnoughError",a)}},$e=class extends J{constructor(a){super("InsufficientPoolLiquidityError",a)}},Q=class extends J{constructor(a){super("JupiterError",a)}},Bt=class extends J{constructor(a){super("InvalidGasFeePaymentOptionError",a)}},Gr=class extends J{constructor(a){super("InvalidMessengerOptionError",a)}},X=class extends J{constructor(a){super("MethodNotSupportedError",a)}},It=class extends J{constructor(a){super("VerifyTxError",a)}},lt=class extends J{constructor(a){super("InvalidTxError",a)}},Kt=class extends J{constructor(a){super("ExtraGasMaxLimitExceededError",a)}},Ht=class extends J{constructor(a,r,i){super("ArgumentInvalidDecimalsError",`Argument '${a}' decimals '${r}' cannot be greater than '${i}'`)}},Rt=class extends J{constructor(a){super("TimeoutError",a)}},Qt=class extends J{constructor(a){super("NodeRpcUrlNotInitializedError",`For chain '${a}' Node RPC URL not initialized`)}},ne=class extends J{constructor(a){super("CCTPDoesNotSupportedError",a)}},zt=class extends J{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},fi=(T=>(T.SDK_ERROR="SdkError",T.INVALID_AMOUNT_ERROR="InvalidAmountError",T.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",T.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",T.JUPITER_ERROR="JupiterError",T.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",T.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",T.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",T.VERIFY_TX_ERROR="VerifyTxError",T.INVALID_TX_ERROR="InvalidTxError",T.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",T.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",T.TIMEOUT_ERROR="TimeoutError",T.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",T.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",T.TX_TOO_LARGE="TxTooLargeError",T))(fi||{});var fe=(f=>(f.BSC="BSC",f.ETH="ETH",f.BAS="BAS",f.SOL="SOL",f.TRX="TRX",f.POL="POL",f.ARB="ARB",f.CEL="CEL",f.AVA="AVA",f.SRB="SRB",f.STLR="STLR",f.OPT="OPT",f.SUI="SUI",f.SNC="SNC",f))(fe||{}),j=(A=>(A.EVM="EVM",A.SOLANA="SOLANA",A.TRX="TRX",A.SRB="SRB",A.SUI="SUI",A))(j||{});var yi={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9},hi={BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SNC:{chainSymbol:"SNC",chainId:"0x92",name:"Sonic",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"},SUI:{chainSymbol:"SUI",name:"Sui",chainType:"SUI"}},N=(()=>{let s={...hi};return{addChainsProperties(a){s={...s,...a}},getChainProperty(a){let r=s[a];if(!r)throw new h(`Cannot find chain properties for ${a}`);return r},getChainsProperties(){return s},getChainDecimalsByType(a){return yi[a]}}})();import Ci from"axios";var Ur="3.23.0-beta.1";import{Big as b}from"big.js";import tr from"bn.js";function nr(s,a){return b(100).minus(b(100).times(a).div(s)).toNumber()}function rt(s,a){return Oe(s,a,3).round(0,b.roundDown)}function ue(s,a){return Oe(s,3,a)}function Oe(s,a,r){let i=b(r).minus(a).toNumber();return b(s).times(vt(i))}function vt(s){return b(10).pow(s)}function D(s,a){return b(s).times(vt(a))}function F(s,a){let r=b(s);return r.eq(0)?b(0):b(r).div(vt(a))}function re(s){return F(b(s.tokenBalance).minus(s.vUsdBalance).toFixed(),3).div(2).toFixed()}function Ne(s,{feeShare:a,decimals:r},i){let o=b(s);if(o.lte(0))return"0";let A=o.times(a),c=o.minus(A),m=rt(c,r),u=b(i.tokenBalance).plus(m),l=We(u,i.aValue,i.dValue);return b(i.vUsdBalance).minus(l).round(0,b.roundDown).toFixed()}function kt(s,{feeShare:a,decimals:r},i){let o=b(s);if(o.lte(0))return b(0).toFixed();let A=o.plus(i.vUsdBalance),c=We(A,i.aValue,i.dValue),m=ue(b(i.tokenBalance).minus(c),r),u=b(m).times(a);return b(m).minus(u).round(0,b.roundDown).toFixed()}function Er(s,a){let r=b(s);if(r.lte(0))return a;let i=r.plus(a.vUsdBalance),o=We(i,a.aValue,a.dValue);return{aValue:a.aValue,dValue:a.dValue,tokenBalance:o.toFixed(0),vUsdBalance:i.toFixed(0)}}function Vr(s,{feeShare:a,decimals:r},i){if(b(s).lte(0))return b(0);let o=b(i.vUsdBalance).minus(s);if(o.lte(0))throw new $e;let A=We(o,i.aValue,i.dValue),c=b(A).minus(i.tokenBalance),m=ue(c,r),u=b(a).div(b(1).minus(a)),l=b(m).times(u).round(0,b.roundUp);return b(m).plus(l).round(0,b.roundDown)}function jr(s,{feeShare:a,decimals:r},i){if(b(s).lte(0))return b(0);let o=b(a).div(b(1).minus(a)),A=b(s).times(o).round(0,b.roundUp),c=b(s).plus(A),m=rt(c,r),u=b(i.tokenBalance).minus(m);if(u.lte(0))throw new $e;let l=We(u,i.aValue,i.dValue);return b(l).minus(i.vUsdBalance).round(0,b.roundDown)}function We(s,a,r){let i=b(4).times(a).times(b(r).minus(s)).minus(r),o=b(r).pow(3),A=i.pow(2),c=b(s).times(b(s).times(A).plus(b(4).times(a).times(o))).sqrt().round(0,b.roundDown),m=b(8).times(a).times(s),u=i.times(s).plus(c).div(m).round(0,b.roundDown);return u.eq(0)?b(0):u.plus(1)}function Zr(s,a,r,i){let o=new tr(s),A=new tr(r),c=new tr(a);return o.mul(A).shrn(i).sub(c).toString()}function $r(s){return b(s).gt(0)?`${Number(b(s).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function _r(s,a,r){let i=b(a).times(r),o=b(a).plus(r),A=b(8).times(s).times(i).times(o),c=i.times(b(16).times(s).minus(4)).div(3),m=A.times(A),u=c.times(c).times(c),l=m.plus(u),d=b(l).sqrt(),p=b(Math.cbrt(+A.plus(d).toFixed())),g=b(Math.cbrt(+A.minus(d).toFixed()));return p.plus(g).toFixed()}var rr=(c=>(c.OK="OK",c.INVALID="INVALID",c.FORBIDDEN="FORBIDDEN",c.UNINITIALIZED="UNINITIALIZED",c.CONTRACT_ADDRESS="CONTRACT_ADDRESS",c.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",c))(rr||{});var De=(o=>(o[o.ALLBRIDGE=1]="ALLBRIDGE",o[o.WORMHOLE=2]="WORMHOLE",o[o.CCTP=3]="CCTP",o[o.CCTP_V2=4]="CCTP_V2",o))(De||{});function Jr(s){return Object.entries(s).reduce((a,r)=>{let i=r[0],o=r[1],A=wi(i,o);return A&&(a[i]=A),a},{})}function Lr(s){let a={};for(let[r,i]of Object.entries(s)){let o=r;for(let A of i.tokens){let c=dt({chainSymbol:o,poolAddress:A.poolAddress}),m=re(A.poolInfo);a[c]={...A.poolInfo,imbalance:m}}}return a}function Ti(s,a){let{name:r,...i}=s,{poolInfo:o,...A}=a;return{...A,...i,chainName:r}}function bi(s){switch(s){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4}}function Si(s){return Object.entries(s).reduce((a,[r,i])=>(a[r]=Pi(i),a),{})}function Pi(s){return Object.entries(s).reduce((a,[r,i])=>{let o=bi(r);return o&&(a[o]=i),a},{})}function wi(s,a){let r=N.getChainsProperties()[s];if(!r)return null;let i={...r,allbridgeChainId:a.chainId,bridgeAddress:a.bridgeAddress,transferTime:Si(a.transferTime),txCostAmount:a.txCostAmount,confirmations:a.confirmations,suiAddresses:a.suiAddresses};return{...i,tokens:a.tokens.map(o=>Ti(i,o))}}function dt(s){return s.chainSymbol+"_"+s.poolAddress}function Xr(s){let a=[];for(let[r,i]of Object.entries(s)){let o=r;for(let A of i.tokens)a.push({chainSymbol:o,poolAddress:A.poolAddress})}return a}function Yr(s){let a={};for(let[r,i]of Object.entries(s)){let o=r;for(let[A,c]of Object.entries(i))c.imbalance=re(c),a[dt({chainSymbol:o,poolAddress:A})]=c}return a}var qt=class{api;constructor(a){this.api=Ci.create({baseURL:a.coreApiUrl,headers:{Accept:"application/json",...a.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+Ur},params:a.coreApiQueryParams})}async getTokenInfo(){let{data:a}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:Jr(a),poolInfoMap:Lr(a)}}async getPendingInfo(){let{data:a}=await this.api.get("/pending-info");return a}async getGasBalance(a,r){let{data:i}=await this.api.get(`/check/${a}/${r}`);return i}async getTransferStatus(a,r){let{data:i}=await this.api.get(`/chain/${a}/${r}`);return i}async getReceiveTransactionCost(a){let{data:r}=await this.api.post("/receive-fee",a,{headers:{"Content-Type":"application/json"}});return{exchangeRate:r.exchangeRate,fee:r.fee,sourceNativeTokenPrice:r.sourceNativeTokenPrice}}async getPoolInfoMap(a){let r=a instanceof Array?a:[a],{data:i}=await this.api.post("/pool-info",{pools:r},{headers:{"Content-Type":"application/json"}});return Yr(i)}};import en from"timed-cache";var ar=20*1e3,Bi=55*1e3,tn=class{constructor(a){this.apiClient=a;this.tokenInfoCache=new en({defaultTtl:Bi}),this.receivedTransactionCache=new en({defaultTtl:ar}),this.pendingInfoCache=new en({defaultTtl:ar}),this.gasBalanceCache=new en({defaultTtl:ar})}tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let a="TOKEN_INFO_CACHE_KEY",r=this.tokenInfoCache.get(a);if(r)return r;let i=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(a,i),i}async getGasBalance(a,r){let i=`GAS_BALANCE_${a}_${r}`,o=this.gasBalanceCache.get(i);if(o)return o;let A=this.apiClient.getGasBalance(a,r);return this.gasBalanceCache.put(i,A),A}async getPendingInfo(){let a="PENDING_INFO_CACHE_KEY",r=this.pendingInfoCache.get(a);if(r)return r;let i=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(a,i),i}async getReceiveTransactionCost(a){let r=`RECEIVE_TX_COST_${a.sourceChainId}_${a.destinationChainId}_${a.messenger}`,i=this.receivedTransactionCache.get(r);if(i)return i;let o=await this.apiClient.getReceiveTransactionCost(a);return this.receivedTransactionCache.put(r,o),o}async getTransferStatus(a,r){return this.apiClient.getTransferStatus(a,r)}async getPoolInfoMap(a){return this.apiClient.getPoolInfoMap(a)}};var nn=class{constructor(a){this.apiClient=a}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let a=await this.getChainDetailsMap();return Object.values(a).flatMap(r=>r.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(a,r){return this.apiClient.getGasBalance(a,r)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(a,r){return await this.apiClient.getTransferStatus(a,r)}async getReceiveTransactionCost(a){return await this.apiClient.getReceiveTransactionCost(a)}async getPoolInfoMap(a){return await this.apiClient.getPoolInfoMap(a)}};var rn=class{constructor(a,r){this.client=a;this.isStaging=r.coreApiQueryParams?.staging==="true"}isStaging;async getChainDetailsMap(a){let r=await this.client.getChainDetailsMap(),i={};for(let o in r){let A=r[o];A&&(i[o]={...A,tokens:Kr(A.tokens,a,this.isStaging)})}return i}async tokens(a){return Kr(await this.client.tokens(),a,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(a,r){return this.client.getGasBalance(a,r)}async getTransferStatus(a,r){return await this.client.getTransferStatus(a,r)}async getReceiveTransactionCost(a){return await this.client.getReceiveTransactionCost(a)}cachePut(a,r){return this.client.cachePut(a,r)}getPoolInfoByKey(a){return this.client.getPoolInfoByKey(a)}refreshPoolInfo(a){return this.client.refreshPoolInfo(a)}};function Kr(s,a,r){return s.filter(i=>r?!0:i.flags[a]).map(Ii)}function Ii(s){let{flags:a,...r}=s;return r}import Ri from"timed-cache";var vi=55*1e3,an=class{constructor(a){this.client=a;this.poolInfoCache=new ir}poolInfoCache;async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(a,r){return this.client.getTransferStatus(a,r)}getReceiveTransactionCost(a){return this.client.getReceiveTransactionCost(a)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(a,r){return this.client.getGasBalance(a,r)}async getPoolInfoByKey(a){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let r=this.poolInfoCache.get(a);if(r)return r;{let i=await this.client.getPoolInfoMap(a);this.poolInfoCache.putAll(i);let o=i[dt(a)];if(o)return o;throw new h("Cannot find pool info for "+a.poolAddress+" on chain "+a.chainSymbol)}}async refreshPoolInfo(a){let r;if(a)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),r=await this.client.getPoolInfoMap(a);else{let i=await this.client.getChainDetailsMapAndPoolInfoMap();r=await this.client.getPoolInfoMap(Xr(i.chainDetailsMap))}this.poolInfoCache.putAll(r)}cachePut(a,r){this.poolInfoCache.put(dt(a),r)}},ir=class{cache;constructor(){this.cache=new Ri({defaultTtl:vi})}putAll(a){for(let[r,i]of Object.entries(a))this.cache.put(r,i)}putAllIfNotExists(a){for(let[r,i]of Object.entries(a))this.cache.get(r)||this.cache.put(r,i)}put(a,r){this.cache.put(a,r)}get(a){let r=dt(a);return this.cache.get(r)}};import{TronWeb as ys}from"tronweb";import{Web3 as hs}from"web3";import{Big as Hr}from"big.js";async function Y(s,a){return await s.getPoolInfoByKey({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress})}function U(s){if(Hr(s).lte(0))throw new Ze("Amount must be greater than zero")}function E(s,a,r){let i=Hr(a).toFixed(),[o,A]=i.split(".");if(A&&A.length>r)throw new Ht(s,A.length,r)}async function sn(s,a,r){return await Promise.race([s,new Promise((i,o)=>{setTimeout(()=>o(new Rt(a)),r)})])}async function sr(s,a,r,i){if(r<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${r} was received.`);let o=0;for(;;)try{return await sn(s(),a,i)}catch{if(++o>=r)throw new Rt(a)}}async function Qr(s,a,r,i=1.5,o=!1){let A=[],c=0,m=await s();if(A.push(m),!a(m))return A;let u=new Date(Date.now()+r*1e3).valueOf(),l=1e3,d=l;for(;Date.now()<u;){let p=A[A.length-1];if(p===void 0||!a(p))break;c++,o&&console.info(`Waiting ${l}ms before trying again (bringing the total wait time to ${d}ms so far, of total ${r*1e3}ms)`),await new Promise(y=>setTimeout(y,l)),l=l*i,new Date(Date.now()+l).valueOf()>u&&(l=u-Date.now(),o&&console.info(`was gonna wait too long; new waitTime: ${l}ms`)),d=l+d;let g=await s(p);A.push(g),o&&a(g)&&console.info(`${c}. Called ${s.name}; ${A.length} prev attempts. Most recent: ${JSON.stringify(A[A.length-1],null,2)}`)}return A}import{Big as Vi}from"big.js";var ki={abi:[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},zr=ki;var Fi={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},qr=Fi;import*as cn from"@project-serum/anchor";import{PublicKey as da}from"@solana/web3.js";import*as q from"@project-serum/anchor";import{PublicKey as ae}from"@solana/web3.js";async function we(s,a){return q.utils.token.associatedAddress({mint:a,owner:s})}async function Ye(s){let[a]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("config")],s);return a}async function ea(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("lock"),Uint8Array.from(s)],a);return r}async function Ft(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([s])],a);return r}async function pt(s){let a=await Ye(s),[r]=await ae.findProgramAddress([a.toBuffer()],s);return r}async function ta(s,a){let[r]=await ae.findProgramAddress([s.toBuffer()],a);return r}async function gt(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("token"),s.toBytes()],a);return r}async function na(s,a,r){let[i]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([s]),a],r);return i}async function or(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([s])],a);return r}async function Ar(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([s])],a);return r}async function ra(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("sent_message"),s],a);return r}async function cr(s,a,r){let[i]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("user_deposit"),a.toBytes(),s.toBytes()],r);return i}async function aa(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("cctp_bridge"),s.toBytes()],a);return r}async function ia(s,a){let[r]=await ae.findProgramAddress([q.utils.bytes.utf8.encode("token"),s.toBytes()],a);return r}function sa(s,a){let[r]=ae.findProgramAddressSync([q.utils.bytes.utf8.encode("lock"),a.toBuffer()],s);return r}function oa(s,a,r,i){let o=at("message_transmitter",r),A=at("token_messenger",i),c=at("__event_authority",i),m=at("token_minter",i),u=at("local_token",i,[a]),l=at("remote_token_messenger",i,[s.toString()]),d=at("sender_authority",i);return{messageTransmitterAccount:o,tokenMessenger:A,tokenMessengerEventAuthority:c,tokenMinter:m,localToken:u,remoteTokenMessengerKey:l,authorityPda:d}}function at(s,a,r=[]){let i=[Buffer.from(q.utils.bytes.utf8.encode(s))];for(let A of r)typeof A=="string"?i.push(Buffer.from(q.utils.bytes.utf8.encode(A))):Array.isArray(A)||Buffer.isBuffer(A)?i.push(Buffer.from(Uint8Array.from(A))):i.push(Buffer.from(Uint8Array.from(A.toBuffer())));return ae.findProgramAddressSync(i,a)[0]}import{AnchorProvider as xi}from"@project-serum/anchor";import{Connection as Mi,PublicKey as Oi}from"@solana/web3.js";function Ke(s,a){let r=new Mi(s,"confirmed"),i=new Oi(a);return new xi(r,{publicKey:i},{preflightCommitment:"confirmed",commitment:"confirmed"})}import{PublicKey as Ni}from"@solana/web3.js";import{Address as Wi}from"@stellar/stellar-sdk";import{Big as _e}from"big.js";import ma from"randombytes";import{utils as Aa}from"tronweb";function Je(s,a,r){let i;switch(a){case"EVM":{i=ca(s);break}case"SOLANA":{i=new Ni(s).toBuffer();break}case"TRX":{i=Di(s);break}case"SRB":{i=new Wi(s).toBuffer();break}case"SUI":{i=ca(s);break}}switch(r){case"EVM":return"0x"+i.toString("hex");case"SOLANA":return Array.from(i);case"TRX":return i;case"SRB":return i.toJSON().data;case"SUI":return"0x"+i.toString("hex")}}function Ce(s){return s.replace(/^0x/i,"")}function ua(s){return Buffer.from(s.replace(/^0x/i,""),"hex")}function ca(s){let r=ua(s);return Buffer.concat([Buffer.alloc(32-r.length,0),r],32)}function Di(s){let a=xt(s),r=ua(a);return Gi(r,32)}function xt(s){let a=Aa.crypto.decodeBase58Address(s);return a?Aa.bytes.byteArray2hexStr(a).replace(/^41/,"0x"):""}function Gi(s,a){if(s.length>=a)return s;let r=Buffer.alloc(a,0);return s.copy(r,a-s.length),r}function on(){return ma(32)}function Ge(){let s=ma(32).readBigInt64BE();return s<0?s*-1n:s}function Ue(s,a){let r={},i=a.sourceToken;if(r.amount=D(a.amount,i.decimals).toFixed(),r.contractAddress=i.bridgeAddress,r.fromAccountAddress=a.fromAccountAddress,s==="SUI"){if(!i.originTokenAddress)throw new h("SUI sourceToken must contain 'originTokenAddress'");r.fromTokenAddress=i.originTokenAddress}else r.fromTokenAddress=Je(i.tokenAddress,s,s);if(r.toAccountAddress=a.toAccountAddress,s==="SUI"){if(!a.destinationToken.originTokenAddress)throw new h("SUI destinationToken must contain 'originTokenAddress'");r.toTokenAddress=a.destinationToken.originTokenAddress}else r.toTokenAddress=Je(a.destinationToken.tokenAddress,s,s);return r.minimumReceiveAmount=a.minimumReceiveAmount?D(a.minimumReceiveAmount,a.destinationToken.decimals).toFixed():"0",r}async function Be(s,a,r){let i={};i.fromChainId=a.sourceToken.allbridgeChainId,i.fromChainSymbol=a.sourceToken.chainSymbol;let o=N.getChainProperty(a.destinationToken.chainSymbol).chainType;if(s==="SUI"){if(!a.sourceToken.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");i.fromTokenAddress=a.sourceToken.originTokenAddress}else i.fromTokenAddress=a.sourceToken.tokenAddress;i.toChainId=a.destinationToken.allbridgeChainId,i.toTokenAddress=a.destinationToken.tokenAddress,a.gasFeePaymentMethod==="stablecoin"?i.gasFeePaymentMethod="stablecoin":i.gasFeePaymentMethod="native";let A=a.sourceToken;if(a.messenger===3){if(!A.cctpAddress||!a.destinationToken.cctpAddress)throw new ne("Such route does not support CCTP protocol");i.contractAddress=A.cctpAddress}else if(a.messenger===4){if(!A.cctpV2Address||!a.destinationToken.cctpV2Address)throw new ne("Such route does not support CCTP V2 protocol");i.contractAddress=A.cctpV2Address}else i.contractAddress=A.bridgeAddress;i.messenger=a.messenger,i.fromAccountAddress=a.fromAccountAddress,i.amount=D(a.amount,A.decimals).toFixed();let{fee:c,feeFormat:m}=a;if(!c){let p=(await mr(i.fromChainId,a.sourceToken.chainType,i.toChainId,A.decimals,i.messenger,r))[i.gasFeePaymentMethod];if(!p)throw new Bt;c=p.int,m="int"}if(m=="float")switch(i.gasFeePaymentMethod){case"native":i.fee=D(c,N.getChainDecimalsByType(A.chainType)).toFixed(0);break;case"stablecoin":i.fee=D(c,A.decimals).toFixed(0);break}else i.fee=c;let{extraGas:u,extraGasFormat:l}=a;if(u&&+u>0){if(l=="float")switch(i.gasFeePaymentMethod){case"native":i.extraGas=D(u,N.getChainDecimalsByType(A.chainType)).toFixed(0);break;case"stablecoin":i.extraGas=D(u,A.decimals).toFixed(0);break}else i.extraGas=u;await Ei(i.extraGas,i.gasFeePaymentMethod,A,a.destinationToken,r)}return s!=="SUI"&&(i.fromTokenAddress=Je(i.fromTokenAddress,s,s)),i.toAccountAddress=Je(a.toAccountAddress,o,s),i.toTokenAddress=Je(i.toTokenAddress,o,s),i.gasFeePaymentMethod=="stablecoin"&&Ui(i.amount,A.decimals,i.fee,i.extraGas),i}function Ui(s,a,r,i){let o=_e(s).minus(r).minus(i??0);if(o.lte(0))throw new ut(`Amount not enough to pay fee, ${F(_e(o).minus(1).neg(),a).toFixed()} stables is missing`)}async function mr(s,a,r,i,o,A){let c=await A.getReceiveTransactionCost({sourceChainId:s,destinationChainId:r,messenger:o}),m={native:{int:c.fee,float:F(c.fee,N.getChainDecimalsByType(a)).toFixed()}};if(c.sourceNativeTokenPrice){let u=Oe(new _e(c.fee).mul(c.sourceNativeTokenPrice),N.getChainDecimalsByType(a),i).toFixed(0,_e.roundUp);m.stablecoin={int:u,float:F(u,i).toFixed()}}return m}async function Ei(s,a,r,i,o){let c=(await ur(r,i,o)).extraGasMax[a];if(!c)throw new Bt(`Impossible to pay extra gas by '${a}' payment method`);let m=c.int;if(_e(s).gt(m))throw new Kt(`Extra gas ${s} in int format, exceeded limit ${m} for '${a}' payment method`)}async function ur(s,a,r){let i={},o=await r.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:a.allbridgeChainId,messenger:1}),A=a.txCostAmount.maxAmount,c=F(A,N.getChainDecimalsByType(a.chainType)).toFixed(),m=_e(c).div(o.exchangeRate).toFixed(N.getChainDecimalsByType(s.chainType),_e.roundDown),u=D(m,N.getChainDecimalsByType(s.chainType)).toFixed(0);if(i.native={int:u,float:m},o.sourceNativeTokenPrice){let l=_e(m).mul(o.sourceNativeTokenPrice).toFixed(s.decimals,_e.roundDown);i.stablecoin={int:D(l,s.decimals).toFixed(0),float:l}}return{extraGasMax:i,destinationChain:{gasAmountMax:{int:A,float:c},swap:{int:a.txCostAmount.swap,float:F(a.txCostAmount.swap,N.getChainDecimalsByType(a.chainType)).toFixed()},transfer:{int:a.txCostAmount.transfer,float:F(a.txCostAmount.transfer,N.getChainDecimalsByType(a.chainType)).toFixed()}},exchangeRate:o.exchangeRate,sourceNativeTokenPrice:o.sourceNativeTokenPrice}}function la(s){return s.sourceToken.chainSymbol!==s.destinationToken.chainSymbol}async function mn(s,a,r,i){let o,A=new da(a),c=new da(r),m=await we(A,c),u=Ke(i,a);cn.setProvider(u);let l=await cn.Spl.token(u).account.token.fetchNullable(m);if(l?.authority.equals(A))o=Je(m.toBase58(),"SOLANA",s);else{let d=await u.connection.getTokenAccountsByOwner(A,{mint:c});if(d.value.length===0&&!l)o=Je(m.toBase58(),"SOLANA",s);else if(d.value.length>0){let p=d.value[0];if(!p?.pubkey)throw new h("First token account or its public key is undefined");o=Je(p.pubkey.toBase58(),"SOLANA",s)}else throw new h("Associated account has wrong owner")}return o}var le=class{};var Mt=class extends le{constructor(r,i,o){super();this.web3=r;this.api=i;this.nodeRpcUrlsConfig=o}chainType="EVM";async send(r){let i=await this.buildRawTransactionSend(r);return this.sendRawTransaction(i)}async buildRawTransactionSwap(r){let i=Ue(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=r,p=this.getBridgeContract(o).methods.swap(i,c,u,m,l);return Promise.resolve({from:A,to:o,data:p.encodeABI()})}async buildRawTransactionSend(r){let i=await Be(this.chainType,r,this.api),{amount:o,contractAddress:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,toTokenAddress:d,messenger:p,fee:g,gasFeePaymentMethod:y,extraGas:f}=i,S="0x"+on().toString("hex"),T,B,v=g;if(f&&(v=Vi(v).plus(f).toFixed()),p===3||p===4){let M=await this.buildRawTransactionCctpSend(r,i,v);T=M.sendMethod,B=M.value}else{let M=this.getBridgeContract(A);y==="stablecoin"?(T=M.methods.swapAndBridge(m,o,l,u,d,S,p,v),B="0"):(T=M.methods.swapAndBridge(m,o,l,u,d,S,p,0),B=v)}return Promise.resolve({from:c,to:A,value:B,data:T.encodeABI()})}async buildRawTransactionCctpSend(r,i,o){let{amount:A,contractAddress:c,toChainId:m,toAccountAddress:u,gasFeePaymentMethod:l}=i,d=this.getCctpBridgeContract(c),p,g;if(r.destinationToken.chainType==="SOLANA"){let y=await mn(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));l==="stablecoin"?(p=d.methods.bridgeWithWalletAddress(A,y,u,m,o),g="0"):(p=d.methods.bridgeWithWalletAddress(A,y,u,m,0),g=o)}else l==="stablecoin"?(p=d.methods.bridge(A,u,m,o),g="0"):(p=d.methods.bridge(A,u,m,0),g=o);return{sendMethod:p,value:g}}async sendRawTransaction(r){let i=await this.web3.eth.estimateGas(r),o={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:A}=await this.web3.eth.sendTransaction({...r,gas:i,...o});return{txId:A.toString()}}getBridgeContract(r){return new this.web3.eth.Contract(zr.abi,r)}getCctpBridgeContract(r){return new this.web3.eth.Contract(qr.abi,r)}};var un=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o}async approve(a,r){let i,o;r?(i=a,o=r):o=a;let A=Ot(o.token,o.messenger);return this.tokenService.buildRawTransactionApprove({...o,spender:A},i)}async send(a,r){return U(a.amount),E("amount",a.amount,a.sourceToken.decimals),la(a)?ln(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionSend(a):ln(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionSwap(a)}};import{BN as ht,Program as pr,Spl as Hi,web3 as He}from"@project-serum/anchor";import{Keypair as Ba,PublicKey as V,SystemProgram as Qi}from"@solana/web3.js";import{Big as Ie}from"big.js";var Nt={version:"0.1.0",name:"bridge",instructions:[{name:"initialize",accounts:[{name:"admin",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"initializePool",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"token",isMut:!0,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializePoolArgs"}}]},{name:"initDepositAccount",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"deposit",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdraw",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amountLp",type:"u64"}]},{name:"swapAndBridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"messenger",isMut:!1,isSigner:!1},{name:"messengerConfig",isMut:!0,isSigner:!1},{name:"sentMessageAccount",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swapAndBridgeWormhole",accounts:[{name:"user",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"wormholeMessenger",isMut:!1,isSigner:!1},{name:"wormholeMessengerConfig",isMut:!0,isSigner:!1},{name:"wormholeProgram",isMut:!1,isSigner:!1},{name:"bridge",isMut:!0,isSigner:!1},{name:"message",isMut:!0,isSigner:!0},{name:"sequence",isMut:!0,isSigner:!1},{name:"feeCollector",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"clock",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swap",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"sendMint",isMut:!1,isSigner:!1},{name:"receiveMint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"sendPool",isMut:!0,isSigner:!1},{name:"receivePool",isMut:!0,isSigner:!1},{name:"sendBridgeToken",isMut:!0,isSigner:!1},{name:"receiveBridgeToken",isMut:!0,isSigner:!1},{name:"sendUserToken",isMut:!0,isSigner:!1},{name:"receiveUserToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"},{name:"receiveAmountMin",type:"u64"}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"receiveAndSwap",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"receiveAndSwapWormhole",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"claimRewards",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setAdmin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAdmin",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"startBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"stopBridge",accounts:[{name:"stopAuthority",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"setRebalancer",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"rebalancer",isMut:!1,isSigner:!1}],args:[]},{name:"setStopAuthority",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAuthority",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"setAllbridgeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setWormholeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setPoolFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setBalanceRatioMin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"balanceRatioMinBp",type:"u16"}]},{name:"setPoolAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"addOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"removeOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"adjustTotalLpAmount",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[]}],accounts:[{name:"chainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"config",type:{kind:"struct",fields:[{name:"admin",type:"publicKey"},{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"rebalancer",type:"publicKey"},{name:"stopAuthority",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"canSwap",type:"bool"},{name:"canDeposit",type:"bool"},{name:"canWithdraw",type:"bool"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"sentTokenAddress",type:"publicKey"},{name:"amount",type:"u64"},{name:"vusdAmount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:"Messenger"}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"otherBridgeToken",type:{kind:"struct",fields:[]}},{name:"pool",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"tokenBalance",type:"u64"},{name:"vUsdBalance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"totalLpAmount",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"accRewardPerShareP",type:"u128"},{name:"adminFeeAmount",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"vUsdAmount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"userDeposit",type:{kind:"struct",fields:[{name:"userAddress",type:"publicKey"},{name:"mint",type:"publicKey"},{name:"lpAmount",type:"u64"},{name:"rewardDebt",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"vusdAmount",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"publicKey"},{name:"sourceChainId",type:"u8"},{name:"receiveToken",type:"publicKey"},{name:"messenger",type:{defined:"Messenger"}},{name:"hash",type:{array:["u8",32]}},{name:"receiveAmountMin",type:"u64"}]}},{name:"RewardError",type:{kind:"enum",variants:[{name:"FeeTooHigh"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}}],errors:[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"PoolInfo overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"}]};var pa={version:"0.1.0",name:"cctp_bridge",instructions:[{name:"initialize",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"bridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"messageSentEventData",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!0,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"cctpMessenger",isMut:!1,isSigner:!1},{name:"messageTransmitterProgram",isMut:!1,isSigner:!1},{name:"messageTransmitterAccount",isMut:!0,isSigner:!1},{name:"tokenMessenger",isMut:!1,isSigner:!1},{name:"tokenMinter",isMut:!1,isSigner:!1},{name:"localToken",isMut:!0,isSigner:!1},{name:"remoteTokenMessengerKey",isMut:!1,isSigner:!1},{name:"authorityPda",isMut:!1,isSigner:!1},{name:"eventAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"setAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setCctpTokenMessengerMinter",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]}],accounts:[{name:"cctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"admin",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"adminFeeShareBp",type:"u64"},{name:"adminFeeAmount",type:"u64"}]}},{name:"chainBridge",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"amount",type:"u64"},{name:"adminFee",type:"u64"},{name:"relayerFee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"slot",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gasOracleProgramId",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"}]}}],errors:[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}]};import{Spl as ji}from"@project-serum/anchor";import Zi from"big.js";import{Web3 as dn}from"web3";async function ft(s,a){return await ji.token(a).account.token.fetch(s)}async function ga(s,a,r){let i=await a.account.pool.fetch(r),o=i.decimals,A=Zi(i.feeShareBp.toString()).div(1e4).toFixed(),c={aValue:i.a.toString(),dValue:i.d.toString(),totalLpAmount:i.totalLpAmount.toString(),tokenBalance:i.tokenBalance.toString(),vUsdBalance:i.vUsdBalance.toString(),accRewardPerShareP:i.accRewardPerShareP.toString()};return Ne(s,{decimals:o,feeShare:A},c)}function fa(s){let a=s.amount,r="0x"+s.recipient.toString("hex"),i=s.sourceChainId,o=s.destinationChainId,A="0x"+s.receiveToken.toString("hex"),c="0x"+s.nonce.toString("hex"),m=1,u="0x"+s.chainBridge.toString("hex"),l=dn.utils.encodePacked({t:"uint256",v:a},{t:"bytes32",v:r},{t:"uint256",v:i},{t:"bytes32",v:A},{t:"uint256",v:c},{t:"uint8",v:m});if(!l)throw new h("message cannot be undefined");let d=dn.utils.keccak256(Buffer.from(l.replace("0x",""),"hex")),p=Buffer.from(d.replace("0x",""),"hex");p[0]=i,p[1]=o;let g=dn.utils.encodePacked({t:"bytes32",v:"0x"+p.toString("hex")},{t:"bytes32",v:u});if(!g)throw new lt("messageWithSigner cannot be undefined");let y=dn.utils.keccak256(Buffer.from(g.replace("0x",""),"hex")),f=Buffer.from(y.replace("0x",""),"hex");return f[0]=p[0],f[1]=p[1],f}import{ComputeBudgetInstruction as ha,ComputeBudgetProgram as pn,Connection as Ta,TransactionMessage as $i}from"@solana/web3.js";import{Big as _i}from"big.js";import{AddressLookupTableAccount as ya}from"@solana/web3.js";async function st(s,a){return await Promise.all(s.message.addressTableLookups.map(async r=>new ya({key:r.accountKey,state:ya.deserialize(await a.getAccountInfo(r.accountKey).then(i=>{if(!i)throw new h("Cannot get AccountInfo");return i.data}))})))}var lr="AUTO";async function yt(s,a,r){let i=new Ta(r,"confirmed"),o=(await i.simulateTransaction(s)).value.unitsConsumed;await Sa(s.instructions,o,a,i)}async function ba(s,a,r){let i=new Ta(r,"confirmed"),o=await st(s,i),A=$i.decompile(s.message,{addressLookupTableAccounts:o});if(s.serialize().length>1232)throw new zt;await Sa(A.instructions,769230,a,i),s.message=A.compileToV0Message(o)}async function Sa(s,a,r,i){if(a>0){let o=Ji(a,s);if(r?.solana){let A=r.solana;if(A===lr)await dr(s,i);else if("pricePerUnitInMicroLamports"in A)await dr(s,i,A.pricePerUnitInMicroLamports);else{let c=_i(A.extraFeeInLamports).div(o).mul(vt(6)).toFixed(0);await dr(s,i,c)}}}}function Ji(s,a){let r=a.findIndex(A=>A.programId.equals(pn.programId)&&ha.decodeInstructionType(A)==="SetComputeUnitLimit"),i=Number((s*1.3).toFixed(0)),o=pn.setComputeUnitLimit({units:i});return r>=0?a[r]=o:a.push(o),i.toString()}async function dr(s,a,r){let i=s.findIndex(c=>c.programId.equals(pn.programId)&&ha.decodeInstructionType(c)==="SetComputeUnitPrice"),o=BigInt(r||await Li(a)),A=pn.setComputeUnitPrice({microLamports:o});return i>=0?s[i]=A:s.push(A),o.toString()}async function Li(s){let a=await s.getRecentPrioritizationFees(),r=0;for(let i of a)r+=i.prioritizationFee;return(r/a.length).toFixed(0)}import{NATIVE_MINT as Xi}from"@solana/spl-token";import{Connection as Yi,TransactionMessage as Pa,VersionedTransaction as Ki}from"@solana/web3.js";import wa,{AxiosError as Ca}from"axios";var gn=class{connection;jupiterUrl;apiKeyHeader;maxAccounts;constructor(a,r){this.connection=new Yi(a),this.jupiterUrl=r.jupiterUrl.replace(/\/$/,""),this.apiKeyHeader=r.jupiterApiKeyHeader,this.maxAccounts=r.jupiterMaxAccounts}async getJupiterSwapTx(a,r,i,o){let A;try{let p=o?"ExactOut":"ExactIn",g=`${this.jupiterUrl}/quote?inputMint=${r}&outputMint=${Xi.toString()}&amount=${i}&swapMode=${p}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(g+=`&maxAccounts=${this.maxAccounts}`),A=await wa.get(g,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(p){throw p instanceof Ca&&p.response&&p.response.data&&p.response.data.error?new Q(p.response.data.error):new Q("Cannot get route")}let c;if(o&&A?.data?.inAmount)c=A.data.inAmount;else if(o)throw new Q("Cannot get inAmount");let m;try{m=await wa.post(`${this.jupiterUrl}/swap`,{quoteResponse:A.data,userPublicKey:a,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(p){throw p instanceof Ca&&p.response&&p.response.data&&p.response.data.error?new Q(p.response.data.error):new Q("Cannot get swap transaction")}let u;if(m?.data?.swapTransaction)u=m.data.swapTransaction;else throw new Q("Cannot get swap transaction");let l=Buffer.from(u,"base64"),d=Ki.deserialize(l);return o?{tx:d,amountIn:c}:{tx:d}}async amendJupiterWithSdkTx(a,r){try{let i=await st(a,this.connection),o=await st(r,this.connection),A=Pa.decompile(a.message,{addressLookupTableAccounts:i}),c=Pa.decompile(r.message,{addressLookupTableAccounts:o});if(c.instructions.shift(),A.instructions.push(...c.instructions),i.push(...o),a.message=A.compileToV0Message(i),r.message.header.numRequiredSignatures===2&&a.signatures.length===1){let m=r.signatures[0];if(!m)throw new h("Signature is undefined");a.signatures.push(m)}return a}catch(i){throw i instanceof Error&&i.message?new Q(`Some error occurred during creation final swap and bridge transaction. ${i.message}`):new Q("Some error occurred during creation final swap and bridge transaction")}}};var gr=1e6,Ia=1.1,fn=class extends le{constructor(r,i,o){super();this.solanaRpcUrl=r;this.params=i;this.api=o;this.jupiterService=new gn(r,i.jupiterParams)}chainType="SOLANA";jupiterService;async buildRawTransactionSwap(r){let i=Ue(this.chainType,r);return await this.buildSwapTransaction(i,r.sourceToken.poolAddress,r.destinationToken.poolAddress,r.txFeeParams)}async buildSwapTransaction(r,i,o,A){let{fromAccountAddress:c,amount:m,contractAddress:u,fromTokenAddress:l,toTokenAddress:d,toAccountAddress:p,minimumReceiveAmount:g}=r,y=c,f=u,S=l,T=d,B=o,v=p,M=new V(y),H=Ke(this.solanaRpcUrl,M.toString()),G=new pr(Nt,f,H),O=await pt(G.programId),ce=await Ye(G.programId),L=new V(S),ke=await gt(L,G.programId),Fe=new V(i),je=await we(M,L),Te=new V(v),se=new V(T),ge=await gt(se,G.programId),be=new V(B),me=await we(Te,se),xe=[He.ComputeBudgetProgram.setComputeUnitLimit({units:gr})];try{await ft(me,H)}catch{let Ai=await Hi.associatedToken(H).methods.create().accounts({mint:se,owner:Te,associatedAccount:me}).instruction();xe.push(Ai)}let Me=await G.methods.swap(new ht(m),new ht(g||0)).accounts({payer:M,config:ce,bridgeAuthority:O,user:M,sendBridgeToken:ke,sendMint:L,sendPool:Fe,sendUserToken:je,receiveBridgeToken:ge,receiveMint:se,receivePool:be,receiveUserToken:me}).preInstructions(xe).transaction(),Se=H.connection;return Me.recentBlockhash=(await Se.getLatestBlockhash()).blockhash,Me.feePayer=M,await yt(Me,A,this.solanaRpcUrl),await this.convertToVersionedTransaction(Me,Se)}async buildRawTransactionSend(r){let i=await Be(this.chainType,r,this.api),o=this.addPoolAddress(r,i),A=o.gasFeePaymentMethod=="stablecoin",c;if(A)try{let{tx:l,solTxSendUpdatedParams:d}=await this.processJup(o,r,!0);c=l,o={...o,...d}}catch{try{let{tx:d,solTxSendUpdatedParams:p}=await this.processJup(o,r,!1);c=d,o={...o,...p}}catch(d){throw d instanceof J?d:d instanceof Error&&d.message?new Q(`Some error occurred during creation Jupiter swap transaction. ${d.message}`):new Q("Some error occurred during creation Jupiter swap transaction")}}let m,u;switch(i.messenger){case 1:{let l=await this.prepareSwapAndBridgeData(o);m=await this.buildSwapAndBridgeAllbridgeTransaction(l);break}case 2:{let l=await this.prepareSwapAndBridgeData(o),{transaction:d,messageAccount:p}=await this.buildSwapAndBridgeWormholeTransaction(l);m=d,u=p;break}case 3:case 4:{let l=await this.prepareSwapAndBridgeCctpData(o),{transaction:d,messageSentEventDataKeypair:p}=await this.buildSwapAndBridgeCctpTransaction(r.destinationToken.chainSymbol,l);m=d,u=p;break}}if(A){if(!c)throw new Q("Swap tx is absent");m=await this.jupiterService.amendJupiterWithSdkTx(c,m)}return await ba(m,r.txFeeParams,this.solanaRpcUrl),u&&m.sign([u]),m}async processJup(r,i,o){let{fee:A,extraGas:c,gasFeePaymentMethod:m}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(i.sourceToken.decimals,r),u=o?Ie(A):Ie(r.fee);c&&(u=u.plus(c)),o||(u=u.mul(Ia));let{tx:l,amountIn:d}=await this.jupiterService.getJupiterSwapTx(i.fromAccountAddress,i.sourceToken.tokenAddress,u.toFixed(0),o),p;if(o){if(!d)throw new Q("Cannot get inAmount");p=Ie(r.amount).minus(Ie(d).mul(Ia)).toFixed(0)}else p=Ie(r.amount).minus(u).toFixed(0);if(Ie(p).lte(0))throw new ut(`Amount not enough to pay fee, ${F(Ie(p).minus(1).neg(),i.sourceToken.decimals).toFixed()} stables is missing`);return{tx:l,solTxSendUpdatedParams:{amount:p,fee:A,extraGas:c,gasFeePaymentMethod:m}}}addPoolAddress(r,i){return{...i,poolAddress:r.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(r,i){if(i.gasFeePaymentMethod=="stablecoin"){let o=(await this.api.getReceiveTransactionCost({sourceChainId:i.fromChainId,destinationChainId:i.toChainId,messenger:i.messenger})).sourceNativeTokenPrice,A=Ie(i.fee).div(o).mul(Ie(10).pow(N.getChainDecimalsByType("SOLANA")-r)).toFixed(0),c;return i.extraGas&&(c=Ie(i.extraGas).div(o).mul(Ie(10).pow(N.getChainDecimalsByType("SOLANA")-r)).toFixed(0)),{fee:A,extraGas:c,gasFeePaymentMethod:"native"}}return{fee:i.fee,extraGas:i.extraGas,gasFeePaymentMethod:"native"}}getExtraGasInstruction(r,i,o){return He.SystemProgram.transfer({fromPubkey:i,toPubkey:o,lamports:+r})}async prepareSwapAndBridgeData(r){let{amount:i,contractAddress:o,fromChainId:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,toTokenAddress:d,poolAddress:p,extraGas:g}=r,y=m,f=c,S=u,T=d,B=l,v=o,M=A,H=Ke(this.solanaRpcUrl,f),G=new pr(Nt,v,H),O=Array.from(on()),ce=new V(p),L=await ga(i,G,ce),ke=await ea(O,G.programId),Fe=await pt(G.programId),je=await we(new V(f),new V(y)),Te=await gt(new V(y),G.programId),se=await or(S,G.programId),ge=await na(S,Buffer.from(T),G.programId),be=await Ye(G.programId),me=await G.account.config.fetch(be),xe=await Ft(S,me.gasOracleProgramId),Me=await Ft(M,me.gasOracleProgramId),Se=fa({amount:L,recipient:Buffer.from(B),nonce:Buffer.from(O),receiveToken:Buffer.from(T),destinationChainId:S,sourceChainId:M,chainBridge:(await pt(G.programId)).toBuffer()}),W={};return W.bridge=G,W.amount=new ht(i),W.vusdAmount=new ht(L),W.nonce=O,W.recipient=Array.from(B),W.receiveToken=Array.from(T),W.poolAccount=ce,W.lockAccount=ke,W.bridgeAuthority=Fe,W.userToken=je,W.bridgeTokenAccount=Te,W.chainBridgeAccount=se,W.otherBridgeTokenAccount=ge,W.userAccount=new V(f),W.destinationChainId=S,W.mint=new V(y),W.config=be,W.configAccountInfo=me,W.gasPrice=xe,W.thisGasPrice=Me,W.message=Se,g&&(W.extraGasInstruction=this.getExtraGasInstruction(g,W.userAccount,be)),W}async buildSwapAndBridgeAllbridgeTransaction(r){let{bridge:i,vusdAmount:o,nonce:A,recipient:c,receiveToken:m,poolAccount:u,lockAccount:l,bridgeAuthority:d,userToken:p,bridgeTokenAccount:g,chainBridgeAccount:y,otherBridgeTokenAccount:f,userAccount:S,destinationChainId:T,mint:B,config:v,configAccountInfo:M,gasPrice:H,thisGasPrice:G,message:O,extraGasInstruction:ce}=r,L=M.allbridgeMessengerProgramId,ke=await Ar(T,L),Fe=await Ye(L),je=await ra(O,L),Te=[];ce&&Te.push(ce);let se=await i.methods.swapAndBridge({vusdAmount:o,nonce:A,destinationChainId:T,recipient:c,receiveToken:m}).accounts({mint:B,user:S,config:v,lock:l,pool:u,gasPrice:H,thisGasPrice:G,bridgeAuthority:d,userToken:p,bridgeToken:g,chainBridge:y,messenger:L,messengerGasUsage:ke,messengerConfig:Fe,sentMessageAccount:je,otherBridgeToken:f}).preInstructions([He.ComputeBudgetProgram.setComputeUnitLimit({units:gr})]).postInstructions(Te).transaction(),ge=Ke(this.solanaRpcUrl,S.toString()).connection;return se.recentBlockhash=(await ge.getLatestBlockhash()).blockhash,se.feePayer=S,await this.convertToVersionedTransaction(se,ge)}async convertToVersionedTransaction(r,i){let o=await i.getAddressLookupTable(new V(this.params.solanaLookUpTable)).then(c=>c.value);if(!o)throw new h("Cannot find allbridgeLookupTableAccount");let A=new He.TransactionMessage({payerKey:r.feePayer,recentBlockhash:r.recentBlockhash,instructions:r.instructions}).compileToV0Message([o]);return new He.VersionedTransaction(A)}async buildSwapAndBridgeWormholeTransaction(r){let{bridge:i,vusdAmount:o,nonce:A,recipient:c,receiveToken:m,poolAccount:u,lockAccount:l,bridgeAuthority:d,userToken:p,bridgeTokenAccount:g,chainBridgeAccount:y,otherBridgeTokenAccount:f,userAccount:S,destinationChainId:T,mint:B,config:v,configAccountInfo:M,gasPrice:H,thisGasPrice:G,message:O,extraGasInstruction:ce}=r,L=this.params.wormholeMessengerProgramId,[ke]=V.findProgramAddressSync([Buffer.from("Bridge")],new V(L)),[Fe]=V.findProgramAddressSync([Buffer.from("fee_collector")],new V(L)),[je]=V.findProgramAddressSync([Buffer.from("Sequence"),d.toBuffer()],new V(L)),Te=await Ar(T,M.wormholeMessengerProgramId),se=await Ye(M.wormholeMessengerProgramId),ge=Ba.generate(),be=Ke(this.solanaRpcUrl,S.toString()),me=await be.connection.getAccountInfo(ke);if(me==null)throw new h("Cannot fetch wormhole bridge account info");let xe=new ht(me.data.slice(16,24),"le").toString(),Me=Qi.transfer({fromPubkey:S,toPubkey:Fe,lamports:+xe}),Se=[];ce&&Se.push(ce);let W={mint:B,user:S,config:v,lock:l,pool:u,gasPrice:H,thisGasPrice:G,bridgeAuthority:d,userToken:p,bridgeToken:g,chainBridge:y,otherBridgeToken:f,messengerGasUsage:Te,wormholeProgram:L,bridge:ke,message:ge.publicKey,wormholeMessenger:M.wormholeMessengerProgramId,sequence:je,feeCollector:Fe,wormholeMessengerConfig:se,clock:He.SYSVAR_CLOCK_PUBKEY},Xt=await i.methods.swapAndBridgeWormhole({vusdAmount:o,nonce:A,destinationChainId:T,recipient:c,receiveToken:m}).accounts(W).preInstructions([He.ComputeBudgetProgram.setComputeUnitLimit({units:gr}),Me]).postInstructions(Se).signers([ge]).transaction();return Xt.recentBlockhash=(await be.connection.getLatestBlockhash()).blockhash,Xt.feePayer=S,{transaction:await this.convertToVersionedTransaction(Xt,be.connection),messageAccount:ge}}async prepareSwapAndBridgeCctpData(r){let{contractAddress:i,amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,extraGas:d}=r,p=i;if(!p)throw new ne("Such route does not support CCTP protocol");let g=4,y=A,f=l,S=u,T=Ke(this.solanaRpcUrl,y),B=new pr(pa,p,T),v=new V(c),M=await aa(v,B.programId),H=new V(y),G=await B.account.cctpBridge.fetch(M),O={};return O.cctpBridge=B,O.cctpBridgeAccount=M,O.cctpAddressAccount=new V(p),O.amount=new ht(o),O.recipient=Array.from(S),O.receiveToken=Array.from(f),O.userToken=await we(H,v),O.bridgeAuthority=await ta(M,B.programId),O.bridgeTokenAccount=await ia(v,B.programId),O.chainBridgeAccount=await or(m,B.programId),O.userAccount=H,O.destinationChainId=m,O.mint=v,O.gasPrice=await Ft(m,G.gasOracleProgramId),O.thisGasPrice=await Ft(g,G.gasOracleProgramId),O.provider=T,d&&(O.extraGasInstruction=this.getExtraGasInstruction(d,O.userAccount,M)),O}async buildSwapAndBridgeCctpTransaction(r,i){let{cctpBridge:o,cctpBridgeAccount:A,amount:c,recipient:m,receiveToken:u,bridgeAuthority:l,userToken:d,bridgeTokenAccount:p,chainBridgeAccount:g,userAccount:y,destinationChainId:f,mint:S,gasPrice:T,thisGasPrice:B,extraGasInstruction:v,provider:M}=i,H=this.params.cctpParams.cctpDomains[r],G=this.params.cctpParams.cctpTransmitterProgramId,O=this.params.cctpParams.cctpTokenMessengerMinter;if(H==null||!G||!O)throw new h("CCTP is not configured");let ce=new V(G),L=new V(O),{messageTransmitterAccount:ke,tokenMessenger:Fe,tokenMessengerEventAuthority:je,tokenMinter:Te,localToken:se,remoteTokenMessengerKey:ge,authorityPda:be}=oa(H,S,ce,L),me=[];v&&me.push(v);let xe=Ba.generate(),Me=sa(o.programId,xe.publicKey),Se=await o.methods.bridge({amount:c,destinationChainId:f,recipient:m,receiveToken:u}).accounts({mint:S,user:y,cctpBridge:A,messageSentEventData:xe.publicKey,lock:Me,cctpMessenger:L,messageTransmitterProgram:ce,messageTransmitterAccount:ke,tokenMessenger:Fe,tokenMinter:Te,localToken:se,remoteTokenMessengerKey:ge,authorityPda:be,eventAuthority:je,bridgeToken:p,gasPrice:T,thisGasPrice:B,chainBridge:g,userToken:d,bridgeAuthority:l}).preInstructions([He.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(me).transaction(),W=M.connection;return Se.recentBlockhash=(await W.getLatestBlockhash()).blockhash,Se.feePayer=y,{transaction:await this.convertToVersionedTransaction(Se,W),messageSentEventDataKeypair:xe}}send(r){throw new X}};import{Address as fr,contract as Bb}from"@stellar/stellar-sdk";import{Big as es}from"big.js";import{contract as n}from"@stellar/stellar-sdk";var zi=n.Spec,qi=n.Client;var Wt=class extends qi{constructor(r){super(new zi(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),r);this.options=r}fromJSON={initialize:this.txFromJSON,swap_and_bridge:this.txFromJSON,receive_tokens:this.txFromJSON,swap:this.txFromJSON,stop_swap:this.txFromJSON,start_swap:this.txFromJSON,set_gas_oracle:this.txFromJSON,set_stop_authority:this.txFromJSON,set_rebalancer:this.txFromJSON,set_messenger:this.txFromJSON,set_gas_usage:this.txFromJSON,register_bridge:this.txFromJSON,add_bridge_token:this.txFromJSON,remove_bridge_token:this.txFromJSON,add_pool:this.txFromJSON,withdraw_gas_tokens:this.txFromJSON,withdraw_bridging_fee_in_tokens:this.txFromJSON,has_processed_message:this.txFromJSON,has_received_message:this.txFromJSON,get_pool_address:this.txFromJSON,get_config:this.txFromJSON,get_stop_authority:this.txFromJSON,get_transaction_cost:this.txFromJSON,get_gas_usage:this.txFromJSON,get_admin:this.txFromJSON,get_gas_oracle:this.txFromJSON,get_another_bridge:this.txFromJSON,set_admin:this.txFromJSON,upgrade:this.txFromJSON}};var yn=class extends le{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";async buildRawTransactionSend(r){let i=await Be(this.chainType,r,this.api);return await this.buildRawTransactionSendFromParams(i)}async buildRawTransactionSendFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:g}=r,y=d;g&&(y=es(y).plus(g).toFixed());let f=this.getContract(Wt,o,A),S;return p==="stablecoin"?S=await f.swap_and_bridge({sender:A,token:fr.contract(Buffer.from(c)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(l),nonce:Ge(),gas_amount:BigInt(0),fee_token_amount:BigInt(y)}):S=await f.swap_and_bridge({sender:A,token:fr.contract(Buffer.from(c)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(l),nonce:Ge(),gas_amount:BigInt(y),fee_token_amount:BigInt(0)}),S.toXDR()}async buildRawTransactionSwap(r){let i=Ue(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=r;return(await this.getContract(Wt,o,A).swap({sender:A,amount:BigInt(i),token:fr.contract(Buffer.from(c)).toBuffer(),receive_token:Buffer.from(u),recipient:m,receive_amount_min:BigInt(l)})).toXDR()}send(r){throw new X}getContract(r,i,o){let A={publicKey:o,contractId:i,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new r(A)}};import{SuiClient as ds}from"@mysten/sui/client";import{coinWithBalance as $,Transaction as wn}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as ja}from"@mysten/sui/utils";import{Big as vr}from"big.js";var kr=Pe(Qe());var Le=Pe(Qe());K();function ka(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::swap`,typeArguments:a,arguments:[w(s,r.bridge),w(s,r.coin),ye(s,r.receiveAmountMin,"u64")]})}function Fa(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::deposit`,typeArguments:[a],arguments:[w(s,r.bridge),w(s,r.userDeposit),w(s,r.coin)]})}function xa(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::withdraw`,typeArguments:[a],arguments:[w(s,r.bridge),w(s,r.userDeposit),ye(s,r.amountLp,"u64")]})}function Ma(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::claim_reward`,typeArguments:[a],arguments:[w(s,r.bridge),w(s,r.userDeposit)]})}function Oa(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::pool`,typeArguments:[a],arguments:[w(s,r)]})}function hr(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::swap_and_bridge_wormhole`,typeArguments:[a],arguments:[w(s,r.bridge),w(s,r.messenger),w(s,r.wormholeState),w(s,r.theClock),w(s,r.gasOracle),w(s,r.amount),w(s,r.recipient),ye(s,r.destinationChainId,"u8"),w(s,r.receiveToken),ye(s,r.nonce,"u256"),w(s,r.feeSuiCoin),w(s,r.feeTokenCoin)]})}function Na(s,a){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::new_user_deposit`,typeArguments:[a],arguments:[]})}function Tr(s,a,r){return s.moveCall({target:`${Le.PUBLISHED_AT}::bridge_interface::swap_and_bridge`,typeArguments:[a],arguments:[w(s,r.bridge),w(s,r.messenger),w(s,r.gasOracle),w(s,r.amount),w(s,r.recipient),ye(s,r.destinationChainId,"u8"),w(s,r.receiveToken),ye(s,r.nonce,"u256"),w(s,r.feeSuiCoin),w(s,r.feeTokenCoin)]})}var Za=Pe(Sr());var Da=Pe(Sr());K();function Pr(s,a,r){return s.moveCall({target:`${Da.PUBLISHED_AT}::cctp_bridge_interface::bridge`,typeArguments:[a],arguments:[w(s,r.cctpBridge),w(s,r.gasOracle),w(s,r.tokenMessengerMinterState),w(s,r.messageTransmitterState),w(s,r.treasury),w(s,r.denyList),w(s,r.amount),w(s,r.feeSuiCoin),w(s,r.feeTokenCoin),ye(s,r.destinationChainId,"u8"),w(s,r.recipient),w(s,r.recipientWalletAddress)]})}var $a=Pe(Cr());var Va=Pe(Cr());K();import{bcs as ze}from"@mysten/sui/bcs";import{fromHEX as os,toHEX as As}from"@mysten/sui/utils";import{bcs as ss}from"@mysten/sui/bcs";K();var Br=class s{__VectorClass=!0;static $typeName="vector";static $numTypeParams=1;static $isPhantom=[!1];$typeName="vector";$fullTypeName;$typeArgs;$isPhantom=[!1];elements;constructor(a,r){this.$fullTypeName=x(this.$typeName,...a),this.$typeArgs=a,this.elements=r}static reified(a){return{typeName:s.$typeName,fullTypeName:x(s.$typeName,C(a)),typeArgs:[C(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs(Dt(a)),fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),new:r=>new s([C(a)],r),kind:"VectorClassReified"}}static get r(){return s.reified}static get bcs(){return ss.vector}static fromFields(a,r){return s.reified(a).new(r.map(i=>k(a,i)))}static fromFieldsWithTypes(a,r){return s.reified(a).new(r.map(i=>I(a,i)))}static fromBcs(a,r){return s.fromFields(a,s.bcs(Dt(a)).parse(r))}toJSONField(){return this.elements.map(a=>ot(this.$typeArgs[0],a))}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,elements:this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new(r.map(i=>R(a,i)))}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a vector json object");return s.fromJSONField(a,r.elements)}};function Tt(s){return Br.r(s)}function Z(s){return typeof s=="string"?{phantomType:s,kind:"PhantomReified"}:{phantomType:s.fullTypeName,kind:"PhantomReified"}}var cs=ze.bytes(32).transform({input:s=>os(s),output:s=>As(s)});function Dt(s){switch(s){case"bool":return ze.bool();case"u8":return ze.u8();case"u16":return ze.u16();case"u32":return ze.u32();case"u64":return ze.u64();case"u128":return ze.u128();case"u256":return ze.u256();case"address":return cs;default:return s.bcs}}function C(s){switch(s){case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"bool":case"address":return s}switch(s.kind){case"PhantomReified":return s.phantomType;case"StructClassReified":return s.fullTypeName;case"VectorClassReified":return s.fullTypeName}throw new Error("unreachable")}function k(s,a){switch(s){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return`0x${a}`}if(s.kind==="VectorClassReified")return s.fromFields(a).elements;switch(s.typeName){case"0x1::string::String":case"0x1::ascii::String":return new TextDecoder().decode(Uint8Array.from(a.bytes)).toString();case"0x2::url::Url":return new TextDecoder().decode(Uint8Array.from(a.url.bytes)).toString();case"0x2::object::ID":return`0x${a.bytes}`;case"0x2::object::UID":return`0x${a.id.bytes}`;case"0x1::option::Option":return a.vec.length===0?null:s.fromFields(a).vec[0];default:return s.fromFields(a)}}function I(s,a){switch(s){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return a}if(s.kind==="VectorClassReified")return s.fromFieldsWithTypes(a).elements;switch(s.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":return a;case"0x2::object::UID":return a.id;case"0x2::balance::Balance":return s.fromFields({value:BigInt(a)});case"0x1::option::Option":return a===null?null:I(s.reifiedTypeArgs[0],a);default:return s.fromFieldsWithTypes(a)}}function Re(s,a,r){if(r.length!==a.length)throw new Error(`provided item has mismatching number of type argments ${s} (expected ${r.length}, got ${a.length}))`);for(let i=0;i<a.length;i++)if(P(a[i])!==P(C(r[i])))throw new Error(`provided item has mismatching type argments ${s} (expected ${C(r[i])}, got ${a[i]}))`)}function Ee(s,a){let{typeArgs:r}=ee(s.type);Re(s.type,r,a)}function ot(s,a){let{typeName:r,typeArgs:i}=ee(s);switch(r){case"bool":return a;case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return a.toString();case"address":case"signer":return a;case"vector":return a.map(o=>ot(i[0],o));case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return a;case"0x1::option::Option":return a===null?null:ot(i[0],a);default:return a.toJSONField()}}function R(s,a){switch(s){case"bool":case"u8":case"u16":case"u32":return a;case"u64":case"u128":case"u256":return BigInt(a);case"address":return a}if(s.kind==="VectorClassReified")return s.fromJSONField(a).elements;switch(s.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return a;case"0x1::option::Option":return a===null?null:R(s.reifiedTypeArgs[0],a);default:return s.fromJSONField(a)}}K();var hn="0x1";import{bcs as ku}from"@mysten/sui/bcs";import{fromB64 as xu}from"@mysten/sui/utils";K();import{bcs as Ir}from"@mysten/sui/bcs";import{fromB64 as ms}from"@mysten/sui/utils";function Tn(s){return s=P(s),s===`${hn}::string::String`}var bn=class s{__StructClass=!0;static get $typeName(){return`${hn}::string::String`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;bytes;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:x(s.$typeName),typeArgs:[],isPhantom:s.$isPhantom,reifiedTypeArgs:[],fromFields:a=>s.fromFields(a),fromFieldsWithTypes:a=>s.fromFieldsWithTypes(a),fromBcs:a=>s.fromBcs(a),bcs:s.bcs,fromJSONField:a=>s.fromJSONField(a),fromJSON:a=>s.fromJSON(a),fromSuiParsedData:a=>s.fromSuiParsedData(a),fromSuiObjectData:a=>s.fromSuiObjectData(a),fetch:async(a,r)=>s.fetch(a,r),new:a=>new s([],a),kind:"StructClassReified"}}static get r(){return s.reified()}static phantom(){return Z(s.reified())}static get p(){return s.phantom()}static get bcs(){return Ir.struct("String",{bytes:Ir.vector(Ir.u8())})}static fromFields(a){return s.reified().new({bytes:k(Tt("u8"),a.bytes)})}static fromFieldsWithTypes(a){if(!Tn(a.type))throw new Error("not a String type");return s.reified().new({bytes:I(Tt("u8"),a.fields.bytes)})}static fromBcs(a){return s.fromFields(s.bcs.parse(a))}toJSONField(){return{bytes:ot("vector<u8>",this.bytes)}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return s.reified().new({bytes:R(Tt("u8"),a.bytes)})}static fromJSON(a){if(a.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(a)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!Tn(a.type))throw new Error(`object at ${a.fields.id} is not a String object`);return s.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!Tn(a.bcs.type))throw new Error("object at is not a String object");return s.fromBcs(ms(a.bcs.bcsBytes))}if(a.content)return s.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r){let i=await a.getObject({id:r,options:{showBcs:!0}});if(i.error)throw new Error(`error fetching String object at id ${r}: ${i.error.code}`);if(i.data?.bcs?.dataType!=="moveObject"||!Tn(i.data.bcs.type))throw new Error(`object at id ${r} is not a String object`);return s.fromSuiObjectData(i.data)}};K();K();var qe="0x2";import{bcs as Rr}from"@mysten/sui/bcs";import{fromB64 as Ea,fromHEX as us,toHEX as ls}from"@mysten/sui/utils";function Sn(s){return s=P(s),s===`${qe}::object::ID`}var At=class s{__StructClass=!0;static get $typeName(){return`${qe}::object::ID`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;bytes;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.bytes=r.bytes}static reified(){return{typeName:s.$typeName,fullTypeName:x(s.$typeName),typeArgs:[],isPhantom:s.$isPhantom,reifiedTypeArgs:[],fromFields:a=>s.fromFields(a),fromFieldsWithTypes:a=>s.fromFieldsWithTypes(a),fromBcs:a=>s.fromBcs(a),bcs:s.bcs,fromJSONField:a=>s.fromJSONField(a),fromJSON:a=>s.fromJSON(a),fromSuiParsedData:a=>s.fromSuiParsedData(a),fromSuiObjectData:a=>s.fromSuiObjectData(a),fetch:async(a,r)=>s.fetch(a,r),new:a=>new s([],a),kind:"StructClassReified"}}static get r(){return s.reified()}static phantom(){return Z(s.reified())}static get p(){return s.phantom()}static get bcs(){return Rr.struct("ID",{bytes:Rr.bytes(32).transform({input:a=>us(a),output:a=>ls(a)})})}static fromFields(a){return s.reified().new({bytes:k("address",a.bytes)})}static fromFieldsWithTypes(a){if(!Sn(a.type))throw new Error("not a ID type");return s.reified().new({bytes:I("address",a.fields.bytes)})}static fromBcs(a){return s.fromFields(s.bcs.parse(a))}toJSONField(){return{bytes:this.bytes}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return s.reified().new({bytes:R("address",a.bytes)})}static fromJSON(a){if(a.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(a)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!Sn(a.type))throw new Error(`object at ${a.fields.id} is not a ID object`);return s.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!Sn(a.bcs.type))throw new Error("object at is not a ID object");return s.fromBcs(Ea(a.bcs.bcsBytes))}if(a.content)return s.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r){let i=await a.getObject({id:r,options:{showBcs:!0}});if(i.error)throw new Error(`error fetching ID object at id ${r}: ${i.error.code}`);if(i.data?.bcs?.dataType!=="moveObject"||!Sn(i.data.bcs.type))throw new Error(`object at id ${r} is not a ID object`);return s.fromSuiObjectData(i.data)}};function Pn(s){return s=P(s),s===`${qe}::object::UID`}var he=class s{__StructClass=!0;static get $typeName(){return`${qe}::object::UID`}static $numTypeParams=0;static $isPhantom=[];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.id=r.id}static reified(){return{typeName:s.$typeName,fullTypeName:x(s.$typeName),typeArgs:[],isPhantom:s.$isPhantom,reifiedTypeArgs:[],fromFields:a=>s.fromFields(a),fromFieldsWithTypes:a=>s.fromFieldsWithTypes(a),fromBcs:a=>s.fromBcs(a),bcs:s.bcs,fromJSONField:a=>s.fromJSONField(a),fromJSON:a=>s.fromJSON(a),fromSuiParsedData:a=>s.fromSuiParsedData(a),fromSuiObjectData:a=>s.fromSuiObjectData(a),fetch:async(a,r)=>s.fetch(a,r),new:a=>new s([],a),kind:"StructClassReified"}}static get r(){return s.reified()}static phantom(){return Z(s.reified())}static get p(){return s.phantom()}static get bcs(){return Rr.struct("UID",{id:At.bcs})}static fromFields(a){return s.reified().new({id:k(At.reified(),a.id)})}static fromFieldsWithTypes(a){if(!Pn(a.type))throw new Error("not a UID type");return s.reified().new({id:I(At.reified(),a.fields.id)})}static fromBcs(a){return s.fromFields(s.bcs.parse(a))}toJSONField(){return{id:this.id}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a){return s.reified().new({id:R(At.reified(),a.id)})}static fromJSON(a){if(a.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return s.fromJSONField(a)}static fromSuiParsedData(a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!Pn(a.type))throw new Error(`object at ${a.fields.id} is not a UID object`);return s.fromFieldsWithTypes(a)}static fromSuiObjectData(a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!Pn(a.bcs.type))throw new Error("object at is not a UID object");return s.fromBcs(Ea(a.bcs.bcsBytes))}if(a.content)return s.fromSuiParsedData(a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r){let i=await a.getObject({id:r,options:{showBcs:!0}});if(i.error)throw new Error(`error fetching UID object at id ${r}: ${i.error.code}`);if(i.data?.bcs?.dataType!=="moveObject"||!Pn(i.data.bcs.type))throw new Error(`object at id ${r} is not a UID object`);return s.fromSuiObjectData(i.data)}};function ve(s,a){return s.moveCall({target:`${Va.PUBLISHED_AT}::bytes32::from_hex`,arguments:[ye(s,a,`${bn.$typeName}`)]})}async function Ve(s,a,r=[]){let i=await s(a),o=r.concat(i.data);return i.hasNextPage&&i.nextCursor?Ve(s,i.nextCursor,o):o}var Cn=class extends le{constructor(r,i){super();this.nodeRpcUrlsConfig=r;this.api=i;this.client=new ds({url:r.getNodeRpcUrl(this.chainSymbol)})}chainType="SUI";chainSymbol="SUI";client;send(){throw new h("Method send not implemented.")}async buildRawTransactionSwap(r){let i=r.sourceToken.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");(0,kr.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin);let o=Ue(this.chainType,r);return await this.buildRawTransactionSwapFromParams(o,i)}async buildRawTransactionSwapFromParams(r,i){let{amount:o,fromAccountAddress:A,fromTokenAddress:c,toTokenAddress:m,minimumReceiveAmount:u}=r,l=new wn;l.setSender(A);let d={bridge:i.bridgeObjectAddress,coin:$({balance:BigInt(o),type:c}),receiveAmountMin:BigInt(u)},p=ka(l,[c,m],d),g=await Ve(y=>this.client.getCoins({owner:r.toAccountAddress,coinType:m,cursor:y}));return g.length===0||!g[0]?l.transferObjects([p],r.toAccountAddress):l.mergeCoins(g[0].coinObjectId,[p]),await l.toJSON({client:this.client})}async buildRawTransactionSend(r){let i=await Be(this.chainType,r,this.api),{messenger:o}=i,A=r.sourceToken.suiAddresses;if(!A)throw new h("SUI token must contain 'suiAddresses'");switch((0,kr.setAddress)(A.bridgeAddress,A.bridgeAddressOrigin),(0,$a.setAddress)(A.utilsAddress),o){case 1:return this.buildRawTransactionAllbridgeSend(i,A);case 2:return this.buildRawTransactionWormholeSend(i,A);case 3:case 4:return this.buildRawTransactionCctpSend(r,i,A)}}async buildRawTransactionAllbridgeSend(r,i){let{amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:g}=r,y=d;g&&(y=vr(y).plus(g).toFixed());let f=new wn;if(f.setSender(A),p==="stablecoin"){let S=BigInt(o)-BigInt(y),T={bridge:i.bridgeObjectAddress,messenger:i.allbridgeMessengerObjectAddress,amount:$({balance:S,type:c}),destinationChainId:m,nonce:Ge(),recipient:ve(f,Ce(u)),receiveToken:ve(f,Ce(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(y),type:c}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};Tr(f,c,T)}else{let S=y==="0"?$({balance:BigInt(y),useGasCoin:!1}):$({balance:BigInt(y)}),T={bridge:i.bridgeObjectAddress,messenger:i.allbridgeMessengerObjectAddress,amount:$({balance:BigInt(o),type:c}),destinationChainId:m,nonce:Ge(),recipient:ve(f,Ce(u)),receiveToken:ve(f,Ce(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:c}),feeSuiCoin:S};Tr(f,c,T)}return await f.toJSON({client:this.client})}async buildRawTransactionWormholeSend(r,i){let{amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:g}=r,y=d;g&&(y=vr(y).plus(g).toFixed());let f=new wn;if(f.setSender(A),p==="stablecoin"){let S=BigInt(o)-BigInt(y),T={bridge:i.bridgeObjectAddress,messenger:i.wormholeMessengerObjectAddress,wormholeState:i.wormholeStateObjectAddress,theClock:ja,amount:$({balance:S,type:c}),destinationChainId:m,nonce:Ge(),recipient:ve(f,Ce(u)),receiveToken:ve(f,Ce(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(y),type:c}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};hr(f,c,T)}else{let S=y==="0"?$({balance:BigInt(y),useGasCoin:!1}):$({balance:BigInt(y)}),T={bridge:i.bridgeObjectAddress,messenger:i.wormholeMessengerObjectAddress,wormholeState:i.wormholeStateObjectAddress,theClock:ja,amount:$({balance:BigInt(o),type:c}),destinationChainId:m,nonce:Ge(),recipient:ve(f,Ce(u)),receiveToken:ve(f,Ce(l)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:c}),feeSuiCoin:S};hr(f,c,T)}return await f.toJSON({client:this.client})}async buildRawTransactionCctpSend(r,i,o){let{amount:A,fromAccountAddress:c,fromTokenAddress:m,toChainId:u,toAccountAddress:l,fee:d,gasFeePaymentMethod:p,extraGas:g}=i;(0,Za.setAddress)(o.cctpAddress,o.cctpAddressOrigin);let y=d;g&&(y=vr(y).plus(g).toFixed());let f=new wn;f.setSender(c);let S=ve(f,Ce(l)),T;if(r.destinationToken.chainType==="SOLANA"){let B=await mn(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));T=ve(f,Ce(B))}else T=S;if(p==="stablecoin"){let B=BigInt(A)-BigInt(y),v={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:$({balance:B,type:m}),destinationChainId:u,recipient:T,recipientWalletAddress:S,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(y),type:m}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};Pr(f,m,v)}else{let B=y==="0"?$({balance:BigInt(y),useGasCoin:!1}):$({balance:BigInt(y)}),v={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:$({balance:BigInt(A),type:m}),destinationChainId:u,recipient:T,recipientWalletAddress:S,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:m}),feeSuiCoin:B};Pr(f,m,v)}return await f.toJSON({client:this.client})}};import{Big as fs}from"big.js";import ps from"bn.js";function Bn(s){return"0x"+new ps(s).toString("hex")}function _a(s){return new Promise(a=>setTimeout(()=>a(),s))}async function In(s,a){let r=await s.trx.sign(a);if(!r.signature)throw new lt("Transaction was not signed properly");let o=(await s.trx.sendRawTransaction(r)).transaction.txID;return await gs(s,o),{txId:o}}async function gs(s,a,r=1e4){let i=Date.now();for(;;){if(Date.now()-i>r)throw new It("Transaction not found");let o=await s.trx.getUnconfirmedTransactionInfo(a);if(!o?.receipt){await _a(2e3);continue}if(o.receipt.result==="SUCCESS")return o;throw new It(`Transaction status is ${o.receipt.result}`)}}var Gt=class extends le{constructor(r,i){super();this.tronWeb=r;this.api=i}chainType="TRX";async send(r){let i=await Be(this.chainType,r,this.api),o=await this.buildRawTransactionSendFromParams(i);return await In(this.tronWeb,o)}async buildRawTransactionSwap(r){let i=Ue(this.chainType,r);return await this.buildRawTransactionSwapFromParams(i)}async buildRawTransactionSwapFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:u,minimumReceiveAmount:l}=r,d=[{type:"uint256",value:i},{type:"bytes32",value:c},{type:"bytes32",value:u},{type:"address",value:m},{type:"uint256",value:l}];return this.buildRawTransaction(o,"swap(uint256,bytes32,bytes32,address,uint256)",d,"0",A)}async buildRawTransactionSend(r){let i=await Be(this.chainType,r,this.api);return this.buildRawTransactionSendFromParams(i)}async buildRawTransactionSendFromParams(r){let{amount:i,contractAddress:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:l,messenger:d,fee:p,gasFeePaymentMethod:g,extraGas:y}=r,f=p;y&&(f=fs(f).plus(y).toFixed());let S=Ge().toString(),T,B,v;return d==3||d==4?(g==="stablecoin"?(T=[{type:"uint256",value:i},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"uint256",value:f}],B="0"):(T=[{type:"uint256",value:i},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"uint256",value:0}],B=f),v="bridge(uint256,bytes32,uint256,uint256)"):(g==="stablecoin"?(T=[{type:"bytes32",value:c},{type:"uint256",value:i},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"bytes32",value:l},{type:"uint256",value:S},{type:"uint8",value:d},{type:"uint256",value:f}],B="0"):(T=[{type:"bytes32",value:c},{type:"uint256",value:i},{type:"bytes32",value:u},{type:"uint256",value:m},{type:"bytes32",value:l},{type:"uint256",value:S},{type:"uint8",value:d},{type:"uint256",value:0}],B=f),v="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)"),this.buildRawTransaction(o,v,T,B,A)}async buildRawTransaction(r,i,o,A,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+A},o,c);if(!m?.result?.result)throw new h("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var Rn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new un(a,r,i,o)}rawTxBuilder;async getAllowance(a,r){let i,o;r?(i=a,o=r):o=a;let A=Ot(o.token,o.messenger);return await this.tokenService.getAllowance({...o,spender:A},i)}async checkAllowance(a,r){let i,o;r?(i=a,o=r):o=a;let A=Ot(o.token,o.messenger);return this.tokenService.checkAllowance({...o,spender:A},i)}async approve(a,r){let i=Ot(r.token,r.messenger);return this.tokenService.approve(a,{...r,spender:i})}async send(a,r){return U(r.amount),E("amount",r.amount,r.sourceToken.decimals),ln(r.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).send(r)}};function Ot(s,a){if(a&&a==3){if(s.cctpAddress)return s.cctpAddress;throw new ne("Such route does not support CCTP protocol")}else if(a&&a==4){if(s.cctpV2Address)return s.cctpV2Address;throw new ne("Such route does not support CCTP V2 protocol")}else return s.bridgeAddress}function ln(s,a,r,i,o){switch(N.getChainProperty(s).chainType){case"EVM":{if(o)return new Mt(o,a,r);{let A=r.getNodeRpcUrl(s);return new Mt(new hs(A),a,r)}}case"TRX":{if(o)return new Gt(o,a);{let A=r.getNodeRpcUrl(s);return new Gt(new ys({fullHost:A,solidityNode:A,eventServer:A}),a)}}case"SOLANA":return new fn(r.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:i.wormholeMessengerProgramId,solanaLookUpTable:i.solanaLookUpTable,cctpParams:i.cctpParams,jupiterParams:{jupiterUrl:i.jupiterUrl,jupiterApiKeyHeader:i.jupiterApiKeyHeader,jupiterMaxAccounts:i.jupiterMaxAccounts}},a);case"SRB":return new yn(r,i,a);case"SUI":return new Cn(r,a)}}import{Big as Ds}from"big.js";import Gs from"timed-cache";import{TronWeb as Us}from"tronweb";import{FMT_BYTES as Es,FMT_NUMBER as Vs,Web3 as js}from"web3";import{Big as Xe}from"big.js";function Ja(s,a,r,i,o){let A=D(s,3),c=Xe(A),m=Xe(r),u=Xe(i).plus(o),l,d;if(m.eq(0)||u.eq(0)){let g=c.div(2);l=Xe(i).plus(g),d=Xe(o).plus(g)}else l=Xe(i).plus(c.mul(i).div(u)),d=Xe(o).plus(c.mul(o).div(u));return Xe(_r(a,l.toFixed(),d.toFixed())).minus(m).toFixed()}function La(s){let a=D(s,3);return Xe(a).round().toFixed()}import{Web3 as et}from"web3";var Ts={abi:[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Ut=Ts;var ie=class{lpAmount;rewardDebt;constructor(a){this.lpAmount=a.lpAmount,this.rewardDebt=a.rewardDebt}get userLiquidity(){return F(this.lpAmount,3).toFixed()}earned(a,r){let i=Zr(this.lpAmount,this.rewardDebt,a.accRewardPerShareP,a.p);return r?F(i,r).toFixed():i}};var de=class{};var Et=class extends de{constructor(r,i){super();this.web3=r;this.api=i}chainType="EVM";P=52;async getUserBalanceInfo(r,i){let o;try{o=await sn(this.getUserBalanceInfoByBatch(r,i),`Cannot get UserBalanceInfo for ${i.name} on ${i.chainSymbol}`,5e3)}catch{o=await sr(()=>this.getUserBalanceInfoPerProperty(r,i),`Cannot get UserBalanceInfo for ${i.name} on ${i.chainSymbol}`,5,2e3)}return o}async getPoolInfoFromChain(r){let i;try{i=await sn(this.getPoolInfoByBatch(r),`Cannot get PoolInfo for ${r.name} on ${r.chainSymbol}`,5e3)}catch{i=await sr(()=>this.getPoolInfoPerProperty(r),`Cannot get PoolInfo for ${r.name} on ${r.chainSymbol}`,5,2e3)}return i}async getUserBalanceInfoByBatch(r,i){let o=new this.web3.eth.BatchRequest,A=this.getPoolContract(i.poolAddress),c=A.methods.userRewardDebt(r).encodeABI(),m=A.methods.balanceOf(r).encodeABI();o.add({method:"eth_call",params:[{to:i.poolAddress,data:c},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:m},"latest"]});let[u,l]=await o.execute();if(u&&l&&!u.error&&!l.error)return new ie({lpAmount:et.utils.toBigInt(l.result).toString(),rewardDebt:et.utils.toBigInt(u.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(r,i){let o=(await this.getPoolContract(i.poolAddress).methods.userRewardDebt(r).call()).toString(),A=(await this.getPoolContract(i.poolAddress).methods.balanceOf(r).call()).toString();return new ie({lpAmount:A,rewardDebt:o})}async getPoolInfoByBatch(r){let i=new this.web3.eth.BatchRequest,o=this.getPoolContract(r.poolAddress),A=o.methods.a().encodeABI(),c=o.methods.d().encodeABI(),m=o.methods.tokenBalance().encodeABI(),u=o.methods.vUsdBalance().encodeABI(),l=o.methods.totalSupply().encodeABI(),d=o.methods.accRewardPerShareP().encodeABI();i.add({method:"eth_call",params:[{to:r.poolAddress,data:A},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:c},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:m},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:u},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:l},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:d},"latest"]});let[p,g,y,f,S,T]=await i.execute();if(p&&g&&y&&f&&S&&T&&!p.error&&!g.error&&!y.error&&!f.error&&!S.error&&!T.error){let B=et.utils.toBigInt(y.result).toString(),v=et.utils.toBigInt(f.result).toString(),M=re({tokenBalance:B,vUsdBalance:v});return{aValue:et.utils.toBigInt(p.result).toString(),dValue:et.utils.toBigInt(g.result).toString(),tokenBalance:B,vUsdBalance:v,totalLpAmount:et.utils.toBigInt(S.result).toString(),accRewardPerShareP:et.utils.toBigInt(T.result).toString(),p:this.P,imbalance:M}}throw new Error("Batched failed")}async getPoolInfoPerProperty(r){let i=this.getPoolContract(r.poolAddress),o=(await i.methods.a().call()).toString(),A=(await i.methods.d().call()).toString(),c=(await i.methods.tokenBalance().call()).toString(),m=(await i.methods.vUsdBalance().call()).toString(),u=(await i.methods.totalSupply().call()).toString(),l=(await i.methods.accRewardPerShareP().call()).toString(),d=re({tokenBalance:c,vUsdBalance:m});return{aValue:o,dValue:A,tokenBalance:c,vUsdBalance:m,totalLpAmount:u,accRewardPerShareP:l,p:this.P,imbalance:d}}async buildRawTransactionDeposit(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.deposit(r.amount).encodeABI()})}async buildRawTransactionWithdraw(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.withdraw(r.amount).encodeABI()})}async buildRawTransactionClaimRewards(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(r){return{from:r.accountAddress,to:r.token.poolAddress,value:"0"}}getPoolContract(r){return new this.web3.eth.Contract(Ut.abi,r)}};var vn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o}async approve(a,r){if(r){let i=a,o=r;return this.tokenService.buildRawTransactionApprove({...o,spender:o.token.poolAddress},i)}else{let i=a;return this.tokenService.buildRawTransactionApprove({...i,spender:i.token.poolAddress})}}async deposit(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),a.amount=D(a.amount,a.token.decimals).toFixed(),bt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionDeposit(a)}async withdraw(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),a.amount=D(a.amount,3).toFixed(),bt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionWithdraw(a)}async claimRewards(a,r){return bt(a.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionClaimRewards(a)}};import{AnchorProvider as bs,BN as Xa,Program as Ss,Spl as Ps,web3 as ws}from"@project-serum/anchor";import{Connection as Cs,PublicKey as tt}from"@solana/web3.js";var kn=class extends de{constructor(r,i){super();this.solanaRpcUrl=r;this.api=i}chainType="SOLANA";P=48;async getUserBalanceInfo(r,i){let o=this.buildAnchorProvider(r),A=this.getBridge(i.bridgeAddress,o),c=new tt(i.poolAddress),m=await A.account.pool.fetch(c);try{let u=await cr(new tt(r),m.mint,A.programId),{lpAmount:l,rewardDebt:d}=await A.account.userDeposit.fetch(u);return new ie({lpAmount:l.toString(),rewardDebt:d.toString()})}catch{return new ie({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(r){let i=this.buildAnchorProvider(r.bridgeAddress),o=await this.getBridge(r.bridgeAddress,i).account.pool.fetch(r.poolAddress),A=o.vUsdBalance.toString(),c=o.tokenBalance.toString(),m=re({tokenBalance:c,vUsdBalance:A});return{dValue:o.d.toString(),aValue:o.a.toString(),totalLpAmount:o.totalLpAmount.toString(),vUsdBalance:A,tokenBalance:c,accRewardPerShareP:o.accRewardPerShareP.toString(),p:this.P,imbalance:m}}async buildRawTransactionDeposit(r){let{bridge:i,accounts:o,preInstructions:A}=await this.prepareDataForTransaction(r),c=await i.methods.deposit(new Xa(r.amount)).accounts(o).preInstructions(A).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new tt(r.accountAddress),await yt(c,r.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionWithdraw(r){let{bridge:i,accounts:o,preInstructions:A}=await this.prepareDataForTransaction(r),c=await i.methods.withdraw(new Xa(r.amount)).accounts(o).preInstructions(A).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new tt(r.accountAddress),await yt(c,r.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionClaimRewards(r){let{bridge:i,accounts:o,preInstructions:A}=await this.prepareDataForTransaction(r),c=await i.methods.claimRewards().accounts(o).preInstructions(A).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(r.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new tt(r.accountAddress),await yt(c,r.txFeeParams,this.solanaRpcUrl),c}async prepareDataForTransaction(r){let i=this.buildAnchorProvider(r.accountAddress),o=this.getBridge(r.token.bridgeAddress,i),{accounts:A,preInstructions:c}=await this._getLPTransactionData(o,r.token.poolAddress,r.accountAddress,i);return{bridge:o,accounts:A,preInstructions:c}}getBridge(r,i){return new Ss(Nt,r,i)}buildAnchorProvider(r){let i=new Cs(this.solanaRpcUrl,"confirmed"),o=new tt(r);return new bs(i,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(r,i,o,A){let c=new tt(o),m=await Ye(r.programId),u=await pt(r.programId),l=new tt(i),p=(await r.account.pool.fetch(l)).mint,g=await we(c,p),y=await gt(p,r.programId),f=await cr(c,p,r.programId),S=[ws.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await ft(g,A)}catch{let M=await Ps.associatedToken(A).methods.create().accounts({mint:p,owner:c,associatedAccount:g}).instruction();S.push(M)}try{await r.account.userDeposit.fetch(f)}catch{let v=await r.methods.initDepositAccount().accounts({mint:p,user:c,userDeposit:f}).instruction();S.push(v)}return{accounts:{mint:p,user:c,config:m,pool:l,bridgeAuthority:u,userDeposit:f,userToken:g,bridgeToken:y},preInstructions:S}}};import{contract as Ib}from"@stellar/stellar-sdk";import{contract as t}from"@stellar/stellar-sdk";var Bs=t.Spec,Is=t.Client;var Fn=class extends Is{constructor(r){super(new Bs(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),r);this.options=r}fromJSON={initialize:this.txFromJSON,deposit:this.txFromJSON,withdraw:this.txFromJSON,swap_to_v_usd:this.txFromJSON,swap_from_v_usd:this.txFromJSON,claim_rewards:this.txFromJSON,set_fee_share:this.txFromJSON,adjust_total_lp_amount:this.txFromJSON,set_balance_ratio_min_bp:this.txFromJSON,stop_deposit:this.txFromJSON,start_deposit:this.txFromJSON,stop_withdraw:this.txFromJSON,start_withdraw:this.txFromJSON,set_stop_authority:this.txFromJSON,set_bridge:this.txFromJSON,set_admin:this.txFromJSON,set_admin_fee_share:this.txFromJSON,claim_admin_fee:this.txFromJSON,pending_reward:this.txFromJSON,get_pool:this.txFromJSON,get_admin:this.txFromJSON,get_stop_authority:this.txFromJSON,get_bridge:this.txFromJSON,get_user_deposit:this.txFromJSON,upgrade:this.txFromJSON}};import{contract as rp,rpc as Rs}from"@stellar/stellar-sdk";var Ya=Rs.Api;function St(s){let{simulation:a,options:r}=s;if(!a)throw new Error("Soroban assembled transaction does not have simulation");if(Ya.isSimulationSuccess(a))return a.result==null?void 0:r.parseResultXdr(a.result.retval);throw new Error(a.error)}function Pt(s){let{simulation:a}=s;if(!a)throw new Error("Soroban assembled transaction does not have simulation");return Ya.isSimulationError(a)}var xn=class extends de{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";P=48;async getUserBalanceInfo(r,i){let A=await this.getContract(i.poolAddress).get_user_deposit({user:r});if(Pt(A))throw new h;let c=St(A);if(!c)throw new h;let m=c.unwrap();return new ie({lpAmount:m.lp_amount.toString(),rewardDebt:m.reward_debt.toString()})}async getPoolInfoFromChain(r){let o=await this.getContract(r.poolAddress).get_pool();if(Pt(o))throw new h;let A=St(o);if(!A)throw new h;let c=A.unwrap();return{aValue:c.a.toString(),accRewardPerShareP:c.acc_reward_per_share_p.toString(),dValue:c.d.toString(),tokenBalance:c.token_balance.toString(),p:this.P,totalLpAmount:c.total_lp_amount.toString(),vUsdBalance:c.v_usd_balance.toString(),imbalance:re({tokenBalance:c.token_balance.toString(),vUsdBalance:c.v_usd_balance.toString()})}}async buildRawTransactionDeposit(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).deposit({sender:r.accountAddress,amount:BigInt(r.amount)})).toXDR()}async buildRawTransactionWithdraw(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).withdraw({sender:r.accountAddress,amount_lp:BigInt(r.amount)})).toXDR()}async buildRawTransactionClaimRewards(r){return(await this.getContract(r.token.poolAddress,r.accountAddress).claim_rewards({sender:r.accountAddress})).toXDR()}getContract(r,i){let o={publicKey:i,contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new Fn(o)}};import{SuiClient as Ns}from"@mysten/sui/client";import{Transaction as Vn}from"@mysten/sui/transactions";var Ct=Pe(Qe());K();K();import{bcs as Ka}from"@mysten/sui/bcs";import{fromB64 as vs}from"@mysten/sui/utils";function Mn(s){return s=P(s),s.startsWith(`${qe}::balance::Balance<`)}var te=class s{__StructClass=!0;static get $typeName(){return`${qe}::balance::Balance`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;value;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.value=r.value}static reified(a){return{typeName:s.$typeName,fullTypeName:x(s.$typeName,C(a)),typeArgs:[C(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([C(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Z(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Ka.struct("Balance",{value:Ka.u64()})}static fromFields(a,r){return s.reified(a).new({value:k("u64",r.value)})}static fromFieldsWithTypes(a,r){if(!Mn(r.type))throw new Error("not a Balance type");return Ee(r,[a]),s.reified(a).new({value:I("u64",r.fields.value)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{value:this.value.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({value:R("u64",r.value)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return Re(x(s.$typeName,C(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Mn(r.type))throw new Error(`object at ${r.fields.id} is not a Balance object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Mn(r.bcs.type))throw new Error("object at is not a Balance object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(C(a));if(o!==P(C(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,vs(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching Balance object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Mn(o.data.bcs.type))throw new Error(`object at id ${i} is not a Balance object`);return s.fromSuiObjectData(r,o.data)}};var Mr=Pe(Qe());K();var Fr=Pe(Qe());import{bcs as On}from"@mysten/sui/bcs";import{fromB64 as ks}from"@mysten/sui/utils";function Nn(s){return s=P(s),s.startsWith(`${Fr.PKG_V1}::pool_rewards::PoolRewards<`)}var ct=class s{__StructClass=!0;static get $typeName(){return`${Fr.PKG_V1}::pool_rewards::PoolRewards`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;accRewardPerShareP;adminFeeShareBp;adminFee;rewards;lpSupply;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.accRewardPerShareP=r.accRewardPerShareP,this.adminFeeShareBp=r.adminFeeShareBp,this.adminFee=r.adminFee,this.rewards=r.rewards,this.lpSupply=r.lpSupply}static reified(a){return{typeName:s.$typeName,fullTypeName:x(s.$typeName,C(a)),typeArgs:[C(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([C(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Z(s.reified(a))}static get p(){return s.phantom}static get bcs(){return On.struct("PoolRewards",{acc_reward_per_share_p:On.u128(),admin_fee_share_bp:On.u64(),admin_fee:te.bcs,rewards:te.bcs,lp_supply:On.u64()})}static fromFields(a,r){return s.reified(a).new({accRewardPerShareP:k("u128",r.acc_reward_per_share_p),adminFeeShareBp:k("u64",r.admin_fee_share_bp),adminFee:k(te.reified(a),r.admin_fee),rewards:k(te.reified(a),r.rewards),lpSupply:k("u64",r.lp_supply)})}static fromFieldsWithTypes(a,r){if(!Nn(r.type))throw new Error("not a PoolRewards type");return Ee(r,[a]),s.reified(a).new({accRewardPerShareP:I("u128",r.fields.acc_reward_per_share_p),adminFeeShareBp:I("u64",r.fields.admin_fee_share_bp),adminFee:I(te.reified(a),r.fields.admin_fee),rewards:I(te.reified(a),r.fields.rewards),lpSupply:I("u64",r.fields.lp_supply)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{accRewardPerShareP:this.accRewardPerShareP.toString(),adminFeeShareBp:this.adminFeeShareBp.toString(),adminFee:this.adminFee.toJSONField(),rewards:this.rewards.toJSONField(),lpSupply:this.lpSupply.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({accRewardPerShareP:R("u128",r.accRewardPerShareP),adminFeeShareBp:R("u64",r.adminFeeShareBp),adminFee:R(te.reified(a),r.adminFee),rewards:R(te.reified(a),r.rewards),lpSupply:R("u64",r.lpSupply)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return Re(x(s.$typeName,C(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Nn(r.type))throw new Error(`object at ${r.fields.id} is not a PoolRewards object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Nn(r.bcs.type))throw new Error("object at is not a PoolRewards object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(C(a));if(o!==P(C(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,ks(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching PoolRewards object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Nn(o.data.bcs.type))throw new Error(`object at id ${i} is not a PoolRewards object`);return s.fromSuiObjectData(r,o.data)}};K();var xr=Pe(Qe());import{bcs as wt}from"@mysten/sui/bcs";import{fromB64 as Fs}from"@mysten/sui/utils";function Wn(s){return s=P(s),s.startsWith(`${xr.PKG_V1}::pool_state::PoolState<`)}var mt=class s{__StructClass=!0;static get $typeName(){return`${xr.PKG_V1}::pool_state::PoolState`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;tokenBalance;vusdBalance;d;a;balanceRatioMinBp;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.tokenBalance=r.tokenBalance,this.vusdBalance=r.vusdBalance,this.d=r.d,this.a=r.a,this.balanceRatioMinBp=r.balanceRatioMinBp}static reified(a){return{typeName:s.$typeName,fullTypeName:x(s.$typeName,C(a)),typeArgs:[C(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([C(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Z(s.reified(a))}static get p(){return s.phantom}static get bcs(){return wt.struct("PoolState",{token_balance:wt.u64(),vusd_balance:wt.u64(),d:wt.u64(),a:wt.u64(),balance_ratio_min_bp:wt.u64()})}static fromFields(a,r){return s.reified(a).new({tokenBalance:k("u64",r.token_balance),vusdBalance:k("u64",r.vusd_balance),d:k("u64",r.d),a:k("u64",r.a),balanceRatioMinBp:k("u64",r.balance_ratio_min_bp)})}static fromFieldsWithTypes(a,r){if(!Wn(r.type))throw new Error("not a PoolState type");return Ee(r,[a]),s.reified(a).new({tokenBalance:I("u64",r.fields.token_balance),vusdBalance:I("u64",r.fields.vusd_balance),d:I("u64",r.fields.d),a:I("u64",r.fields.a),balanceRatioMinBp:I("u64",r.fields.balance_ratio_min_bp)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{tokenBalance:this.tokenBalance.toString(),vusdBalance:this.vusdBalance.toString(),d:this.d.toString(),a:this.a.toString(),balanceRatioMinBp:this.balanceRatioMinBp.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({tokenBalance:R("u64",r.tokenBalance),vusdBalance:R("u64",r.vusdBalance),d:R("u64",r.d),a:R("u64",r.a),balanceRatioMinBp:R("u64",r.balanceRatioMinBp)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return Re(x(s.$typeName,C(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Wn(r.type))throw new Error(`object at ${r.fields.id} is not a PoolState object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Wn(r.bcs.type))throw new Error("object at is not a PoolState object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(C(a));if(o!==P(C(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,Fs(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching PoolState object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Wn(o.data.bcs.type))throw new Error(`object at id ${i} is not a PoolState object`);return s.fromSuiObjectData(r,o.data)}};import{bcs as Vt}from"@mysten/sui/bcs";import{fromB64 as xs}from"@mysten/sui/utils";function Dn(s){return s=P(s),s.startsWith(`${Mr.PKG_V1}::pool::Pool<`)}var Gn=class s{__StructClass=!0;static get $typeName(){return`${Mr.PKG_V1}::pool::Pool`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;state;rewards;feeShareBp;canDeposit;canWithdraw;decimals;balance;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.id=r.id,this.state=r.state,this.rewards=r.rewards,this.feeShareBp=r.feeShareBp,this.canDeposit=r.canDeposit,this.canWithdraw=r.canWithdraw,this.decimals=r.decimals,this.balance=r.balance}static reified(a){return{typeName:s.$typeName,fullTypeName:x(s.$typeName,C(a)),typeArgs:[C(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([C(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Z(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Vt.struct("Pool",{id:he.bcs,state:mt.bcs,rewards:ct.bcs,fee_share_bp:Vt.u64(),can_deposit:Vt.bool(),can_withdraw:Vt.bool(),decimals:Vt.u8(),balance:te.bcs})}static fromFields(a,r){return s.reified(a).new({id:k(he.reified(),r.id),state:k(mt.reified(a),r.state),rewards:k(ct.reified(a),r.rewards),feeShareBp:k("u64",r.fee_share_bp),canDeposit:k("bool",r.can_deposit),canWithdraw:k("bool",r.can_withdraw),decimals:k("u8",r.decimals),balance:k(te.reified(a),r.balance)})}static fromFieldsWithTypes(a,r){if(!Dn(r.type))throw new Error("not a Pool type");return Ee(r,[a]),s.reified(a).new({id:I(he.reified(),r.fields.id),state:I(mt.reified(a),r.fields.state),rewards:I(ct.reified(a),r.fields.rewards),feeShareBp:I("u64",r.fields.fee_share_bp),canDeposit:I("bool",r.fields.can_deposit),canWithdraw:I("bool",r.fields.can_withdraw),decimals:I("u8",r.fields.decimals),balance:I(te.reified(a),r.fields.balance)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{id:this.id,state:this.state.toJSONField(),rewards:this.rewards.toJSONField(),feeShareBp:this.feeShareBp.toString(),canDeposit:this.canDeposit,canWithdraw:this.canWithdraw,decimals:this.decimals,balance:this.balance.toJSONField()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({id:R(he.reified(),r.id),state:R(mt.reified(a),r.state),rewards:R(ct.reified(a),r.rewards),feeShareBp:R("u64",r.feeShareBp),canDeposit:R("bool",r.canDeposit),canWithdraw:R("bool",r.canWithdraw),decimals:R("u8",r.decimals),balance:R(te.reified(a),r.balance)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return Re(x(s.$typeName,C(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Dn(r.type))throw new Error(`object at ${r.fields.id} is not a Pool object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Dn(r.bcs.type))throw new Error("object at is not a Pool object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(C(a));if(o!==P(C(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,xs(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching Pool object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Dn(o.data.bcs.type))throw new Error(`object at id ${i} is not a Pool object`);return s.fromSuiObjectData(r,o.data)}};K();var Nr=Pe(Qe());import{bcs as Or}from"@mysten/sui/bcs";import{fromB64 as Ms}from"@mysten/sui/utils";function Un(s){return s=P(s),s.startsWith(`${Nr.PKG_V1}::user_deposit::UserDeposit<`)}var En=class s{__StructClass=!0;static get $typeName(){return`${Nr.PKG_V1}::user_deposit::UserDeposit`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;lpAmount;rewardDebt;constructor(a,r){this.$fullTypeName=x(s.$typeName,...a),this.$typeArgs=a,this.id=r.id,this.lpAmount=r.lpAmount,this.rewardDebt=r.rewardDebt}static reified(a){return{typeName:s.$typeName,fullTypeName:x(s.$typeName,C(a)),typeArgs:[C(a)],isPhantom:s.$isPhantom,reifiedTypeArgs:[a],fromFields:r=>s.fromFields(a,r),fromFieldsWithTypes:r=>s.fromFieldsWithTypes(a,r),fromBcs:r=>s.fromBcs(a,r),bcs:s.bcs,fromJSONField:r=>s.fromJSONField(a,r),fromJSON:r=>s.fromJSON(a,r),fromSuiParsedData:r=>s.fromSuiParsedData(a,r),fromSuiObjectData:r=>s.fromSuiObjectData(a,r),fetch:async(r,i)=>s.fetch(r,a,i),new:r=>new s([C(a)],r),kind:"StructClassReified"}}static get r(){return s.reified}static phantom(a){return Z(s.reified(a))}static get p(){return s.phantom}static get bcs(){return Or.struct("UserDeposit",{id:he.bcs,lp_amount:Or.u64(),reward_debt:Or.u64()})}static fromFields(a,r){return s.reified(a).new({id:k(he.reified(),r.id),lpAmount:k("u64",r.lp_amount),rewardDebt:k("u64",r.reward_debt)})}static fromFieldsWithTypes(a,r){if(!Un(r.type))throw new Error("not a UserDeposit type");return Ee(r,[a]),s.reified(a).new({id:I(he.reified(),r.fields.id),lpAmount:I("u64",r.fields.lp_amount),rewardDebt:I("u64",r.fields.reward_debt)})}static fromBcs(a,r){return s.fromFields(a,s.bcs.parse(r))}toJSONField(){return{id:this.id,lpAmount:this.lpAmount.toString(),rewardDebt:this.rewardDebt.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(a,r){return s.reified(a).new({id:R(he.reified(),r.id),lpAmount:R("u64",r.lpAmount),rewardDebt:R("u64",r.rewardDebt)})}static fromJSON(a,r){if(r.$typeName!==s.$typeName)throw new Error("not a WithTwoGenerics json object");return Re(x(s.$typeName,C(a)),r.$typeArgs,[a]),s.fromJSONField(a,r)}static fromSuiParsedData(a,r){if(r.dataType!=="moveObject")throw new Error("not an object");if(!Un(r.type))throw new Error(`object at ${r.fields.id} is not a UserDeposit object`);return s.fromFieldsWithTypes(a,r)}static fromSuiObjectData(a,r){if(r.bcs){if(r.bcs.dataType!=="moveObject"||!Un(r.bcs.type))throw new Error("object at is not a UserDeposit object");let i=ee(r.bcs.type).typeArgs;if(i.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${i.length}'`);let o=P(i[0]),A=P(C(a));if(o!==P(C(a)))throw new Error(`type argument mismatch: expected '${A}' but got '${o}'`);return s.fromBcs(a,Ms(r.bcs.bcsBytes))}if(r.content)return s.fromSuiParsedData(a,r.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(a,r,i){let o=await a.getObject({id:i,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching UserDeposit object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Un(o.data.bcs.type))throw new Error(`object at id ${i} is not a UserDeposit object`);return s.fromSuiObjectData(r,o.data)}};function Qa(s,a,r){if(a.length===0||!a[0])return[];let i=a[0],o=s.reduce((m,u)=>m+BigInt(u),BigInt(0)),A=BigInt(i.balance),c=[];for(let m of a.slice(1)){if(A>o)return Ha(r,i,c,s);A+=BigInt(m.balance),c.push(m)}return A>=o?Ha(r,i,c,s):[]}function Ha(s,a,r,i){let o=i.map(A=>s.pure.u64(A));return r.length>0&&s.mergeCoins(a.coinObjectId,r.map(A=>A.coinObjectId)),s.splitCoins(a.coinObjectId,o)}var Os="0x0000000000000000000000000000000000000000000000000000000000000000";async function za(s,a,r){let i=await s.devInspectTransactionBlock({sender:Os,transactionBlock:a});if(i.effects.status.status!=="success")throw new Error(`inspectionResult failed. ${JSON.stringify(i,null,2)}`);let o=i.results?.pop()?.returnValues?.pop();if(!o)throw new Error(`Something with inspectionResult went wrong. ${JSON.stringify(i,null,2)}`);let[A,c]=o;return typeof r=="object"?r.fromBcs(Uint8Array.from(A)).toJSONField():Dt(r).parse(Uint8Array.from(A))}var jn=class extends de{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.client=new Ns({url:r})}chainType="SUI";client;async getUserBalanceInfo(r,i){if(!i.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=i.suiAddresses;if(!o)throw new h("SUI token must contain 'suiAddresses'");(0,Ct.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin);let c=(await this.fetchDeposits(r,i.originTokenAddress)).reduce((m,u)=>{if(u.data)return m.lpAmount+=BigInt(u.data.content.fields.lp_amount),m.rewardDebt+=BigInt(u.data.content.fields.reward_debt),m;throw new h("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new ie({lpAmount:c.lpAmount.toString(),rewardDebt:c.rewardDebt.toString()})}async fetchDeposits(r,i){return await Ve(o=>this.client.getOwnedObjects({owner:r,filter:{StructType:En.phantom(Z(i)).phantomType},options:{showContent:!0},cursor:o}))}async getPoolInfoFromChain(r){let i=r.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");if((0,Ct.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=48,A=new Vn;Oa(A,r.originTokenAddress,i.bridgeObjectAddress);let c=await za(this.client,A,Gn.reified(Z(r.originTokenAddress))),m=c.state.tokenBalance,u=c.state.vusdBalance,l=re({tokenBalance:m,vUsdBalance:u});return{dValue:c.state.d,aValue:c.state.a,totalLpAmount:c.rewards.lpSupply,vUsdBalance:u,tokenBalance:m,accRewardPerShareP:c.rewards.accRewardPerShareP,p:o,imbalance:l}}async buildRawTransactionDeposit(r){let i=r.token.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");if((0,Ct.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=await Ve(p=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:p}));if(o.length===0||!o[0])throw new Ze("No coins to deposit");let A=o[0],c=new Vn;c.setSender(r.accountAddress);let{depositObj:m,isNewDeposit:u}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,c),[l]=Qa([r.amount],o,c);if(!l)throw new Ze("No coins to deposit");if(!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let d=Fa(c,r.token.originTokenAddress,{bridge:i.bridgeObjectAddress,userDeposit:m,coin:l});return c.mergeCoins(A.coinObjectId,[d]),u&&c.transferObjects([m],r.accountAddress),await c.toJSON({client:this.client})}async getDepositObject(r,i,o){let A=await this.fetchDeposits(r,i);if(A.length===0||!A[0]){let c=Z(i).phantomType;return{depositObj:Na(o,c),isNewDeposit:!0}}else{if(A[0].data?.objectId)return{depositObj:A[0].data.objectId,isNewDeposit:!1};throw new h("Something went wrong while deposit")}}async buildRawTransactionWithdraw(r){let i=r.token.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");if((0,Ct.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=Z(r.token.originTokenAddress).phantomType,A=new Vn;A.setSender(r.accountAddress);let{depositObj:c,isNewDeposit:m}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,A);if(m)throw new Ze("No deposit found");let u=xa(A,o,{bridge:i.bridgeObjectAddress,userDeposit:c,amountLp:BigInt(r.amount)}),l=await Ve(d=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:d}));if(!u[0]||!u[1])throw new h("No rewards found");return l[0]?A.mergeCoins(l[0].coinObjectId,[u[0],u[1]]):(A.mergeCoins(u[0],[u[1]]),A.transferObjects([u[0]],r.accountAddress)),await A.toJSON({client:this.client})}async buildRawTransactionClaimRewards(r){let i=r.token.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");if((0,Ct.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin),!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=Z(r.token.originTokenAddress).phantomType,A=new Vn;A.setSender(r.accountAddress);let{depositObj:c,isNewDeposit:m}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,A);if(m)throw new Ze("No deposit found");let u=Ma(A,o,{bridge:i.bridgeObjectAddress,userDeposit:c}),l=await Ve(d=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:d}));return l[0]?A.mergeCoins(l[0].coinObjectId,[u]):A.transferObjects([u],r.accountAddress),await A.toJSON({client:this.client})}};import{Web3 as Zn}from"web3";import{encodeFunctionCall as Ws}from"web3-eth-abi";var jt=class extends de{constructor(r,i,o){super();this.tronWeb=r;this.api=i;this.tronJsonRpc=o}chainType="TRX";P=52;async getUserBalanceInfo(r,i){let o;if(this.tronJsonRpc)try{o=await this.getUserBalanceInfoByBatch(this.tronJsonRpc,r,i)}catch{o=await this.getUserBalanceInfoPerProperty(r,i)}else o=await this.getUserBalanceInfoPerProperty(r,i);return o}async getUserBalanceInfoByBatch(r,i,o){let A=xt(o.poolAddress),c=xt(i),m=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:A,data:this.getFunctionAbi("userRewardDebt",c)},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:A,data:this.getFunctionAbi("balanceOf",c)},"latest"]}],l=await(await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(m)})).json();if(Array.isArray(l)&&l.length===2){let d=p=>{let g=l.find(y=>y.id===p);if(!g||!g.result)throw new Error(`Missing or invalid result for id ${p}`);return Zn.utils.toBigInt(g.result).toString()};return new ie({lpAmount:Zn.utils.toBigInt(d(2)).toString(),rewardDebt:Zn.utils.toBigInt(d(1)).toString()})}throw new Error("Batched HTTP call failed")}async getUserBalanceInfoPerProperty(r,i){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(r);let o=this.getContract(i.poolAddress),A=(await o.methods.userRewardDebt(r).call()).toString(),c=(await o.methods.balanceOf(r).call()).toString();return new ie({lpAmount:c,rewardDebt:A})}async getPoolInfoFromChain(r){let i;if(this.tronJsonRpc)try{i=await this.getPoolInfoByBatch(this.tronJsonRpc,r)}catch{i=await this.getPoolInfoPerProperty(r)}else i=await this.getPoolInfoPerProperty(r);return i}async getPoolInfoByBatch(r,i){let o=xt(i.poolAddress),A=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("a")},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("d")},"latest"]},{jsonrpc:"2.0",id:3,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("tokenBalance")},"latest"]},{jsonrpc:"2.0",id:4,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("vUsdBalance")},"latest"]},{jsonrpc:"2.0",id:5,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("totalSupply")},"latest"]},{jsonrpc:"2.0",id:6,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("accRewardPerShareP")},"latest"]}],m=await(await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(A)})).json();if(Array.isArray(m)&&m.length===6){let u=g=>{let y=m.find(f=>f.id===g);if(!y||!y.result)throw new Error(`Missing or invalid result for id ${g}`);return Zn.utils.toBigInt(y.result).toString()},l=u(3),d=u(4),p=re({tokenBalance:l,vUsdBalance:d});return{aValue:u(1),dValue:u(2),tokenBalance:l,vUsdBalance:d,totalLpAmount:u(5),accRewardPerShareP:u(6),p:this.P,imbalance:p}}throw new Error("Batched pool info call failed")}async getPoolInfoPerProperty(r){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(r.poolAddress);let i=this.getContract(r.poolAddress),[o,A,c,m,u,l]=await Promise.all([i.methods.a().call(),i.methods.d().call(),i.methods.tokenBalance().call(),i.methods.vUsdBalance().call(),i.methods.totalSupply().call(),i.methods.accRewardPerShareP().call()]),d=c.toString(),p=m.toString(),g=re({tokenBalance:d,vUsdBalance:p});return{aValue:o.toString(),dValue:A.toString(),tokenBalance:d,vUsdBalance:p,totalLpAmount:u.toString(),accRewardPerShareP:l.toString(),p:this.P,imbalance:g}}buildRawTransactionDeposit(r){let{amount:i,accountAddress:o}=r,A=[{type:"uint256",value:i}];return this.buildRawTransaction(r.token.poolAddress,"deposit(uint256)",A,"0",o)}buildRawTransactionWithdraw(r){let{amount:i,accountAddress:o}=r,A=[{type:"uint256",value:i}];return this.buildRawTransaction(r.token.poolAddress,"withdraw(uint256)",A,"0",o)}buildRawTransactionClaimRewards(r){let{accountAddress:i}=r,o=[];return this.buildRawTransaction(r.token.poolAddress,"claimRewards()",o,"0",i)}async buildRawTransaction(r,i,o,A,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+A},o,c);if(!m?.result?.result)throw new h("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}getContract(r){return this.tronWeb.contract(Ut.abi,r)}getFunctionAbi(r,...i){let o=Ut.abi.find(A=>A.type==="function"&&"name"in A&&A.name===r);if(!o)throw new Error(`${r} method not found in Pool ABI`);return Ws(o,i)}};var $n=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new vn(a,r,this.params,o);let A=i.cachePoolInfoChainSec>0?i.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new Gs({defaultTtl:A})}rawTxBuilder;cache;async getAllowance(a,r){if(r){let i=a,o=r;return await this.tokenService.getAllowance({...o,spender:o.token.poolAddress},i)}else{let i=a;return await this.tokenService.getAllowance({...i,spender:i.token.poolAddress})}}async checkAllowance(a,r){if(r){let i=a,o=r;return this.tokenService.checkAllowance({...o,spender:o.token.poolAddress},i)}else{let i=a;return this.tokenService.checkAllowance({...i,spender:i.token.poolAddress})}}async approve(a,r){return this.tokenService.approve(a,{...r,spender:r.token.poolAddress})}async getAmountToBeDeposited(a,r,i){U(a),E("amount",a,r.decimals);let o=await this.getPoolInfoFromChain(r,i),{vUsdBalance:A,tokenBalance:c,aValue:m,dValue:u}=o,l=Ja(a,m,u,c,A);return F(l,3).toFixed()}async getAmountToBeWithdrawn(a,r,i,o){U(a),E("amount",a,i.decimals);let A=await this.getPoolInfoFromChain(i,o),c=La(a),m=ue(c,i.decimals),l=(await this.getUserBalanceInfo(r,i,o)).earned(A)||"0",d=Ds(m).plus(l).toFixed();return F(d,i.decimals).toFixed()}async getUserBalanceInfo(a,r,i){return bt(r.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).getUserBalanceInfo(a,r)}async getPoolInfoFromChain(a,r){let i={chainSymbol:a.chainSymbol,poolAddress:a.poolAddress},o=this.cache.get(i);if(o)return o;{let A=await bt(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).getPoolInfoFromChain(a);return this.cache.put(i,A),this.api.cachePut({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress},A),A}}};function bt(s,a,r,i,o){switch(N.getChainProperty(s).chainType){case"EVM":{if(o)return new Et(o,a);{let A=r.getNodeRpcUrl(s),c=new js(A);return c.defaultReturnFormat={number:Vs.STR,bytes:Es.HEX},new Et(c,a)}}case"TRX":{let A=r.getNodeRpcUrl(s),c=i.tronJsonRpc;if(o)return new jt(o,a,c);{let m=new Us({fullHost:A});return new jt(m,a,c)}}case"SOLANA":{let A=r.getNodeRpcUrl(s);return new kn(A,a)}case"SRB":return new xn(r,i,a);case"SUI":return new jn(r.getNodeRpcUrl(s),a)}}import{Big as _}from"big.js";function ti(s,a,r){let i=Zs(s,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),o=$s(i.amountIncludingCommissionInSystemPrecision,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo);return{swapToVUsdCalcResult:i,swapFromVUsdCalcResult:o}}function ni(s,a,r){let i=_s(s,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo),o=Js(i.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:i,swapFromVUsdCalcResult:o}}function Zs(s,{feeShare:a,decimals:r},i){let o=_(s),A=o.times(a),c=o.minus(A);return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInSystemPrecision:qa(rt(c,r),i),amountExcludingCommissionInSystemPrecision:qa(rt(o,r),i)}}function qa(s,a){if(s.eq(0))return"0";let r=_(a.tokenBalance).plus(s),i=We(r.toFixed(),a.aValue,a.dValue);return _(a.vUsdBalance).minus(i).round().toFixed()}function $s(s,{feeShare:a,decimals:r},i){if(_(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let A=_(s).plus(i.vUsdBalance),c=We(A,i.aValue,i.dValue),m=ue(_(i.tokenBalance).minus(c),r),u=_(m).times(a),l=_(m).minus(u).round();return{bridgeFeeInTokenPrecision:u.round().toFixed(),amountIncludingCommissionInTokenPrecision:l.toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}function _s(s,{feeShare:a,decimals:r},i){let o=_(a).div(_(1).minus(a)),A=_(s).times(o),c=_(s).plus(A);return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInSystemPrecision:ei(rt(c,r),i),amountExcludingCommissionInSystemPrecision:ei(rt(s,r),i)}}function ei(s,a){let r=_(a.tokenBalance).minus(s),i=We(r.toFixed(),a.aValue,a.dValue);return _(i).minus(a.vUsdBalance).round().toFixed()}function Js(s,{feeShare:a,decimals:r},i){if(_(s).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let o=_(i.vUsdBalance).minus(s),A=We(o.toFixed(),i.aValue,i.dValue),c=_(A).minus(i.tokenBalance),m=ue(c.toFixed(),r),u=_(a).div(_(1).minus(a)),l=_(m).times(u),d=_(m).plus(l);return{bridgeFeeInTokenPrecision:l.round().toFixed(),amountIncludingCommissionInTokenPrecision:d.round().toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}import{Big as nt}from"big.js";function ri(s,a,r,i,o){let A=Ne(s,a,r),c=ue(A,a.decimals),m=kt(A,i,o),u=nt(s).times(a.feeShare),l=nt(m).div(nt(1).minus(i.feeShare)).minus(m);return{sourceLPSwap:{fee:F(u,a.decimals).neg().round(a.decimals,nt.roundUp).toFixed(),swap:F(nt(s).minus(c).minus(u),a.decimals).neg().round(a.decimals,nt.roundUp).toFixed()},destLPSwap:{fee:F(l,i.decimals).neg().round(i.decimals,nt.roundUp).toFixed(),swap:F(ue(A,i.decimals).minus(m).minus(l),i.decimals).neg().round(i.decimals,nt.roundUp).toFixed()}}}import{Connection as Ls,PublicKey as Xs,TransactionMessage as Ys}from"@solana/web3.js";var _n=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}async addMemoToTx(a,r){if(r.length>28)throw new h("InvalidArgumentException memo cannot be more than 28 characters");let i=new Ls(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),o=await st(a,i),A=Ys.decompile(a.message,{addressLookupTableAccounts:o}),c=A.instructions[A.instructions.length-1];if(!c?.keys)throw new h("Last instruction or its keys are invalid.");c.keys.push({pubkey:new Xs(Buffer.from(r)),isSigner:!1,isWritable:!1}),a.message=A.compileToV0Message(o)}};import{Asset as Qs,BASE_FEE as zs,contract as Rb,Horizon as ai,Operation as qs,Operation as eo,rpc as $t,TimeoutInfinite as to,TransactionBuilder as Wr,TransactionBuilder as ii}from"@stellar/stellar-sdk";import{contract as e}from"@stellar/stellar-sdk";var Ks=e.Spec,Hs=e.Client;var Zt=class extends Hs{constructor(r){super(new Ks(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),r);this.options=r}fromJSON={allowance:this.txFromJSON,authorized:this.txFromJSON,approve:this.txFromJSON,balance:this.txFromJSON,burn:this.txFromJSON,burn_from:this.txFromJSON,clawback:this.txFromJSON,decimals:this.txFromJSON,mint:this.txFromJSON,name:this.txFromJSON,set_admin:this.txFromJSON,admin:this.txFromJSON,set_authorized:this.txFromJSON,symbol:this.txFromJSON,transfer:this.txFromJSON,transfer_from:this.txFromJSON}};var no=100,ro=180,Jn=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}async buildChangeTrustLineXdrTx(a){let i=await new ai.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.sender),A=await this.getContract(Zt,a.tokenAddress).name();if(Pt(A))throw new h;let c=St(A);if(!c)throw new h;let[m,u]=c.split(":");if(m===void 0||u===void 0)throw new h("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let l=new Qs(m,u),d=eo.changeTrust({asset:l,limit:a.limit});return new ii(i,{fee:no.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(d).setTimeout(ro).build().toXDR()}async getBalanceLine(a,r){let o=await this.getContract(Zt,r).name();if(Pt(o))throw new h;let A=St(o);if(!A)throw new h;let[c,m]=A.split(":"),u=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new ai.Server(u).loadAccount(a)).balances.find(g=>(g.asset_type==="credit_alphanum4"||g.asset_type==="credit_alphanum12")&&g.asset_code==c&&g.asset_issuer==m)}async submitTransactionStellar(a){let r=new ai.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),i=ii.fromXDR(a,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await r.submitTransaction(i)}async simulateAndCheckRestoreTxRequiredSoroban(a,r){let i=new $t.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await i.getAccount(r),A=Wr.fromXDR(a,this.params.sorobanNetworkPassphrase),c=await i.simulateTransaction(A);if($t.Api.isSimulationRestore(c))return new Wr(o,{fee:(+zs+ +c.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(c.restorePreamble.transactionData.build()).addOperation(qs.restoreFootprint({})).setTimeout(to).build().toXDR()}async sendTransactionSoroban(a){let r=new $t.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),i=Wr.fromXDR(a,this.params.sorobanNetworkPassphrase);return r.sendTransaction(i)}async confirmTx(a,r=15){let i=new $t.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await Qr(()=>i.getTransaction(a),c=>c.status===$t.Api.GetTransactionStatus.NOT_FOUND,r);if(o.length===0)throw new h("No transaction responses found.");let A=o[o.length-1];if(!A)throw new h("Unexpected error: last response is undefined.");return A}getContract(a,r){let i={contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(i)}};var Ln=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.srb=new Jn(a,r),this.sol=new _n(a,r)}srb;sol};var it=(r=>(r.WITH_NATIVE_CURRENCY="native",r.WITH_STABLECOIN="stablecoin",r))(it||{}),An=(r=>(r.INT="int",r.FLOAT="float",r))(An||{});import{Big as po}from"big.js";import{TronWeb as go}from"tronweb";import{Web3 as fo}from"web3";var ao={abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}]},Xn=ao;import{Big as si}from"big.js";var pe=class{async checkAllowance(a){let r=await this.getAllowance(a);return si(r).gte(si(a.amount))}};var io="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",so="0xdac17f958d2ee523a2206206994597c13d831ec7",oo=1e5,_t=class extends pe{constructor(r,i){super();this.web3=r;this.api=i}chainType="EVM";getAllowance(r){let i=r.token.tokenAddress,o=r.owner,A=r.spender;return this.getAllowanceByTokenAddress(i,o,A)}getAllowanceByTokenAddress(r,i,o){return this.getERC20Contract(r).methods.allowance(i,o).call()}async getTokenBalance(r){return await this.getERC20Contract(r.token.tokenAddress).methods.balanceOf(r.account).call()}async getNativeTokenBalance(r){return(await this.web3.eth.getBalance(r.account)).toString()}async approve(r){if(this.isUsdt(r.tokenAddress)&&await this.getAllowanceByTokenAddress(r.tokenAddress,r.owner,r.spender)!=="0"){let A=await this.buildRawTransactionApprove({...r,amount:"0"});await this.sendRawTransaction(A,r.chainSymbol)}let i=await this.buildRawTransactionApprove(r);return await this.sendRawTransaction(i,r.chainSymbol)}isUsdt(r){return r.toLowerCase()===so}buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:A,amount:c}=r,u=this.getERC20Contract(i).methods.approve(o,c==null?io:Bn(c));return Promise.resolve({from:A,to:i,value:"0",data:u.encodeABI()})}async sendRawTransaction(r,i){let o=r,A={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};i==="POL"?o.gas=oo:o.gas=await this.web3.eth.estimateGas(r);let{transactionHash:c}=await this.web3.eth.sendTransaction({...o,...A});return{txId:c.toString()}}getERC20Contract(r){return new this.web3.eth.Contract(Xn.abi,r)}};import{AnchorProvider as Ao}from"@project-serum/anchor";import{Connection as co,PublicKey as Yn}from"@solana/web3.js";var Kn=class extends pe{constructor(r,i){super();this.solanaRpcUrl=r;this.api=i}chainType="SOLANA";approve(r){throw new X}buildRawTransactionApprove(r){throw new X}buildAnchorProvider(r){let i=new co(this.solanaRpcUrl,"confirmed"),o=new Yn(r);return new Ao(i,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(r){throw new X}async getTokenBalance(r){let{account:i,token:o}=r;try{let A=await we(new Yn(i),new Yn(o.tokenAddress));return(await ft(A,this.buildAnchorProvider(i))).amount.toString()}catch(A){if(A instanceof Error)return A.message.startsWith("Account does not exist"),"0";throw A}}async getNativeTokenBalance(r){return(await this.buildAnchorProvider(r.account).connection.getBalance(new Yn(r.account))).toString()}};import{Horizon as Eh,NotFoundError as mo}from"@stellar/stellar-sdk";var Hn=class extends pe{constructor(r,i,o){super();this.nodeRpcUrlsConfig=r;this.params=i;this.api=o}chainType="SRB";getAllowance(){throw new X}async getTokenBalance(r){if(!r.token.originTokenAddress)throw new h("OriginTokenAddress missing");let[i,o]=r.token.originTokenAddress.split(":"),A=new Eh.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),c;try{c=await A.loadAccount(r.account)}catch(l){if(l instanceof mo)return"0";throw l}let u=c.balances.find(l=>(l.asset_type==="credit_alphanum4"||l.asset_type==="credit_alphanum12")&&l.asset_code==i&&l.asset_issuer==o);return u?.balance?D(u.balance,N.getChainDecimalsByType(N.getChainProperty(r.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(r){let c=(await new Eh.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(r.account)).balances.find(m=>m.asset_type==="native");return c?.balance?D(c.balance,N.getChainDecimalsByType(N.getChainProperty(r.chainSymbol).chainType)).toFixed():"0"}approve(){throw new X}buildRawTransactionApprove(){throw new X}};import{SuiClient as uo}from"@mysten/sui/client";var Qn=class extends pe{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.suiClient=new uo({url:this.suiRpcUrl})}chainType="SUI";suiClient;approve(r){throw new X}buildRawTransactionApprove(r){throw new X}getAllowance(r){throw new X}async getTokenBalance(r){if(!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");return(await this.suiClient.getBalance({owner:r.account,coinType:r.token.originTokenAddress})).totalBalance}async getNativeTokenBalance(r){let i=await Ve(o=>this.suiClient.getCoins({owner:r.account,cursor:o}));return i.length===0?"0":i.reduce((o,A)=>o+BigInt(A.balance),BigInt(0)).toString()}};var lo="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Jt=class extends pe{constructor(r,i){super();this.tronWeb=r;this.api=i}chainType="TRX";async getAllowance(r){let{token:{tokenAddress:i},owner:o}=r;return(await(await this.getContract(i)).methods.allowance(o,r.spender).call()).toString()}async getTokenBalance(r){return(await(await this.getContract(r.token.tokenAddress)).balanceOf(r.account).call()).toString()}async getNativeTokenBalance(r){return(await this.tronWeb.trx.getBalance(r.account)).toString()}async approve(r){let i=await this.buildRawTransactionApprove(r);return await In(this.tronWeb,i)}async buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:A,amount:c}=r,m=c==null?lo:Bn(c),u=[{type:"address",value:o},{type:"uint256",value:m}];return this.buildRawTransaction(i,"approve(address,uint256)",u,"0",A)}getContract(r){return this.tronWeb.contract(Xn.abi,r)}async buildRawTransaction(r,i,o,A,c){let m=await this.tronWeb.transactionBuilder.triggerSmartContract(r,i,{callValue:+A},o,c);if(!m?.result?.result)throw new h("Unknown error: "+JSON.stringify(m,null,2));return m.transaction}};var zn=class{constructor(a,r,i){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i}async getAllowance(a,r){let i=await this.getChainTokenService(a.token.chainSymbol,a.owner,r).getAllowance(a);return F(i,a.token.decimals).toFixed()}async checkAllowance(a,r){return U(a.amount),E("amount",a.amount,a.token.decimals),this.getChainTokenService(a.token.chainSymbol,a.owner,r).checkAllowance(this.prepareCheckAllowanceParams(a))}async approve(a,r){return r.amount&&(U(r.amount),E("amount",r.amount,r.token.decimals)),this.getChainTokenService(r.token.chainSymbol,r.owner,a).approve(this.prepareApproveParams(r))}async buildRawTransactionApprove(a,r){return a.amount&&(U(a.amount),E("amount",a.amount,a.token.decimals)),this.getChainTokenService(a.token.chainSymbol,a.owner,r).buildRawTransactionApprove(this.prepareApproveParams(a))}async getTokenBalance(a,r){let i=await this.getChainTokenService(a.token.chainSymbol,a.account,r).getTokenBalance(a);return a.token.decimals?F(i,a.token.decimals).toFixed():i}async getNativeTokenBalance(a,r){let i=await this.getChainTokenService(a.chainSymbol,a.account,r).getNativeTokenBalance(a);return{int:i,float:F(i,N.getChainDecimalsByType(N.getChainProperty(a.chainSymbol).chainType)).toFixed()}}getChainTokenService(a,r,i){switch(N.getChainProperty(a).chainType){case"EVM":{if(i)return new _t(i,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new _t(new fo(o),this.api)}}case"TRX":{if(i)return new Jt(i,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a),A=new go({fullHost:o});return A.setAddress(r),new Jt(A,this.api)}}case"SOLANA":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new Kn(o,this.api)}case"SRB":return new Hn(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new Qn(this.nodeRpcUrlsConfig.getNodeRpcUrl(a),this.api)}}prepareCheckAllowanceParams(a){return{...a,amount:D(a.amount,a.token.decimals)}}prepareApproveParams(a){return{tokenAddress:a.token.tokenAddress,owner:a.owner,spender:a.spender,chainSymbol:a.token.chainSymbol,amount:a.amount==null?void 0:po(a.amount).toFixed()}}};var Lt=class{constructor(a){this.nodeRpcUrls=a}getNodeRpcUrl(a){let r=this.nodeRpcUrls[a];if(r!==void 0)return r;throw new Qt(a)}},qn=class{api;tokenService;params;bridge;pool;constructor(a,r=Yt){N.addChainsProperties(r.additionalChainsProperties);let i=new qt(r),o=new tn(i),A=new nn(o),c=new an(A);this.api=new rn(c,r),this.tokenService=new zn(this.api,a,r),this.bridge=new Rn(this.api,a,r,this.tokenService),this.pool=new $n(this.api,a,r,this.tokenService),this.params=r}async chainDetailsMap(a){return this.api.getChainDetailsMap(a)}async tokens(a){return this.api.tokens(a)}async tokensByChain(a,r){let o=(await this.api.getChainDetailsMap(r))[a];return o?o.tokens:[]}async getTransferStatus(a,r){return this.api.getTransferStatus(a,r)}async getGasBalance(a,r){return this.api.getGasBalance(a,r)}async checkAddress(){return new Promise(a=>{a({status:"OK",gasBalance:null})})}async getPendingStatusInfo(a,r,i,o){U(a);let A;r=="float"?(E("amount",a,i.decimals),A=D(a,i.decimals).toFixed()):A=a;let c=Ne(A,i,await Y(this.api,i)),m=await Y(this.api,o),u=this.getAmountFromVUsdFormatted(c,o,m),l,d=await this.api.getPendingInfo();for(let p in d[o.chainSymbol]){let g=d[o.chainSymbol];if(!g)throw new h("Cannot find pending info for "+o.chainSymbol);l=g[p]}if(l){let p=Er(l.totalSentAmount,m),g=this.getAmountFromVUsdFormatted(c,o,p),y;return Ae(g.int).gt(u.int)?y={min:u,max:g}:y={min:g,max:u},{pendingTxs:l.pendingTxs,pendingAmount:{int:Oe(l.totalSentAmount,3,o.decimals).toFixed(0),float:F(l.totalSentAmount,3).toFixed()},estimatedAmount:y}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:u,max:u}}}async getTokenBalance(a,r){return this.tokenService.getTokenBalance(a,r)}async getNativeTokenBalance(a,r){return this.tokenService.getNativeTokenBalance(a,r)}async calculateFeePercentOnSourceChain(a,r){U(a),E("amountFloat",a,r.decimals);let i=D(a,r.decimals);if(i.eq(0))return 0;let o=Ne(i,r,await Y(this.api,r)),A=ue(o,r.decimals);return nr(i,A)}async calculateFeePercentOnDestinationChain(a,r,i){U(a),E("amountFloat",a,r.decimals);let o=D(a,r.decimals);if(o.eq(0))return 0;let A=Ne(o,r,await Y(this.api,r)),c=kt(A,i,await Y(this.api,i)),m=ue(A,i.decimals);return nr(m,c)}async getAmountToBeReceivedAndGasFeeOptions(a,r,i,o){return U(a),E("amountToSendFloat",a,r.decimals),{amountToSendFloat:Ae(a).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(a,r,i,o),gasFeeOptions:await this.getGasFeeOptions(r,i,o)}}async getAmountToSendAndGasFeeOptions(a,r,i,o){return U(a),E("amountToBeReceivedFloat",a,i.decimals),{amountToSendFloat:await this.getAmountToSend(a,r,i,o),amountToBeReceivedFloat:Ae(a).toFixed(),gasFeeOptions:await this.getGasFeeOptions(r,i,o)}}async getAmountToBeReceived(a,r,i,o){let A=await Y(this.api,r),c=await Y(this.api,i);return this.getAmountToBeReceivedFromPools(a,r,i,A,c,o)}async getAmountToBeReceivedFromChain(a,r,i,o,A,c){let m=await this.pool.getPoolInfoFromChain(r,A),u=await this.pool.getPoolInfoFromChain(i,c);return this.getAmountToBeReceivedFromPools(a,r,i,m,u,o)}getAmountToBeReceivedFromPools(a,r,i,o,A,c){U(a),E("amountToSendFloat",a,r.decimals);let m=D(a,r.decimals);if(c&&c==3){if(!r.cctpAddress||!i.cctpAddress||!r.cctpFeeShare)throw new ne("Such route does not support CCTP protocol");let l=m.mul(Ae(1).minus(r.cctpFeeShare)).round(0,Ae.roundUp),d=Oe(l,r.decimals,i.decimals).round(0);return F(d,i.decimals).toFixed()}if(c&&c==4){if(!r.cctpV2Address||!i.cctpV2Address||!r.cctpV2FeeShare)throw new ne("Such route does not support CCTP V2 protocol");let l=m.mul(Ae(1).minus(r.cctpV2FeeShare)).round(0,Ae.roundUp),d=Oe(l,r.decimals,i.decimals).round(0);return F(d,i.decimals).toFixed()}let u=Ne(m,r,o);return this.getAmountFromVUsdFormatted(u,i,A).float}async getAmountToSend(a,r,i,o){let A=await Y(this.api,r),c=await Y(this.api,i);return this.getAmountToSendFromPools(a,r,i,A,c,o)}async getAmountToSendFromChain(a,r,i,o,A,c){let m=await this.pool.getPoolInfoFromChain(r,A),u=await this.pool.getPoolInfoFromChain(i,c);return this.getAmountToSendFromPools(a,r,i,m,u,o)}getAmountToSendFromPools(a,r,i,o,A,c){U(a),E("amountToBeReceivedFloat",a,i.decimals);let m=D(a,i.decimals);if(c&&c==3){if(!r.cctpAddress||!i.cctpAddress||!r.cctpFeeShare)throw new ne("Such route does not support CCTP protocol");let d=m.div(Ae(1).minus(r.cctpFeeShare)).round(0,Ae.roundDown),p=Oe(d,i.decimals,r.decimals).round(0);return F(p,r.decimals).toFixed()}if(c&&c==4){if(!r.cctpV2Address||!i.cctpV2Address||!r.cctpV2FeeShare)throw new ne("Such route does not support CCTP V2 protocol");let d=m.div(Ae(1).minus(r.cctpV2FeeShare)).round(0,Ae.roundDown),p=Oe(d,i.decimals,r.decimals).round(0);return F(p,r.decimals).toFixed()}let u=jr(m,i,A),l=Vr(u,r,o);if(Ae(l).lte(0))throw new $e;return F(l,r.decimals).toFixed()}async getGasFeeOptions(a,r,i){return mr(a.allbridgeChainId,a.chainType,r.allbridgeChainId,a.decimals,i,this.api)}getAverageTransferTime(a,r,i){return a.transferTime?.[r.chainSymbol]?.[i]??null}async getPoolInfoByToken(a){return await this.api.getPoolInfoByKey({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress})}async refreshPoolInfo(a){if(a){let i=(a instanceof Array?a:[a]).map(o=>({chainSymbol:o.chainSymbol,poolAddress:o.poolAddress}));return this.api.refreshPoolInfo(i)}return this.api.refreshPoolInfo()}aprInPercents(a){return $r(a)}async getExtraGasMaxLimits(a,r){return await ur(a,r,this.api)}async getVUsdFromAmount(a,r,i){U(a);let o;r=="float"?(E("amount",a,i.decimals),o=D(a,i.decimals).toFixed()):o=a;let A=Ne(o,i,await Y(this.api,i));return{int:A,float:F(A,3).toFixed()}}async getAmountFromVUsd(a,r){return this.getAmountFromVUsdFormatted(a,r,await Y(this.api,r))}getAmountFromVUsdFormatted(a,r,i){U(a);let o=kt(a,r,i);if(Ae(o).lt(0))throw new $e;return{int:o,float:F(o,r.decimals).toFixed()}}async swapAndBridgeFeeCalculation(a,r,i){return ti(a,{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await Y(this.api,r)},{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await Y(this.api,i)})}async swapAndBridgeFeeCalculationReverse(a,r,i){let o=ni(a,{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await Y(this.api,r)},{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await Y(this.api,i)}),A=o.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(Ae(A).lt(0))throw new $e;return o}async getSendAmountDetails(a,r,i,o){U(a);let A;return r=="float"?(E("amount",a,i.decimals),A=D(a,i.decimals).toFixed()):A=a,ri(A,i,await Y(this.api,i),o,await Y(this.api,o))}};function yo(s){return"solanaRpcUrl"in s}var oi=class{params;bridge;pool;utils;service;constructor(a,r=Yt){let i;yo(a)?i=new Lt({SOL:a.solanaRpcUrl,TRX:a.tronRpcUrl}):i=new Lt(a),this.service=new qn(i,r),this.bridge=this.service.bridge,this.pool=this.service.pool,this.utils=new Ln(i,r),this.params=r}async chainDetailsMap(a="swap"){return this.service.chainDetailsMap(a)}async tokens(a="swap"){return this.service.tokens(a)}async tokensByChain(a,r="swap"){return this.service.tokensByChain(a,r)}async getTransferStatus(a,r){return this.service.getTransferStatus(a,r)}async getGasBalance(a,r){return this.service.getGasBalance(a,r)}async checkAddress(a,r,i){return await this.service.checkAddress()}async getPendingStatusInfo(a,r,i,o){return this.service.getPendingStatusInfo(a,r,i,o)}async getTokenBalance(a,r){return this.service.getTokenBalance(a,r)}async getNativeTokenBalance(a,r){return this.service.getNativeTokenBalance(a,r)}async calculateFeePercentOnSourceChain(a,r){return this.service.calculateFeePercentOnSourceChain(a,r)}async calculateFeePercentOnDestinationChain(a,r,i){return this.service.calculateFeePercentOnDestinationChain(a,r,i)}async getAmountToBeReceivedAndGasFeeOptions(a,r,i,o){return this.service.getAmountToBeReceivedAndGasFeeOptions(a,r,i,o)}async getAmountToSendAndGasFeeOptions(a,r,i,o){return this.service.getAmountToSendAndGasFeeOptions(a,r,i,o)}async getAmountToBeReceived(a,r,i,o){return this.service.getAmountToBeReceived(a,r,i,o)}async getAmountToBeReceivedFromChain(a,r,i,o,A,c){return this.service.getAmountToBeReceivedFromChain(a,r,i,o,A,c)}getAmountToBeReceivedFromPools(a,r,i,o,A,c){return this.service.getAmountToBeReceivedFromPools(a,r,i,o,A,c)}async getAmountToSend(a,r,i,o){return this.service.getAmountToSend(a,r,i,o)}async getAmountToSendFromChain(a,r,i,o,A,c){return this.service.getAmountToSendFromChain(a,r,i,o,A,c)}getAmountToSendFromPools(a,r,i,o,A,c){return this.service.getAmountToSendFromPools(a,r,i,o,A,c)}async getGasFeeOptions(a,r,i){return this.service.getGasFeeOptions(a,r,i)}getAverageTransferTime(a,r,i){return this.service.getAverageTransferTime(a,r,i)}async getPoolInfoByToken(a){return this.service.getPoolInfoByToken(a)}async refreshPoolInfo(a){return this.service.refreshPoolInfo(a)}aprInPercents(a){return this.service.aprInPercents(a)}async getExtraGasMaxLimits(a,r){return this.service.getExtraGasMaxLimits(a,r)}async getVUsdFromAmount(a,r,i){return this.service.getVUsdFromAmount(a,r,i)}async getAmountFromVUsd(a,r){return this.service.getAmountFromVUsd(a,r)}async swapAndBridgeFeeCalculation(a,r,i){return this.service.swapAndBridgeFeeCalculation(a,r,i)}async swapAndBridgeFeeCalculationReverse(a,r,i){return this.service.swapAndBridgeFeeCalculationReverse(a,r,i)}async getSendAmountDetails(a,r,i,o){return this.service.getSendAmountDetails(a,r,i,o)}};export{rr as AddressStatus,oi as AllbridgeCoreSdk,An as AmountFormat,ut as AmountNotEnoughError,Ht as ArgumentInvalidDecimalsError,ne as CCTPDoesNotSupportedError,fe as ChainSymbol,j as ChainType,fi as ErrorCode,Kt as ExtraGasMaxLimitExceededError,it as FeePaymentMethod,$e as InsufficientPoolLiquidityError,Ze as InvalidAmountError,Bt as InvalidGasFeePaymentOptionError,Gr as InvalidMessengerOptionError,lt as InvalidTxError,Q as JupiterError,De as Messenger,X as MethodNotSupportedError,Qt as NodeRpcUrlNotInitializedError,h as SdkError,J as SdkRootError,lr as SolanaAutoTxFee,Rt as TimeoutError,zt as TxTooLargeError,It as VerifyTxError,Yt as mainnet,bo as nodeRpcUrlsDefault,To as nodeUrlsDefault};
1
+ var ui=Object.create;var Ur=Object.defineProperty;var di=Object.getOwnPropertyDescriptor;var li=Object.getOwnPropertyNames;var pi=Object.getPrototypeOf,gi=Object.prototype.hasOwnProperty;var fi=(s,a)=>()=>(s&&(a=s(s=0)),a);var nr=(s,a)=>()=>(a||s((a={exports:{}}).exports,a),a.exports);var yi=(s,a,r,i)=>{if(a&&typeof a=="object"||typeof a=="function")for(let o of li(a))!gi.call(s,o)&&o!==r&&Ur(s,o,{get:()=>a[o],enumerable:!(i=di(a,o))||i.enumerable});return s};var Ie=(s,a,r)=>(r=s!=null?ui(pi(s)):{},yi(a||!s||!s.__esModule?Ur(r,"default",{value:s,enumerable:!0}):r,s));import{bcs as ce}from"@mysten/sui/bcs";function Yi(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=Yi(s.slice(i+1,s.length-o-1),[a,r]);return{typeName:A,typeArgs:c}}function wa(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 wa(a)?a:s.object(a)}function Se(s,a,r){if(wa(a))return C(s,a);function i(d){let{typeName:l,typeArgs:p}=te(d);switch(l){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 ${d}`)}}function o(d){for(let l of d){if(typeof l>"u"||l===null)return!0;if(Array.isArray(l))return o(l)}return!1}function A(d){for(let l of d){if(!Array.isArray(l)){if(l===null)continue;switch(typeof l){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return A(l)}return!0}function c(d){for(let l of d){if(!Array.isArray(l))switch(typeof l){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return c(l)}return!1}let{typeName:m,typeArgs:u}=te(r);switch(m){case"0x1::option::Option":if(a===null)return s.pure.option("bool",null);if(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 Ki(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]=Ki(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=fi(()=>{"use strict"});var ze=nr((Im,Ca)=>{"use strict";Q();var yr=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},Hi=new yr;Ca.exports=Hi});var Sr=nr((Fm,xa)=>{"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}},Qi=new br;xa.exports=Qi});var Cr=nr((Dm,Oa)=>{"use strict";Q();var wr=class s{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return P(s.$PACKAGE_ID)}get PUBLISHED_AT(){return P(s.$PUBLISHED_AT)}get PKG_V1(){return P(s.$PKG_V[1])}setPackageId(a){s.$PACKAGE_ID=a}setPublishedAt(a){s.$PUBLISHED_AT=a}setPkgV(a,r){s.$PKG_V[a]=r}setAddress(a,r){s.$PACKAGE_ID=a,s.$PUBLISHED_AT=a,s.$PKG_V[1]=r||a}},zi=new wr;Oa.exports=zi});var Kt={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://lite-api.jup.ag/swap/v1",wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7,SUI:8}},cachePoolInfoChainSec:20},Po={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},wo={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 ms}from"tronweb";import{Web3 as us}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)}},dt=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)}},It=class extends J{constructor(a){super("InvalidGasFeePaymentOptionError",a)}},Ht=class extends J{constructor(a){super("InvalidMessengerOptionError",a)}},Y=class extends J{constructor(a){super("MethodNotSupportedError",a)}},Rt=class extends J{constructor(a){super("VerifyTxError",a)}},lt=class extends J{constructor(a){super("InvalidTxError",a)}},Qt=class extends J{constructor(a){super("ExtraGasMaxLimitExceededError",a)}},zt=class extends J{constructor(a,r,i){super("ArgumentInvalidDecimalsError",`Argument '${a}' decimals '${r}' cannot be greater than '${i}'`)}},vt=class extends J{constructor(a){super("TimeoutError",a)}},qt=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)}},en=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")}},hi=(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))(hi||{});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||{}),Z=(A=>(A.EVM="EVM",A.SOLANA="SOLANA",A.TRX="TRX",A.SRB="SRB",A.SUI="SUI",A))(Z||{});var Ti={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9},bi={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={...bi};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 Ti[a]}}})();var rr=(c=>(c.OK="OK",c.INVALID="INVALID",c.FORBIDDEN="FORBIDDEN",c.UNINITIALIZED="UNINITIALIZED",c.CONTRACT_ADDRESS="CONTRACT_ADDRESS",c.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",c))(rr||{});var 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 Er}from"big.js";async function K(s,a){return await s.getPoolInfoByKey({chainSymbol:a.chainSymbol,poolAddress:a.poolAddress})}function U(s){if(Er(s).lte(0))throw new $e("Amount must be greater than zero")}function E(s,a,r){let i=Er(a).toFixed(),[o,A]=i.split(".");if(A&&A.length>r)throw new zt(s,A.length,r)}async function tn(s,a,r){return await Promise.race([s,new Promise((i,o)=>{setTimeout(()=>o(new vt(a)),r)})])}async function ar(s,a,r,i){if(r<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${r} was received.`);let o=0;for(;;)try{return await tn(s(),a,i)}catch{if(++o>=r)throw new vt(a)}}async function Vr(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(),d=1e3,l=d;for(;Date.now()<u;){let p=A[A.length-1];if(p===void 0||!a(p))break;c++,o&&console.info(`Waiting ${d}ms before trying again (bringing the total wait time to ${l}ms so far, of total ${r*1e3}ms)`),await new Promise(f=>setTimeout(f,d)),d=d*i,new Date(Date.now()+d).valueOf()>u&&(d=u-Date.now(),o&&console.info(`was gonna wait too long; new waitTime: ${d}ms`)),l=d+l;let g=await s(p);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 Oi}from"big.js";var Si={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"}]},jr=Si;var Pi={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"}]},Zr=Pi;var wi={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"}]},_r=wi;import*as an from"@project-serum/anchor";import{PublicKey as ca}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 $r(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("lock"),Uint8Array.from(s)],a);return r}async function kt(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 Jr(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 Lr(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 ir(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([s])],a);return r}async function sr(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([s])],a);return r}async function Xr(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("sent_message"),s],a);return r}async function or(s,a,r){let[i]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("user_deposit"),a.toBytes(),s.toBytes()],r);return i}async function Yr(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("cctp_bridge"),s.toBytes()],a);return r}async function Kr(s,a){let[r]=await ie.findProgramAddress([q.utils.bytes.utf8.encode("token"),s.toBytes()],a);return r}function Hr(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]),d=at("remote_token_messenger",i,[s.toString()]),l=at("sender_authority",i);return{messageTransmitterAccount:o,tokenMessenger:A,tokenMessengerEventAuthority:c,tokenMinter:m,localToken:u,remoteTokenMessengerKey:d,authorityPda:l}}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 Ci}from"@project-serum/anchor";import{Connection as Bi,PublicKey as Ii}from"@solana/web3.js";function He(s,a){let r=new Bi(s,"confirmed"),i=new Ii(a);return new Ci(r,{publicKey:i},{preflightCommitment:"confirmed",commitment:"confirmed"})}import{PublicKey as Ri}from"@solana/web3.js";import{Address as vi}from"@stellar/stellar-sdk";import{Big as le}from"big.js";import sa from"randombytes";import{utils as aa}from"tronweb";import{Big as T}from"big.js";import Ar from"bn.js";function cr(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 de(s,a){return be(s,3,a)}function be(s,a,r){let i=T(r).minus(a).toNumber();return T(s).times(Ft(i))}function Ft(s){return T(10).pow(s)}function O(s,a){return T(s).times(Ft(a))}function v(s,a){let r=T(s);return r.eq(0)?T(0):T(r).div(Ft(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),d=Ue(u,i.aValue,i.dValue);return T(i.vUsdBalance).minus(d).round(0,T.roundDown).toFixed()}function xt(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=de(T(i.tokenBalance).minus(c),r),u=T(m).times(a);return T(m).minus(u).round(0,T.roundDown).toFixed()}function zr(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 qr(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=de(c,r),u=T(a).div(T(1).minus(a)),d=T(m).times(u).round(0,T.roundUp);return T(m).plus(d).round(0,T.roundDown)}function ea(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 d=Ue(u,i.aValue,i.dValue);return T(d).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 ta(s,a,r,i){let o=new Ar(s),A=new Ar(r),c=new Ar(a);return o.mul(A).shrn(i).sub(c).toString()}function na(s){return T(s).gt(0)?`${Number(T(s).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function ra(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),d=m.plus(u),l=T(d).sqrt(),p=T(Math.cbrt(+A.plus(l).toFixed())),g=T(Math.cbrt(+A.minus(l).toFixed()));return p.plus(g).toFixed()}function Le(s,a,r){let i;switch(a){case"EVM":{i=ia(s);break}case"SOLANA":{i=new Ri(s).toBuffer();break}case"TRX":{i=ki(s);break}case"SRB":{i=new vi(s).toBuffer();break}case"SUI":{i=ia(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 oa(s){return Buffer.from(s.replace(/^0x/i,""),"hex")}function ia(s){let r=oa(s);return Buffer.concat([Buffer.alloc(32-r.length,0),r],32)}function ki(s){let a=Mt(s),r=oa(a);return Fi(r,32)}function Mt(s){let a=aa.crypto.decodeBase58Address(s);return a?aa.bytes.byteArray2hexStr(a).replace(/^41/,"0x"):""}function Fi(s,a){if(s.length>=a)return s;let r=Buffer.alloc(a,0);return s.copy(r,a-s.length),r}function nn(){return sa(32)}function Ee(){let s=sa(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 mr(a.sourceToken,i.toChainId,i.messenger,r))[i.gasFeePaymentMethod];if(!p)throw new It;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:d}=a;if(u&&+u>0){let l=await ur(A,a.destinationToken,i.messenger,r),p,g;switch(i.gasFeePaymentMethod){case"native":p=M.getChainDecimalsByType(A.chainType),g=le(l.exchangeRate);break;case"stablecoin":p=A.decimals,g=le(l.exchangeRate).div(l.sourceNativeTokenPrice);break}switch(d??"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,le.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,le.roundDown);break}}Mi(i.extraGas,i.gasFeePaymentMethod,l)}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"&&xi(i.amount,A.decimals,i.fee,i.extraGas),i}function xi(s,a,r,i){let o=le(s).minus(r).minus(i??0);if(o.lte(0))throw new dt(`Amount not enough to pay fee, ${v(le(o).minus(1).neg(),a).toFixed()} stables is missing`)}async function mr(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 le(o.fee).mul(o.sourceNativeTokenPrice),M.getChainDecimalsByType(s.chainType),s.decimals).toFixed(0,le.roundUp);A.stablecoin={int:c,float:v(c,s.decimals).toFixed()}}return A}function Mi(s,a,r){let i=r.extraGasMax[a];if(!i)throw new It(`Impossible to pay extra gas by '${a}' payment method`);let o=i.int;if(le(s).gt(o))throw new Qt(`Extra gas ${s} in int format, exceeded limit ${o} for '${a}' payment method`)}async function ur(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=le(m).div(A.exchangeRate).toFixed(M.getChainDecimalsByType(s.chainType),le.roundDown),d=O(u,M.getChainDecimalsByType(s.chainType)).toFixed(0);if(o.native={int:d,float:u},A.sourceNativeTokenPrice){let l=le(u).mul(A.sourceNativeTokenPrice).toFixed(s.decimals,le.roundDown);o.stablecoin={int:O(l,s.decimals).toFixed(0),float:l}}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 Aa(s){return s.sourceToken.chainSymbol!==s.destinationToken.chainSymbol}async function sn(s,a,r,i){let o,A=new ca(a),c=new ca(r),m=await Re(A,c),u=He(i,a);an.setProvider(u);let d=await an.Spl.token(u).account.token.fetchNullable(m);if(d?.authority.equals(A))o=Le(m.toBase58(),"SOLANA",s);else{let l=await u.connection.getTokenAccountsByOwner(A,{mint:c});if(l.value.length===0&&!d)o=Le(m.toBase58(),"SOLANA",s);else if(l.value.length>0){let p=l.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 Ot=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:d}=r,p=this.getBridgeContract(o).methods.swap(i,c,u,m,d);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:d,toTokenAddress:l,messenger:p,fee:g,gasFeePaymentMethod:f,extraGas:y,extraGasDest:S}=i,w="0x"+nn().toString("hex"),b,R,I=g;switch(y&&(I=Oi(I).plus(y).toFixed()),p){case 3:case 4:{let N=await this.buildRawTransactionCctpSend(r,i,I);b=N.sendMethod,R=N.value;break}case 5:{let N=this.buildRawTransactionOftSend(r,i,I,S);b=N.sendMethod,R=N.value;break}case 1:case 2:{let N=this.getBridgeContract(A);f==="stablecoin"?(b=N.methods.swapAndBridge(m,o,d,u,l,w,p,I),R="0"):(b=N.methods.swapAndBridge(m,o,d,u,l,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:d}=i,l=this.getCctpBridgeContract(c),p,g;if(r.destinationToken.chainType==="SOLANA"){let f=await sn(this.chainType,r.toAccountAddress,r.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));d==="stablecoin"?(p=l.methods.bridgeWithWalletAddress(A,f,u,m,o),g="0"):(p=l.methods.bridgeWithWalletAddress(A,f,u,m,0),g=o)}else d==="stablecoin"?(p=l.methods.bridge(A,u,m,o),g="0"):(p=l.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:d,gasFeePaymentMethod:l}=i,p=this.getOftBridgeContract(m),g,f;return l==="stablecoin"?(g=p.methods.bridge(r.sourceToken.tokenAddress,c,d,u,o,A??"0","10"),f="0"):(g=p.methods.bridge(r.sourceToken.tokenAddress,c,d,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(jr.abi,r)}getCctpBridgeContract(r){return new this.web3.eth.Contract(Zr.abi,r)}getOftBridgeContract(r){return new this.web3.eth.Contract(_r.abi,r)}};var on=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=Dt(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),Aa(a)?An(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionSend(a):An(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).buildRawTransactionSwap(a)}};import{BN as ht,Program as pr,Spl as _i,web3 as Qe}from"@project-serum/anchor";import{Keypair as Sa,PublicKey as j,SystemProgram as $i}from"@solana/web3.js";import{Big as Fe}from"big.js";var Wt={version:"0.1.0",name:"bridge",instructions:[{name:"initialize",accounts:[{name:"admin",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"initializePool",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"token",isMut:!0,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializePoolArgs"}}]},{name:"initDepositAccount",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"deposit",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdraw",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amountLp",type:"u64"}]},{name:"swapAndBridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"messenger",isMut:!1,isSigner:!1},{name:"messengerConfig",isMut:!0,isSigner:!1},{name:"sentMessageAccount",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swapAndBridgeWormhole",accounts:[{name:"user",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"wormholeMessenger",isMut:!1,isSigner:!1},{name:"wormholeMessengerConfig",isMut:!0,isSigner:!1},{name:"wormholeProgram",isMut:!1,isSigner:!1},{name:"bridge",isMut:!0,isSigner:!1},{name:"message",isMut:!0,isSigner:!0},{name:"sequence",isMut:!0,isSigner:!1},{name:"feeCollector",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"clock",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swap",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"sendMint",isMut:!1,isSigner:!1},{name:"receiveMint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"sendPool",isMut:!0,isSigner:!1},{name:"receivePool",isMut:!0,isSigner:!1},{name:"sendBridgeToken",isMut:!0,isSigner:!1},{name:"receiveBridgeToken",isMut:!0,isSigner:!1},{name:"sendUserToken",isMut:!0,isSigner:!1},{name:"receiveUserToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"},{name:"receiveAmountMin",type:"u64"}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"receiveAndSwap",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"receiveAndSwapWormhole",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"claimRewards",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setAdmin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAdmin",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"startBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"stopBridge",accounts:[{name:"stopAuthority",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"setRebalancer",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"rebalancer",isMut:!1,isSigner:!1}],args:[]},{name:"setStopAuthority",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAuthority",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"setAllbridgeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setWormholeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setPoolFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setBalanceRatioMin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"balanceRatioMinBp",type:"u16"}]},{name:"setPoolAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"addOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"removeOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"adjustTotalLpAmount",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[]}],accounts:[{name:"chainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"config",type:{kind:"struct",fields:[{name:"admin",type:"publicKey"},{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"rebalancer",type:"publicKey"},{name:"stopAuthority",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"canSwap",type:"bool"},{name:"canDeposit",type:"bool"},{name:"canWithdraw",type:"bool"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"sentTokenAddress",type:"publicKey"},{name:"amount",type:"u64"},{name:"vusdAmount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:"Messenger"}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"otherBridgeToken",type:{kind:"struct",fields:[]}},{name:"pool",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"tokenBalance",type:"u64"},{name:"vUsdBalance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"totalLpAmount",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"accRewardPerShareP",type:"u128"},{name:"adminFeeAmount",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"vUsdAmount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"userDeposit",type:{kind:"struct",fields:[{name:"userAddress",type:"publicKey"},{name:"mint",type:"publicKey"},{name:"lpAmount",type:"u64"},{name:"rewardDebt",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"vusdAmount",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"publicKey"},{name:"sourceChainId",type:"u8"},{name:"receiveToken",type:"publicKey"},{name:"messenger",type:{defined:"Messenger"}},{name:"hash",type:{array:["u8",32]}},{name:"receiveAmountMin",type:"u64"}]}},{name:"RewardError",type:{kind:"enum",variants:[{name:"FeeTooHigh"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}}],errors:[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"PoolInfo overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"}]};var ma={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 Di}from"@project-serum/anchor";import Wi from"big.js";import{Web3 as cn}from"web3";async function ft(s,a){return await Di.token(a).account.token.fetch(s)}async function ua(s,a,r){let i=await a.account.pool.fetch(r),o=i.decimals,A=Wi(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 da(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"),d=cn.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(!d)throw new h("message cannot be undefined");let l=cn.utils.keccak256(Buffer.from(d.replace("0x",""),"hex")),p=Buffer.from(l.replace("0x",""),"hex");p[0]=i,p[1]=o;let g=cn.utils.encodePacked({t:"bytes32",v:"0x"+p.toString("hex")},{t:"bytes32",v:u});if(!g)throw new lt("messageWithSigner cannot be undefined");let f=cn.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 pa,ComputeBudgetProgram as mn,Connection as ga,TransactionMessage as Ni}from"@solana/web3.js";import{Big as Gi}from"big.js";import{AddressLookupTableAccount as la}from"@solana/web3.js";async function ot(s,a){return await Promise.all(s.message.addressTableLookups.map(async r=>new la({key:r.accountKey,state:la.deserialize(await a.getAccountInfo(r.accountKey).then(i=>{if(!i)throw new h("Cannot get AccountInfo");return i.data}))})))}var dr="AUTO";async function yt(s,a,r){let i=new ga(r,"confirmed"),o=(await i.simulateTransaction(s)).value.unitsConsumed;await ya(s.instructions,o,a,i)}async function fa(s,a,r){let i=new ga(r,"confirmed"),o=await ot(s,i),A=Ni.decompile(s.message,{addressLookupTableAccounts:o});if(s.serialize().length>1232)throw new en;await ya(A.instructions,769230,a,i),s.message=A.compileToV0Message(o)}async function ya(s,a,r,i){if(a>0){let o=Ui(a,s);if(r?.solana){let A=r.solana;if(A===dr)await lr(s,i);else if("pricePerUnitInMicroLamports"in A)await lr(s,i,A.pricePerUnitInMicroLamports);else{let c=Gi(A.extraFeeInLamports).div(o).mul(Ft(6)).toFixed(0);await lr(s,i,c)}}}}function Ui(s,a){let r=a.findIndex(A=>A.programId.equals(mn.programId)&&pa.decodeInstructionType(A)==="SetComputeUnitLimit"),i=Number((s*1.3).toFixed(0)),o=mn.setComputeUnitLimit({units:i});return r>=0?a[r]=o:a.push(o),i.toString()}async function lr(s,a,r){let i=s.findIndex(c=>c.programId.equals(mn.programId)&&pa.decodeInstructionType(c)==="SetComputeUnitPrice"),o=BigInt(r||await Ei(a)),A=mn.setComputeUnitPrice({microLamports:o});return i>=0?s[i]=A:s.push(A),o.toString()}async function Ei(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 Vi}from"@solana/spl-token";import{Connection as ji,TransactionMessage as ha,VersionedTransaction as Zi}from"@solana/web3.js";import Ta,{AxiosError as ba}from"axios";var un=class{connection;jupiterUrl;apiKeyHeader;maxAccounts;constructor(a,r){this.connection=new ji(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=${Vi.toString()}&amount=${i}&swapMode=${p}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(g+=`&maxAccounts=${this.maxAccounts}`),A=await Ta.get(g,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(p){throw p instanceof ba&&p.response&&p.response.data&&p.response.data.error?new 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 Ta.post(`${this.jupiterUrl}/swap`,{quoteResponse:A.data,userPublicKey:a,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(p){throw p instanceof ba&&p.response&&p.response.data&&p.response.data.error?new 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 d=Buffer.from(u,"base64"),l=Zi.deserialize(d);return o?{tx:l,amountIn:c}:{tx:l}}async amendJupiterWithSdkTx(a,r){try{let i=await ot(a,this.connection),o=await ot(r,this.connection),A=ha.decompile(a.message,{addressLookupTableAccounts:i}),c=ha.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 gr=1e6,Pa=1.1,dn=class extends pe{constructor(r,i,o){super();this.solanaRpcUrl=r;this.params=i;this.api=o;this.jupiterService=new un(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:d,toTokenAddress:l,toAccountAddress:p,minimumReceiveAmount:g}=r,f=c,y=u,S=d,w=l,b=o,R=p,I=new j(f),N=He(this.solanaRpcUrl,I.toString()),V=new pr(Wt,y,N),W=await pt(V.programId),me=await Ke(V.programId),X=new j(S),Oe=await gt(X,V.programId),De=new j(i),_e=await Re(I,X),we=new j(R),Ae=new j(w),ye=await gt(Ae,V.programId),Ce=new j(b),ue=await Re(we,Ae),We=[Qe.ComputeBudgetProgram.setComputeUnitLimit({units:gr})];try{await ft(ue,N)}catch{let mi=await _i.associatedToken(N).methods.create().accounts({mint:Ae,owner:we,associatedAccount:ue}).instruction();We.push(mi)}let Ne=await V.methods.swap(new ht(m),new ht(g||0)).accounts({payer:I,config:me,bridgeAuthority:W,user:I,sendBridgeToken:Oe,sendMint:X,sendPool:De,sendUserToken:_e,receiveBridgeToken:ye,receiveMint:Ae,receivePool:Ce,receiveUserToken:ue}).preInstructions(We).transaction(),Be=N.connection;return Ne.recentBlockhash=(await Be.getLatestBlockhash()).blockhash,Ne.feePayer=I,await yt(Ne,A,this.solanaRpcUrl),await this.convertToVersionedTransaction(Ne,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:d,solTxSendUpdatedParams:l}=await this.processJup(o,r,!0);c=d,o={...o,...l}}catch{try{let{tx:l,solTxSendUpdatedParams:p}=await this.processJup(o,r,!1);c=l,o={...o,...p}}catch(l){throw l instanceof J?l:l instanceof Error&&l.message?new z(`Some error occurred during creation Jupiter swap transaction. ${l.message}`):new z("Some error occurred during creation Jupiter swap transaction")}}let m,u;switch(i.messenger){case 1:{let d=await this.prepareSwapAndBridgeData(o);m=await this.buildSwapAndBridgeAllbridgeTransaction(d);break}case 2:{let d=await this.prepareSwapAndBridgeData(o),{transaction:l,messageAccount:p}=await this.buildSwapAndBridgeWormholeTransaction(d);m=l,u=p;break}case 3:case 4:{let d=await this.prepareSwapAndBridgeCctpData(o),{transaction:l,messageSentEventDataKeypair:p}=await this.buildSwapAndBridgeCctpTransaction(r.destinationToken.chainSymbol,d);m=l,u=p;break}case 5:throw new ae("Messenger OFT is not supported yet.")}if(A){if(!c)throw new z("Swap tx is absent");m=await this.jupiterService.amendJupiterWithSdkTx(c,m)}return await fa(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(Pa));let{tx:d,amountIn:l}=await this.jupiterService.getJupiterSwapTx(i.fromAccountAddress,i.sourceToken.tokenAddress,u.toFixed(0),o),p;if(o){if(!l)throw new z("Cannot get inAmount");p=Fe(r.amount).minus(Fe(l).mul(Pa)).toFixed(0)}else p=Fe(r.amount).minus(u).toFixed(0);if(Fe(p).lte(0))throw new dt(`Amount not enough to pay fee, ${v(Fe(p).minus(1).neg(),i.sourceToken.decimals).toFixed()} stables is missing`);return{tx:d,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:d,toTokenAddress:l,poolAddress:p,extraGas:g}=r,f=m,y=c,S=u,w=l,b=d,R=o,I=A,N=He(this.solanaRpcUrl,y),V=new pr(Wt,R,N),W=Array.from(nn()),me=new j(p),X=await ua(i,V,me),Oe=await $r(W,V.programId),De=await pt(V.programId),_e=await Re(new j(y),new j(f)),we=await gt(new j(f),V.programId),Ae=await ir(S,V.programId),ye=await Lr(S,Buffer.from(w),V.programId),Ce=await Ke(V.programId),ue=await V.account.config.fetch(Ce),We=await kt(S,ue.gasOracleProgramId),Ne=await kt(I,ue.gasOracleProgramId),Be=da({amount:X,recipient:Buffer.from(b),nonce:Buffer.from(W),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=W,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 j(y),G.destinationChainId=S,G.mint=new j(f),G.config=Ce,G.configAccountInfo=ue,G.gasPrice=We,G.thisGasPrice=Ne,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:d,bridgeAuthority:l,userToken:p,bridgeTokenAccount:g,chainBridgeAccount:f,otherBridgeTokenAccount:y,userAccount:S,destinationChainId:w,mint:b,config:R,configAccountInfo:I,gasPrice:N,thisGasPrice:V,message:W,extraGasInstruction:me}=r,X=I.allbridgeMessengerProgramId,Oe=await sr(w,X),De=await Ke(X),_e=await Xr(W,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:d,pool:u,gasPrice:N,thisGasPrice:V,bridgeAuthority:l,userToken:p,bridgeToken:g,chainBridge:f,messenger:X,messengerGasUsage:Oe,messengerConfig:De,sentMessageAccount:_e,otherBridgeToken:y}).preInstructions([Qe.ComputeBudgetProgram.setComputeUnitLimit({units:gr})]).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 j(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:d,bridgeAuthority:l,userToken:p,bridgeTokenAccount:g,chainBridgeAccount:f,otherBridgeTokenAccount:y,userAccount:S,destinationChainId:w,mint:b,config:R,configAccountInfo:I,gasPrice:N,thisGasPrice:V,message:W,extraGasInstruction:me}=r,X=this.params.wormholeMessengerProgramId,[Oe]=j.findProgramAddressSync([Buffer.from("Bridge")],new j(X)),[De]=j.findProgramAddressSync([Buffer.from("fee_collector")],new j(X)),[_e]=j.findProgramAddressSync([Buffer.from("Sequence"),l.toBuffer()],new j(X)),we=await sr(w,I.wormholeMessengerProgramId),Ae=await Ke(I.wormholeMessengerProgramId),ye=Sa.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 We=new ht(ue.data.slice(16,24),"le").toString(),Ne=$i.transfer({fromPubkey:S,toPubkey:De,lamports:+We}),Be=[];me&&Be.push(me);let G={mint:b,user:S,config:R,lock:d,pool:u,gasPrice:N,thisGasPrice:V,bridgeAuthority:l,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},Yt=await i.methods.swapAndBridgeWormhole({vusdAmount:o,nonce:A,destinationChainId:w,recipient:c,receiveToken:m}).accounts(G).preInstructions([Qe.ComputeBudgetProgram.setComputeUnitLimit({units:gr}),Ne]).postInstructions(Be).signers([ye]).transaction();return Yt.recentBlockhash=(await Ce.connection.getLatestBlockhash()).blockhash,Yt.feePayer=S,{transaction:await this.convertToVersionedTransaction(Yt,Ce.connection),messageAccount:ye}}async prepareSwapAndBridgeCctpData(r){let{contractAddress:i,amount:o,fromAccountAddress:A,fromTokenAddress:c,toChainId:m,toAccountAddress:u,toTokenAddress:d,extraGas:l}=r,p=i;if(!p)throw new re("Such route does not support CCTP protocol");let g=4,f=A,y=d,S=u,w=He(this.solanaRpcUrl,f),b=new pr(ma,p,w),R=new j(c),I=await Yr(R,b.programId),N=new j(f),V=await b.account.cctpBridge.fetch(I),W={};return W.cctpBridge=b,W.cctpBridgeAccount=I,W.cctpAddressAccount=new j(p),W.amount=new ht(o),W.recipient=Array.from(S),W.receiveToken=Array.from(y),W.userToken=await Re(N,R),W.bridgeAuthority=await Jr(I,b.programId),W.bridgeTokenAccount=await Kr(R,b.programId),W.chainBridgeAccount=await ir(m,b.programId),W.userAccount=N,W.destinationChainId=m,W.mint=R,W.gasPrice=await kt(m,V.gasOracleProgramId),W.thisGasPrice=await kt(g,V.gasOracleProgramId),W.provider=w,l&&(W.extraGasInstruction=this.getExtraGasInstruction(l,W.userAccount,I)),W}async buildSwapAndBridgeCctpTransaction(r,i){let{cctpBridge:o,cctpBridgeAccount:A,amount:c,recipient:m,receiveToken:u,bridgeAuthority:d,userToken:l,bridgeTokenAccount:p,chainBridgeAccount:g,userAccount:f,destinationChainId:y,mint:S,gasPrice:w,thisGasPrice:b,extraGasInstruction:R,provider:I}=i,N=this.params.cctpParams.cctpDomains[r],V=this.params.cctpParams.cctpTransmitterProgramId,W=this.params.cctpParams.cctpTokenMessengerMinter;if(N==null||!V||!W)throw new h("CCTP is not configured");let me=new j(V),X=new j(W),{messageTransmitterAccount:Oe,tokenMessenger:De,tokenMessengerEventAuthority:_e,tokenMinter:we,localToken:Ae,remoteTokenMessengerKey:ye,authorityPda:Ce}=Qr(N,S,me,X),ue=[];R&&ue.push(R);let We=Sa.generate(),Ne=Hr(o.programId,We.publicKey),Be=await o.methods.bridge({amount:c,destinationChainId:y,recipient:m,receiveToken:u}).accounts({mint:S,user:f,cctpBridge:A,messageSentEventData:We.publicKey,lock:Ne,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:l,bridgeAuthority:d}).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:We}}send(r){throw new Y}};import{Address as fr,contract as sS}from"@stellar/stellar-sdk";import{Big as Xi}from"big.js";import{contract as n}from"@stellar/stellar-sdk";var Ji=n.Spec,Li=n.Client;var Nt=class extends Li{constructor(r){super(new Ji(["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 ln=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:d,fee:l,gasFeePaymentMethod:p,extraGas:g}=r,f=l;g&&(f=Xi(f).plus(g).toFixed());let y=this.getContract(Nt,o,A),S;return p==="stablecoin"?S=await y.swap_and_bridge({sender:A,token:fr.contract(Buffer.from(c)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(d),nonce:Ee(),gas_amount:BigInt(0),fee_token_amount:BigInt(f)}):S=await y.swap_and_bridge({sender:A,token:fr.contract(Buffer.from(c)).toString(),amount:BigInt(i),recipient:Buffer.from(u),destination_chain_id:+m,receive_token:Buffer.from(d),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:d}=r;return(await this.getContract(Nt,o,A).swap({sender:A,amount:BigInt(i),token:fr.contract(Buffer.from(c)).toBuffer(),receive_token:Buffer.from(u),recipient:m,receive_amount_min:BigInt(d)})).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 ss}from"@mysten/sui/client";import{coinWithBalance as $,Transaction as Tn}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as Ga}from"@mysten/sui/utils";import{Big as vr}from"big.js";var kr=Ie(ze());var Xe=Ie(ze());Q();function Ba(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 Ia(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 Ra(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 va(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 ka(s,a,r){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::pool`,typeArguments:[a],arguments:[C(s,r)]})}function hr(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 Fa(s,a){return s.moveCall({target:`${Xe.PUBLISHED_AT}::bridge_interface::new_user_deposit`,typeArguments:[a],arguments:[]})}function Tr(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 Ua=Ie(Sr());var Ma=Ie(Sr());Q();function Pr(s,a,r){return s.moveCall({target:`${Ma.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 Ea=Ie(Cr());var Na=Ie(Cr());Q();import{bcs as qe}from"@mysten/sui/bcs";import{fromHEX as es,toHEX as ts}from"@mysten/sui/utils";import{bcs as qi}from"@mysten/sui/bcs";Q();var Br=class s{__VectorClass=!0;static $typeName="vector";static $numTypeParams=1;static $isPhantom=[!1];$typeName="vector";$fullTypeName;$typeArgs;$isPhantom=[!1];elements;constructor(a,r){this.$fullTypeName=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(Gt(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 qi.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(Gt(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 Br.r(s)}function _(s){return typeof s=="string"?{phantomType:s,kind:"PhantomReified"}:{phantomType:s.fullTypeName,kind:"PhantomReified"}}var ns=qe.bytes(32).transform({input:s=>es(s),output:s=>ts(s)});function Gt(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 ns;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 je(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 pn="0x1";import{bcs as mu}from"@mysten/sui/bcs";import{fromB64 as du}from"@mysten/sui/utils";Q();import{bcs as Ir}from"@mysten/sui/bcs";import{fromB64 as rs}from"@mysten/sui/utils";function gn(s){return s=P(s),s===`${pn}::string::String`}var fn=class s{__StructClass=!0;static get $typeName(){return`${pn}::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 Ir.struct("String",{bytes:Ir.vector(Ir.u8())})}static fromFields(a){return s.reified().new({bytes:x(Tt("u8"),a.bytes)})}static fromFieldsWithTypes(a){if(!gn(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(!gn(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"||!gn(a.bcs.type))throw new Error("object at is not a String object");return s.fromBcs(rs(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"||!gn(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 Rr}from"@mysten/sui/bcs";import{fromB64 as Wa,fromHEX as as,toHEX as is}from"@mysten/sui/utils";function yn(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 Rr.struct("ID",{bytes:Rr.bytes(32).transform({input:a=>as(a),output:a=>is(a)})})}static fromFields(a){return s.reified().new({bytes:x("address",a.bytes)})}static fromFieldsWithTypes(a){if(!yn(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(!yn(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"||!yn(a.bcs.type))throw new Error("object at is not a ID object");return s.fromBcs(Wa(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"||!yn(i.data.bcs.type))throw new Error(`object at id ${r} is not a ID object`);return s.fromSuiObjectData(i.data)}};function hn(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 Rr.struct("UID",{id:ct.bcs})}static fromFields(a){return s.reified().new({id:x(ct.reified(),a.id)})}static fromFieldsWithTypes(a){if(!hn(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(!hn(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"||!hn(a.bcs.type))throw new Error("object at is not a UID object");return s.fromBcs(Wa(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"||!hn(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:`${Na.PUBLISHED_AT}::bytes32::from_hex`,arguments:[Se(s,a,`${fn.$typeName}`)]})}async function Ze(s,a,r=[]){let i=await s(a),o=r.concat(i.data);return i.hasNextPage&&i.nextCursor?Ze(s,i.nextCursor,o):o}var bn=class extends pe{constructor(r,i){super();this.nodeRpcUrlsConfig=r;this.api=i;this.client=new ss({url:r.getNodeRpcUrl(this.chainSymbol)})}chainType="SUI";chainSymbol="SUI";client;send(){throw new h("Method send not implemented.")}async buildRawTransactionSwap(r){let i=r.sourceToken.suiAddresses;if(!i)throw new h("SUI token must contain 'suiAddresses'");(0,kr.setAddress)(i.bridgeAddress,i.bridgeAddressOrigin);let o=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,d=new Tn;d.setSender(A);let l={bridge:i.bridgeObjectAddress,coin:$({balance:BigInt(o),type:c}),receiveAmountMin:BigInt(u)},p=Ba(d,[c,m],l),g=await Ze(f=>this.client.getCoins({owner:r.toAccountAddress,coinType:m,cursor:f}));return g.length===0||!g[0]?d.transferObjects([p],r.toAccountAddress):d.mergeCoins(g[0].coinObjectId,[p]),await d.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,kr.setAddress)(A.bridgeAddress,A.bridgeAddressOrigin),(0,Ea.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:d,fee:l,gasFeePaymentMethod:p,extraGas:g}=r,f=l;g&&(f=vr(f).plus(g).toFixed());let y=new Tn;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(d)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(f),type:c}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};Tr(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(d)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:c}),feeSuiCoin:S};Tr(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:d,fee:l,gasFeePaymentMethod:p,extraGas:g}=r,f=l;g&&(f=vr(f).plus(g).toFixed());let y=new Tn;if(y.setSender(A),p==="stablecoin"){let S=BigInt(o)-BigInt(f),w={bridge:i.bridgeObjectAddress,messenger:i.wormholeMessengerObjectAddress,wormholeState:i.wormholeStateObjectAddress,theClock:Ga,amount:$({balance:S,type:c}),destinationChainId:m,nonce:Ee(),recipient:Me(y,ve(u)),receiveToken:Me(y,ve(d)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(f),type:c}),feeSuiCoin:$({balance:BigInt(0),useGasCoin:!1})};hr(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:Ga,amount:$({balance:BigInt(o),type:c}),destinationChainId:m,nonce:Ee(),recipient:Me(y,ve(u)),receiveToken:Me(y,ve(d)),gasOracle:i.gasOracleObjectAddress,feeTokenCoin:$({balance:BigInt(0),type:c}),feeSuiCoin:S};hr(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:d,fee:l,gasFeePaymentMethod:p,extraGas:g}=i;(0,Ua.setAddress)(o.cctpAddress,o.cctpAddressOrigin);let f=l;g&&(f=vr(f).plus(g).toFixed());let y=new Tn;y.setSender(c);let S=Me(y,ve(d)),w;if(r.destinationToken.chainType==="SOLANA"){let b=await sn(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})};Pr(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};Pr(y,m,R)}return await y.toJSON({client:this.client})}};import{Big as cs}from"big.js";import os from"bn.js";function Sn(s){return"0x"+new os(s).toString("hex")}function Va(s){return new Promise(a=>setTimeout(()=>a(),s))}async function Pn(s,a){let r=await s.trx.sign(a);if(!r.signature)throw new lt("Transaction was not signed properly");let o=(await s.trx.sendRawTransaction(r)).transaction.txID;return await As(s,o),{txId:o}}async function As(s,a,r=1e4){let i=Date.now();for(;;){if(Date.now()-i>r)throw new Rt("Transaction not found");let o=await s.trx.getUnconfirmedTransactionInfo(a);if(!o?.receipt){await Va(2e3);continue}if(o.receipt.result==="SUCCESS")return o;throw new Rt(`Transaction status is ${o.receipt.result}`)}}var Ut=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 Pn(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:d}=r,l=[{type:"uint256",value:i},{type:"bytes32",value:c},{type:"bytes32",value:u},{type:"address",value:m},{type:"uint256",value:d}];return this.buildRawTransaction(o,"swap(uint256,bytes32,bytes32,address,uint256)",l,"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:d,toTokenAddress:l,messenger:p,fee:g,gasFeePaymentMethod:f,extraGas:y,extraGasDest:S}=i,w=g;y&&(w=cs(w).plus(y).toFixed());let b=Ee().toString(),R,I,N;switch(p){case 3:case 4:f==="stablecoin"?(R=[{type:"uint256",value:o},{type:"bytes32",value:d},{type:"uint256",value:u},{type:"uint256",value:w}],I="0"):(R=[{type:"uint256",value:o},{type:"bytes32",value:d},{type:"uint256",value:u},{type:"uint256",value:0}],I=w),N="bridge(uint256,bytes32,uint256,uint256)";break;case 5:f==="stablecoin"?(R=[{type:"address",value:r.sourceToken.tokenAddress},{type:"uint256",value:o},{type:"bytes32",value:d},{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:d},{type:"uint256",value:u},{type:"uint256",value:0},{type:"uint256",value:S??"0"},{type:"uint256",value:"10"}],I=w),N="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:d},{type:"uint256",value:u},{type:"bytes32",value:l},{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:d},{type:"uint256",value:u},{type:"bytes32",value:l},{type:"uint256",value:b},{type:"uint8",value:p},{type:"uint256",value:0}],I=w),N="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)";break}return this.buildRawTransaction(A,N,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 wn=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new on(a,r,i,o)}rawTxBuilder;async getAllowance(a,r){let i,o;r?(i=a,o=r):o=a;let A=Dt(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=Dt(o.token,o.messenger);return this.tokenService.checkAllowance({...o,spender:A},i)}async approve(a,r){let i=Dt(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),An(r.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).send(r)}};function Dt(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 An(s,a,r,i,o){switch(M.getChainProperty(s).chainType){case"EVM":{if(o)return new Ot(o,a,r);{let A=r.getNodeRpcUrl(s);return new Ot(new us(A),a,r)}}case"TRX":{if(o)return new Ut(o,a);{let A=r.getNodeRpcUrl(s);return new Ut(new ms({fullHost:A,solidityNode:A,eventServer:A}),a)}}case"SOLANA":return new dn(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 ln(r,i,a);case"SUI":return new bn(r,a)}}import{Big as ks}from"big.js";import Fs from"timed-cache";import{TronWeb as xs}from"tronweb";import{FMT_BYTES as Ms,FMT_NUMBER as Os,Web3 as Ds}from"web3";import{Big as Ye}from"big.js";function ja(s,a,r,i,o){let A=O(s,3),c=Ye(A),m=Ye(r),u=Ye(i).plus(o),d,l;if(m.eq(0)||u.eq(0)){let g=c.div(2);d=Ye(i).plus(g),l=Ye(o).plus(g)}else d=Ye(i).plus(c.mul(i).div(u)),l=Ye(o).plus(c.mul(o).div(u));return Ye(ra(a,d.toFixed(),l.toFixed())).minus(m).toFixed()}function Za(s){let a=O(s,3);return Ye(a).round().toFixed()}import{Web3 as tt}from"web3";var ds={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"}]},Et=ds;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=ta(this.lpAmount,this.rewardDebt,a.accRewardPerShareP,a.p);return r?v(i,r).toFixed():i}};var ge=class{};var Vt=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 tn(this.getUserBalanceInfoByBatch(r,i),`Cannot get UserBalanceInfo for ${i.name} on ${i.chainSymbol}`,5e3)}catch{o=await ar(()=>this.getUserBalanceInfoPerProperty(r,i),`Cannot get UserBalanceInfo for ${i.name} on ${i.chainSymbol}`,5,2e3)}return o}async getPoolInfoFromChain(r){let i;try{i=await tn(this.getPoolInfoByBatch(r),`Cannot get PoolInfo for ${r.name} on ${r.chainSymbol}`,5e3)}catch{i=await ar(()=>this.getPoolInfoPerProperty(r),`Cannot get PoolInfo for ${r.name} on ${r.chainSymbol}`,5,2e3)}return i}async getUserBalanceInfoByBatch(r,i){let o=new this.web3.eth.BatchRequest,A=this.getPoolContract(i.poolAddress),c=A.methods.userRewardDebt(r).encodeABI(),m=A.methods.balanceOf(r).encodeABI();o.add({method:"eth_call",params:[{to:i.poolAddress,data:c},"latest"]}),o.add({method:"eth_call",params:[{to:i.poolAddress,data:m},"latest"]});let[u,d]=await o.execute();if(u&&d&&!u.error&&!d.error)return new oe({lpAmount:tt.utils.toBigInt(d.result).toString(),rewardDebt:tt.utils.toBigInt(u.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(r,i){let o=(await this.getPoolContract(i.poolAddress).methods.userRewardDebt(r).call()).toString(),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(),d=o.methods.totalSupply().encodeABI(),l=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:d},"latest"]}),i.add({method:"eth_call",params:[{to:r.poolAddress,data:l},"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(),d=(await i.methods.accRewardPerShareP().call()).toString(),l=se({tokenBalance:c,vUsdBalance:m});return{aValue:o,dValue:A,tokenBalance:c,vUsdBalance:m,totalLpAmount:u,accRewardPerShareP:d,p:this.P,imbalance:l}}async buildRawTransactionDeposit(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.deposit(r.amount).encodeABI()})}async buildRawTransactionWithdraw(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.withdraw(r.amount).encodeABI()})}async buildRawTransactionClaimRewards(r){return Promise.resolve({...this.buildTxParams(r),data:this.getPoolContract(r.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(r){return{from:r.accountAddress,to:r.token.poolAddress,value:"0"}}getPoolContract(r){return new this.web3.eth.Contract(Et.abi,r)}};var Cn=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 ls,BN as _a,Program as ps,Spl as gs,web3 as fs}from"@project-serum/anchor";import{Connection as ys,PublicKey as nt}from"@solana/web3.js";var Bn=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 or(new nt(r),m.mint,A.programId),{lpAmount:d,rewardDebt:l}=await A.account.userDeposit.fetch(u);return new oe({lpAmount:d.toString(),rewardDebt:l.toString()})}catch{return new oe({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(r){let i=this.buildAnchorProvider(r.bridgeAddress),o=await this.getBridge(r.bridgeAddress,i).account.pool.fetch(r.poolAddress),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 _a(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 _a(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 ps(Wt,r,i)}buildAnchorProvider(r){let i=new ys(this.solanaRpcUrl,"confirmed"),o=new nt(r);return new ls(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),d=new nt(i),p=(await r.account.pool.fetch(d)).mint,g=await Re(c,p),f=await gt(p,r.programId),y=await or(c,p,r.programId),S=[fs.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await ft(g,A)}catch{let I=await gs.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:d,bridgeAuthority:u,userDeposit:y,userToken:g,bridgeToken:f},preInstructions:S}}};import{contract as oS}from"@stellar/stellar-sdk";import{contract as t}from"@stellar/stellar-sdk";var hs=t.Spec,Ts=t.Client;var In=class extends Ts{constructor(r){super(new hs(["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 Ul,rpc as bs}from"@stellar/stellar-sdk";var $a=bs.Api;function St(s){let{simulation:a,options:r}=s;if(!a)throw new Error("Soroban assembled transaction does not have simulation");if($a.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 $a.isSimulationError(a)}var Rn=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 In(o)}};import{SuiClient as Rs}from"@mysten/sui/client";import{Transaction as Nn}from"@mysten/sui/transactions";var Ct=Ie(ze());Q();Q();import{bcs as Ja}from"@mysten/sui/bcs";import{fromB64 as Ss}from"@mysten/sui/utils";function vn(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 Ja.struct("Balance",{value:Ja.u64()})}static fromFields(a,r){return s.reified(a).new({value:x("u64",r.value)})}static fromFieldsWithTypes(a,r){if(!vn(r.type))throw new Error("not a Balance type");return je(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(!vn(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"||!vn(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,Ss(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"||!vn(o.data.bcs.type))throw new Error(`object at id ${i} is not a Balance object`);return s.fromSuiObjectData(r,o.data)}};var Mr=Ie(ze());Q();var Fr=Ie(ze());import{bcs as kn}from"@mysten/sui/bcs";import{fromB64 as Ps}from"@mysten/sui/utils";function Fn(s){return s=P(s),s.startsWith(`${Fr.PKG_V1}::pool_rewards::PoolRewards<`)}var mt=class s{__StructClass=!0;static get $typeName(){return`${Fr.PKG_V1}::pool_rewards::PoolRewards`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;accRewardPerShareP;adminFeeShareBp;adminFee;rewards;lpSupply;constructor(a,r){this.$fullTypeName=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 kn.struct("PoolRewards",{acc_reward_per_share_p:kn.u128(),admin_fee_share_bp:kn.u64(),admin_fee:ne.bcs,rewards:ne.bcs,lp_supply:kn.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(!Fn(r.type))throw new Error("not a PoolRewards type");return je(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(!Fn(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"||!Fn(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,Ps(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"||!Fn(o.data.bcs.type))throw new Error(`object at id ${i} is not a PoolRewards object`);return s.fromSuiObjectData(r,o.data)}};Q();var xr=Ie(ze());import{bcs as wt}from"@mysten/sui/bcs";import{fromB64 as ws}from"@mysten/sui/utils";function xn(s){return s=P(s),s.startsWith(`${xr.PKG_V1}::pool_state::PoolState<`)}var ut=class s{__StructClass=!0;static get $typeName(){return`${xr.PKG_V1}::pool_state::PoolState`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;tokenBalance;vusdBalance;d;a;balanceRatioMinBp;constructor(a,r){this.$fullTypeName=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(!xn(r.type))throw new Error("not a PoolState type");return je(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(!xn(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"||!xn(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,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 PoolState object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!xn(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 jt}from"@mysten/sui/bcs";import{fromB64 as Cs}from"@mysten/sui/utils";function Mn(s){return s=P(s),s.startsWith(`${Mr.PKG_V1}::pool::Pool<`)}var On=class s{__StructClass=!0;static get $typeName(){return`${Mr.PKG_V1}::pool::Pool`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;state;rewards;feeShareBp;canDeposit;canWithdraw;decimals;balance;constructor(a,r){this.$fullTypeName=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 jt.struct("Pool",{id:Pe.bcs,state:ut.bcs,rewards:mt.bcs,fee_share_bp:jt.u64(),can_deposit:jt.bool(),can_withdraw:jt.bool(),decimals:jt.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(!Mn(r.type))throw new Error("not a Pool type");return je(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(!Mn(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"||!Mn(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,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 Pool object at id ${i}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!Mn(o.data.bcs.type))throw new Error(`object at id ${i} is not a Pool object`);return s.fromSuiObjectData(r,o.data)}};Q();var Dr=Ie(ze());import{bcs as Or}from"@mysten/sui/bcs";import{fromB64 as Bs}from"@mysten/sui/utils";function Dn(s){return s=P(s),s.startsWith(`${Dr.PKG_V1}::user_deposit::UserDeposit<`)}var Wn=class s{__StructClass=!0;static get $typeName(){return`${Dr.PKG_V1}::user_deposit::UserDeposit`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=s.$typeName;$fullTypeName;$typeArgs;$isPhantom=s.$isPhantom;id;lpAmount;rewardDebt;constructor(a,r){this.$fullTypeName=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 Or.struct("UserDeposit",{id:Pe.bcs,lp_amount:Or.u64(),reward_debt:Or.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(!Dn(r.type))throw new Error("not a UserDeposit type");return je(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(!Dn(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"||!Dn(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,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 UserDeposit 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 UserDeposit object`);return s.fromSuiObjectData(r,o.data)}};function Xa(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 La(r,i,c,s);A+=BigInt(m.balance),c.push(m)}return A>=o?La(r,i,c,s):[]}function La(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 Is="0x0000000000000000000000000000000000000000000000000000000000000000";async function Ya(s,a,r){let i=await s.devInspectTransactionBlock({sender:Is,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():Gt(r).parse(Uint8Array.from(A))}var Gn=class extends ge{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.client=new Rs({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 Ze(o=>this.client.getOwnedObjects({owner:r,filter:{StructType:Wn.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 Nn;ka(A,r.originTokenAddress,i.bridgeObjectAddress);let c=await Ya(this.client,A,On.reified(_(r.originTokenAddress))),m=c.state.tokenBalance,u=c.state.vusdBalance,d=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:d}}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 Ze(p=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:p}));if(o.length===0||!o[0])throw new $e("No coins to deposit");let A=o[0],c=new Nn;c.setSender(r.accountAddress);let{depositObj:m,isNewDeposit:u}=await this.getDepositObject(r.accountAddress,r.token.originTokenAddress,c),[d]=Xa([r.amount],o,c);if(!d)throw new $e("No coins to deposit");if(!r.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let l=Ia(c,r.token.originTokenAddress,{bridge:i.bridgeObjectAddress,userDeposit:m,coin:d});return c.mergeCoins(A.coinObjectId,[l]),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:Fa(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 Nn;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=Ra(A,o,{bridge:i.bridgeObjectAddress,userDeposit:c,amountLp:BigInt(r.amount)}),d=await Ze(l=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:l}));if(!u[0]||!u[1])throw new h("No rewards found");return d[0]?A.mergeCoins(d[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 Nn;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=va(A,o,{bridge:i.bridgeObjectAddress,userDeposit:c}),d=await Ze(l=>this.client.getCoins({owner:r.accountAddress,coinType:r.token.originTokenAddress,cursor:l}));return d[0]?A.mergeCoins(d[0].coinObjectId,[u]):A.transferObjects([u],r.accountAddress),await A.toJSON({client:this.client})}};import{Web3 as Un}from"web3";import{encodeFunctionCall as vs}from"web3-eth-abi";var Zt=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=Mt(o.poolAddress),c=Mt(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"]}],d=await(await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(m)})).json();if(Array.isArray(d)&&d.length===2){let l=p=>{let g=d.find(f=>f.id===p);if(!g||!g.result)throw new Error(`Missing or invalid result for id ${p}`);return Un.utils.toBigInt(g.result).toString()};return new oe({lpAmount:Un.utils.toBigInt(l(2)).toString(),rewardDebt:Un.utils.toBigInt(l(1)).toString()})}throw new Error("Batched HTTP call failed")}async getUserBalanceInfoPerProperty(r,i){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(r);let o=this.getContract(i.poolAddress),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=Mt(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 Un.utils.toBigInt(f.result).toString()},d=u(3),l=u(4),p=se({tokenBalance:d,vUsdBalance:l});return{aValue:u(1),dValue:u(2),tokenBalance:d,vUsdBalance:l,totalLpAmount:u(5),accRewardPerShareP:u(6),p:this.P,imbalance:p}}throw new Error("Batched pool info call failed")}async getPoolInfoPerProperty(r){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(r.poolAddress);let i=this.getContract(r.poolAddress),[o,A,c,m,u,d]=await Promise.all([i.methods.a().call(),i.methods.d().call(),i.methods.tokenBalance().call(),i.methods.vUsdBalance().call(),i.methods.totalSupply().call(),i.methods.accRewardPerShareP().call()]),l=c.toString(),p=m.toString(),g=se({tokenBalance:l,vUsdBalance:p});return{aValue:o.toString(),dValue:A.toString(),tokenBalance:l,vUsdBalance:p,totalLpAmount:u.toString(),accRewardPerShareP:d.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(Et.abi,r)}getFunctionAbi(r,...i){let o=Et.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 vs(o,i)}};var En=class{constructor(a,r,i,o){this.api=a;this.nodeRpcUrlsConfig=r;this.params=i;this.tokenService=o;this.rawTxBuilder=new Cn(a,r,this.params,o);let A=i.cachePoolInfoChainSec>0?i.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new Fs({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,d=ja(a,m,u,c,A);return v(d,3).toFixed()}async getAmountToBeWithdrawn(a,r,i,o){U(a),E("amount",a,i.decimals);let A=await this.getPoolInfoFromChain(i,o),c=Za(a),m=de(c,i.decimals),d=(await this.getUserBalanceInfo(r,i,o)).earned(A)||"0",l=ks(m).plus(d).toFixed();return v(l,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 Vt(o,a);{let A=r.getNodeRpcUrl(s),c=new Ds(A);return c.defaultReturnFormat={number:Os.STR,bytes:Ms.HEX},new Vt(c,a)}}case"TRX":{let A=r.getNodeRpcUrl(s),c=i.tronJsonRpc;if(o)return new Zt(o,a,c);{let m=new xs({fullHost:A});return new Zt(m,a,c)}}case"SOLANA":{let A=r.getNodeRpcUrl(s);return new Bn(A,a)}case"SRB":return new Rn(r,i,a);case"SUI":return new Gn(r.getNodeRpcUrl(s),a)}}import{Big as L}from"big.js";function Qa(s,a,r){let i=Ws(s,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),o=Ns(i.amountIncludingCommissionInSystemPrecision,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo);return{swapToVUsdCalcResult:i,swapFromVUsdCalcResult:o}}function za(s,a,r){let i=Gs(s,{decimals:r.decimals,feeShare:r.feeShare},r.poolInfo),o=Us(i.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:i,swapFromVUsdCalcResult:o}}function Ws(s,{feeShare:a,decimals:r},i){let o=L(s),A=o.times(a),c=o.minus(A);return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInSystemPrecision:Ka(it(c,r),i),amountExcludingCommissionInSystemPrecision:Ka(it(o,r),i)}}function Ka(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 Ns(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=de(L(i.tokenBalance).minus(c),r),u=L(m).times(a),d=L(m).minus(u).round();return{bridgeFeeInTokenPrecision:u.round().toFixed(),amountIncludingCommissionInTokenPrecision:d.toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}function Gs(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:Ha(it(c,r),i),amountExcludingCommissionInSystemPrecision:Ha(it(s,r),i)}}function Ha(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 Us(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=de(c.toFixed(),r),u=L(a).div(L(1).minus(a)),d=L(m).times(u),l=L(m).plus(d);return{bridgeFeeInTokenPrecision:d.round().toFixed(),amountIncludingCommissionInTokenPrecision:l.round().toFixed(),amountExcludingCommissionInTokenPrecision:m.toFixed()}}import{Big as rt}from"big.js";function qa(s,a,r,i,o){let A=Ge(s,a,r),c=de(A,a.decimals),m=xt(A,i,o),u=rt(s).times(a.feeShare),d=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(d,i.decimals).neg().round(i.decimals,rt.roundUp).toFixed(),swap:v(de(A,i.decimals).minus(m).minus(d),i.decimals).neg().round(i.decimals,rt.roundUp).toFixed()}}}import{Connection as Es,PublicKey as Vs,TransactionMessage as js}from"@solana/web3.js";var Vn=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 Es(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),o=await ot(a,i),A=js.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 Vs(Buffer.from(r)),isSigner:!1,isWritable:!1}),a.message=A.compileToV0Message(o)}};import{Asset as $s,BASE_FEE as Js,contract as AS,Horizon as ei,Operation as Ls,Operation as Xs,rpc as $t,TimeoutInfinite as Ys,TransactionBuilder as Wr,TransactionBuilder as ti}from"@stellar/stellar-sdk";import{contract as e}from"@stellar/stellar-sdk";var Zs=e.Spec,_s=e.Client;var _t=class extends _s{constructor(r){super(new Zs(["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 Ks=100,Hs=180,jn=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.params=r}async buildChangeTrustLineXdrTx(a){let i=await new ei.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.sender),A=await this.getContract(_t,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 d=new $s(m,u),l=Xs.changeTrust({asset:d,limit:a.limit});return new ti(i,{fee:Ks.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(l).setTimeout(Hs).build().toXDR()}async getBalanceLine(a,r){let o=await this.getContract(_t,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 ei.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 ei.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),i=ti.fromXDR(a,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await r.submitTransaction(i)}async simulateAndCheckRestoreTxRequiredSoroban(a,r){let i=new $t.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await i.getAccount(r),A=Wr.fromXDR(a,this.params.sorobanNetworkPassphrase),c=await i.simulateTransaction(A);if($t.Api.isSimulationRestore(c))return new Wr(o,{fee:(+Js+ +c.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(c.restorePreamble.transactionData.build()).addOperation(Ls.restoreFootprint({})).setTimeout(Ys).build().toXDR()}async sendTransactionSoroban(a){let r=new $t.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),i=Wr.fromXDR(a,this.params.sorobanNetworkPassphrase);return r.sendTransaction(i)}async confirmTx(a,r=15){let i=new $t.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await Vr(()=>i.getTransaction(a),c=>c.status===$t.Api.GetTransactionStatus.NOT_FOUND,r);if(o.length===0)throw new h("No transaction responses found.");let A=o[o.length-1];if(!A)throw new h("Unexpected error: last response is undefined.");return A}getContract(a,r){let i={contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(i)}};var Zn=class{constructor(a,r){this.nodeRpcUrlsConfig=a;this.srb=new jn(a,r),this.sol=new Vn(a,r)}srb;sol};var st=(r=>(r.WITH_NATIVE_CURRENCY="native",r.WITH_STABLECOIN="stablecoin",r))(st||{}),rn=(r=>(r.INT="int",r.FLOAT="float",r))(rn||{});import{Big as H}from"big.js";import no from"axios";var ni="3.23.0-beta.2";function ri(s){return Object.entries(s).reduce((a,r)=>{let i=r[0],o=r[1],A=to(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 Qs(s,a){let{name:r,...i}=s,{poolInfo:o,...A}=a;return{...A,...i,chainName:r}}function zs(s){switch(s){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4;case"oft":return 5}}function qs(s){return Object.entries(s).reduce((a,[r,i])=>(a[r]=eo(i),a),{})}function eo(s){return Object.entries(s).reduce((a,[r,i])=>{let o=zs(r);return o&&(a[o]=i),a},{})}function to(s,a){let r=M.getChainsProperties()[s];if(!r)return null;let i={...r,allbridgeChainId:a.chainId,bridgeAddress:a.bridgeAddress,oftBridgeAddress:a.oftBridgeAddress,transferTime:qs(a.transferTime),txCostAmount:a.txCostAmount,confirmations:a.confirmations,suiAddresses:a.suiAddresses};return{...i,tokens:a.tokens.map(o=>Qs(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 _n=class{api;constructor(a){this.api=no.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 Ht("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 $n from"timed-cache";var Nr=20*1e3,ro=55*1e3,Jn=class{constructor(a){this.apiClient=a;this.tokenInfoCache=new $n({defaultTtl:ro}),this.receivedTransactionCache=new $n({defaultTtl:Nr}),this.pendingInfoCache=new $n({defaultTtl:Nr}),this.gasBalanceCache=new $n({defaultTtl:Nr})}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 Ln=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 Xn=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(ao)}function ao(s){let{flags:a,...r}=s;return r}import io from"timed-cache";var so=55*1e3,Yn=class{constructor(a){this.client=a;this.poolInfoCache=new Gr}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)}},Gr=class{cache;constructor(){this.cache=new io({defaultTtl:so})}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 yo}from"big.js";import{TronWeb as ho}from"tronweb";import{Web3 as To}from"web3";var oo={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"}]},Kn=oo;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 Ao="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",co="0xdac17f958d2ee523a2206206994597c13d831ec7",mo=1e5,Jt=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()===co}buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:A,amount:c}=r,u=this.getERC20Contract(i).methods.approve(o,c==null?Ao:Sn(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=mo: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(Kn.abi,r)}};import{AnchorProvider as uo}from"@project-serum/anchor";import{Connection as lo,PublicKey as Hn}from"@solana/web3.js";var Qn=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 lo(this.solanaRpcUrl,"confirmed"),o=new Hn(r);return new uo(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 Hn(i),new Hn(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 Hn(r.account))).toString()}};import{Horizon as eT,NotFoundError as po}from"@stellar/stellar-sdk";var zn=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 eT.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),c;try{c=await A.loadAccount(r.account)}catch(d){if(d instanceof po)return"0";throw d}let u=c.balances.find(d=>(d.asset_type==="credit_alphanum4"||d.asset_type==="credit_alphanum12")&&d.asset_code==i&&d.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 eT.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 go}from"@mysten/sui/client";var qn=class extends fe{constructor(r,i){super();this.suiRpcUrl=r;this.api=i;this.suiClient=new go({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 Ze(o=>this.suiClient.getCoins({owner:r.account,cursor:o}));return i.length===0?"0":i.reduce((o,A)=>o+BigInt(A.balance),BigInt(0)).toString()}};var fo="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Lt=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 Pn(this.tronWeb,i)}async buildRawTransactionApprove(r){let{tokenAddress:i,spender:o,owner:A,amount:c}=r,m=c==null?fo:Sn(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(Kn.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 er=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 Jt(i,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new Jt(new To(o),this.api)}}case"TRX":{if(i)return new Lt(i,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a),A=new ho({fullHost:o});return A.setAddress(r),new Lt(A,this.api)}}case"SOLANA":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(a);return new Qn(o,this.api)}case"SRB":return new zn(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:yo(a.amount).toFixed()}}};var Xt=class{constructor(a){this.nodeRpcUrls=a}getNodeRpcUrl(a){let r=this.nodeRpcUrls[a];if(r!==void 0)return r;throw new qt(a)}},tr=class{api;tokenService;params;bridge;pool;constructor(a,r=Kt){M.addChainsProperties(r.additionalChainsProperties);let i=new _n(r),o=new Jn(i),A=new Ln(o),c=new Yn(A);this.api=new Xn(c,r),this.tokenService=new er(this.api,a,r),this.bridge=new wn(this.api,a,r,this.tokenService),this.pool=new En(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),d,l=await this.api.getPendingInfo();for(let p in l[o.chainSymbol]){let g=l[o.chainSymbol];if(!g)throw new h("Cannot find pending info for "+o.chainSymbol);d=g[p]}if(d){let p=zr(d.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:d.pendingTxs,pendingAmount:{int:be(d.totalSentAmount,3,o.decimals).toFixed(0),float:v(d.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=de(o,r.decimals);return cr(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=xt(A,i,await K(this.api,i)),m=de(A,i.decimals);return cr(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=ea(c,i,A),u=qr(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 mr(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 na(a)}async getExtraGasMaxLimits(a,r,i){return await ur(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=xt(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=za(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,qa(A,i,await K(this.api,i),o,await K(this.api,o))}};function bo(s){return"solanaRpcUrl"in s}var ci=class{params;bridge;pool;utils;service;constructor(a,r=Kt){let i;bo(a)?i=new Xt({SOL:a.solanaRpcUrl,TRX:a.tronRpcUrl}):i=new Xt(a),this.service=new tr(i,r),this.bridge=this.service.bridge,this.pool=this.service.pool,this.utils=new Zn(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{rr as AddressStatus,ci as AllbridgeCoreSdk,rn as AmountFormat,dt as AmountNotEnoughError,zt as ArgumentInvalidDecimalsError,re as CCTPDoesNotSupportedError,he as ChainSymbol,Z as ChainType,hi as ErrorCode,Qt as ExtraGasMaxLimitExceededError,st as FeePaymentMethod,Je as InsufficientPoolLiquidityError,$e as InvalidAmountError,It as InvalidGasFeePaymentOptionError,Ht as InvalidMessengerOptionError,lt as InvalidTxError,z as JupiterError,Te as Messenger,Y as MethodNotSupportedError,qt as NodeRpcUrlNotInitializedError,ae as OFTDoesNotSupportedError,h as SdkError,J as SdkRootError,dr as SolanaAutoTxFee,vt as TimeoutError,en as TxTooLargeError,Rt as VerifyTxError,Kt as mainnet,wo as nodeRpcUrlsDefault,Po as nodeUrlsDefault};
2
2
  //# sourceMappingURL=index.js.map