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