@allbridge/bridge-core-sdk 3.15.0 → 3.15.1-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/esm/index.js CHANGED
@@ -1,4 +1,4 @@
1
- var cr={coreApiUrl:"https://core-dev.a11bd.net",coreApiQueryParams:{},coreApiHeaders:{},wormholeMessengerProgramId:"3u8hJUVTA4jH1wYAyUur7FFZVQ8H635K3tSHHF4ssjQ5",solanaLookUpTable:"C3jAxHRTZjM2Bs7EqPir4nvrT8zKtpcW7RvGR9R2qKtN",sorobanNetworkPassphrase:"Test SDF Network ; September 2015",tronJsonRpc:"https://nile.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{SPL:0,ARB:3,AMO:7}}},mr={solanaRpcUrl:"https://api.devnet.solana.com",tronRpcUrl:"https://nile.trongrid.io"},ur={SOL:"https://api.devnet.solana.com",TRX:"https://nile.trongrid.io",SRB:"https://soroban-testnet.stellar.org",STLR:"https://horizon-testnet.stellar.org"};var yt={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},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}}},pr={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},dr={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 ye}from"big.js";var ht=class{constructor(n){this.apiClient=n}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let n=await this.getChainDetailsMap();return Object.values(n).flatMap(t=>t.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(n,t){return this.apiClient.getGasBalance(n,t)}async checkAddress(n,t,a){return this.apiClient.checkAddress(n,t,a)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(n,t){return await this.apiClient.getTransferStatus(n,t)}async getReceiveTransactionCost(n){return await this.apiClient.getReceiveTransactionCost(n)}async getPoolInfoMap(n){return await this.apiClient.getPoolInfoMap(n)}};import Ea from"axios";var Cn="3.15.0";var de=(d=>(d.GRL="GRL",d.SPL="SPL",d.HOL="HOL",d.BSC="BSC",d.ETH="ETH",d.BAS="BAS",d.SOL="SOL",d.TRX="TRX",d.POL="POL",d.MUM="MUM",d.AMO="AMO",d.ARB="ARB",d.CEL="CEL",d.AVA="AVA",d.SRB="SRB",d.STLR="STLR",d.OPT="OPT",d))(de||{}),E=(i=>(i.EVM="EVM",i.SOLANA="SOLANA",i.TRX="TRX",i.SRB="SRB",i))(E||{}),U={EVM:18,SOLANA:9,TRX:6,SRB:7},X={GRL:{chainSymbol:"GRL",chainId:"0x5",name:"Goerli",chainType:"EVM"},SPL:{chainSymbol:"SPL",chainId:"0xaa36a7",name:"Sepolia",chainType:"EVM"},HOL:{chainSymbol:"HOL",chainId:"0x4268",name:"Hole\u0161ky",chainType:"EVM"},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"},MUM:{chainSymbol:"MUM",chainId:"0x13881",name:"Mumbai",chainType:"EVM"},AMO:{chainSymbol:"AMO",chainId:"0x13882",name:"Amoy",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"}};import{Big as p}from"big.js";import an from"bn.js";var D=class extends Error{constructor(n,t){super(t),this.errorCode=n}},R=class extends D{constructor(n){super("SdkError",n)}},Tt=class extends D{constructor(n){super("InvalidAmountError",n)}},Oe=class extends D{constructor(n){super("AmountNotEnoughError",n)}},Te=class extends D{constructor(n){super("InsufficientPoolLiquidityError",n)}},K=class extends D{constructor(n){super("JupiterError",n)}},ze=class extends D{constructor(n){super("InvalidGasFeePaymentOptionError",n)}},Bn=class extends D{constructor(n){super("InvalidMessengerOptionError",n)}},Q=class extends D{constructor(n){super("MethodNotSupportedError",n)}},je=class extends D{constructor(n){super("VerifyTxError",n)}},Ve=class extends D{constructor(n){super("InvalidTxError",n)}},bt=class extends D{constructor(n){super("ExtraGasMaxLimitExceededError",n)}},Pt=class extends D{constructor(n,t,a){super("ArgumentInvalidDecimalsError",`Argument '${n}' decimals '${t}' cannot be greater than '${a}'`)}},qe=class extends D{constructor(n){super("TimeoutError",n)}},St=class extends D{constructor(n){super("NodeRpcUrlNotInitializedError",`For chain '${n}' Node RPC URL not initialized`)}},ie=class extends D{constructor(n){super("CCTPDoesNotSupportedError",n)}},wt=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")}},va=(g=>(g.SDK_ERROR="SdkError",g.INVALID_AMOUNT_ERROR="InvalidAmountError",g.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",g.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",g.JUPITER_ERROR="JupiterError",g.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",g.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",g.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",g.VERIFY_TX_ERROR="VerifyTxError",g.INVALID_TX_ERROR="InvalidTxError",g.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",g.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",g.TIMEOUT_ERROR="TimeoutError",g.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",g.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",g.TX_TOO_LARGE="TxTooLargeError",g))(va||{});function rn(s,n){return p(100).minus(p(100).times(n).div(s)).toNumber()}function We(s,n){return ke(s,n,3).round(0,p.roundDown)}function z(s,n){return ke(s,3,n)}function ke(s,n,t){let a=p(t).minus(n).toNumber();return p(s).times($e(a))}function $e(s){return p(10).pow(s)}function B(s,n){return p(s).times($e(n))}function P(s,n){let t=p(s);return t.eq(0)?p(0):p(t).div($e(n))}function j(s){return P(p(s.tokenBalance).minus(s.vUsdBalance).toFixed(),3).div(2).toFixed()}function ge(s,{feeShare:n,decimals:t},a){let i=p(s);if(i.lte(0))return"0";let r=i.times(n),o=i.minus(r),A=We(o,t),c=p(a.tokenBalance).plus(A),m=fe(c,a.aValue,a.dValue);return p(a.vUsdBalance).minus(m).round(0,p.roundDown).toFixed()}function et(s,{feeShare:n,decimals:t},a){let i=p(s);if(i.lte(0))return p(0).toFixed();let r=i.plus(a.vUsdBalance),o=fe(r,a.aValue,a.dValue),A=z(p(a.tokenBalance).minus(o),t),c=p(A).times(n);return p(A).minus(c).round(0,p.roundDown).toFixed()}function kn(s,n){let t=p(s);if(t.lte(0))return n;let a=t.plus(n.vUsdBalance),i=fe(a,n.aValue,n.dValue);return{aValue:n.aValue,dValue:n.dValue,tokenBalance:i.toFixed(0),vUsdBalance:a.toFixed(0)}}function Rn(s,{feeShare:n,decimals:t},a){if(p(s).lte(0))return p(0);let i=p(a.vUsdBalance).minus(s);if(i.lte(0))throw new Te;let r=fe(i,a.aValue,a.dValue),o=p(r).minus(a.tokenBalance),A=z(o,t),c=p(n).div(p(1).minus(n)),m=p(A).times(c).round(0,p.roundUp);return p(A).plus(m).round(0,p.roundDown)}function Mn(s,{feeShare:n,decimals:t},a){if(p(s).lte(0))return p(0);let i=p(n).div(p(1).minus(n)),r=p(s).times(i).round(0,p.roundUp),o=p(s).plus(r),A=We(o,t),c=p(a.tokenBalance).minus(A);if(c.lte(0))throw new Te;let m=fe(c,a.aValue,a.dValue);return p(m).minus(a.vUsdBalance).round(0,p.roundDown)}function fe(s,n,t){let a=p(4).times(n).times(p(t).minus(s)).minus(t),i=p(t).pow(3),r=a.pow(2),o=p(s).times(p(s).times(r).plus(p(4).times(n).times(i))).sqrt().round(0,p.roundDown),A=p(8).times(n).times(s),c=a.times(s).plus(o).div(A).round(0,p.roundDown);return c.eq(0)?p(0):c.plus(1)}function vn(s,n,t,a){let i=new an(s),r=new an(t),o=new an(n);return i.mul(r).shrn(a).sub(o).toString()}function In(s){return s*100>0?`${Number(p(s).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function xn(s,n,t){let a=p(n).times(t),i=p(n).plus(t),r=p(8).times(s).times(a).times(i),o=a.times(p(16).times(s).minus(4)).div(3),A=r.times(r),c=o.times(o).times(o),m=A.plus(c),u=p(m).sqrt(),l=p(Math.cbrt(+r.plus(u).toFixed())),f=p(Math.cbrt(+r.minus(u).toFixed()));return l.plus(f).toFixed()}var Dn=(o=>(o.OK="OK",o.INVALID="INVALID",o.FORBIDDEN="FORBIDDEN",o.UNINITIALIZED="UNINITIALIZED",o.CONTRACT_ADDRESS="CONTRACT_ADDRESS",o.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",o))(Dn||{});var be=(a=>(a[a.ALLBRIDGE=1]="ALLBRIDGE",a[a.WORMHOLE=2]="WORMHOLE",a[a.CCTP=3]="CCTP",a))(be||{});function Fn(s){return Object.entries(s).reduce((n,t)=>{let a=t[0],i=t[1],r=Wa(a,i);return r&&(n[a]=r),n},{})}function Wn(s){let n={};for(let[t,a]of Object.entries(s)){let i=t;for(let r of a.tokens){let o=Ge({chainSymbol:i,poolAddress:r.poolAddress}),A=j(r.poolInfo);n[o]={...r.poolInfo,imbalance:A}}}return n}function Ia(s,n){let{name:t,...a}=s,{poolInfo:i,...r}=n;return{...r,...a,chainName:t}}function xa(s){switch(s){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;default:return null}}function Da(s){return Object.entries(s).reduce((n,[t,a])=>(n[t]=Fa(a),n),{})}function Fa(s){return Object.entries(s).reduce((n,[t,a])=>{let i=xa(t);return i&&(n[i]=a),n},{})}function Wa(s,n){let t=X[s];if(!t)return null;let a={...t,allbridgeChainId:n.chainId,bridgeAddress:n.bridgeAddress,transferTime:Da(n.transferTime),txCostAmount:n.txCostAmount,confirmations:n.confirmations};return{...a,tokens:n.tokens.map(i=>Ia(a,i))}}function Ge(s){return s.chainSymbol+"_"+s.poolAddress}function En(s){let n=[];for(let[t,a]of Object.entries(s)){let i=t;for(let r of a.tokens)n.push({chainSymbol:i,poolAddress:r.poolAddress})}return n}function Un(s){let n={};for(let[t,a]of Object.entries(s)){let i=t;for(let[r,o]of Object.entries(a))o.imbalance=j(o),n[Ge({chainSymbol:i,poolAddress:r})]=o}return n}var Ct=class{constructor(n){this.api=Ea.create({baseURL:n.coreApiUrl,headers:{Accept:"application/json",...n.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+Cn},params:n.coreApiQueryParams})}async getTokenInfo(){let{data:n}=await this.api.get("/token-info");return{chainDetailsMap:Fn(n),poolInfoMap:Wn(n)}}async getPendingInfo(){let{data:n}=await this.api.get("/pending-info");return n}async getGasBalance(n,t){let{data:a}=await this.api.get(`/check/${n}/${t}`);return a}async checkAddress(n,t,a){if(a){let{data:r}=await this.api.get(`/check/${n}/${t}`,{params:{token:a,...this.api.defaults.params}});return r}let{data:i}=await this.api.get(`/check/${n}/${t}`);return i}async getTransferStatus(n,t){let{data:a}=await this.api.get(`/chain/${n}/${t}`);return a}async getReceiveTransactionCost(n){let{data:t}=await this.api.post("/receive-fee",n,{headers:{"Content-Type":"application/json"}});return{exchangeRate:t.exchangeRate,fee:t.fee,sourceNativeTokenPrice:t.sourceNativeTokenPrice}}async getPoolInfoMap(n){let t=n instanceof Array?n:[n],{data:a}=await this.api.post("/pool-info",{pools:t},{headers:{"Content-Type":"application/json"}});return Un(a)}};import Bt from"timed-cache";var sn=20*1e3,Ua=55*1e3,kt=class{constructor(n){this.apiClient=n;this.tokenInfoCache=new Bt({defaultTtl:Ua}),this.receivedTransactionCache=new Bt({defaultTtl:sn}),this.pendingInfoCache=new Bt({defaultTtl:sn}),this.gasBalanceCache=new Bt({defaultTtl:sn})}getTokenInfo(){let n="TOKEN_INFO_CACHE_KEY",t=this.tokenInfoCache.get(n);if(t)return t;let a=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(n,a),a}async getGasBalance(n,t){let a=`GAS_BALANCE_${n}_${t}`,i=this.gasBalanceCache.get(a);if(i)return i;let r=this.apiClient.getGasBalance(n,t);return this.gasBalanceCache.put(a,r),r}async checkAddress(n,t,a){return this.apiClient.checkAddress(n,t,a)}async getPendingInfo(){let n="PENDING_INFO_CACHE_KEY",t=this.pendingInfoCache.get(n);if(t)return t;let a=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(n,a),a}async getReceiveTransactionCost(n){let t=`RECEIVE_TX_COST_${n.sourceChainId}_${n.destinationChainId}_${n.messenger}`,a=this.receivedTransactionCache.get(t);if(a)return a;let i=await this.apiClient.getReceiveTransactionCost(n);return this.receivedTransactionCache.put(t,i),i}async getTransferStatus(n,t){return this.apiClient.getTransferStatus(n,t)}async getPoolInfoMap(n){return this.apiClient.getPoolInfoMap(n)}};import Na from"timed-cache";var Oa=55*1e3,Rt=class{constructor(n){this.client=n;this.poolInfoCache=new on}async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(n,t){return this.client.getTransferStatus(n,t)}getReceiveTransactionCost(n){return this.client.getReceiveTransactionCost(n)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(n,t){return this.client.getGasBalance(n,t)}checkAddress(n,t,a){return this.client.checkAddress(n,t,a)}async getPoolInfoByKey(n){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let t=this.poolInfoCache.get(n);if(t)return t;{let a=await this.client.getPoolInfoMap(n);return this.poolInfoCache.putAll(a),a[Ge(n)]}}async refreshPoolInfo(n){let t;if(n)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),t=await this.client.getPoolInfoMap(n);else{let a=await this.client.getChainDetailsMapAndPoolInfoMap();t=await this.client.getPoolInfoMap(En(a.chainDetailsMap))}this.poolInfoCache.putAll(t)}cachePut(n,t){this.poolInfoCache.put(Ge(n),t)}},on=class{constructor(){this.cache=new Na({defaultTtl:Oa})}putAll(n){for(let[t,a]of Object.entries(n))this.cache.put(t,a)}putAllIfNotExists(n){for(let[t,a]of Object.entries(n))this.cache.get(t)||this.cache.put(t,a)}put(n,t){this.cache.put(n,t)}get(n){let t=Ge(n);return this.cache.get(t)}};import Ci from"tronweb";import Bi from"web3";import{Big as Nn}from"big.js";async function N(s,n){return await s.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}function M(s){if(Nn(s).lte(0))throw new Tt("Amount must be greater than zero")}function v(s,n,t){let a=Nn(n).toFixed();if(a.split(".").length==2&&a.split(".")[1].length>t)throw new Pt(s,a.split(".")[1].length,t)}async function Mt(s,n,t){return await Promise.race([s,new Promise((a,i)=>{setTimeout(()=>i(new qe(n)),t)})])}async function An(s,n,t,a){if(t<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${t} was received.`);let i=0;for(;;)try{return await Mt(s(),n,a)}catch{if(++i>=t)throw new qe(n)}}async function On(s,n,t,a=1.5,i=!1){let r=[],o=0;if(r.push(await s()),!n(r[r.length-1]))return r;let A=new Date(Date.now()+t*1e3).valueOf(),c=1e3,m=c;for(;Date.now()<A&&n(r[r.length-1]);)o++,i&&console.info(`Waiting ${c}ms before trying again (bringing the total wait time to ${m}ms so far, of total ${t*1e3}ms)`),await new Promise(u=>setTimeout(u,c)),c=c*a,new Date(Date.now()+c).valueOf()>A&&(c=A-Date.now(),i&&console.info(`was gonna wait too long; new waitTime: ${c}ms`)),m=c+m,r.push(await s(r[r.length-1])),i&&n(r[r.length-1])&&console.info(`${o}. Called ${s.name}; ${r.length} prev attempts. Most recent: ${JSON.stringify(r[r.length-1],null,2)}`);return r}import*as It from"@project-serum/anchor";import{PublicKey as $n}from"@solana/web3.js";import{Big as ja}from"big.js";var Vn=[{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"}];var Gn=[{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"}];import*as Z from"@project-serum/anchor";import{PublicKey as L}from"@solana/web3.js";async function re(s,n){return Z.utils.token.associatedAddress({mint:n,owner:s})}async function Re(s){let[n]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("config")],s);return n}async function Zn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("lock"),Uint8Array.from(s)],n);return t}async function tt(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([s])],n);return t}async function Ze(s){let n=await Re(s),[t]=await L.findProgramAddress([n.toBuffer()],s);return t}async function Ln(s,n){let[t]=await L.findProgramAddress([s.toBuffer()],n);return t}async function Le(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("token"),s.toBytes()],n);return t}async function _n(s,n,t){let[a]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([s]),n],t);return a}async function cn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([s])],n);return t}async function mn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([s])],n);return t}async function Xn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("sent_message"),s],n);return t}async function un(s,n,t){let[a]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("user_deposit"),n.toBytes(),s.toBytes()],t);return a}async function Kn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("cctp_bridge"),s.toBytes()],n);return t}async function Qn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("token"),s.toBytes()],n);return t}function Yn(s,n){let[t]=L.findProgramAddressSync([Z.utils.bytes.utf8.encode("lock"),n.toBuffer()],s);return t}function Jn(s,n,t,a){let i=Ee("message_transmitter",t),r=Ee("token_messenger",a),o=Ee("__event_authority",a),A=Ee("token_minter",a),c=Ee("local_token",a,[n]),m=Ee("remote_token_messenger",a,[s.toString()]),u=Ee("sender_authority",a);return{messageTransmitterAccount:i,tokenMessenger:r,tokenMessengerEventAuthority:o,tokenMinter:A,localToken:c,remoteTokenMessengerKey:m,authorityPda:u}}function Ee(s,n,t=[]){let a=[Buffer.from(Z.utils.bytes.utf8.encode(s))];for(let r of t)typeof r=="string"?a.push(Buffer.from(Z.utils.bytes.utf8.encode(r))):Array.isArray(r)?a.push(Buffer.from(r)):Buffer.isBuffer(r)?a.push(r):a.push(r.toBuffer());return L.findProgramAddressSync(a,n)[0]}import{AnchorProvider as Za}from"@project-serum/anchor";import{Connection as La,PublicKey as _a}from"@solana/web3.js";function Me(s,n){let t=new La(s,"confirmed"),a=new _a(n);return new Za(t,{publicKey:a},{preflightCommitment:"confirmed",commitment:"confirmed"})}var se=class{};import{PublicKey as Xa}from"@solana/web3.js";import{Big as Pe}from"big.js";import Hn from"randombytes";import{Address as Ka}from"stellar-sdk";import*as zn from"tronweb";function Se(s,n,t){let a;switch(n){case"EVM":{a=Qa(s);break}case"SOLANA":{a=new Xa(s).toBuffer();break}case"TRX":{a=Ya(s);break}case"SRB":{a=new Ka(s).toBuffer();break}}switch(t){case"EVM":return"0x"+a.toString("hex");case"SOLANA":return Array.from(a);case"TRX":return a.toJSON().data;case"SRB":return a.toJSON().data}}function jn(s){return Buffer.from(s.replace(/^0x/i,""),"hex")}function Qa(s){let t=jn(s);return Buffer.concat([Buffer.alloc(32-t.length,0),t],32)}function Ya(s){let n=nt(s),t=jn(n);return Ja(t,32)}function nt(s){return Buffer.from(zn.utils.crypto.decodeBase58Address(s)).toString("hex").replace(/^41/,"0x")}function Ja(s,n){if(s.length>=n)return s;let t=Buffer.alloc(n,0);return s.copy(t,n-s.length),t}function _e(){return Hn(32)}function ln(){let s=Hn(32).readBigInt64BE();return s<0?s*-1n:s}function ve(s,n){let t={},a=n.sourceToken;return t.amount=B(n.amount,a.decimals).toFixed(),t.contractAddress=a.bridgeAddress,t.fromAccountAddress=n.fromAccountAddress,t.fromTokenAddress=Se(a.tokenAddress,s,s),t.toAccountAddress=n.toAccountAddress,t.toTokenAddress=Se(n.destinationToken.tokenAddress,s,s),t.minimumReceiveAmount=n.minimumReceiveAmount?B(n.minimumReceiveAmount,n.destinationToken.decimals).toFixed():"0",t}async function we(s,n,t){let a={};a.fromChainId=n.sourceToken.allbridgeChainId,a.fromChainSymbol=n.sourceToken.chainSymbol;let i=X[n.destinationToken.chainSymbol].chainType;a.fromTokenAddress=n.sourceToken.tokenAddress,a.toChainId=n.destinationToken.allbridgeChainId,a.toTokenAddress=n.destinationToken.tokenAddress,n.gasFeePaymentMethod==="stablecoin"?a.gasFeePaymentMethod="stablecoin":a.gasFeePaymentMethod="native";let r=n.sourceToken;if(n.messenger===3){if(!r.cctpAddress||!n.destinationToken.cctpAddress)throw new ie("Such route does not support CCTP protocol");a.contractAddress=r.cctpAddress}else a.contractAddress=r.bridgeAddress;a.messenger=n.messenger,a.fromAccountAddress=n.fromAccountAddress,a.amount=B(n.amount,r.decimals).toFixed();let{fee:o,feeFormat:A}=n;if(!o){let l=(await pn(a.fromChainId,n.sourceToken.chainType,a.toChainId,r.decimals,a.messenger,t))[a.gasFeePaymentMethod];if(!l)throw new ze;o=l.int,A="int"}if(A=="float")switch(a.gasFeePaymentMethod){case"native":a.fee=B(o,U[r.chainType]).toFixed(0);break;case"stablecoin":a.fee=B(o,r.decimals).toFixed(0);break}else a.fee=o;let{extraGas:c,extraGasFormat:m}=n;if(c&&+c>0){if(m=="float")switch(a.gasFeePaymentMethod){case"native":a.extraGas=B(c,U[r.chainType]).toFixed(0);break;case"stablecoin":a.extraGas=B(c,r.decimals).toFixed(0);break}else a.extraGas=c;await za(a.extraGas,a.gasFeePaymentMethod,r,n.destinationToken,t)}return a.fromTokenAddress=Se(a.fromTokenAddress,s,s),a.toAccountAddress=Se(n.toAccountAddress,i,s),a.toTokenAddress=Se(a.toTokenAddress,i,s),a.gasFeePaymentMethod=="stablecoin"&&Ha(a.amount,r.decimals,a.fee,a.extraGas),a}function Ha(s,n,t,a){let i=Pe(s).minus(t).minus(a??0);if(i.lte(0))throw new Oe(`Amount not enough to pay fee, ${P(Pe(i).minus(1).neg(),n).toFixed()} stables is missing`)}async function pn(s,n,t,a,i,r){let o=await r.getReceiveTransactionCost({sourceChainId:s,destinationChainId:t,messenger:i}),A={native:{int:o.fee,float:P(o.fee,U[n]).toFixed()}};if(o.sourceNativeTokenPrice){let c=ke(new Pe(o.fee).mul(o.sourceNativeTokenPrice),U[n],a).toFixed(0,Pe.roundUp);A.stablecoin={int:c,float:P(c,a).toFixed()}}return A}async function za(s,n,t,a,i){let o=(await dn(t,a,i)).extraGasMax[n];if(!o)throw new ze(`Impossible to pay extra gas by '${n}' payment method`);let A=o.int;if(Pe(s).gt(A))throw new bt(`Extra gas ${s} in int format, exceeded limit ${A} for '${n}' payment method`)}async function dn(s,n,t){let a={},i=await t.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:n.allbridgeChainId,messenger:1}),r=n.txCostAmount.maxAmount,o=P(r,U[n.chainType]).toFixed(),A=Pe(o).div(i.exchangeRate).toFixed(U[s.chainType],Pe.roundDown),c=B(A,U[s.chainType]).toFixed(0);if(a.native={int:c,float:A},i.sourceNativeTokenPrice){let m=Pe(A).mul(i.sourceNativeTokenPrice).toFixed(s.decimals,Pe.roundDown);a.stablecoin={int:B(m,s.decimals).toFixed(0),float:m}}return{extraGasMax:a,destinationChain:{gasAmountMax:{int:r,float:o},swap:{int:n.txCostAmount.swap,float:P(n.txCostAmount.swap,U[n.chainType]).toFixed()},transfer:{int:n.txCostAmount.transfer,float:P(n.txCostAmount.transfer,U[n.chainType]).toFixed()}},exchangeRate:i.exchangeRate,sourceNativeTokenPrice:i.sourceNativeTokenPrice}}function qn(s){return s.sourceToken.chainSymbol!==s.destinationToken.chainSymbol}var at=class extends se{constructor(t,a,i){super();this.web3=t;this.api=a;this.nodeRpcUrlsConfig=i;this.chainType="EVM"}async send(t){let a=await this.buildRawTransactionSend(t);return this.sendRawTransaction(a)}async buildRawTransactionSwap(t){let a=ve(this.chainType,t);return await this.buildRawTransactionSwapFromParams(a)}async buildRawTransactionSwapFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toAccountAddress:A,toTokenAddress:c,minimumReceiveAmount:m}=t,l=this.getBridgeContract(i).methods.swap(a,o,c,A,m);return Promise.resolve({from:r,to:i,data:l.encodeABI()})}async buildRawTransactionSend(t){let a=await we(this.chainType,t,this.api),{amount:i,contractAddress:r,fromAccountAddress:o,fromTokenAddress:A,toChainId:c,toAccountAddress:m,toTokenAddress:u,messenger:l,fee:f,gasFeePaymentMethod:y,extraGas:h}=a,T="0x"+_e().toString("hex"),g,d,S=f;if(h&&(S=ja(S).plus(h).toFixed()),l===3){let b=await this.buildRawTransactionCctpSend(t,a,S);g=b.sendMethod,d=b.value}else{let b=this.getBridgeContract(r);y==="stablecoin"?(g=b.methods.swapAndBridge(A,i,m,c,u,T,l,S),d="0"):(g=b.methods.swapAndBridge(A,i,m,c,u,T,l,0),d=S)}return Promise.resolve({from:o,to:r,value:d,data:g.encodeABI()})}async buildRawTransactionCctpSend(t,a,i){let{amount:r,contractAddress:o,toChainId:A,toAccountAddress:c,gasFeePaymentMethod:m}=a,u=this.getContract(Gn,o),l,f;if(t.destinationToken.chainType==="SOLANA"){let y,h=new $n(t.toAccountAddress),T=new $n(t.destinationToken.tokenAddress),g=await re(h,T),d=Me(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),t.toAccountAddress);It.setProvider(d);let S=await It.Spl.token(d).account.token.fetchNullable(g);if(S?.authority.equals(h))y=Se(g.toBase58(),"SOLANA",this.chainType);else{let b=await d.connection.getTokenAccountsByOwner(h,{mint:T});if(b.value.length===0&&!S)y=Se(g.toBase58(),"SOLANA",this.chainType);else if(b.value.length>0)y=Se(b.value[0].pubkey.toBase58(),"SOLANA",this.chainType);else throw new R("Associated account has wrong owner")}m==="stablecoin"?(l=u.methods.bridgeWithWalletAddress(r,y,c,A,i),f="0"):(l=u.methods.bridgeWithWalletAddress(r,y,c,A,0),f=i)}else m==="stablecoin"?(l=u.methods.bridge(r,c,A,i),f="0"):(l=u.methods.bridge(r,c,A,0),f=i);return{sendMethod:l,value:f}}async sendRawTransaction(t){let a=await this.web3.eth.estimateGas(t),i={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:r}=await this.web3.eth.sendTransaction({...t,gas:a,...i});return{txId:r}}getContract(t,a){return new this.web3.eth.Contract(t,a)}getBridgeContract(t){return this.getContract(Vn,t)}};var xt=class{constructor(n,t,a,i){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a;this.tokenService=i}async approve(n,t){let a,i;t?(a=n,i=t):i=n;let r=it(i.token,i.messenger);return this.tokenService.buildRawTransactionApprove({...i,spender:r},a)}async send(n,t){return M(n.amount),v("amount",n.amount,n.sourceToken.decimals),qn(n)?Dt(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionSend(n):Dt(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionSwap(n)}};import{BN as Ye,Program as yn,Spl as oi,web3 as Ie}from"@project-serum/anchor";import{Keypair as ua,PublicKey as I,SystemProgram as Ai}from"@solana/web3.js";import{Big as xe}from"big.js";var rt={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 ea={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 qa}from"@project-serum/anchor";import $a from"big.js";import Ft from"web3";async function Ke(s,n){return await qa.token(n).account.token.fetch(s)}async function ta(s,n,t){let a=await n.account.pool.fetch(t),i=a.decimals,r=$a(a.feeShareBp.toString()).div(1e4).toFixed(),o={aValue:a.a.toString(),dValue:a.d.toString(),totalLpAmount:a.totalLpAmount.toString(),tokenBalance:a.tokenBalance.toString(),vUsdBalance:a.vUsdBalance.toString(),accRewardPerShareP:a.accRewardPerShareP.toString()};return ge(s,{decimals:i,feeShare:r},o)}function na(s){let n=s.amount,t="0x"+s.recipient.toString("hex"),a=s.sourceChainId,i=s.destinationChainId,r="0x"+s.receiveToken.toString("hex"),o="0x"+s.nonce.toString("hex"),A=1,c="0x"+s.chainBridge.toString("hex"),m=Ft.utils.encodePacked({t:"uint256",v:n},{t:"bytes32",v:t},{t:"uint256",v:a},{t:"bytes32",v:r},{t:"uint256",v:o},{t:"uint8",v:A});if(!m)throw new R("message cannot be undefined");let u=Ft.utils.keccak256(Buffer.from(m.replace("0x",""),"hex")),l=Buffer.from(u.replace("0x",""),"hex");l[0]=a,l[1]=i;let f=Ft.utils.encodePacked({t:"bytes32",v:"0x"+l.toString("hex")},{t:"bytes32",v:c});if(!f)throw new Ve("messageWithSigner cannot be undefined");let y=Ft.utils.keccak256(Buffer.from(f.replace("0x",""),"hex")),h=Buffer.from(y.replace("0x",""),"hex");return h[0]=l[0],h[1]=l[1],h}import{ComputeBudgetInstruction as ia,ComputeBudgetProgram as Wt,Connection as ra,TransactionMessage as ei}from"@solana/web3.js";import{Big as ti}from"big.js";import{AddressLookupTableAccount as aa}from"@solana/web3.js";async function Ue(s,n){return await Promise.all(s.message.addressTableLookups.map(async t=>new aa({key:t.accountKey,state:aa.deserialize(await n.getAccountInfo(t.accountKey).then(a=>{if(!a)throw new R("Cannot get AccountInfo");return a.data}))})))}var gn="AUTO";async function Qe(s,n,t){let a=new ra(t,"confirmed"),i=(await a.simulateTransaction(s)).value.unitsConsumed;await oa(s.instructions,i,n,a)}async function sa(s,n,t){let a=new ra(t,"confirmed"),i=await Ue(s,a),r=ei.decompile(s.message,{addressLookupTableAccounts:i});if(s.serialize().length>1232)throw new wt;await oa(r.instructions,769230,n,a),s.message=r.compileToV0Message(i)}async function oa(s,n,t,a){if(n>0){let i=ni(n,s);if(t?.solana){let r=t.solana;if(r===gn)await fn(s,a);else if("pricePerUnitInMicroLamports"in r)await fn(s,a,r.pricePerUnitInMicroLamports);else{let o=ti(r.extraFeeInLamports).div(i).mul($e(6)).toFixed(0);await fn(s,a,o)}}}}function ni(s,n){let t=n.findIndex(r=>r.programId.equals(Wt.programId)&&ia.decodeInstructionType(r)==="SetComputeUnitLimit"),a=Number((s*1.3).toFixed(0)),i=Wt.setComputeUnitLimit({units:a});return t>=0?n[t]=i:n.push(i),a.toString()}async function fn(s,n,t){let a=s.findIndex(o=>o.programId.equals(Wt.programId)&&ia.decodeInstructionType(o)==="SetComputeUnitPrice"),i=BigInt(t||await ai(n)),r=Wt.setComputeUnitPrice({microLamports:i});return a>=0?s[a]=r:s.push(r),i.toString()}async function ai(s){let n=await s.getRecentPrioritizationFees(),t=0;for(let a of n)t+=a.prioritizationFee;return(t/n.length).toFixed(0)}import{NATIVE_MINT as ii}from"@solana/spl-token";import{Connection as ri,TransactionMessage as Aa,VersionedTransaction as si}from"@solana/web3.js";import ca,{AxiosError as ma}from"axios";var Et=class{constructor(n){this.connection=new ri(n)}async getJupiterSwapTx(n,t,a){let i;try{i=await ca.get(`https://quote-api.jup.ag/v6/quote?inputMint=${t}
1
+ var cr={coreApiUrl:"https://core-dev.a11bd.net",coreApiQueryParams:{},coreApiHeaders:{},wormholeMessengerProgramId:"3u8hJUVTA4jH1wYAyUur7FFZVQ8H635K3tSHHF4ssjQ5",solanaLookUpTable:"C3jAxHRTZjM2Bs7EqPir4nvrT8zKtpcW7RvGR9R2qKtN",sorobanNetworkPassphrase:"Test SDF Network ; September 2015",tronJsonRpc:"https://nile.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{SPL:0,ARB:3,AMO:7}}},mr={solanaRpcUrl:"https://api.devnet.solana.com",tronRpcUrl:"https://nile.trongrid.io"},ur={SOL:"https://api.devnet.solana.com",TRX:"https://nile.trongrid.io",SRB:"https://soroban-testnet.stellar.org",STLR:"https://horizon-testnet.stellar.org"};var yt={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},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}}},pr={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},dr={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 ye}from"big.js";var ht=class{constructor(n){this.apiClient=n}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let n=await this.getChainDetailsMap();return Object.values(n).flatMap(t=>t.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(n,t){return this.apiClient.getGasBalance(n,t)}async checkAddress(n,t,a){return this.apiClient.checkAddress(n,t,a)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(n,t){return await this.apiClient.getTransferStatus(n,t)}async getReceiveTransactionCost(n){return await this.apiClient.getReceiveTransactionCost(n)}async getPoolInfoMap(n){return await this.apiClient.getPoolInfoMap(n)}};import Ea from"axios";var Cn="3.15.1-alpha.2";var de=(d=>(d.GRL="GRL",d.SPL="SPL",d.HOL="HOL",d.BSC="BSC",d.ETH="ETH",d.BAS="BAS",d.SOL="SOL",d.TRX="TRX",d.POL="POL",d.MUM="MUM",d.AMO="AMO",d.ARB="ARB",d.CEL="CEL",d.AVA="AVA",d.SRB="SRB",d.STLR="STLR",d.OPT="OPT",d))(de||{}),E=(i=>(i.EVM="EVM",i.SOLANA="SOLANA",i.TRX="TRX",i.SRB="SRB",i))(E||{}),U={EVM:18,SOLANA:9,TRX:6,SRB:7},X={GRL:{chainSymbol:"GRL",chainId:"0x5",name:"Goerli",chainType:"EVM"},SPL:{chainSymbol:"SPL",chainId:"0xaa36a7",name:"Sepolia",chainType:"EVM"},HOL:{chainSymbol:"HOL",chainId:"0x4268",name:"Hole\u0161ky",chainType:"EVM"},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"},MUM:{chainSymbol:"MUM",chainId:"0x13881",name:"Mumbai",chainType:"EVM"},AMO:{chainSymbol:"AMO",chainId:"0x13882",name:"Amoy",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"}};import{Big as p}from"big.js";import an from"bn.js";var D=class extends Error{constructor(n,t){super(t),this.errorCode=n}},R=class extends D{constructor(n){super("SdkError",n)}},Tt=class extends D{constructor(n){super("InvalidAmountError",n)}},Oe=class extends D{constructor(n){super("AmountNotEnoughError",n)}},Te=class extends D{constructor(n){super("InsufficientPoolLiquidityError",n)}},K=class extends D{constructor(n){super("JupiterError",n)}},ze=class extends D{constructor(n){super("InvalidGasFeePaymentOptionError",n)}},Bn=class extends D{constructor(n){super("InvalidMessengerOptionError",n)}},Q=class extends D{constructor(n){super("MethodNotSupportedError",n)}},je=class extends D{constructor(n){super("VerifyTxError",n)}},Ve=class extends D{constructor(n){super("InvalidTxError",n)}},bt=class extends D{constructor(n){super("ExtraGasMaxLimitExceededError",n)}},Pt=class extends D{constructor(n,t,a){super("ArgumentInvalidDecimalsError",`Argument '${n}' decimals '${t}' cannot be greater than '${a}'`)}},qe=class extends D{constructor(n){super("TimeoutError",n)}},St=class extends D{constructor(n){super("NodeRpcUrlNotInitializedError",`For chain '${n}' Node RPC URL not initialized`)}},ie=class extends D{constructor(n){super("CCTPDoesNotSupportedError",n)}},wt=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")}},va=(g=>(g.SDK_ERROR="SdkError",g.INVALID_AMOUNT_ERROR="InvalidAmountError",g.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",g.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",g.JUPITER_ERROR="JupiterError",g.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",g.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",g.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",g.VERIFY_TX_ERROR="VerifyTxError",g.INVALID_TX_ERROR="InvalidTxError",g.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",g.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",g.TIMEOUT_ERROR="TimeoutError",g.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",g.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",g.TX_TOO_LARGE="TxTooLargeError",g))(va||{});function rn(s,n){return p(100).minus(p(100).times(n).div(s)).toNumber()}function We(s,n){return ke(s,n,3).round(0,p.roundDown)}function z(s,n){return ke(s,3,n)}function ke(s,n,t){let a=p(t).minus(n).toNumber();return p(s).times($e(a))}function $e(s){return p(10).pow(s)}function B(s,n){return p(s).times($e(n))}function P(s,n){let t=p(s);return t.eq(0)?p(0):p(t).div($e(n))}function j(s){return P(p(s.tokenBalance).minus(s.vUsdBalance).toFixed(),3).div(2).toFixed()}function ge(s,{feeShare:n,decimals:t},a){let i=p(s);if(i.lte(0))return"0";let r=i.times(n),o=i.minus(r),A=We(o,t),c=p(a.tokenBalance).plus(A),m=fe(c,a.aValue,a.dValue);return p(a.vUsdBalance).minus(m).round(0,p.roundDown).toFixed()}function et(s,{feeShare:n,decimals:t},a){let i=p(s);if(i.lte(0))return p(0).toFixed();let r=i.plus(a.vUsdBalance),o=fe(r,a.aValue,a.dValue),A=z(p(a.tokenBalance).minus(o),t),c=p(A).times(n);return p(A).minus(c).round(0,p.roundDown).toFixed()}function kn(s,n){let t=p(s);if(t.lte(0))return n;let a=t.plus(n.vUsdBalance),i=fe(a,n.aValue,n.dValue);return{aValue:n.aValue,dValue:n.dValue,tokenBalance:i.toFixed(0),vUsdBalance:a.toFixed(0)}}function Rn(s,{feeShare:n,decimals:t},a){if(p(s).lte(0))return p(0);let i=p(a.vUsdBalance).minus(s);if(i.lte(0))throw new Te;let r=fe(i,a.aValue,a.dValue),o=p(r).minus(a.tokenBalance),A=z(o,t),c=p(n).div(p(1).minus(n)),m=p(A).times(c).round(0,p.roundUp);return p(A).plus(m).round(0,p.roundDown)}function Mn(s,{feeShare:n,decimals:t},a){if(p(s).lte(0))return p(0);let i=p(n).div(p(1).minus(n)),r=p(s).times(i).round(0,p.roundUp),o=p(s).plus(r),A=We(o,t),c=p(a.tokenBalance).minus(A);if(c.lte(0))throw new Te;let m=fe(c,a.aValue,a.dValue);return p(m).minus(a.vUsdBalance).round(0,p.roundDown)}function fe(s,n,t){let a=p(4).times(n).times(p(t).minus(s)).minus(t),i=p(t).pow(3),r=a.pow(2),o=p(s).times(p(s).times(r).plus(p(4).times(n).times(i))).sqrt().round(0,p.roundDown),A=p(8).times(n).times(s),c=a.times(s).plus(o).div(A).round(0,p.roundDown);return c.eq(0)?p(0):c.plus(1)}function vn(s,n,t,a){let i=new an(s),r=new an(t),o=new an(n);return i.mul(r).shrn(a).sub(o).toString()}function In(s){return s*100>0?`${Number(p(s).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function xn(s,n,t){let a=p(n).times(t),i=p(n).plus(t),r=p(8).times(s).times(a).times(i),o=a.times(p(16).times(s).minus(4)).div(3),A=r.times(r),c=o.times(o).times(o),m=A.plus(c),u=p(m).sqrt(),l=p(Math.cbrt(+r.plus(u).toFixed())),f=p(Math.cbrt(+r.minus(u).toFixed()));return l.plus(f).toFixed()}var Dn=(o=>(o.OK="OK",o.INVALID="INVALID",o.FORBIDDEN="FORBIDDEN",o.UNINITIALIZED="UNINITIALIZED",o.CONTRACT_ADDRESS="CONTRACT_ADDRESS",o.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",o))(Dn||{});var be=(a=>(a[a.ALLBRIDGE=1]="ALLBRIDGE",a[a.WORMHOLE=2]="WORMHOLE",a[a.CCTP=3]="CCTP",a))(be||{});function Fn(s){return Object.entries(s).reduce((n,t)=>{let a=t[0],i=t[1],r=Wa(a,i);return r&&(n[a]=r),n},{})}function Wn(s){let n={};for(let[t,a]of Object.entries(s)){let i=t;for(let r of a.tokens){let o=Ge({chainSymbol:i,poolAddress:r.poolAddress}),A=j(r.poolInfo);n[o]={...r.poolInfo,imbalance:A}}}return n}function Ia(s,n){let{name:t,...a}=s,{poolInfo:i,...r}=n;return{...r,...a,chainName:t}}function xa(s){switch(s){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;default:return null}}function Da(s){return Object.entries(s).reduce((n,[t,a])=>(n[t]=Fa(a),n),{})}function Fa(s){return Object.entries(s).reduce((n,[t,a])=>{let i=xa(t);return i&&(n[i]=a),n},{})}function Wa(s,n){let t=X[s];if(!t)return null;let a={...t,allbridgeChainId:n.chainId,bridgeAddress:n.bridgeAddress,transferTime:Da(n.transferTime),txCostAmount:n.txCostAmount,confirmations:n.confirmations};return{...a,tokens:n.tokens.map(i=>Ia(a,i))}}function Ge(s){return s.chainSymbol+"_"+s.poolAddress}function En(s){let n=[];for(let[t,a]of Object.entries(s)){let i=t;for(let r of a.tokens)n.push({chainSymbol:i,poolAddress:r.poolAddress})}return n}function Un(s){let n={};for(let[t,a]of Object.entries(s)){let i=t;for(let[r,o]of Object.entries(a))o.imbalance=j(o),n[Ge({chainSymbol:i,poolAddress:r})]=o}return n}var Ct=class{constructor(n){this.api=Ea.create({baseURL:n.coreApiUrl,headers:{Accept:"application/json",...n.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+Cn},params:n.coreApiQueryParams})}async getTokenInfo(){let{data:n}=await this.api.get("/token-info");return{chainDetailsMap:Fn(n),poolInfoMap:Wn(n)}}async getPendingInfo(){let{data:n}=await this.api.get("/pending-info");return n}async getGasBalance(n,t){let{data:a}=await this.api.get(`/check/${n}/${t}`);return a}async checkAddress(n,t,a){if(a){let{data:r}=await this.api.get(`/check/${n}/${t}`,{params:{token:a,...this.api.defaults.params}});return r}let{data:i}=await this.api.get(`/check/${n}/${t}`);return i}async getTransferStatus(n,t){let{data:a}=await this.api.get(`/chain/${n}/${t}`);return a}async getReceiveTransactionCost(n){let{data:t}=await this.api.post("/receive-fee",n,{headers:{"Content-Type":"application/json"}});return{exchangeRate:t.exchangeRate,fee:t.fee,sourceNativeTokenPrice:t.sourceNativeTokenPrice}}async getPoolInfoMap(n){let t=n instanceof Array?n:[n],{data:a}=await this.api.post("/pool-info",{pools:t},{headers:{"Content-Type":"application/json"}});return Un(a)}};import Bt from"timed-cache";var sn=20*1e3,Ua=55*1e3,kt=class{constructor(n){this.apiClient=n;this.tokenInfoCache=new Bt({defaultTtl:Ua}),this.receivedTransactionCache=new Bt({defaultTtl:sn}),this.pendingInfoCache=new Bt({defaultTtl:sn}),this.gasBalanceCache=new Bt({defaultTtl:sn})}getTokenInfo(){let n="TOKEN_INFO_CACHE_KEY",t=this.tokenInfoCache.get(n);if(t)return t;let a=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(n,a),a}async getGasBalance(n,t){let a=`GAS_BALANCE_${n}_${t}`,i=this.gasBalanceCache.get(a);if(i)return i;let r=this.apiClient.getGasBalance(n,t);return this.gasBalanceCache.put(a,r),r}async checkAddress(n,t,a){return this.apiClient.checkAddress(n,t,a)}async getPendingInfo(){let n="PENDING_INFO_CACHE_KEY",t=this.pendingInfoCache.get(n);if(t)return t;let a=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(n,a),a}async getReceiveTransactionCost(n){let t=`RECEIVE_TX_COST_${n.sourceChainId}_${n.destinationChainId}_${n.messenger}`,a=this.receivedTransactionCache.get(t);if(a)return a;let i=await this.apiClient.getReceiveTransactionCost(n);return this.receivedTransactionCache.put(t,i),i}async getTransferStatus(n,t){return this.apiClient.getTransferStatus(n,t)}async getPoolInfoMap(n){return this.apiClient.getPoolInfoMap(n)}};import Na from"timed-cache";var Oa=55*1e3,Rt=class{constructor(n){this.client=n;this.poolInfoCache=new on}async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(n,t){return this.client.getTransferStatus(n,t)}getReceiveTransactionCost(n){return this.client.getReceiveTransactionCost(n)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(n,t){return this.client.getGasBalance(n,t)}checkAddress(n,t,a){return this.client.checkAddress(n,t,a)}async getPoolInfoByKey(n){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let t=this.poolInfoCache.get(n);if(t)return t;{let a=await this.client.getPoolInfoMap(n);return this.poolInfoCache.putAll(a),a[Ge(n)]}}async refreshPoolInfo(n){let t;if(n)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),t=await this.client.getPoolInfoMap(n);else{let a=await this.client.getChainDetailsMapAndPoolInfoMap();t=await this.client.getPoolInfoMap(En(a.chainDetailsMap))}this.poolInfoCache.putAll(t)}cachePut(n,t){this.poolInfoCache.put(Ge(n),t)}},on=class{constructor(){this.cache=new Na({defaultTtl:Oa})}putAll(n){for(let[t,a]of Object.entries(n))this.cache.put(t,a)}putAllIfNotExists(n){for(let[t,a]of Object.entries(n))this.cache.get(t)||this.cache.put(t,a)}put(n,t){this.cache.put(n,t)}get(n){let t=Ge(n);return this.cache.get(t)}};import Ci from"tronweb";import Bi from"web3";import{Big as Nn}from"big.js";async function N(s,n){return await s.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}function M(s){if(Nn(s).lte(0))throw new Tt("Amount must be greater than zero")}function v(s,n,t){let a=Nn(n).toFixed();if(a.split(".").length==2&&a.split(".")[1].length>t)throw new Pt(s,a.split(".")[1].length,t)}async function Mt(s,n,t){return await Promise.race([s,new Promise((a,i)=>{setTimeout(()=>i(new qe(n)),t)})])}async function An(s,n,t,a){if(t<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${t} was received.`);let i=0;for(;;)try{return await Mt(s(),n,a)}catch{if(++i>=t)throw new qe(n)}}async function On(s,n,t,a=1.5,i=!1){let r=[],o=0;if(r.push(await s()),!n(r[r.length-1]))return r;let A=new Date(Date.now()+t*1e3).valueOf(),c=1e3,m=c;for(;Date.now()<A&&n(r[r.length-1]);)o++,i&&console.info(`Waiting ${c}ms before trying again (bringing the total wait time to ${m}ms so far, of total ${t*1e3}ms)`),await new Promise(u=>setTimeout(u,c)),c=c*a,new Date(Date.now()+c).valueOf()>A&&(c=A-Date.now(),i&&console.info(`was gonna wait too long; new waitTime: ${c}ms`)),m=c+m,r.push(await s(r[r.length-1])),i&&n(r[r.length-1])&&console.info(`${o}. Called ${s.name}; ${r.length} prev attempts. Most recent: ${JSON.stringify(r[r.length-1],null,2)}`);return r}import*as It from"@project-serum/anchor";import{PublicKey as $n}from"@solana/web3.js";import{Big as ja}from"big.js";var Vn=[{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"}];var Gn=[{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"}];import*as Z from"@project-serum/anchor";import{PublicKey as L}from"@solana/web3.js";async function re(s,n){return Z.utils.token.associatedAddress({mint:n,owner:s})}async function Re(s){let[n]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("config")],s);return n}async function Zn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("lock"),Uint8Array.from(s)],n);return t}async function tt(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([s])],n);return t}async function Ze(s){let n=await Re(s),[t]=await L.findProgramAddress([n.toBuffer()],s);return t}async function Ln(s,n){let[t]=await L.findProgramAddress([s.toBuffer()],n);return t}async function Le(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("token"),s.toBytes()],n);return t}async function _n(s,n,t){let[a]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([s]),n],t);return a}async function cn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([s])],n);return t}async function mn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([s])],n);return t}async function Xn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("sent_message"),s],n);return t}async function un(s,n,t){let[a]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("user_deposit"),n.toBytes(),s.toBytes()],t);return a}async function Kn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("cctp_bridge"),s.toBytes()],n);return t}async function Qn(s,n){let[t]=await L.findProgramAddress([Z.utils.bytes.utf8.encode("token"),s.toBytes()],n);return t}function Yn(s,n){let[t]=L.findProgramAddressSync([Z.utils.bytes.utf8.encode("lock"),n.toBuffer()],s);return t}function Jn(s,n,t,a){let i=Ee("message_transmitter",t),r=Ee("token_messenger",a),o=Ee("__event_authority",a),A=Ee("token_minter",a),c=Ee("local_token",a,[n]),m=Ee("remote_token_messenger",a,[s.toString()]),u=Ee("sender_authority",a);return{messageTransmitterAccount:i,tokenMessenger:r,tokenMessengerEventAuthority:o,tokenMinter:A,localToken:c,remoteTokenMessengerKey:m,authorityPda:u}}function Ee(s,n,t=[]){let a=[Buffer.from(Z.utils.bytes.utf8.encode(s))];for(let r of t)typeof r=="string"?a.push(Buffer.from(Z.utils.bytes.utf8.encode(r))):Array.isArray(r)?a.push(Buffer.from(r)):Buffer.isBuffer(r)?a.push(r):a.push(r.toBuffer());return L.findProgramAddressSync(a,n)[0]}import{AnchorProvider as Za}from"@project-serum/anchor";import{Connection as La,PublicKey as _a}from"@solana/web3.js";function Me(s,n){let t=new La(s,"confirmed"),a=new _a(n);return new Za(t,{publicKey:a},{preflightCommitment:"confirmed",commitment:"confirmed"})}var se=class{};import{PublicKey as Xa}from"@solana/web3.js";import{Big as Pe}from"big.js";import Hn from"randombytes";import{Address as Ka}from"stellar-sdk";import*as zn from"tronweb";function Se(s,n,t){let a;switch(n){case"EVM":{a=Qa(s);break}case"SOLANA":{a=new Xa(s).toBuffer();break}case"TRX":{a=Ya(s);break}case"SRB":{a=new Ka(s).toBuffer();break}}switch(t){case"EVM":return"0x"+a.toString("hex");case"SOLANA":return Array.from(a);case"TRX":return a.toJSON().data;case"SRB":return a.toJSON().data}}function jn(s){return Buffer.from(s.replace(/^0x/i,""),"hex")}function Qa(s){let t=jn(s);return Buffer.concat([Buffer.alloc(32-t.length,0),t],32)}function Ya(s){let n=nt(s),t=jn(n);return Ja(t,32)}function nt(s){return Buffer.from(zn.utils.crypto.decodeBase58Address(s)).toString("hex").replace(/^41/,"0x")}function Ja(s,n){if(s.length>=n)return s;let t=Buffer.alloc(n,0);return s.copy(t,n-s.length),t}function _e(){return Hn(32)}function ln(){let s=Hn(32).readBigInt64BE();return s<0?s*-1n:s}function ve(s,n){let t={},a=n.sourceToken;return t.amount=B(n.amount,a.decimals).toFixed(),t.contractAddress=a.bridgeAddress,t.fromAccountAddress=n.fromAccountAddress,t.fromTokenAddress=Se(a.tokenAddress,s,s),t.toAccountAddress=n.toAccountAddress,t.toTokenAddress=Se(n.destinationToken.tokenAddress,s,s),t.minimumReceiveAmount=n.minimumReceiveAmount?B(n.minimumReceiveAmount,n.destinationToken.decimals).toFixed():"0",t}async function we(s,n,t){let a={};a.fromChainId=n.sourceToken.allbridgeChainId,a.fromChainSymbol=n.sourceToken.chainSymbol;let i=X[n.destinationToken.chainSymbol].chainType;a.fromTokenAddress=n.sourceToken.tokenAddress,a.toChainId=n.destinationToken.allbridgeChainId,a.toTokenAddress=n.destinationToken.tokenAddress,n.gasFeePaymentMethod==="stablecoin"?a.gasFeePaymentMethod="stablecoin":a.gasFeePaymentMethod="native";let r=n.sourceToken;if(n.messenger===3){if(!r.cctpAddress||!n.destinationToken.cctpAddress)throw new ie("Such route does not support CCTP protocol");a.contractAddress=r.cctpAddress}else a.contractAddress=r.bridgeAddress;a.messenger=n.messenger,a.fromAccountAddress=n.fromAccountAddress,a.amount=B(n.amount,r.decimals).toFixed();let{fee:o,feeFormat:A}=n;if(!o){let l=(await pn(a.fromChainId,n.sourceToken.chainType,a.toChainId,r.decimals,a.messenger,t))[a.gasFeePaymentMethod];if(!l)throw new ze;o=l.int,A="int"}if(A=="float")switch(a.gasFeePaymentMethod){case"native":a.fee=B(o,U[r.chainType]).toFixed(0);break;case"stablecoin":a.fee=B(o,r.decimals).toFixed(0);break}else a.fee=o;let{extraGas:c,extraGasFormat:m}=n;if(c&&+c>0){if(m=="float")switch(a.gasFeePaymentMethod){case"native":a.extraGas=B(c,U[r.chainType]).toFixed(0);break;case"stablecoin":a.extraGas=B(c,r.decimals).toFixed(0);break}else a.extraGas=c;await za(a.extraGas,a.gasFeePaymentMethod,r,n.destinationToken,t)}return a.fromTokenAddress=Se(a.fromTokenAddress,s,s),a.toAccountAddress=Se(n.toAccountAddress,i,s),a.toTokenAddress=Se(a.toTokenAddress,i,s),a.gasFeePaymentMethod=="stablecoin"&&Ha(a.amount,r.decimals,a.fee,a.extraGas),a}function Ha(s,n,t,a){let i=Pe(s).minus(t).minus(a??0);if(i.lte(0))throw new Oe(`Amount not enough to pay fee, ${P(Pe(i).minus(1).neg(),n).toFixed()} stables is missing`)}async function pn(s,n,t,a,i,r){let o=await r.getReceiveTransactionCost({sourceChainId:s,destinationChainId:t,messenger:i}),A={native:{int:o.fee,float:P(o.fee,U[n]).toFixed()}};if(o.sourceNativeTokenPrice){let c=ke(new Pe(o.fee).mul(o.sourceNativeTokenPrice),U[n],a).toFixed(0,Pe.roundUp);A.stablecoin={int:c,float:P(c,a).toFixed()}}return A}async function za(s,n,t,a,i){let o=(await dn(t,a,i)).extraGasMax[n];if(!o)throw new ze(`Impossible to pay extra gas by '${n}' payment method`);let A=o.int;if(Pe(s).gt(A))throw new bt(`Extra gas ${s} in int format, exceeded limit ${A} for '${n}' payment method`)}async function dn(s,n,t){let a={},i=await t.getReceiveTransactionCost({sourceChainId:s.allbridgeChainId,destinationChainId:n.allbridgeChainId,messenger:1}),r=n.txCostAmount.maxAmount,o=P(r,U[n.chainType]).toFixed(),A=Pe(o).div(i.exchangeRate).toFixed(U[s.chainType],Pe.roundDown),c=B(A,U[s.chainType]).toFixed(0);if(a.native={int:c,float:A},i.sourceNativeTokenPrice){let m=Pe(A).mul(i.sourceNativeTokenPrice).toFixed(s.decimals,Pe.roundDown);a.stablecoin={int:B(m,s.decimals).toFixed(0),float:m}}return{extraGasMax:a,destinationChain:{gasAmountMax:{int:r,float:o},swap:{int:n.txCostAmount.swap,float:P(n.txCostAmount.swap,U[n.chainType]).toFixed()},transfer:{int:n.txCostAmount.transfer,float:P(n.txCostAmount.transfer,U[n.chainType]).toFixed()}},exchangeRate:i.exchangeRate,sourceNativeTokenPrice:i.sourceNativeTokenPrice}}function qn(s){return s.sourceToken.chainSymbol!==s.destinationToken.chainSymbol}var at=class extends se{constructor(t,a,i){super();this.web3=t;this.api=a;this.nodeRpcUrlsConfig=i;this.chainType="EVM"}async send(t){let a=await this.buildRawTransactionSend(t);return this.sendRawTransaction(a)}async buildRawTransactionSwap(t){let a=ve(this.chainType,t);return await this.buildRawTransactionSwapFromParams(a)}async buildRawTransactionSwapFromParams(t){let{amount:a,contractAddress:i,fromAccountAddress:r,fromTokenAddress:o,toAccountAddress:A,toTokenAddress:c,minimumReceiveAmount:m}=t,l=this.getBridgeContract(i).methods.swap(a,o,c,A,m);return Promise.resolve({from:r,to:i,data:l.encodeABI()})}async buildRawTransactionSend(t){let a=await we(this.chainType,t,this.api),{amount:i,contractAddress:r,fromAccountAddress:o,fromTokenAddress:A,toChainId:c,toAccountAddress:m,toTokenAddress:u,messenger:l,fee:f,gasFeePaymentMethod:y,extraGas:h}=a,T="0x"+_e().toString("hex"),g,d,S=f;if(h&&(S=ja(S).plus(h).toFixed()),l===3){let b=await this.buildRawTransactionCctpSend(t,a,S);g=b.sendMethod,d=b.value}else{let b=this.getBridgeContract(r);y==="stablecoin"?(g=b.methods.swapAndBridge(A,i,m,c,u,T,l,S),d="0"):(g=b.methods.swapAndBridge(A,i,m,c,u,T,l,0),d=S)}return Promise.resolve({from:o,to:r,value:d,data:g.encodeABI()})}async buildRawTransactionCctpSend(t,a,i){let{amount:r,contractAddress:o,toChainId:A,toAccountAddress:c,gasFeePaymentMethod:m}=a,u=this.getContract(Gn,o),l,f;if(t.destinationToken.chainType==="SOLANA"){let y,h=new $n(t.toAccountAddress),T=new $n(t.destinationToken.tokenAddress),g=await re(h,T),d=Me(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),t.toAccountAddress);It.setProvider(d);let S=await It.Spl.token(d).account.token.fetchNullable(g);if(S?.authority.equals(h))y=Se(g.toBase58(),"SOLANA",this.chainType);else{let b=await d.connection.getTokenAccountsByOwner(h,{mint:T});if(b.value.length===0&&!S)y=Se(g.toBase58(),"SOLANA",this.chainType);else if(b.value.length>0)y=Se(b.value[0].pubkey.toBase58(),"SOLANA",this.chainType);else throw new R("Associated account has wrong owner")}m==="stablecoin"?(l=u.methods.bridgeWithWalletAddress(r,y,c,A,i),f="0"):(l=u.methods.bridgeWithWalletAddress(r,y,c,A,0),f=i)}else m==="stablecoin"?(l=u.methods.bridge(r,c,A,i),f="0"):(l=u.methods.bridge(r,c,A,0),f=i);return{sendMethod:l,value:f}}async sendRawTransaction(t){let a=await this.web3.eth.estimateGas(t),i={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:r}=await this.web3.eth.sendTransaction({...t,gas:a,...i});return{txId:r}}getContract(t,a){return new this.web3.eth.Contract(t,a)}getBridgeContract(t){return this.getContract(Vn,t)}};var xt=class{constructor(n,t,a,i){this.api=n;this.nodeRpcUrlsConfig=t;this.params=a;this.tokenService=i}async approve(n,t){let a,i;t?(a=n,i=t):i=n;let r=it(i.token,i.messenger);return this.tokenService.buildRawTransactionApprove({...i,spender:r},a)}async send(n,t){return M(n.amount),v("amount",n.amount,n.sourceToken.decimals),qn(n)?Dt(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionSend(n):Dt(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,t).buildRawTransactionSwap(n)}};import{BN as Ye,Program as yn,Spl as oi,web3 as Ie}from"@project-serum/anchor";import{Keypair as ua,PublicKey as I,SystemProgram as Ai}from"@solana/web3.js";import{Big as xe}from"big.js";var rt={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 ea={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 qa}from"@project-serum/anchor";import $a from"big.js";import Ft from"web3";async function Ke(s,n){return await qa.token(n).account.token.fetch(s)}async function ta(s,n,t){let a=await n.account.pool.fetch(t),i=a.decimals,r=$a(a.feeShareBp.toString()).div(1e4).toFixed(),o={aValue:a.a.toString(),dValue:a.d.toString(),totalLpAmount:a.totalLpAmount.toString(),tokenBalance:a.tokenBalance.toString(),vUsdBalance:a.vUsdBalance.toString(),accRewardPerShareP:a.accRewardPerShareP.toString()};return ge(s,{decimals:i,feeShare:r},o)}function na(s){let n=s.amount,t="0x"+s.recipient.toString("hex"),a=s.sourceChainId,i=s.destinationChainId,r="0x"+s.receiveToken.toString("hex"),o="0x"+s.nonce.toString("hex"),A=1,c="0x"+s.chainBridge.toString("hex"),m=Ft.utils.encodePacked({t:"uint256",v:n},{t:"bytes32",v:t},{t:"uint256",v:a},{t:"bytes32",v:r},{t:"uint256",v:o},{t:"uint8",v:A});if(!m)throw new R("message cannot be undefined");let u=Ft.utils.keccak256(Buffer.from(m.replace("0x",""),"hex")),l=Buffer.from(u.replace("0x",""),"hex");l[0]=a,l[1]=i;let f=Ft.utils.encodePacked({t:"bytes32",v:"0x"+l.toString("hex")},{t:"bytes32",v:c});if(!f)throw new Ve("messageWithSigner cannot be undefined");let y=Ft.utils.keccak256(Buffer.from(f.replace("0x",""),"hex")),h=Buffer.from(y.replace("0x",""),"hex");return h[0]=l[0],h[1]=l[1],h}import{ComputeBudgetInstruction as ia,ComputeBudgetProgram as Wt,Connection as ra,TransactionMessage as ei}from"@solana/web3.js";import{Big as ti}from"big.js";import{AddressLookupTableAccount as aa}from"@solana/web3.js";async function Ue(s,n){return await Promise.all(s.message.addressTableLookups.map(async t=>new aa({key:t.accountKey,state:aa.deserialize(await n.getAccountInfo(t.accountKey).then(a=>{if(!a)throw new R("Cannot get AccountInfo");return a.data}))})))}var gn="AUTO";async function Qe(s,n,t){let a=new ra(t,"confirmed"),i=(await a.simulateTransaction(s)).value.unitsConsumed;await oa(s.instructions,i,n,a)}async function sa(s,n,t){let a=new ra(t,"confirmed"),i=await Ue(s,a),r=ei.decompile(s.message,{addressLookupTableAccounts:i});if(s.serialize().length>1232)throw new wt;await oa(r.instructions,769230,n,a),s.message=r.compileToV0Message(i)}async function oa(s,n,t,a){if(n>0){let i=ni(n,s);if(t?.solana){let r=t.solana;if(r===gn)await fn(s,a);else if("pricePerUnitInMicroLamports"in r)await fn(s,a,r.pricePerUnitInMicroLamports);else{let o=ti(r.extraFeeInLamports).div(i).mul($e(6)).toFixed(0);await fn(s,a,o)}}}}function ni(s,n){let t=n.findIndex(r=>r.programId.equals(Wt.programId)&&ia.decodeInstructionType(r)==="SetComputeUnitLimit"),a=Number((s*1.3).toFixed(0)),i=Wt.setComputeUnitLimit({units:a});return t>=0?n[t]=i:n.push(i),a.toString()}async function fn(s,n,t){let a=s.findIndex(o=>o.programId.equals(Wt.programId)&&ia.decodeInstructionType(o)==="SetComputeUnitPrice"),i=BigInt(t||await ai(n)),r=Wt.setComputeUnitPrice({microLamports:i});return a>=0?s[a]=r:s.push(r),i.toString()}async function ai(s){let n=await s.getRecentPrioritizationFees(),t=0;for(let a of n)t+=a.prioritizationFee;return(t/n.length).toFixed(0)}import{NATIVE_MINT as ii}from"@solana/spl-token";import{Connection as ri,TransactionMessage as Aa,VersionedTransaction as si}from"@solana/web3.js";import ca,{AxiosError as ma}from"axios";var Et=class{constructor(n){this.connection=new ri(n)}async getJupiterSwapTx(n,t,a){let i;try{i=await ca.get(`https://quote-api.jup.ag/v6/quote?inputMint=${t}
2
2
  &outputMint=${ii.toString()}
3
3
  &amount=${a}
4
4
  &slippageBps=100