@allbridge/bridge-core-sdk 3.20.0-alpha.1 → 3.20.0-alpha.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.
- package/dist/browser/index.js +1 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/package.json +3 -1
package/dist/esm/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var lt={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://quote-api.jup.ag/v6",wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7}},cachePoolInfoChainSec:20},qi={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},$i={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org"};import{Big as pe}from"big.js";var D=class extends Error{errorCode;constructor(i,a){super(a),this.errorCode=i}},S=class extends D{constructor(i){super("SdkError",i)}},ut=class extends D{constructor(i){super("InvalidAmountError",i)}},Ge=class extends D{constructor(i){super("AmountNotEnoughError",i)}},fe=class extends D{constructor(i){super("InsufficientPoolLiquidityError",i)}},V=class extends D{constructor(i){super("JupiterError",i)}},Le=class extends D{constructor(i){super("InvalidGasFeePaymentOptionError",i)}},fn=class extends D{constructor(i){super("InvalidMessengerOptionError",i)}},L=class extends D{constructor(i){super("MethodNotSupportedError",i)}},Je=class extends D{constructor(i){super("VerifyTxError",i)}},Ze=class extends D{constructor(i){super("InvalidTxError",i)}},dt=class extends D{constructor(i){super("ExtraGasMaxLimitExceededError",i)}},pt=class extends D{constructor(i,a,s){super("ArgumentInvalidDecimalsError",`Argument '${i}' decimals '${a}' cannot be greater than '${s}'`)}},Ke=class extends D{constructor(i){super("TimeoutError",i)}},gt=class extends D{constructor(i){super("NodeRpcUrlNotInitializedError",`For chain '${i}' Node RPC URL not initialized`)}},te=class extends D{constructor(i){super("CCTPDoesNotSupportedError",i)}},ft=class extends D{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},ba=(y=>(y.SDK_ERROR="SdkError",y.INVALID_AMOUNT_ERROR="InvalidAmountError",y.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",y.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",y.JUPITER_ERROR="JupiterError",y.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",y.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",y.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",y.VERIFY_TX_ERROR="VerifyTxError",y.INVALID_TX_ERROR="InvalidTxError",y.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",y.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",y.TIMEOUT_ERROR="TimeoutError",y.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",y.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",y.TX_TOO_LARGE="TxTooLargeError",y))(ba||{});var ne=(g=>(g.BSC="BSC",g.ETH="ETH",g.BAS="BAS",g.SOL="SOL",g.TRX="TRX",g.POL="POL",g.ARB="ARB",g.CEL="CEL",g.AVA="AVA",g.SRB="SRB",g.STLR="STLR",g.OPT="OPT",g))(ne||{}),N=(r=>(r.EVM="EVM",r.SOLANA="SOLANA",r.TRX="TRX",r.SRB="SRB",r))(N||{});var Ta={EVM:18,SOLANA:9,TRX:6,SRB:7},Pa={BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"}},I=(()=>{let A={...Pa};return{addChainsProperties(i){A={...A,...i}},getChainProperty(i){let a=A[i];if(!a)throw new S(`Cannot find chain properties for ${i}`);return a},getChainsProperties(){return A},getChainDecimalsByType(i){return Ta[i]}}})();import Ia from"axios";var yn="3.20.0-alpha.1";import{Big as f}from"big.js";import qt from"bn.js";function $t(A,i){return f(100).minus(f(100).times(i).div(A)).toNumber()}function xe(A,i){return we(A,i,3).round(0,f.roundDown)}function Q(A,i){return we(A,3,i)}function we(A,i,a){let s=f(a).minus(i).toNumber();return f(A).times(Qe(s))}function Qe(A){return f(10).pow(A)}function M(A,i){return f(A).times(Qe(i))}function C(A,i){let a=f(A);return a.eq(0)?f(0):f(a).div(Qe(i))}function H(A){return C(f(A.tokenBalance).minus(A.vUsdBalance).toFixed(),3).div(2).toFixed()}function ue(A,{feeShare:i,decimals:a},s){let r=f(A);if(r.lte(0))return"0";let o=r.times(i),c=r.minus(o),m=xe(c,a),l=f(s.tokenBalance).plus(m),u=de(l,s.aValue,s.dValue);return f(s.vUsdBalance).minus(u).round(0,f.roundDown).toFixed()}function He(A,{feeShare:i,decimals:a},s){let r=f(A);if(r.lte(0))return f(0).toFixed();let o=r.plus(s.vUsdBalance),c=de(o,s.aValue,s.dValue),m=Q(f(s.tokenBalance).minus(c),a),l=f(m).times(i);return f(m).minus(l).round(0,f.roundDown).toFixed()}function hn(A,i){let a=f(A);if(a.lte(0))return i;let s=a.plus(i.vUsdBalance),r=de(s,i.aValue,i.dValue);return{aValue:i.aValue,dValue:i.dValue,tokenBalance:r.toFixed(0),vUsdBalance:s.toFixed(0)}}function bn(A,{feeShare:i,decimals:a},s){if(f(A).lte(0))return f(0);let r=f(s.vUsdBalance).minus(A);if(r.lte(0))throw new fe;let o=de(r,s.aValue,s.dValue),c=f(o).minus(s.tokenBalance),m=Q(c,a),l=f(i).div(f(1).minus(i)),u=f(m).times(l).round(0,f.roundUp);return f(m).plus(u).round(0,f.roundDown)}function Tn(A,{feeShare:i,decimals:a},s){if(f(A).lte(0))return f(0);let r=f(i).div(f(1).minus(i)),o=f(A).times(r).round(0,f.roundUp),c=f(A).plus(o),m=xe(c,a),l=f(s.tokenBalance).minus(m);if(l.lte(0))throw new fe;let u=de(l,s.aValue,s.dValue);return f(u).minus(s.vUsdBalance).round(0,f.roundDown)}function de(A,i,a){let s=f(4).times(i).times(f(a).minus(A)).minus(a),r=f(a).pow(3),o=s.pow(2),c=f(A).times(f(A).times(o).plus(f(4).times(i).times(r))).sqrt().round(0,f.roundDown),m=f(8).times(i).times(A),l=s.times(A).plus(c).div(m).round(0,f.roundDown);return l.eq(0)?f(0):l.plus(1)}function Pn(A,i,a,s){let r=new qt(A),o=new qt(a),c=new qt(i);return r.mul(o).shrn(s).sub(c).toString()}function Sn(A){return f(A).gt(0)?`${Number(f(A).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function wn(A,i,a){let s=f(i).times(a),r=f(i).plus(a),o=f(8).times(A).times(s).times(r),c=s.times(f(16).times(A).minus(4)).div(3),m=o.times(o),l=c.times(c).times(c),u=m.plus(l),p=f(u).sqrt(),d=f(Math.cbrt(+o.plus(p).toFixed())),g=f(Math.cbrt(+o.minus(p).toFixed()));return d.plus(g).toFixed()}var en=(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))(en||{});var ye=(s=>(s[s.ALLBRIDGE=1]="ALLBRIDGE",s[s.WORMHOLE=2]="WORMHOLE",s[s.CCTP=3]="CCTP",s))(ye||{});function Bn(A){return Object.entries(A).reduce((i,a)=>{let s=a[0],r=a[1],o=Ra(s,r);return o&&(i[s]=o),i},{})}function Cn(A){let i={};for(let[a,s]of Object.entries(A)){let r=a;for(let o of s.tokens){let c=De({chainSymbol:r,poolAddress:o.poolAddress}),m=H(o.poolInfo);i[c]={...o.poolInfo,imbalance:m}}}return i}function Sa(A,i){let{name:a,...s}=A,{poolInfo:r,...o}=i;return{...o,...s,chainName:a}}function wa(A){switch(A){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;default:return null}}function Ba(A){return Object.entries(A).reduce((i,[a,s])=>(i[a]=Ca(s),i),{})}function Ca(A){return Object.entries(A).reduce((i,[a,s])=>{let r=wa(a);return r&&(i[r]=s),i},{})}function Ra(A,i){let a=I.getChainsProperties()[A];if(!a)return null;let s={...a,allbridgeChainId:i.chainId,bridgeAddress:i.bridgeAddress,transferTime:Ba(i.transferTime),txCostAmount:i.txCostAmount,confirmations:i.confirmations};return{...s,tokens:i.tokens.map(r=>Sa(s,r))}}function De(A){return A.chainSymbol+"_"+A.poolAddress}function Rn(A){let i=[];for(let[a,s]of Object.entries(A)){let r=a;for(let o of s.tokens)i.push({chainSymbol:r,poolAddress:o.poolAddress})}return i}function In(A){let i={};for(let[a,s]of Object.entries(A)){let r=a;for(let[o,c]of Object.entries(s))c.imbalance=H(c),i[De({chainSymbol:r,poolAddress:o})]=c}return i}var yt=class{api;constructor(i){this.api=Ia.create({baseURL:i.coreApiUrl,headers:{Accept:"application/json",...i.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+yn},params:i.coreApiQueryParams})}async getTokenInfo(){let{data:i}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:Bn(i),poolInfoMap:Cn(i)}}async getPendingInfo(){let{data:i}=await this.api.get("/pending-info");return i}async getGasBalance(i,a){let{data:s}=await this.api.get(`/check/${i}/${a}`);return s}async getTransferStatus(i,a){let{data:s}=await this.api.get(`/chain/${i}/${a}`);return s}async getReceiveTransactionCost(i){let{data:a}=await this.api.post("/receive-fee",i,{headers:{"Content-Type":"application/json"}});return{exchangeRate:a.exchangeRate,fee:a.fee,sourceNativeTokenPrice:a.sourceNativeTokenPrice}}async getPoolInfoMap(i){let a=i instanceof Array?i:[i],{data:s}=await this.api.post("/pool-info",{pools:a},{headers:{"Content-Type":"application/json"}});return In(s)}};import ht from"timed-cache";var tn=20*1e3,va=55*1e3,bt=class{constructor(i){this.apiClient=i;this.tokenInfoCache=new ht({defaultTtl:va}),this.receivedTransactionCache=new ht({defaultTtl:tn}),this.pendingInfoCache=new ht({defaultTtl:tn}),this.gasBalanceCache=new ht({defaultTtl:tn})}tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let i="TOKEN_INFO_CACHE_KEY",a=this.tokenInfoCache.get(i);if(a)return a;let s=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(i,s),s}async getGasBalance(i,a){let s=`GAS_BALANCE_${i}_${a}`,r=this.gasBalanceCache.get(s);if(r)return r;let o=this.apiClient.getGasBalance(i,a);return this.gasBalanceCache.put(s,o),o}async getPendingInfo(){let i="PENDING_INFO_CACHE_KEY",a=this.pendingInfoCache.get(i);if(a)return a;let s=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(i,s),s}async getReceiveTransactionCost(i){let a=`RECEIVE_TX_COST_${i.sourceChainId}_${i.destinationChainId}_${i.messenger}`,s=this.receivedTransactionCache.get(a);if(s)return s;let r=await this.apiClient.getReceiveTransactionCost(i);return this.receivedTransactionCache.put(a,r),r}async getTransferStatus(i,a){return this.apiClient.getTransferStatus(i,a)}async getPoolInfoMap(i){return this.apiClient.getPoolInfoMap(i)}};var Tt=class{constructor(i){this.apiClient=i}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let i=await this.getChainDetailsMap();return Object.values(i).flatMap(a=>a.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(i,a){return this.apiClient.getGasBalance(i,a)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(i,a){return await this.apiClient.getTransferStatus(i,a)}async getReceiveTransactionCost(i){return await this.apiClient.getReceiveTransactionCost(i)}async getPoolInfoMap(i){return await this.apiClient.getPoolInfoMap(i)}};var Pt=class{constructor(i,a){this.client=i;this.isStaging=a.coreApiQueryParams?.staging==="true"}isStaging;async getChainDetailsMap(i){let a=await this.client.getChainDetailsMap(),s={};for(let r in a){let o=a[r];o&&(s[r]={...o,tokens:vn(o.tokens,i,this.isStaging)})}return s}async tokens(i){return vn(await this.client.tokens(),i,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(i,a){return this.client.getGasBalance(i,a)}async getTransferStatus(i,a){return await this.client.getTransferStatus(i,a)}async getReceiveTransactionCost(i){return await this.client.getReceiveTransactionCost(i)}cachePut(i,a){return this.client.cachePut(i,a)}getPoolInfoByKey(i){return this.client.getPoolInfoByKey(i)}refreshPoolInfo(i){return this.client.refreshPoolInfo(i)}};function vn(A,i,a){return A.filter(s=>a?!0:s.flags[i]).map(Ma)}function Ma(A){let{flags:i,...a}=A;return a}import ka from"timed-cache";var xa=55*1e3,St=class{constructor(i){this.client=i;this.poolInfoCache=new nn}poolInfoCache;async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(i,a){return this.client.getTransferStatus(i,a)}getReceiveTransactionCost(i){return this.client.getReceiveTransactionCost(i)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(i,a){return this.client.getGasBalance(i,a)}async getPoolInfoByKey(i){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let a=this.poolInfoCache.get(i);if(a)return a;{let s=await this.client.getPoolInfoMap(i);this.poolInfoCache.putAll(s);let r=s[De(i)];if(r)return r;throw new S("Cannot find pool info for "+i.poolAddress+" on chain "+i.chainSymbol)}}async refreshPoolInfo(i){let a;if(i)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),a=await this.client.getPoolInfoMap(i);else{let s=await this.client.getChainDetailsMapAndPoolInfoMap();a=await this.client.getPoolInfoMap(Rn(s.chainDetailsMap))}this.poolInfoCache.putAll(a)}cachePut(i,a){this.poolInfoCache.put(De(i),a)}},nn=class{cache;constructor(){this.cache=new ka({defaultTtl:xa})}putAll(i){for(let[a,s]of Object.entries(i))this.cache.put(a,s)}putAllIfNotExists(i){for(let[a,s]of Object.entries(i))this.cache.get(a)||this.cache.put(a,s)}put(i,a){this.cache.put(i,a)}get(i){let a=De(i);return this.cache.get(a)}};import{TronWeb as Ai}from"tronweb";import{Web3 as ci}from"web3";import{Big as Mn}from"big.js";async function U(A,i){return await A.getPoolInfoByKey({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress})}function x(A){if(Mn(A).lte(0))throw new ut("Amount must be greater than zero")}function W(A,i,a){let s=Mn(i).toFixed(),[r,o]=s.split(".");if(o&&o.length>a)throw new pt(A,o.length,a)}async function wt(A,i,a){return await Promise.race([A,new Promise((s,r)=>{setTimeout(()=>r(new Ke(i)),a)})])}async function an(A,i,a,s){if(a<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${a} was received.`);let r=0;for(;;)try{return await wt(A(),i,s)}catch{if(++r>=a)throw new Ke(i)}}async function kn(A,i,a,s=1.5,r=!1){let o=[],c=0,m=await A();if(o.push(m),!i(m))return o;let l=new Date(Date.now()+a*1e3).valueOf(),u=1e3,p=u;for(;Date.now()<l;){let d=o[o.length-1];if(d===void 0||!i(d))break;c++,r&&console.info(`Waiting ${u}ms before trying again (bringing the total wait time to ${p}ms so far, of total ${a*1e3}ms)`),await new Promise(h=>setTimeout(h,u)),u=u*s,new Date(Date.now()+u).valueOf()>l&&(u=l-Date.now(),r&&console.info(`was gonna wait too long; new waitTime: ${u}ms`)),p=u+p;let g=await A(d);o.push(g),r&&i(g)&&console.info(`${c}. Called ${A.name}; ${o.length} prev attempts. Most recent: ${JSON.stringify(o[o.length-1],null,2)}`)}return o}import*as It from"@project-serum/anchor";import{PublicKey as Ln}from"@solana/web3.js";import{Big as Ya}from"big.js";var Wa={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"}]},xn=Wa;var Fa={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"}]},Wn=Fa;import*as E from"@project-serum/anchor";import{PublicKey as X}from"@solana/web3.js";async function ae(A,i){return E.utils.token.associatedAddress({mint:i,owner:A})}async function Be(A){let[i]=await X.findProgramAddress([E.utils.bytes.utf8.encode("config")],A);return i}async function Fn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("lock"),Uint8Array.from(A)],i);return a}async function ze(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([A])],i);return a}async function _e(A){let i=await Be(A),[a]=await X.findProgramAddress([i.toBuffer()],A);return a}async function Gn(A,i){let[a]=await X.findProgramAddress([A.toBuffer()],i);return a}async function Ne(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("token"),A.toBytes()],i);return a}async function Zn(A,i,a){let[s]=await X.findProgramAddress([E.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([A]),i],a);return s}async function sn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([A])],i);return a}async function rn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([A])],i);return a}async function Dn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("sent_message"),A],i);return a}async function on(A,i,a){let[s]=await X.findProgramAddress([E.utils.bytes.utf8.encode("user_deposit"),i.toBytes(),A.toBytes()],a);return s}async function _n(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("cctp_bridge"),A.toBytes()],i);return a}async function Nn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("token"),A.toBytes()],i);return a}function Un(A,i){let[a]=X.findProgramAddressSync([E.utils.bytes.utf8.encode("lock"),i.toBuffer()],A);return a}function Vn(A,i,a,s){let r=We("message_transmitter",a),o=We("token_messenger",s),c=We("__event_authority",s),m=We("token_minter",s),l=We("local_token",s,[i]),u=We("remote_token_messenger",s,[A.toString()]),p=We("sender_authority",s);return{messageTransmitterAccount:r,tokenMessenger:o,tokenMessengerEventAuthority:c,tokenMinter:m,localToken:l,remoteTokenMessengerKey:u,authorityPda:p}}function We(A,i,a=[]){let s=[Buffer.from(E.utils.bytes.utf8.encode(A))];for(let o of a)typeof o=="string"?s.push(Buffer.from(E.utils.bytes.utf8.encode(o))):Array.isArray(o)||Buffer.isBuffer(o)?s.push(Buffer.from(Uint8Array.from(o))):s.push(Buffer.from(Uint8Array.from(o.toBuffer())));return X.findProgramAddressSync(s,i)[0]}import{AnchorProvider as Ga}from"@project-serum/anchor";import{Connection as Za,PublicKey as Da}from"@solana/web3.js";function Ce(A,i){let a=new Za(A,"confirmed"),s=new Da(i);return new Ga(a,{publicKey:s},{preflightCommitment:"confirmed",commitment:"confirmed"})}var ie=class{};import{PublicKey as _a}from"@solana/web3.js";import{Address as Na}from"@stellar/stellar-sdk";import{Big as he}from"big.js";import En from"randombytes";import{utils as On}from"tronweb";function be(A,i,a){let s;switch(i){case"EVM":{s=Ua(A);break}case"SOLANA":{s=new _a(A).toBuffer();break}case"TRX":{s=Va(A);break}case"SRB":{s=new Na(A).toBuffer();break}}switch(a){case"EVM":return"0x"+s.toString("hex");case"SOLANA":return Array.from(s);case"TRX":return s;case"SRB":return s.toJSON().data}}function Xn(A){return Buffer.from(A.replace(/^0x/i,""),"hex")}function Ua(A){let a=Xn(A);return Buffer.concat([Buffer.alloc(32-a.length,0),a],32)}function Va(A){let i=Bt(A),a=Xn(i);return Oa(a,32)}function Bt(A){let i=On.crypto.decodeBase58Address(A);return i?On.bytes.byteArray2hexStr(i).replace(/^41/,"0x"):""}function Oa(A,i){if(A.length>=i)return A;let a=Buffer.alloc(i,0);return A.copy(a,i-A.length),a}function Ct(){return En(32)}function je(){let A=En(32).readBigInt64BE();return A<0?A*-1n:A}function Re(A,i){let a={},s=i.sourceToken;return a.amount=M(i.amount,s.decimals).toFixed(),a.contractAddress=s.bridgeAddress,a.fromAccountAddress=i.fromAccountAddress,a.fromTokenAddress=be(s.tokenAddress,A,A),a.toAccountAddress=i.toAccountAddress,a.toTokenAddress=be(i.destinationToken.tokenAddress,A,A),a.minimumReceiveAmount=i.minimumReceiveAmount?M(i.minimumReceiveAmount,i.destinationToken.decimals).toFixed():"0",a}async function Te(A,i,a){let s={};s.fromChainId=i.sourceToken.allbridgeChainId,s.fromChainSymbol=i.sourceToken.chainSymbol;let r=I.getChainProperty(i.destinationToken.chainSymbol).chainType;s.fromTokenAddress=i.sourceToken.tokenAddress,s.toChainId=i.destinationToken.allbridgeChainId,s.toTokenAddress=i.destinationToken.tokenAddress,i.gasFeePaymentMethod==="stablecoin"?s.gasFeePaymentMethod="stablecoin":s.gasFeePaymentMethod="native";let o=i.sourceToken;if(i.messenger===3){if(!o.cctpAddress||!i.destinationToken.cctpAddress)throw new te("Such route does not support CCTP protocol");s.contractAddress=o.cctpAddress}else s.contractAddress=o.bridgeAddress;s.messenger=i.messenger,s.fromAccountAddress=i.fromAccountAddress,s.amount=M(i.amount,o.decimals).toFixed();let{fee:c,feeFormat:m}=i;if(!c){let d=(await An(s.fromChainId,i.sourceToken.chainType,s.toChainId,o.decimals,s.messenger,a))[s.gasFeePaymentMethod];if(!d)throw new Le;c=d.int,m="int"}if(m=="float")switch(s.gasFeePaymentMethod){case"native":s.fee=M(c,I.getChainDecimalsByType(o.chainType)).toFixed(0);break;case"stablecoin":s.fee=M(c,o.decimals).toFixed(0);break}else s.fee=c;let{extraGas:l,extraGasFormat:u}=i;if(l&&+l>0){if(u=="float")switch(s.gasFeePaymentMethod){case"native":s.extraGas=M(l,I.getChainDecimalsByType(o.chainType)).toFixed(0);break;case"stablecoin":s.extraGas=M(l,o.decimals).toFixed(0);break}else s.extraGas=l;await Xa(s.extraGas,s.gasFeePaymentMethod,o,i.destinationToken,a)}return s.fromTokenAddress=be(s.fromTokenAddress,A,A),s.toAccountAddress=be(i.toAccountAddress,r,A),s.toTokenAddress=be(s.toTokenAddress,r,A),s.gasFeePaymentMethod=="stablecoin"&&Ea(s.amount,o.decimals,s.fee,s.extraGas),s}function Ea(A,i,a,s){let r=he(A).minus(a).minus(s??0);if(r.lte(0))throw new Ge(`Amount not enough to pay fee, ${C(he(r).minus(1).neg(),i).toFixed()} stables is missing`)}async function An(A,i,a,s,r,o){let c=await o.getReceiveTransactionCost({sourceChainId:A,destinationChainId:a,messenger:r}),m={native:{int:c.fee,float:C(c.fee,I.getChainDecimalsByType(i)).toFixed()}};if(c.sourceNativeTokenPrice){let l=we(new he(c.fee).mul(c.sourceNativeTokenPrice),I.getChainDecimalsByType(i),s).toFixed(0,he.roundUp);m.stablecoin={int:l,float:C(l,s).toFixed()}}return m}async function Xa(A,i,a,s,r){let c=(await cn(a,s,r)).extraGasMax[i];if(!c)throw new Le(`Impossible to pay extra gas by '${i}' payment method`);let m=c.int;if(he(A).gt(m))throw new dt(`Extra gas ${A} in int format, exceeded limit ${m} for '${i}' payment method`)}async function cn(A,i,a){let s={},r=await a.getReceiveTransactionCost({sourceChainId:A.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:1}),o=i.txCostAmount.maxAmount,c=C(o,I.getChainDecimalsByType(i.chainType)).toFixed(),m=he(c).div(r.exchangeRate).toFixed(I.getChainDecimalsByType(A.chainType),he.roundDown),l=M(m,I.getChainDecimalsByType(A.chainType)).toFixed(0);if(s.native={int:l,float:m},r.sourceNativeTokenPrice){let u=he(m).mul(r.sourceNativeTokenPrice).toFixed(A.decimals,he.roundDown);s.stablecoin={int:M(u,A.decimals).toFixed(0),float:u}}return{extraGasMax:s,destinationChain:{gasAmountMax:{int:o,float:c},swap:{int:i.txCostAmount.swap,float:C(i.txCostAmount.swap,I.getChainDecimalsByType(i.chainType)).toFixed()},transfer:{int:i.txCostAmount.transfer,float:C(i.txCostAmount.transfer,I.getChainDecimalsByType(i.chainType)).toFixed()}},exchangeRate:r.exchangeRate,sourceNativeTokenPrice:r.sourceNativeTokenPrice}}function Yn(A){return A.sourceToken.chainSymbol!==A.destinationToken.chainSymbol}var qe=class extends ie{constructor(a,s,r){super();this.web3=a;this.api=s;this.nodeRpcUrlsConfig=r}chainType="EVM";async send(a){let s=await this.buildRawTransactionSend(a);return this.sendRawTransaction(s)}async buildRawTransactionSwap(a){let s=Re(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s)}async buildRawTransactionSwapFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:l,minimumReceiveAmount:u}=a,d=this.getBridgeContract(r).methods.swap(s,c,l,m,u);return Promise.resolve({from:o,to:r,data:d.encodeABI()})}async buildRawTransactionSend(a){let s=await Te(this.chainType,a,this.api),{amount:r,contractAddress:o,fromAccountAddress:c,fromTokenAddress:m,toChainId:l,toAccountAddress:u,toTokenAddress:p,messenger:d,fee:g,gasFeePaymentMethod:h,extraGas:b}=s,T="0x"+Ct().toString("hex"),y,P,B=g;if(b&&(B=Ya(B).plus(b).toFixed()),d===3){let w=await this.buildRawTransactionCctpSend(a,s,B);y=w.sendMethod,P=w.value}else{let w=this.getBridgeContract(o);h==="stablecoin"?(y=w.methods.swapAndBridge(m,r,u,l,p,T,d,B),P="0"):(y=w.methods.swapAndBridge(m,r,u,l,p,T,d,0),P=B)}return Promise.resolve({from:c,to:o,value:P,data:y.encodeABI()})}async buildRawTransactionCctpSend(a,s,r){let{amount:o,contractAddress:c,toChainId:m,toAccountAddress:l,gasFeePaymentMethod:u}=s,p=this.getCctpBridgeContract(c),d,g;if(a.destinationToken.chainType==="SOLANA"){let h,b=new Ln(a.toAccountAddress),T=new Ln(a.destinationToken.tokenAddress),y=await ae(b,T),P=Ce(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),a.toAccountAddress);It.setProvider(P);let B=await It.Spl.token(P).account.token.fetchNullable(y);if(B?.authority.equals(b))h=be(y.toBase58(),"SOLANA",this.chainType);else{let w=await P.connection.getTokenAccountsByOwner(b,{mint:T});if(w.value.length===0&&!B)h=be(y.toBase58(),"SOLANA",this.chainType);else if(w.value.length>0){let G=w.value[0];if(!G?.pubkey)throw new S("First token account or its public key is undefined");h=be(G.pubkey.toBase58(),"SOLANA",this.chainType)}else throw new S("Associated account has wrong owner")}u==="stablecoin"?(d=p.methods.bridgeWithWalletAddress(o,h,l,m,r),g="0"):(d=p.methods.bridgeWithWalletAddress(o,h,l,m,0),g=r)}else u==="stablecoin"?(d=p.methods.bridge(o,l,m,r),g="0"):(d=p.methods.bridge(o,l,m,0),g=r);return{sendMethod:d,value:g}}async sendRawTransaction(a){let s=await this.web3.eth.estimateGas(a),r={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:o}=await this.web3.eth.sendTransaction({...a,gas:s,...r});return{txId:o.toString()}}getBridgeContract(a){return new this.web3.eth.Contract(xn.abi,a)}getCctpBridgeContract(a){return new this.web3.eth.Contract(Wn.abi,a)}};var vt=class{constructor(i,a,s,r){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=r}async approve(i,a){let s,r;a?(s=i,r=a):r=i;let o=$e(r.token,r.messenger);return this.tokenService.buildRawTransactionApprove({...r,spender:o},s)}async send(i,a){return x(i.amount),W("amount",i.amount,i.sourceToken.decimals),Yn(i)?Mt(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSend(i):Mt(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSwap(i)}};import{BN as Ee,Program as un,Spl as ei,web3 as Ie}from"@project-serum/anchor";import{Keypair as aa,PublicKey as F,SystemProgram as ti}from"@solana/web3.js";import{Big as se}from"big.js";var et={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 Jn={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 La}from"@project-serum/anchor";import Ja from"big.js";import{Web3 as kt}from"web3";async function Ve(A,i){return await La.token(i).account.token.fetch(A)}async function Kn(A,i,a){let s=await i.account.pool.fetch(a),r=s.decimals,o=Ja(s.feeShareBp.toString()).div(1e4).toFixed(),c={aValue:s.a.toString(),dValue:s.d.toString(),totalLpAmount:s.totalLpAmount.toString(),tokenBalance:s.tokenBalance.toString(),vUsdBalance:s.vUsdBalance.toString(),accRewardPerShareP:s.accRewardPerShareP.toString()};return ue(A,{decimals:r,feeShare:o},c)}function Qn(A){let i=A.amount,a="0x"+A.recipient.toString("hex"),s=A.sourceChainId,r=A.destinationChainId,o="0x"+A.receiveToken.toString("hex"),c="0x"+A.nonce.toString("hex"),m=1,l="0x"+A.chainBridge.toString("hex"),u=kt.utils.encodePacked({t:"uint256",v:i},{t:"bytes32",v:a},{t:"uint256",v:s},{t:"bytes32",v:o},{t:"uint256",v:c},{t:"uint8",v:m});if(!u)throw new S("message cannot be undefined");let p=kt.utils.keccak256(Buffer.from(u.replace("0x",""),"hex")),d=Buffer.from(p.replace("0x",""),"hex");d[0]=s,d[1]=r;let g=kt.utils.encodePacked({t:"bytes32",v:"0x"+d.toString("hex")},{t:"bytes32",v:l});if(!g)throw new Ze("messageWithSigner cannot be undefined");let h=kt.utils.keccak256(Buffer.from(g.replace("0x",""),"hex")),b=Buffer.from(h.replace("0x",""),"hex");return b[0]=d[0],b[1]=d[1],b}import{ComputeBudgetInstruction as zn,ComputeBudgetProgram as xt,Connection as jn,TransactionMessage as Ka}from"@solana/web3.js";import{Big as Qa}from"big.js";import{AddressLookupTableAccount as Hn}from"@solana/web3.js";async function Fe(A,i){return await Promise.all(A.message.addressTableLookups.map(async a=>new Hn({key:a.accountKey,state:Hn.deserialize(await i.getAccountInfo(a.accountKey).then(s=>{if(!s)throw new S("Cannot get AccountInfo");return s.data}))})))}var mn="AUTO";async function Oe(A,i,a){let s=new jn(a,"confirmed"),r=(await s.simulateTransaction(A)).value.unitsConsumed;await $n(A.instructions,r,i,s)}async function qn(A,i,a){let s=new jn(a,"confirmed"),r=await Fe(A,s),o=Ka.decompile(A.message,{addressLookupTableAccounts:r});if(A.serialize().length>1232)throw new ft;await $n(o.instructions,769230,i,s),A.message=o.compileToV0Message(r)}async function $n(A,i,a,s){if(i>0){let r=Ha(i,A);if(a?.solana){let o=a.solana;if(o===mn)await ln(A,s);else if("pricePerUnitInMicroLamports"in o)await ln(A,s,o.pricePerUnitInMicroLamports);else{let c=Qa(o.extraFeeInLamports).div(r).mul(Qe(6)).toFixed(0);await ln(A,s,c)}}}}function Ha(A,i){let a=i.findIndex(o=>o.programId.equals(xt.programId)&&zn.decodeInstructionType(o)==="SetComputeUnitLimit"),s=Number((A*1.3).toFixed(0)),r=xt.setComputeUnitLimit({units:s});return a>=0?i[a]=r:i.push(r),s.toString()}async function ln(A,i,a){let s=A.findIndex(c=>c.programId.equals(xt.programId)&&zn.decodeInstructionType(c)==="SetComputeUnitPrice"),r=BigInt(a||await za(i)),o=xt.setComputeUnitPrice({microLamports:r});return s>=0?A[s]=o:A.push(o),r.toString()}async function za(A){let i=await A.getRecentPrioritizationFees(),a=0;for(let s of i)a+=s.prioritizationFee;return(a/i.length).toFixed(0)}import{NATIVE_MINT as ja}from"@solana/spl-token";import{Connection as qa,TransactionMessage as ea,VersionedTransaction as $a}from"@solana/web3.js";import ta,{AxiosError as na}from"axios";var Wt=class{connection;jupiterUrl;constructor(i,a){this.connection=new qa(i),this.jupiterUrl=a.replace(/\/$/,"")}async getJupiterSwapTx(i,a,s,r){let o;try{let d=r?"ExactOut":"ExactIn";o=await ta.get(`${this.jupiterUrl}/quote?inputMint=${a}
|
|
1
|
+
var lt={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://quote-api.jup.ag/v6",wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7}},cachePoolInfoChainSec:20},qi={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},$i={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org"};import{Big as pe}from"big.js";var D=class extends Error{errorCode;constructor(i,a){super(a),this.errorCode=i}},S=class extends D{constructor(i){super("SdkError",i)}},ut=class extends D{constructor(i){super("InvalidAmountError",i)}},Ge=class extends D{constructor(i){super("AmountNotEnoughError",i)}},fe=class extends D{constructor(i){super("InsufficientPoolLiquidityError",i)}},V=class extends D{constructor(i){super("JupiterError",i)}},Le=class extends D{constructor(i){super("InvalidGasFeePaymentOptionError",i)}},fn=class extends D{constructor(i){super("InvalidMessengerOptionError",i)}},L=class extends D{constructor(i){super("MethodNotSupportedError",i)}},Je=class extends D{constructor(i){super("VerifyTxError",i)}},Ze=class extends D{constructor(i){super("InvalidTxError",i)}},dt=class extends D{constructor(i){super("ExtraGasMaxLimitExceededError",i)}},pt=class extends D{constructor(i,a,s){super("ArgumentInvalidDecimalsError",`Argument '${i}' decimals '${a}' cannot be greater than '${s}'`)}},Ke=class extends D{constructor(i){super("TimeoutError",i)}},gt=class extends D{constructor(i){super("NodeRpcUrlNotInitializedError",`For chain '${i}' Node RPC URL not initialized`)}},te=class extends D{constructor(i){super("CCTPDoesNotSupportedError",i)}},ft=class extends D{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},ba=(y=>(y.SDK_ERROR="SdkError",y.INVALID_AMOUNT_ERROR="InvalidAmountError",y.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",y.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",y.JUPITER_ERROR="JupiterError",y.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",y.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",y.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",y.VERIFY_TX_ERROR="VerifyTxError",y.INVALID_TX_ERROR="InvalidTxError",y.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",y.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",y.TIMEOUT_ERROR="TimeoutError",y.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",y.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",y.TX_TOO_LARGE="TxTooLargeError",y))(ba||{});var ne=(g=>(g.BSC="BSC",g.ETH="ETH",g.BAS="BAS",g.SOL="SOL",g.TRX="TRX",g.POL="POL",g.ARB="ARB",g.CEL="CEL",g.AVA="AVA",g.SRB="SRB",g.STLR="STLR",g.OPT="OPT",g))(ne||{}),N=(r=>(r.EVM="EVM",r.SOLANA="SOLANA",r.TRX="TRX",r.SRB="SRB",r))(N||{});var Ta={EVM:18,SOLANA:9,TRX:6,SRB:7},Pa={BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"}},I=(()=>{let A={...Pa};return{addChainsProperties(i){A={...A,...i}},getChainProperty(i){let a=A[i];if(!a)throw new S(`Cannot find chain properties for ${i}`);return a},getChainsProperties(){return A},getChainDecimalsByType(i){return Ta[i]}}})();import Ia from"axios";var yn="3.20.0-alpha.2";import{Big as f}from"big.js";import qt from"bn.js";function $t(A,i){return f(100).minus(f(100).times(i).div(A)).toNumber()}function xe(A,i){return we(A,i,3).round(0,f.roundDown)}function Q(A,i){return we(A,3,i)}function we(A,i,a){let s=f(a).minus(i).toNumber();return f(A).times(Qe(s))}function Qe(A){return f(10).pow(A)}function M(A,i){return f(A).times(Qe(i))}function C(A,i){let a=f(A);return a.eq(0)?f(0):f(a).div(Qe(i))}function H(A){return C(f(A.tokenBalance).minus(A.vUsdBalance).toFixed(),3).div(2).toFixed()}function ue(A,{feeShare:i,decimals:a},s){let r=f(A);if(r.lte(0))return"0";let o=r.times(i),c=r.minus(o),m=xe(c,a),l=f(s.tokenBalance).plus(m),u=de(l,s.aValue,s.dValue);return f(s.vUsdBalance).minus(u).round(0,f.roundDown).toFixed()}function He(A,{feeShare:i,decimals:a},s){let r=f(A);if(r.lte(0))return f(0).toFixed();let o=r.plus(s.vUsdBalance),c=de(o,s.aValue,s.dValue),m=Q(f(s.tokenBalance).minus(c),a),l=f(m).times(i);return f(m).minus(l).round(0,f.roundDown).toFixed()}function hn(A,i){let a=f(A);if(a.lte(0))return i;let s=a.plus(i.vUsdBalance),r=de(s,i.aValue,i.dValue);return{aValue:i.aValue,dValue:i.dValue,tokenBalance:r.toFixed(0),vUsdBalance:s.toFixed(0)}}function bn(A,{feeShare:i,decimals:a},s){if(f(A).lte(0))return f(0);let r=f(s.vUsdBalance).minus(A);if(r.lte(0))throw new fe;let o=de(r,s.aValue,s.dValue),c=f(o).minus(s.tokenBalance),m=Q(c,a),l=f(i).div(f(1).minus(i)),u=f(m).times(l).round(0,f.roundUp);return f(m).plus(u).round(0,f.roundDown)}function Tn(A,{feeShare:i,decimals:a},s){if(f(A).lte(0))return f(0);let r=f(i).div(f(1).minus(i)),o=f(A).times(r).round(0,f.roundUp),c=f(A).plus(o),m=xe(c,a),l=f(s.tokenBalance).minus(m);if(l.lte(0))throw new fe;let u=de(l,s.aValue,s.dValue);return f(u).minus(s.vUsdBalance).round(0,f.roundDown)}function de(A,i,a){let s=f(4).times(i).times(f(a).minus(A)).minus(a),r=f(a).pow(3),o=s.pow(2),c=f(A).times(f(A).times(o).plus(f(4).times(i).times(r))).sqrt().round(0,f.roundDown),m=f(8).times(i).times(A),l=s.times(A).plus(c).div(m).round(0,f.roundDown);return l.eq(0)?f(0):l.plus(1)}function Pn(A,i,a,s){let r=new qt(A),o=new qt(a),c=new qt(i);return r.mul(o).shrn(s).sub(c).toString()}function Sn(A){return f(A).gt(0)?`${Number(f(A).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function wn(A,i,a){let s=f(i).times(a),r=f(i).plus(a),o=f(8).times(A).times(s).times(r),c=s.times(f(16).times(A).minus(4)).div(3),m=o.times(o),l=c.times(c).times(c),u=m.plus(l),p=f(u).sqrt(),d=f(Math.cbrt(+o.plus(p).toFixed())),g=f(Math.cbrt(+o.minus(p).toFixed()));return d.plus(g).toFixed()}var en=(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))(en||{});var ye=(s=>(s[s.ALLBRIDGE=1]="ALLBRIDGE",s[s.WORMHOLE=2]="WORMHOLE",s[s.CCTP=3]="CCTP",s))(ye||{});function Bn(A){return Object.entries(A).reduce((i,a)=>{let s=a[0],r=a[1],o=Ra(s,r);return o&&(i[s]=o),i},{})}function Cn(A){let i={};for(let[a,s]of Object.entries(A)){let r=a;for(let o of s.tokens){let c=De({chainSymbol:r,poolAddress:o.poolAddress}),m=H(o.poolInfo);i[c]={...o.poolInfo,imbalance:m}}}return i}function Sa(A,i){let{name:a,...s}=A,{poolInfo:r,...o}=i;return{...o,...s,chainName:a}}function wa(A){switch(A){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;default:return null}}function Ba(A){return Object.entries(A).reduce((i,[a,s])=>(i[a]=Ca(s),i),{})}function Ca(A){return Object.entries(A).reduce((i,[a,s])=>{let r=wa(a);return r&&(i[r]=s),i},{})}function Ra(A,i){let a=I.getChainsProperties()[A];if(!a)return null;let s={...a,allbridgeChainId:i.chainId,bridgeAddress:i.bridgeAddress,transferTime:Ba(i.transferTime),txCostAmount:i.txCostAmount,confirmations:i.confirmations};return{...s,tokens:i.tokens.map(r=>Sa(s,r))}}function De(A){return A.chainSymbol+"_"+A.poolAddress}function Rn(A){let i=[];for(let[a,s]of Object.entries(A)){let r=a;for(let o of s.tokens)i.push({chainSymbol:r,poolAddress:o.poolAddress})}return i}function In(A){let i={};for(let[a,s]of Object.entries(A)){let r=a;for(let[o,c]of Object.entries(s))c.imbalance=H(c),i[De({chainSymbol:r,poolAddress:o})]=c}return i}var yt=class{api;constructor(i){this.api=Ia.create({baseURL:i.coreApiUrl,headers:{Accept:"application/json",...i.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+yn},params:i.coreApiQueryParams})}async getTokenInfo(){let{data:i}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:Bn(i),poolInfoMap:Cn(i)}}async getPendingInfo(){let{data:i}=await this.api.get("/pending-info");return i}async getGasBalance(i,a){let{data:s}=await this.api.get(`/check/${i}/${a}`);return s}async getTransferStatus(i,a){let{data:s}=await this.api.get(`/chain/${i}/${a}`);return s}async getReceiveTransactionCost(i){let{data:a}=await this.api.post("/receive-fee",i,{headers:{"Content-Type":"application/json"}});return{exchangeRate:a.exchangeRate,fee:a.fee,sourceNativeTokenPrice:a.sourceNativeTokenPrice}}async getPoolInfoMap(i){let a=i instanceof Array?i:[i],{data:s}=await this.api.post("/pool-info",{pools:a},{headers:{"Content-Type":"application/json"}});return In(s)}};import ht from"timed-cache";var tn=20*1e3,va=55*1e3,bt=class{constructor(i){this.apiClient=i;this.tokenInfoCache=new ht({defaultTtl:va}),this.receivedTransactionCache=new ht({defaultTtl:tn}),this.pendingInfoCache=new ht({defaultTtl:tn}),this.gasBalanceCache=new ht({defaultTtl:tn})}tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let i="TOKEN_INFO_CACHE_KEY",a=this.tokenInfoCache.get(i);if(a)return a;let s=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(i,s),s}async getGasBalance(i,a){let s=`GAS_BALANCE_${i}_${a}`,r=this.gasBalanceCache.get(s);if(r)return r;let o=this.apiClient.getGasBalance(i,a);return this.gasBalanceCache.put(s,o),o}async getPendingInfo(){let i="PENDING_INFO_CACHE_KEY",a=this.pendingInfoCache.get(i);if(a)return a;let s=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(i,s),s}async getReceiveTransactionCost(i){let a=`RECEIVE_TX_COST_${i.sourceChainId}_${i.destinationChainId}_${i.messenger}`,s=this.receivedTransactionCache.get(a);if(s)return s;let r=await this.apiClient.getReceiveTransactionCost(i);return this.receivedTransactionCache.put(a,r),r}async getTransferStatus(i,a){return this.apiClient.getTransferStatus(i,a)}async getPoolInfoMap(i){return this.apiClient.getPoolInfoMap(i)}};var Tt=class{constructor(i){this.apiClient=i}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let i=await this.getChainDetailsMap();return Object.values(i).flatMap(a=>a.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(i,a){return this.apiClient.getGasBalance(i,a)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(i,a){return await this.apiClient.getTransferStatus(i,a)}async getReceiveTransactionCost(i){return await this.apiClient.getReceiveTransactionCost(i)}async getPoolInfoMap(i){return await this.apiClient.getPoolInfoMap(i)}};var Pt=class{constructor(i,a){this.client=i;this.isStaging=a.coreApiQueryParams?.staging==="true"}isStaging;async getChainDetailsMap(i){let a=await this.client.getChainDetailsMap(),s={};for(let r in a){let o=a[r];o&&(s[r]={...o,tokens:vn(o.tokens,i,this.isStaging)})}return s}async tokens(i){return vn(await this.client.tokens(),i,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(i,a){return this.client.getGasBalance(i,a)}async getTransferStatus(i,a){return await this.client.getTransferStatus(i,a)}async getReceiveTransactionCost(i){return await this.client.getReceiveTransactionCost(i)}cachePut(i,a){return this.client.cachePut(i,a)}getPoolInfoByKey(i){return this.client.getPoolInfoByKey(i)}refreshPoolInfo(i){return this.client.refreshPoolInfo(i)}};function vn(A,i,a){return A.filter(s=>a?!0:s.flags[i]).map(Ma)}function Ma(A){let{flags:i,...a}=A;return a}import ka from"timed-cache";var xa=55*1e3,St=class{constructor(i){this.client=i;this.poolInfoCache=new nn}poolInfoCache;async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(i,a){return this.client.getTransferStatus(i,a)}getReceiveTransactionCost(i){return this.client.getReceiveTransactionCost(i)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(i,a){return this.client.getGasBalance(i,a)}async getPoolInfoByKey(i){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let a=this.poolInfoCache.get(i);if(a)return a;{let s=await this.client.getPoolInfoMap(i);this.poolInfoCache.putAll(s);let r=s[De(i)];if(r)return r;throw new S("Cannot find pool info for "+i.poolAddress+" on chain "+i.chainSymbol)}}async refreshPoolInfo(i){let a;if(i)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),a=await this.client.getPoolInfoMap(i);else{let s=await this.client.getChainDetailsMapAndPoolInfoMap();a=await this.client.getPoolInfoMap(Rn(s.chainDetailsMap))}this.poolInfoCache.putAll(a)}cachePut(i,a){this.poolInfoCache.put(De(i),a)}},nn=class{cache;constructor(){this.cache=new ka({defaultTtl:xa})}putAll(i){for(let[a,s]of Object.entries(i))this.cache.put(a,s)}putAllIfNotExists(i){for(let[a,s]of Object.entries(i))this.cache.get(a)||this.cache.put(a,s)}put(i,a){this.cache.put(i,a)}get(i){let a=De(i);return this.cache.get(a)}};import{TronWeb as Ai}from"tronweb";import{Web3 as ci}from"web3";import{Big as Mn}from"big.js";async function U(A,i){return await A.getPoolInfoByKey({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress})}function x(A){if(Mn(A).lte(0))throw new ut("Amount must be greater than zero")}function W(A,i,a){let s=Mn(i).toFixed(),[r,o]=s.split(".");if(o&&o.length>a)throw new pt(A,o.length,a)}async function wt(A,i,a){return await Promise.race([A,new Promise((s,r)=>{setTimeout(()=>r(new Ke(i)),a)})])}async function an(A,i,a,s){if(a<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${a} was received.`);let r=0;for(;;)try{return await wt(A(),i,s)}catch{if(++r>=a)throw new Ke(i)}}async function kn(A,i,a,s=1.5,r=!1){let o=[],c=0,m=await A();if(o.push(m),!i(m))return o;let l=new Date(Date.now()+a*1e3).valueOf(),u=1e3,p=u;for(;Date.now()<l;){let d=o[o.length-1];if(d===void 0||!i(d))break;c++,r&&console.info(`Waiting ${u}ms before trying again (bringing the total wait time to ${p}ms so far, of total ${a*1e3}ms)`),await new Promise(h=>setTimeout(h,u)),u=u*s,new Date(Date.now()+u).valueOf()>l&&(u=l-Date.now(),r&&console.info(`was gonna wait too long; new waitTime: ${u}ms`)),p=u+p;let g=await A(d);o.push(g),r&&i(g)&&console.info(`${c}. Called ${A.name}; ${o.length} prev attempts. Most recent: ${JSON.stringify(o[o.length-1],null,2)}`)}return o}import*as It from"@project-serum/anchor";import{PublicKey as Ln}from"@solana/web3.js";import{Big as Ya}from"big.js";var Wa={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"}]},xn=Wa;var Fa={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"}]},Wn=Fa;import*as E from"@project-serum/anchor";import{PublicKey as X}from"@solana/web3.js";async function ae(A,i){return E.utils.token.associatedAddress({mint:i,owner:A})}async function Be(A){let[i]=await X.findProgramAddress([E.utils.bytes.utf8.encode("config")],A);return i}async function Fn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("lock"),Uint8Array.from(A)],i);return a}async function ze(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([A])],i);return a}async function _e(A){let i=await Be(A),[a]=await X.findProgramAddress([i.toBuffer()],A);return a}async function Gn(A,i){let[a]=await X.findProgramAddress([A.toBuffer()],i);return a}async function Ne(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("token"),A.toBytes()],i);return a}async function Zn(A,i,a){let[s]=await X.findProgramAddress([E.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([A]),i],a);return s}async function sn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([A])],i);return a}async function rn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([A])],i);return a}async function Dn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("sent_message"),A],i);return a}async function on(A,i,a){let[s]=await X.findProgramAddress([E.utils.bytes.utf8.encode("user_deposit"),i.toBytes(),A.toBytes()],a);return s}async function _n(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("cctp_bridge"),A.toBytes()],i);return a}async function Nn(A,i){let[a]=await X.findProgramAddress([E.utils.bytes.utf8.encode("token"),A.toBytes()],i);return a}function Un(A,i){let[a]=X.findProgramAddressSync([E.utils.bytes.utf8.encode("lock"),i.toBuffer()],A);return a}function Vn(A,i,a,s){let r=We("message_transmitter",a),o=We("token_messenger",s),c=We("__event_authority",s),m=We("token_minter",s),l=We("local_token",s,[i]),u=We("remote_token_messenger",s,[A.toString()]),p=We("sender_authority",s);return{messageTransmitterAccount:r,tokenMessenger:o,tokenMessengerEventAuthority:c,tokenMinter:m,localToken:l,remoteTokenMessengerKey:u,authorityPda:p}}function We(A,i,a=[]){let s=[Buffer.from(E.utils.bytes.utf8.encode(A))];for(let o of a)typeof o=="string"?s.push(Buffer.from(E.utils.bytes.utf8.encode(o))):Array.isArray(o)||Buffer.isBuffer(o)?s.push(Buffer.from(Uint8Array.from(o))):s.push(Buffer.from(Uint8Array.from(o.toBuffer())));return X.findProgramAddressSync(s,i)[0]}import{AnchorProvider as Ga}from"@project-serum/anchor";import{Connection as Za,PublicKey as Da}from"@solana/web3.js";function Ce(A,i){let a=new Za(A,"confirmed"),s=new Da(i);return new Ga(a,{publicKey:s},{preflightCommitment:"confirmed",commitment:"confirmed"})}var ie=class{};import{PublicKey as _a}from"@solana/web3.js";import{Address as Na}from"@stellar/stellar-sdk";import{Big as he}from"big.js";import En from"randombytes";import{utils as On}from"tronweb";function be(A,i,a){let s;switch(i){case"EVM":{s=Ua(A);break}case"SOLANA":{s=new _a(A).toBuffer();break}case"TRX":{s=Va(A);break}case"SRB":{s=new Na(A).toBuffer();break}}switch(a){case"EVM":return"0x"+s.toString("hex");case"SOLANA":return Array.from(s);case"TRX":return s;case"SRB":return s.toJSON().data}}function Xn(A){return Buffer.from(A.replace(/^0x/i,""),"hex")}function Ua(A){let a=Xn(A);return Buffer.concat([Buffer.alloc(32-a.length,0),a],32)}function Va(A){let i=Bt(A),a=Xn(i);return Oa(a,32)}function Bt(A){let i=On.crypto.decodeBase58Address(A);return i?On.bytes.byteArray2hexStr(i).replace(/^41/,"0x"):""}function Oa(A,i){if(A.length>=i)return A;let a=Buffer.alloc(i,0);return A.copy(a,i-A.length),a}function Ct(){return En(32)}function je(){let A=En(32).readBigInt64BE();return A<0?A*-1n:A}function Re(A,i){let a={},s=i.sourceToken;return a.amount=M(i.amount,s.decimals).toFixed(),a.contractAddress=s.bridgeAddress,a.fromAccountAddress=i.fromAccountAddress,a.fromTokenAddress=be(s.tokenAddress,A,A),a.toAccountAddress=i.toAccountAddress,a.toTokenAddress=be(i.destinationToken.tokenAddress,A,A),a.minimumReceiveAmount=i.minimumReceiveAmount?M(i.minimumReceiveAmount,i.destinationToken.decimals).toFixed():"0",a}async function Te(A,i,a){let s={};s.fromChainId=i.sourceToken.allbridgeChainId,s.fromChainSymbol=i.sourceToken.chainSymbol;let r=I.getChainProperty(i.destinationToken.chainSymbol).chainType;s.fromTokenAddress=i.sourceToken.tokenAddress,s.toChainId=i.destinationToken.allbridgeChainId,s.toTokenAddress=i.destinationToken.tokenAddress,i.gasFeePaymentMethod==="stablecoin"?s.gasFeePaymentMethod="stablecoin":s.gasFeePaymentMethod="native";let o=i.sourceToken;if(i.messenger===3){if(!o.cctpAddress||!i.destinationToken.cctpAddress)throw new te("Such route does not support CCTP protocol");s.contractAddress=o.cctpAddress}else s.contractAddress=o.bridgeAddress;s.messenger=i.messenger,s.fromAccountAddress=i.fromAccountAddress,s.amount=M(i.amount,o.decimals).toFixed();let{fee:c,feeFormat:m}=i;if(!c){let d=(await An(s.fromChainId,i.sourceToken.chainType,s.toChainId,o.decimals,s.messenger,a))[s.gasFeePaymentMethod];if(!d)throw new Le;c=d.int,m="int"}if(m=="float")switch(s.gasFeePaymentMethod){case"native":s.fee=M(c,I.getChainDecimalsByType(o.chainType)).toFixed(0);break;case"stablecoin":s.fee=M(c,o.decimals).toFixed(0);break}else s.fee=c;let{extraGas:l,extraGasFormat:u}=i;if(l&&+l>0){if(u=="float")switch(s.gasFeePaymentMethod){case"native":s.extraGas=M(l,I.getChainDecimalsByType(o.chainType)).toFixed(0);break;case"stablecoin":s.extraGas=M(l,o.decimals).toFixed(0);break}else s.extraGas=l;await Xa(s.extraGas,s.gasFeePaymentMethod,o,i.destinationToken,a)}return s.fromTokenAddress=be(s.fromTokenAddress,A,A),s.toAccountAddress=be(i.toAccountAddress,r,A),s.toTokenAddress=be(s.toTokenAddress,r,A),s.gasFeePaymentMethod=="stablecoin"&&Ea(s.amount,o.decimals,s.fee,s.extraGas),s}function Ea(A,i,a,s){let r=he(A).minus(a).minus(s??0);if(r.lte(0))throw new Ge(`Amount not enough to pay fee, ${C(he(r).minus(1).neg(),i).toFixed()} stables is missing`)}async function An(A,i,a,s,r,o){let c=await o.getReceiveTransactionCost({sourceChainId:A,destinationChainId:a,messenger:r}),m={native:{int:c.fee,float:C(c.fee,I.getChainDecimalsByType(i)).toFixed()}};if(c.sourceNativeTokenPrice){let l=we(new he(c.fee).mul(c.sourceNativeTokenPrice),I.getChainDecimalsByType(i),s).toFixed(0,he.roundUp);m.stablecoin={int:l,float:C(l,s).toFixed()}}return m}async function Xa(A,i,a,s,r){let c=(await cn(a,s,r)).extraGasMax[i];if(!c)throw new Le(`Impossible to pay extra gas by '${i}' payment method`);let m=c.int;if(he(A).gt(m))throw new dt(`Extra gas ${A} in int format, exceeded limit ${m} for '${i}' payment method`)}async function cn(A,i,a){let s={},r=await a.getReceiveTransactionCost({sourceChainId:A.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:1}),o=i.txCostAmount.maxAmount,c=C(o,I.getChainDecimalsByType(i.chainType)).toFixed(),m=he(c).div(r.exchangeRate).toFixed(I.getChainDecimalsByType(A.chainType),he.roundDown),l=M(m,I.getChainDecimalsByType(A.chainType)).toFixed(0);if(s.native={int:l,float:m},r.sourceNativeTokenPrice){let u=he(m).mul(r.sourceNativeTokenPrice).toFixed(A.decimals,he.roundDown);s.stablecoin={int:M(u,A.decimals).toFixed(0),float:u}}return{extraGasMax:s,destinationChain:{gasAmountMax:{int:o,float:c},swap:{int:i.txCostAmount.swap,float:C(i.txCostAmount.swap,I.getChainDecimalsByType(i.chainType)).toFixed()},transfer:{int:i.txCostAmount.transfer,float:C(i.txCostAmount.transfer,I.getChainDecimalsByType(i.chainType)).toFixed()}},exchangeRate:r.exchangeRate,sourceNativeTokenPrice:r.sourceNativeTokenPrice}}function Yn(A){return A.sourceToken.chainSymbol!==A.destinationToken.chainSymbol}var qe=class extends ie{constructor(a,s,r){super();this.web3=a;this.api=s;this.nodeRpcUrlsConfig=r}chainType="EVM";async send(a){let s=await this.buildRawTransactionSend(a);return this.sendRawTransaction(s)}async buildRawTransactionSwap(a){let s=Re(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s)}async buildRawTransactionSwapFromParams(a){let{amount:s,contractAddress:r,fromAccountAddress:o,fromTokenAddress:c,toAccountAddress:m,toTokenAddress:l,minimumReceiveAmount:u}=a,d=this.getBridgeContract(r).methods.swap(s,c,l,m,u);return Promise.resolve({from:o,to:r,data:d.encodeABI()})}async buildRawTransactionSend(a){let s=await Te(this.chainType,a,this.api),{amount:r,contractAddress:o,fromAccountAddress:c,fromTokenAddress:m,toChainId:l,toAccountAddress:u,toTokenAddress:p,messenger:d,fee:g,gasFeePaymentMethod:h,extraGas:b}=s,T="0x"+Ct().toString("hex"),y,P,B=g;if(b&&(B=Ya(B).plus(b).toFixed()),d===3){let w=await this.buildRawTransactionCctpSend(a,s,B);y=w.sendMethod,P=w.value}else{let w=this.getBridgeContract(o);h==="stablecoin"?(y=w.methods.swapAndBridge(m,r,u,l,p,T,d,B),P="0"):(y=w.methods.swapAndBridge(m,r,u,l,p,T,d,0),P=B)}return Promise.resolve({from:c,to:o,value:P,data:y.encodeABI()})}async buildRawTransactionCctpSend(a,s,r){let{amount:o,contractAddress:c,toChainId:m,toAccountAddress:l,gasFeePaymentMethod:u}=s,p=this.getCctpBridgeContract(c),d,g;if(a.destinationToken.chainType==="SOLANA"){let h,b=new Ln(a.toAccountAddress),T=new Ln(a.destinationToken.tokenAddress),y=await ae(b,T),P=Ce(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),a.toAccountAddress);It.setProvider(P);let B=await It.Spl.token(P).account.token.fetchNullable(y);if(B?.authority.equals(b))h=be(y.toBase58(),"SOLANA",this.chainType);else{let w=await P.connection.getTokenAccountsByOwner(b,{mint:T});if(w.value.length===0&&!B)h=be(y.toBase58(),"SOLANA",this.chainType);else if(w.value.length>0){let G=w.value[0];if(!G?.pubkey)throw new S("First token account or its public key is undefined");h=be(G.pubkey.toBase58(),"SOLANA",this.chainType)}else throw new S("Associated account has wrong owner")}u==="stablecoin"?(d=p.methods.bridgeWithWalletAddress(o,h,l,m,r),g="0"):(d=p.methods.bridgeWithWalletAddress(o,h,l,m,0),g=r)}else u==="stablecoin"?(d=p.methods.bridge(o,l,m,r),g="0"):(d=p.methods.bridge(o,l,m,0),g=r);return{sendMethod:d,value:g}}async sendRawTransaction(a){let s=await this.web3.eth.estimateGas(a),r={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:o}=await this.web3.eth.sendTransaction({...a,gas:s,...r});return{txId:o.toString()}}getBridgeContract(a){return new this.web3.eth.Contract(xn.abi,a)}getCctpBridgeContract(a){return new this.web3.eth.Contract(Wn.abi,a)}};var vt=class{constructor(i,a,s,r){this.api=i;this.nodeRpcUrlsConfig=a;this.params=s;this.tokenService=r}async approve(i,a){let s,r;a?(s=i,r=a):r=i;let o=$e(r.token,r.messenger);return this.tokenService.buildRawTransactionApprove({...r,spender:o},s)}async send(i,a){return x(i.amount),W("amount",i.amount,i.sourceToken.decimals),Yn(i)?Mt(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSend(i):Mt(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSwap(i)}};import{BN as Ee,Program as un,Spl as ei,web3 as Ie}from"@project-serum/anchor";import{Keypair as aa,PublicKey as F,SystemProgram as ti}from"@solana/web3.js";import{Big as se}from"big.js";var et={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 Jn={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 La}from"@project-serum/anchor";import Ja from"big.js";import{Web3 as kt}from"web3";async function Ve(A,i){return await La.token(i).account.token.fetch(A)}async function Kn(A,i,a){let s=await i.account.pool.fetch(a),r=s.decimals,o=Ja(s.feeShareBp.toString()).div(1e4).toFixed(),c={aValue:s.a.toString(),dValue:s.d.toString(),totalLpAmount:s.totalLpAmount.toString(),tokenBalance:s.tokenBalance.toString(),vUsdBalance:s.vUsdBalance.toString(),accRewardPerShareP:s.accRewardPerShareP.toString()};return ue(A,{decimals:r,feeShare:o},c)}function Qn(A){let i=A.amount,a="0x"+A.recipient.toString("hex"),s=A.sourceChainId,r=A.destinationChainId,o="0x"+A.receiveToken.toString("hex"),c="0x"+A.nonce.toString("hex"),m=1,l="0x"+A.chainBridge.toString("hex"),u=kt.utils.encodePacked({t:"uint256",v:i},{t:"bytes32",v:a},{t:"uint256",v:s},{t:"bytes32",v:o},{t:"uint256",v:c},{t:"uint8",v:m});if(!u)throw new S("message cannot be undefined");let p=kt.utils.keccak256(Buffer.from(u.replace("0x",""),"hex")),d=Buffer.from(p.replace("0x",""),"hex");d[0]=s,d[1]=r;let g=kt.utils.encodePacked({t:"bytes32",v:"0x"+d.toString("hex")},{t:"bytes32",v:l});if(!g)throw new Ze("messageWithSigner cannot be undefined");let h=kt.utils.keccak256(Buffer.from(g.replace("0x",""),"hex")),b=Buffer.from(h.replace("0x",""),"hex");return b[0]=d[0],b[1]=d[1],b}import{ComputeBudgetInstruction as zn,ComputeBudgetProgram as xt,Connection as jn,TransactionMessage as Ka}from"@solana/web3.js";import{Big as Qa}from"big.js";import{AddressLookupTableAccount as Hn}from"@solana/web3.js";async function Fe(A,i){return await Promise.all(A.message.addressTableLookups.map(async a=>new Hn({key:a.accountKey,state:Hn.deserialize(await i.getAccountInfo(a.accountKey).then(s=>{if(!s)throw new S("Cannot get AccountInfo");return s.data}))})))}var mn="AUTO";async function Oe(A,i,a){let s=new jn(a,"confirmed"),r=(await s.simulateTransaction(A)).value.unitsConsumed;await $n(A.instructions,r,i,s)}async function qn(A,i,a){let s=new jn(a,"confirmed"),r=await Fe(A,s),o=Ka.decompile(A.message,{addressLookupTableAccounts:r});if(A.serialize().length>1232)throw new ft;await $n(o.instructions,769230,i,s),A.message=o.compileToV0Message(r)}async function $n(A,i,a,s){if(i>0){let r=Ha(i,A);if(a?.solana){let o=a.solana;if(o===mn)await ln(A,s);else if("pricePerUnitInMicroLamports"in o)await ln(A,s,o.pricePerUnitInMicroLamports);else{let c=Qa(o.extraFeeInLamports).div(r).mul(Qe(6)).toFixed(0);await ln(A,s,c)}}}}function Ha(A,i){let a=i.findIndex(o=>o.programId.equals(xt.programId)&&zn.decodeInstructionType(o)==="SetComputeUnitLimit"),s=Number((A*1.3).toFixed(0)),r=xt.setComputeUnitLimit({units:s});return a>=0?i[a]=r:i.push(r),s.toString()}async function ln(A,i,a){let s=A.findIndex(c=>c.programId.equals(xt.programId)&&zn.decodeInstructionType(c)==="SetComputeUnitPrice"),r=BigInt(a||await za(i)),o=xt.setComputeUnitPrice({microLamports:r});return s>=0?A[s]=o:A.push(o),r.toString()}async function za(A){let i=await A.getRecentPrioritizationFees(),a=0;for(let s of i)a+=s.prioritizationFee;return(a/i.length).toFixed(0)}import{NATIVE_MINT as ja}from"@solana/spl-token";import{Connection as qa,TransactionMessage as ea,VersionedTransaction as $a}from"@solana/web3.js";import ta,{AxiosError as na}from"axios";var Wt=class{connection;jupiterUrl;constructor(i,a){this.connection=new qa(i),this.jupiterUrl=a.replace(/\/$/,"")}async getJupiterSwapTx(i,a,s,r){let o;try{let d=r?"ExactOut":"ExactIn";o=await ta.get(`${this.jupiterUrl}/quote?inputMint=${a}
|
|
2
2
|
&outputMint=${ja.toString()}
|
|
3
3
|
&amount=${s}
|
|
4
4
|
&swapMode=${d}
|