@avalabs/bridge-unified
Advanced tools
Comparing version 0.0.0-feat-is-bridge-address-20240909115936 to 0.0.0-feat-is-bridge-address-20240926120228
@@ -134,5 +134,9 @@ import { Address } from 'viem'; | ||
}; | ||
type IsBridgeTxParams = { | ||
from: string; | ||
to: string; | ||
}; | ||
type BridgeService = { | ||
type: BridgeType; | ||
isBridgeAddress: (...addresses: string[]) => boolean; | ||
isBridgeTx: (params: IsBridgeTxParams) => boolean; | ||
estimateGas: (params: GasEstimationParams) => Promise<bigint>; | ||
@@ -188,3 +192,3 @@ getAssets: () => ChainAssetMap; | ||
canTransferAsset: (asset: BridgeAsset, targetChainId: string) => boolean; | ||
isBridgeAddress: (...addresses: string[]) => boolean; | ||
isBridgeTx: (params: IsBridgeTxParams) => boolean; | ||
transferAsset: (params: TransferParams) => Promise<BridgeTransfer>; | ||
@@ -209,2 +213,2 @@ trackTransfer: (params: TrackingParams) => { | ||
export { Asset, AssetFeeMap, BridgeAsset, BridgeService, BridgeServiceConfig, BridgeServiceFactory, BridgeServicesMap, BridgeSignatureReason, BridgeStepDetails, BridgeTransfer, BridgeType, Chain, ChainAssetMap, DestinationInfo, Dispatch, Environment, Erc20Asset, ErrorCode, ErrorReason, FeeParams, GasEstimationParams, Hex, NativeAsset, Provider, Signer, TokenType, TrackingParams, TransactionRequest, TransferParams, _default as caip2, createUnifiedBridgeService, getEnabledBridgeServices, isErc20Asset, isNativeAsset }; | ||
export { Asset, AssetFeeMap, BridgeAsset, BridgeService, BridgeServiceConfig, BridgeServiceFactory, BridgeServicesMap, BridgeSignatureReason, BridgeStepDetails, BridgeTransfer, BridgeType, Chain, ChainAssetMap, DestinationInfo, Dispatch, Environment, Erc20Asset, ErrorCode, ErrorReason, FeeParams, GasEstimationParams, Hex, IsBridgeTxParams, NativeAsset, Provider, Signer, TokenType, TrackingParams, TransactionRequest, TransferParams, _default as caip2, createUnifiedBridgeService, getEnabledBridgeServices, isErc20Asset, isNativeAsset }; |
@@ -5,3 +5,3 @@ import { isAddress, custom, http, createWalletClient, publicActions, isHash, encodeFunctionData, isHex, decodeEventLog } from 'viem'; | ||
var Q=(n=>(n.NATIVE="native",n.ERC20="erc20",n))(Q||{}),S=t=>t.type==="erc20",zt=t=>t.type==="native";var _=(n=>(n.CCTP="cctp",n.ICTT_ERC20_ERC20="ictt-erc20-erc20",n))(_||{}),Y=(n=>(n.AllowanceApproval="allowance-approval",n.TokensTransfer="tokens-transfer",n))(Y||{});var ee=(r=>(r.PROD="production",r.STAGING="staging",r.TEST="test",r))(ee||{});var N=(a=>(a[a.BRIDGE_NOT_AVAILABLE=5001]="BRIDGE_NOT_AVAILABLE",a[a.INITIALIZATION_FAILED=5002]="INITIALIZATION_FAILED",a[a.INVALID_PARAMS=5003]="INVALID_PARAMS",a[a.TIMEOUT=5004]="TIMEOUT",a[a.TRANSACTION_REVERTED=5005]="TRANSACTION_REVERTED",a))(N||{}),b=(p=>(p.ENVIRONMENT_NOT_SUPPORTED="ENVIRONMENT_NOT_SUPPORTED",p.UNKNOWN="UNKNOWN",p.CONFIG_NOT_AVAILABLE="CONFIG_NOT_AVAILABLE",p.INVALID_PARAMS="INVALID_PARAMS",p.IDENTICAL_CHAINS_PROVIDED="IDENTICAL_CHAINS_PROVIDED",p.INCORRECT_AMOUNT_PROVIDED="INCORRECT_AMOUNT_PROVIDED",p.INCORRECT_ADDRESS_PROVIDED="INCORRECT_ADDRESS_PROVIDED",p.INCORRECT_TXHASH_PROVIDED="INCORRECT_TXHASH_PROVIDED",p.CHAIN_NOT_SUPPORTED="CHAIN_NOT_SUPPORTED",p.ASSET_NOT_SUPPORTED="ASSET_NOT_SUPPORTED",p.CONFIRMATION_COUNT_UNKNOWN="CONFIRMATION_COUNT_UNKNOWN",p))(b||{});function ye(t){let e=t.map(n=>n.chainId);return t.reduce((n,r)=>(n[r.chainId]=r.tokens.map(i=>({...i,type:"erc20",destinations:e.reduce((a,o)=>(r.chainId!==o&&(a[o]||(a[o]=[]),a[o]?.push("cctp")),a),{})})),n),{})}var it="^[-a-z0-9]{3,8}$",ot="^[-_a-zA-Z0-9]{1,50}$",ce=":",pt=t=>{let[e,n]=t.split(ce);if(!e||!n)throw new Error("Invalid identifier provided.");if(!new RegExp(it).test(e))throw new Error("Invalid namespace provided.");if(!new RegExp(ot).test(n))throw new Error("Invalid reference provided.");return {namespace:e,reference:n}},dt=({namespace:t,reference:e})=>`${t}${ce}${e}`,w={toJSON:pt,toString:dt};var lt=t=>{let{reference:e}=w.toJSON(t.chainId);return {id:Number(e),name:t.chainName,nativeCurrency:{decimals:t.networkToken.decimals,symbol:t.networkToken.symbol,name:t.networkToken.name},network:t.chainName,rpcUrls:{default:{http:[t.rpcUrl]},public:{http:[t.rpcUrl]}},...t.utilityAddresses?.multicall&&{contracts:{multicall3:{address:t.utilityAddresses.multicall}}}}},f=({chain:t,provider:e})=>{let n=lt(t),r=e?custom(e):http(t.rpcUrl,{batch:!0,retryCount:0});return createWalletClient({chain:n,transport:r}).extend(publicActions)};var M=[{inputs:[{internalType:"address",name:"circleTokenMessenger_",type:"address"},{internalType:"address",name:"burnToken_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"AlreadyAdmin",type:"error"},{inputs:[],name:"AlreadyFeeCollector",type:"error"},{inputs:[],name:"AlreadySupportedBurnToken",type:"error"},{inputs:[],name:"AmountLessThanFee",type:"error"},{inputs:[],name:"BalanceNotIncreased",type:"error"},{inputs:[],name:"CannotRemoveLastAdmin",type:"error"},{inputs:[],name:"FeePercentageGreaterThanMax",type:"error"},{inputs:[],name:"InvalidAdminAddress",type:"error"},{inputs:[],name:"InvalidFeeCollector",type:"error"},{inputs:[],name:"InvalidMintRecipientAddress",type:"error"},{inputs:[],name:"InvalidTokenAddress",type:"error"},{inputs:[],name:"InvalidTokenMessengerAddress",type:"error"},{inputs:[],name:"MaxFeeLessThanMinFee",type:"error"},{inputs:[],name:"NotAdmin",type:"error"},{inputs:[],name:"NotFeeCollector",type:"error"},{inputs:[],name:"UnSupportedBurnToken",type:"error"},{inputs:[],name:"UnsupportedDomain",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"admin",type:"address"}],name:"AdminAdded",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"admin",type:"address"}],name:"AdminRemoved",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"BurnTokenAdded",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"BurnTokenRemoved",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"feeCollector",type:"address"}],name:"FeeCollectorAdded",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"feeCollector",type:"address"}],name:"FeeCollectorRemoved",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint32",name:"domain",type:"uint32"},{components:[{internalType:"uint256",name:"maxFee",type:"uint256"},{internalType:"uint256",name:"minFee",type:"uint256"},{internalType:"uint32",name:"feePercentage",type:"uint32"},{internalType:"uint256",name:"txnFee",type:"uint256"},{internalType:"bool",name:"supported",type:"bool"}],indexed:!1,internalType:"struct FeeCalculator.FeeConfiguration",name:"feeConfiguration",type:"tuple"}],name:"FeeConfigurationUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Paused",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint64",name:"nonce",type:"uint64"},{indexed:!1,internalType:"address",name:"burnToken",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"depositor",type:"address"},{indexed:!1,internalType:"address",name:"mintRecipient",type:"address"},{indexed:!1,internalType:"uint32",name:"destinationDomain",type:"uint32"},{indexed:!1,internalType:"uint256",name:"totalFee",type:"uint256"}],name:"TransferTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Unpaused",type:"event"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"addAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"feeCollector",type:"address"}],name:"addFeeCollector",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"addSupportedBurnToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint32",name:"destinationDomain",type:"uint32"}],name:"calculateFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"circleTokenMessenger",outputs:[{internalType:"contract ICircleTokenMessenger",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"circleTokenMessengerAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"collectFees",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"getFeeAmounts",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getFeeConfiguration",outputs:[{components:[{internalType:"uint256",name:"maxFee",type:"uint256"},{internalType:"uint256",name:"minFee",type:"uint256"},{internalType:"uint32",name:"feePercentage",type:"uint32"},{internalType:"uint256",name:"txnFee",type:"uint256"},{internalType:"bool",name:"supported",type:"bool"}],internalType:"struct FeeCalculator.FeeConfiguration",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getFeePercentage",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getMaxFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getMinFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getTxnFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"isAdmin",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"isFeeCollector",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"isSupportedBurnToken",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"isSupportedDomain",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"paused",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"removeAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"feeCollector",type:"address"}],name:"removeFeeCollector",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"removeSupportedBurnToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"},{components:[{internalType:"uint256",name:"maxFee",type:"uint256"},{internalType:"uint256",name:"minFee",type:"uint256"},{internalType:"uint32",name:"feePercentage",type:"uint32"},{internalType:"uint256",name:"txnFee",type:"uint256"},{internalType:"bool",name:"supported",type:"bool"}],internalType:"struct FeeCalculator.FeeConfiguration",name:"feeConfiguration",type:"tuple"}],name:"setFeeConfiguration",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"supportedBurnTokens",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint32",name:"destinationDomain",type:"uint32"},{internalType:"address",name:"mintRecipient",type:"address"},{internalType:"address",name:"burnToken",type:"address"}],name:"transferTokens",outputs:[{internalType:"uint64",name:"nonce",type:"uint64"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"}];var D=class extends Error{constructor(n,r,i){super(n);this.code=r;this.details=i;}};var B=class extends D{constructor(e="UNKNOWN",n){super(e,5001,n),this.name="BridgeUnavailableError";}};var L=class extends D{constructor(e="UNKNOWN",n){super(e,5002,n),this.name="BridgeInitializationError";}};var c=class extends D{constructor(e="INVALID_PARAMS",n){super(e,5003,n),this.name="InvalidParamsError";}};var I=({sourceChain:t,targetChain:e,amount:n,asset:r},i)=>{if(t.chainId===e.chainId)throw new c("IDENTICAL_CHAINS_PROVIDED");if(n<=0n)throw new c("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let a=i.find(s=>s.chainId===t.chainId);if(!a)throw new c("CHAIN_NOT_SUPPORTED",`Not supported on source chain "${t.chainId}"`);let o=i.find(s=>s.chainId===e.chainId);if(!o)throw new c("CHAIN_NOT_SUPPORTED",`Not supported on target chain "${e.chainId}"`);let d=a.tokens.find(s=>s.symbol===r.symbol),u=o.tokens.find(s=>s.symbol===r.symbol);if(!d||!u)throw new c("ASSET_NOT_SUPPORTED");return {sourceChainData:a,targetChainData:o,burnToken:d,mintToken:u}};async function F(t,e){let{sourceChain:n,targetChain:r,asset:i,amount:a,provider:o}=e,{sourceChainData:d,targetChainData:u,burnToken:s}=I({sourceChain:n,targetChain:r,asset:i,amount:a},t),p=await f({chain:n,provider:o}).readContract({address:d.tokenRouterAddress,abi:M,functionName:"calculateFee",args:[a,u.domain]});return {[s.address]:p}}var h=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];function Te({amount:t,burnToken:e,targetChainData:n,toAddress:r}){return encodeFunctionData({abi:M,functionName:"transferTokens",args:[t,n.domain,r,e.address]})}function fe({amount:t,sourceChainData:e}){return encodeFunctionData({abi:h,functionName:"approve",args:[e.tokenRouterAddress,t]})}var Tt=async(t,e)=>{let{sourceChain:n,targetChain:r,asset:i,amount:a,fromAddress:o,toAddress:d,sourceProvider:u,onStepChange:s,sign:m}=e,{sourceChainData:p,targetChainData:y,burnToken:T}=I({sourceChain:n,targetChain:r,asset:i,amount:a},t),l=f({chain:n,provider:u}),A=await l.readContract({address:T.address,abi:h,functionName:"allowance",args:[o,p.tokenRouterAddress]})<a,v=A?2:1;if(A){s?.({currentSignature:1,currentSignatureReason:"allowance-approval",requiredSignatures:v});let P=fe({amount:a,sourceChainData:p}),Z=await m({from:o,to:T.address,data:P},st=>l.sendRawTransaction({serializedTransaction:st}));await l.waitForTransactionReceipt({hash:Z,pollingInterval:1e3});}s?.({currentSignature:A?2:1,currentSignatureReason:"tokens-transfer",requiredSignatures:v});let k=Te({amount:a,burnToken:T,targetChainData:y,toAddress:d});return m({from:o,to:p.tokenRouterAddress,data:k},P=>l.sendRawTransaction({serializedTransaction:P}))},ft=async t=>{try{return await t.getBlockNumber()}catch{return}};async function ge(t,e,n){let{minimumConfirmations:r}=t.find(p=>p.chainId===e.sourceChain.chainId)??{},{minimumConfirmations:i}=t.find(p=>p.chainId===e.targetChain.chainId)??{};if(!r||!i)throw new c("CONFIRMATION_COUNT_UNKNOWN");let a=await F(t,{...e,provider:e.sourceProvider}),o=S(e.asset)?a[e.asset.address]??0n:0n,d=await Tt(t,e),u=Date.now(),s=f({chain:e.targetChain,provider:e.targetProvider}),m=await ft(s);return {type:"cctp",environment:n,fromAddress:e.fromAddress,toAddress:e.toAddress??e.fromAddress,amount:e.amount,asset:e.asset,bridgeFee:o,sourceChain:e.sourceChain,sourceStartedAt:u,sourceTxHash:d,sourceConfirmationCount:0,sourceRequiredConfirmationCount:r,targetChain:e.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:i,targetStartBlockNumber:m}}var te=async t=>new Promise(e=>{setTimeout(e,t);});var O=({promise:t,delay:e,startAfter:n})=>{let r=!1,i=!1,a=0,o,d,u=p=>{o&&r&&(r=!1,o(p));},s=()=>{i=!0,d&&r&&(r=!1,d("cancelled"));};return {result:new Promise((p,y)=>{r=!0,o=p,d=y;let T=async()=>{if(!(!r||i)){try{if(await t(u),!r||i)return;await te(e);}catch(l){console.error(l.message),a+=1,await te(2**a*e);}await T();}};n?setTimeout(T,n):T();}),cancel:s}};var q=(n=>(n[n.Ethereum=0]="Ethereum",n[n.Avalanche=1]="Avalanche",n))(q||{});var ne=z$1.string().refine(t=>isAddress(t),t=>({message:`Invalid EVM address '${t}'`})).transform(t=>t),At=z$1.object({address:ne,name:z$1.string(),symbol:z$1.string(),decimals:z$1.number().positive()}),Ct=z$1.coerce.string().transform((t,e)=>{let n=t.startsWith("eip155:")?t:`eip155:${t}`;try{let r=w.toJSON(n);return w.toString(r)}catch{return e.addIssue({code:z$1.ZodIssueCode.custom,message:"Invalid chain id, neither numeric nor caip2 compliant"}),z$1.NEVER}}),bt=z$1.object({chainId:Ct,domain:z$1.nativeEnum(q),tokenRouterAddress:ne,messageTransmitterAddress:ne,tokens:z$1.array(At),minimumConfirmations:z$1.number().positive()}),Ae=z$1.array(bt);var Et=t=>t==="production"||t==="test",kt={test:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/cctp/cctp_config.test.json",production:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/cctp/cctp_config.json"},Ce=async t=>{if(!Et(t))throw new L("ENVIRONMENT_NOT_SUPPORTED",`CCTP does not support ${t} environment`);try{let n=await(await fetch(kt[t])).json();return Ae.parse(n)}catch(e){throw new L("CONFIG_NOT_AVAILABLE",`Error while fetching CCTP config: ${e.message}`)}},re=t=>{switch(t){case"eip155:43114":case"eip155:43113":return 1e3;default:return 2e4}};var C=(t,e,n)=>{Object.assign(t,Object.fromEntries(Object.entries(e).filter(([,r])=>r!==void 0))),n({...t});};var ht=1024n;var x={trackingLimitMs:108e5,maxBlocks:ht,initialDelayMs:5e3};var W=(t,e)=>t.gasPrice&&BigInt(t.gasPrice*e.gasUsed);var U=({targetClient:t,sourceClient:e,getMetadata:n,checkMetadata:r,trackingParams:{bridgeTransfer:i,updateListener:a},trackingConfig:{trackingLimitMs:o}})=>async u=>{let s={...i};if(s.completedAt||r(s.metadata))return u(s);if(s.sourceStartedAt+o<=Date.now())return C(s,{completedAt:Date.now(),errorCode:5004},a),u(s);let m=await e.getTransactionReceipt({hash:s.sourceTxHash});if(!s.sourceNetworkFee){let g=await e.getTransaction({hash:s.sourceTxHash}),A=W(g,m);A&&C(s,{sourceNetworkFee:A},a);}if(m.status==="reverted")return C(s,{completedAt:Date.now(),errorCode:5005},a),u(s);let p=await e.getTransactionConfirmations({hash:s.sourceTxHash}),y=p>s.sourceConfirmationCount,T=p>=s.sourceRequiredConfirmationCount;if(y){let g={};g.sourceConfirmationCount=Number(p),T||(g.targetStartBlockNumber=await t.getBlockNumber()),C(s,g,a);}if(!T)return;s.targetStartBlockNumber||C(s,{targetStartBlockNumber:await t.getBlockNumber()},a);let l=n(m);return C(s,{targetStartedAt:Date.now(),metadata:l},a),u(s)};var V=({targetClient:t,getTargetTxHash:e,checkMetadata:n,trackingParams:{bridgeTransfer:r,updateListener:i},trackingConfig:{trackingLimitMs:a,maxBlocks:o}})=>{if(!r.completedAt&&!n(r.metadata))throw new c("INVALID_PARAMS","metadata is missing");if(!r.targetStartBlockNumber)throw new c("INVALID_PARAMS","targetStartBlockNumber is missing");return async u=>{let s={...r};if(s.completedAt)return u(s);if(s.sourceStartedAt+a<=Date.now())return C(s,{completedAt:Date.now(),errorCode:5004},i),u(s);if(!s.targetStartBlockNumber)throw new Error("unreachable");if(!s.targetTxHash){let l=await t.getBlockNumber(),g=s.targetStartBlockNumber-o,A=g>=0n?g:"earliest",v=s.targetStartBlockNumber+o,k=v<l?v:"latest",P=await e({fromBlock:A,toBlock:k,metadata:s.metadata});if(P)C(s,{targetTxHash:P},i);else {C(s,{targetStartBlockNumber:l},i);return}}if(isNil(s.targetTxHash))return;let m=await t.getTransactionReceipt({hash:s.targetTxHash});if(!s.targetNetworkFee){let l=await t.getTransaction({hash:s.targetTxHash}),g=W(l,m);g&&C(s,{targetNetworkFee:g},i);}if(m.status==="reverted")return C(s,{completedAt:Date.now(),errorCode:5005},i),u(s);let p=await t.getTransactionConfirmations({hash:s.targetTxHash}),y=p>s.targetConfirmationCount,T=p>=s.targetRequiredConfirmationCount;if(y&&C(s,{targetConfirmationCount:Number(p)},i),!!T)return C(s,{completedAt:Date.now()},i),u(s)}};var ae=t=>{let{fromAddress:e,toAddress:n}=t,r=n??e;if(!isAddress(e)||!isAddress(r))throw new c("INCORRECT_ADDRESS_PROVIDED");return {fromAddress:e,toAddress:r}};var X=({fromAddress:t,toAddress:e,...n})=>{let{fromAddress:r,toAddress:i}=ae({fromAddress:t,toAddress:e});return {fromAddress:r,toAddress:i,...n}},J=({sourceTxHash:t,targetTxHash:e,toAddress:n,fromAddress:r,...i})=>{let{fromAddress:a,toAddress:o}=ae({fromAddress:r,toAddress:n});if(!isHash(t)||!isNil(e)&&!isHash(e))throw new c("INCORRECT_TXHASH_PROVIDED");return {sourceTxHash:t,targetTxHash:e,fromAddress:a,toAddress:o,...i}};var se=t=>isObject(t)&&typeof t.nonce=="bigint",he=({sourceChainData:t})=>n=>{let r=n.logs.find(o=>o.address.toLowerCase()===t.tokenRouterAddress.toLowerCase()?decodeEventLog({abi:M,...o}).eventName==="TransferTokens":!1);if(!r)throw new c("INVALID_PARAMS",`unable to find a TransferTokens event in source transaction "${n.transactionHash}"`);return {nonce:decodeEventLog({abi:M,eventName:"TransferTokens",...r}).args.nonce}},Rt={name:"MessageReceived",type:"event",inputs:[{indexed:!0,internalType:"address",name:"caller",type:"address"},{indexed:!1,internalType:"uint32",name:"sourceDomain",type:"uint32"},{indexed:!0,internalType:"uint64",name:"nonce",type:"uint64"},{indexed:!1,internalType:"bytes32",name:"sender",type:"bytes32"},{indexed:!1,internalType:"bytes",name:"messageBody",type:"bytes"}]},ve=({targetClient:t,transferData:{targetChainData:e}})=>async({fromBlock:r,toBlock:i,metadata:a})=>(await t.getLogs({address:e.messageTransmitterAddress,event:Rt,args:{nonce:a?.nonce},fromBlock:r,toBlock:i}))[0]?.transactionHash;var Pt=async(t,e)=>{let{sourceProvider:n,targetProvider:r,bridgeTransfer:i}=e,{asset:a,amount:o,sourceChain:d,targetChain:u}=i,s=I({sourceChain:d,targetChain:u,asset:a,amount:o},t),{sourceChainData:m}=s,p=f({chain:d,provider:n}),y=f({chain:u,provider:r}),T=he(s),l=U({sourceClient:p,targetClient:y,getMetadata:T,checkMetadata:se,trackingParams:e,trackingConfig:x});return O({promise:l,delay:re(m.chainId),startAfter:x.initialDelayMs})},_t=async(t,e)=>{let{targetProvider:n,bridgeTransfer:r}=e,{asset:i,amount:a,sourceChain:o,targetChain:d}=r,u=f({chain:d,provider:n}),s=I({sourceChain:o,targetChain:d,asset:i,amount:a},t),m=ve({targetClient:u,transferData:s}),p=V({targetClient:u,getTargetTxHash:m,checkMetadata:se,trackingParams:e,trackingConfig:x});return O({promise:p,delay:re(s.targetChainData.chainId),startAfter:x.initialDelayMs})};function Ie(t,e){let n=J(e.bridgeTransfer),r,i=()=>{r?.();};return {result:(async()=>{let{sourceProvider:o,targetProvider:d,updateListener:u}=e,{result:s,cancel:m}=await Pt(t,{sourceProvider:o,targetProvider:d,updateListener:u,bridgeTransfer:n});r=m;let p=await s,{result:y,cancel:T}=await _t(t,{sourceProvider:o,targetProvider:d,updateListener:u,bridgeTransfer:p});return r=T,y})(),cancel:i}}var Dt=60000n,Re=175000n,wt=60000n,Pe=215000n;async function _e(t,e){let{sourceChain:n,targetChain:r,asset:i,amount:a,fromAddress:o,toAddress:d,sourceProvider:u}=e,s=d??o;if(!isAddress(o)||!isAddress(s))throw new c("INCORRECT_ADDRESS_PROVIDED");let{sourceChainData:m,burnToken:p}=I({sourceChain:n,targetChain:r,asset:i,amount:a},t),T=await f({chain:n,provider:u}).readContract({address:p.address,abi:h,functionName:"allowance",args:[o,m.tokenRouterAddress]}),l=m.domain===1;return T>=a?l?Pe:Re:l?wt+Pe:Dt+Re}async function De(t,e){let{sourceChain:n,targetChain:r,asset:i,amount:a}=e,{burnToken:o}=I({sourceChain:n,targetChain:r,asset:i,amount:a},t);return (await F(t,e))[o.address]??1n}function we(t,e){let n=e.map(r=>r.toLowerCase());return t.some(r=>n.includes(r.tokenRouterAddress.toLowerCase()))}var Me=async t=>{let e=await Ce(t);return {type:"cctp",isBridgeAddress:(...n)=>we(e,n),estimateGas:n=>_e(e,n),getAssets:()=>ye(e),getFees:n=>F(e,n),transferAsset:n=>ge(e,X(n),t),trackTransfer:n=>Ie(e,n),getMinimumTransferAmount:n=>De(e,n)}};var Mt=({sourceChain:t,targetChain:e,asset:n},r)=>{let i=r.find(d=>d.homeChain.chainId===t.chainId),a=i?.erc20Bridges.find(d=>d.baseToken.address===n.address),o=a?.remotes.find(d=>d.remoteChain.chainId===e.chainId);return {chainBridgeConfig:i,tokenHomeConfig:a,tokenRemoteConfig:o}},St=({sourceChain:t,targetChain:e,asset:n},r)=>{let i=r.find(d=>d.homeChain.chainId===e.chainId),a=i?.erc20Bridges.find(d=>d.remotes.find(u=>u.tokenRemoteAddress===n.address&&u.remoteChain.chainId===t.chainId)),o=a?.remotes.find(d=>d.tokenRemoteAddress===n.address&&d.remoteChain.chainId===t.chainId);return {chainBridgeConfig:i,tokenHomeConfig:a,tokenRemoteConfig:o}},R=({sourceChain:t,targetChain:e,amount:n,asset:r},i)=>{if(t.chainId===e.chainId)throw new c("IDENTICAL_CHAINS_PROVIDED");if(n<=0n)throw new c("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");if(!S(r))throw new c("ASSET_NOT_SUPPORTED","Only ERC20 assets supported");let a=Mt({sourceChain:t,targetChain:e,asset:r},i),o=St({sourceChain:t,targetChain:e,asset:r},i);if(a.chainBridgeConfig&&a.tokenHomeConfig&&a.tokenRemoteConfig){let{chainBridgeConfig:d,tokenHomeConfig:u,tokenRemoteConfig:s}=a;return {homeToRemote:!0,chainBridgeConfig:d,tokenHomeConfig:u,tokenRemoteConfig:s}}if(o.chainBridgeConfig&&o.tokenHomeConfig&&o.tokenRemoteConfig){let{chainBridgeConfig:d,tokenHomeConfig:u,tokenRemoteConfig:s}=o;return {homeToRemote:!1,chainBridgeConfig:d,tokenHomeConfig:u,tokenRemoteConfig:s}}throw new c("ASSET_NOT_SUPPORTED","No Home->Remote or Remote->Home route exists for this asset")};var Nt=60000n,Se=215000n,Ne=async(t,e)=>{let{sourceChain:n,targetChain:r,asset:i,amount:a,sourceProvider:o,fromAddress:d}=e,{tokenHomeConfig:u,homeToRemote:s,tokenRemoteConfig:m}=R({sourceChain:n,targetChain:r,asset:i,amount:a},t);return await f({chain:n,provider:o}).readContract({address:s?u.baseToken.address:m.tokenRemoteAddress,abi:h,functionName:"allowance",args:[d,s?u.tokenHomeAddress:m.tokenRemoteAddress]})>=a?Se:Nt+Se};var Be=t=>{let e=t.reduce((r,i)=>(r[i.homeChain.chainId]=i.erc20Bridges.map(a=>({...a.baseToken,destinations:a.remotes.reduce((o,d)=>(o[d.remoteChain.chainId]=["ictt-erc20-erc20"],o),{})})),r),{}),n=t.reduce((r,i)=>{for(let a of i.erc20Bridges)for(let o of a.remotes){let d=r[o.remoteChain.chainId]??[];r[o.remoteChain.chainId]=[...d,{...a.baseToken,address:o.tokenRemoteAddress,destinations:{[i.homeChain.chainId]:["ictt-erc20-erc20"]}}];}return r},{});return {...e,...n}};async function $(t,e){return R(e,t),{}}var G=[{type:"constructor",inputs:[{name:"teleporterRegistryAddress",type:"address",internalType:"address"},{name:"teleporterManager",type:"address",internalType:"address"},{name:"tokenAddress_",type:"address",internalType:"address"},{name:"tokenDecimals_",type:"uint8",internalType:"uint8"}],stateMutability:"nonpayable"},{type:"function",name:"addCollateral",inputs:[{name:"remoteBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"remoteTokenTransferrerAddress",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"blockchainID",inputs:[],outputs:[{name:"",type:"bytes32",internalType:"bytes32"}],stateMutability:"view"},{type:"function",name:"getMinTeleporterVersion",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"isTeleporterAddressPaused",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"owner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"pauseTeleporterAddress",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"receiveTeleporterMessage",inputs:[{name:"sourceBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"originSenderAddress",type:"address",internalType:"address"},{name:"message",type:"bytes",internalType:"bytes"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"registeredRemotes",inputs:[{name:"remoteBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"remoteTokenTransferrerAddress",type:"address",internalType:"address"}],outputs:[{name:"registered",type:"bool",internalType:"bool"},{name:"collateralNeeded",type:"uint256",internalType:"uint256"},{name:"tokenMultiplier",type:"uint256",internalType:"uint256"},{name:"multiplyOnRemote",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"renounceOwnership",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"send",inputs:[{name:"input",type:"tuple",internalType:"struct SendTokensInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"}]},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"sendAndCall",inputs:[{name:"input",type:"tuple",internalType:"struct SendAndCallInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipientContract",type:"address",internalType:"address"},{name:"recipientPayload",type:"bytes",internalType:"bytes"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"recipientGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"},{name:"fallbackRecipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"}]},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"teleporterRegistry",inputs:[],outputs:[{name:"",type:"address",internalType:"contract TeleporterRegistry"}],stateMutability:"view"},{type:"function",name:"token",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IERC20"}],stateMutability:"view"},{type:"function",name:"tokenAddress",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"tokenDecimals",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"transferOwnership",inputs:[{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"transferredBalances",inputs:[{name:"remoteBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"remoteTokenTransferrerAddress",type:"address",internalType:"address"}],outputs:[{name:"balance",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"unpauseTeleporterAddress",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"updateMinTeleporterVersion",inputs:[{name:"version",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"event",name:"CallFailed",inputs:[{name:"recipientContract",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"CallSucceeded",inputs:[{name:"recipientContract",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"CollateralAdded",inputs:[{name:"remoteBlockchainID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"remoteTokenTransferrerAddress",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"},{name:"remaining",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"MinTeleporterVersionUpdated",inputs:[{name:"oldMinTeleporterVersion",type:"uint256",indexed:!0,internalType:"uint256"},{name:"newMinTeleporterVersion",type:"uint256",indexed:!0,internalType:"uint256"}],anonymous:!1},{type:"event",name:"OwnershipTransferred",inputs:[{name:"previousOwner",type:"address",indexed:!0,internalType:"address"},{name:"newOwner",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"RemoteRegistered",inputs:[{name:"remoteBlockchainID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"remoteTokenTransferrerAddress",type:"address",indexed:!0,internalType:"address"},{name:"initialCollateralNeeded",type:"uint256",indexed:!1,internalType:"uint256"},{name:"tokenDecimals",type:"uint8",indexed:!1,internalType:"uint8"}],anonymous:!1},{type:"event",name:"TeleporterAddressPaused",inputs:[{name:"teleporterAddress",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"TeleporterAddressUnpaused",inputs:[{name:"teleporterAddress",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"TokensAndCallRouted",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendAndCallInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipientContract",type:"address",internalType:"address"},{name:"recipientPayload",type:"bytes",internalType:"bytes"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"recipientGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"},{name:"fallbackRecipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensAndCallSent",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"sender",type:"address",indexed:!0,internalType:"address"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendAndCallInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipientContract",type:"address",internalType:"address"},{name:"recipientPayload",type:"bytes",internalType:"bytes"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"recipientGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"},{name:"fallbackRecipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensRouted",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendTokensInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensSent",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"sender",type:"address",indexed:!0,internalType:"address"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendTokensInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensWithdrawn",inputs:[{name:"recipient",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1}];var ie="0x0000000000000000000000000000000000000000",oe="0x253b2784c75e510dD0fF1da844684a1aC0aa5fcf";var K=[{type:"constructor",inputs:[{name:"settings",type:"tuple",internalType:"struct TokenRemoteSettings",components:[{name:"teleporterRegistryAddress",type:"address",internalType:"address"},{name:"teleporterManager",type:"address",internalType:"address"},{name:"tokenHomeBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"tokenHomeAddress",type:"address",internalType:"address"},{name:"tokenHomeDecimals",type:"uint8",internalType:"uint8"}]},{name:"tokenName",type:"string",internalType:"string"},{name:"tokenSymbol",type:"string",internalType:"string"},{name:"tokenDecimals_",type:"uint8",internalType:"uint8"}],stateMutability:"nonpayable"},{type:"function",name:"MULTI_HOP_CALL_GAS_PER_WORD",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MULTI_HOP_CALL_REQUIRED_GAS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MULTI_HOP_SEND_REQUIRED_GAS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"REGISTER_REMOTE_REQUIRED_GAS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"allowance",inputs:[{name:"owner",type:"address",internalType:"address"},{name:"spender",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"approve",inputs:[{name:"spender",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"nonpayable"},{type:"function",name:"balanceOf",inputs:[{name:"account",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"blockchainID",inputs:[],outputs:[{name:"",type:"bytes32",internalType:"bytes32"}],stateMutability:"view"},{type:"function",name:"calculateNumWords",inputs:[{name:"payloadSize",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"pure"},{type:"function",name:"decimals",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"decreaseAllowance",inputs:[{name:"spender",type:"address",internalType:"address"},{name:"subtractedValue",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"nonpayable"},{type:"function",name:"getMinTeleporterVersion",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"homeTokenDecimals",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"increaseAllowance",inputs:[{name:"spender",type:"address",internalType:"address"},{name:"addedValue",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"nonpayable"},{type:"function",name:"initialReserveImbalance",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"isCollateralized",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"isRegistered",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"isTeleporterAddressPaused",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"multiplyOnRemote",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"name",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"owner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"pauseTeleporterAddress",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"receiveTeleporterMessage",inputs:[{name:"sourceBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"originSenderAddress",type:"address",internalType:"address"},{name:"message",type:"bytes",internalType:"bytes"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"registerWithHome",inputs:[{name:"feeInfo",type:"tuple",internalType:"struct TeleporterFeeInfo",components:[{name:"feeTokenAddress",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}]}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"renounceOwnership",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"send",inputs:[{name:"input",type:"tuple",internalType:"struct SendTokensInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"}]},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"sendAndCall",inputs:[{name:"input",type:"tuple",internalType:"struct SendAndCallInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipientContract",type:"address",internalType:"address"},{name:"recipientPayload",type:"bytes",internalType:"bytes"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"recipientGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"},{name:"fallbackRecipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"}]},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"symbol",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"teleporterRegistry",inputs:[],outputs:[{name:"",type:"address",internalType:"contract TeleporterRegistry"}],stateMutability:"view"},{type:"function",name:"tokenDecimals",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"tokenHomeAddress",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"tokenHomeBlockchainID",inputs:[],outputs:[{name:"",type:"bytes32",internalType:"bytes32"}],stateMutability:"view"},{type:"function",name:"tokenMultiplier",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"totalSupply",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"transfer",inputs:[{name:"to",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"nonpayable"},{type:"function",name:"transferFrom",inputs:[{name:"from",type:"address",internalType:"address"},{name:"to",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"nonpayable"},{type:"function",name:"transferOwnership",inputs:[{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"unpauseTeleporterAddress",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"updateMinTeleporterVersion",inputs:[{name:"version",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"event",name:"Approval",inputs:[{name:"owner",type:"address",indexed:!0,internalType:"address"},{name:"spender",type:"address",indexed:!0,internalType:"address"},{name:"value",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"CallFailed",inputs:[{name:"recipientContract",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"CallSucceeded",inputs:[{name:"recipientContract",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"MinTeleporterVersionUpdated",inputs:[{name:"oldMinTeleporterVersion",type:"uint256",indexed:!0,internalType:"uint256"},{name:"newMinTeleporterVersion",type:"uint256",indexed:!0,internalType:"uint256"}],anonymous:!1},{type:"event",name:"OwnershipTransferred",inputs:[{name:"previousOwner",type:"address",indexed:!0,internalType:"address"},{name:"newOwner",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"TeleporterAddressPaused",inputs:[{name:"teleporterAddress",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"TeleporterAddressUnpaused",inputs:[{name:"teleporterAddress",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"TokensAndCallSent",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"sender",type:"address",indexed:!0,internalType:"address"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendAndCallInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipientContract",type:"address",internalType:"address"},{name:"recipientPayload",type:"bytes",internalType:"bytes"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"recipientGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"},{name:"fallbackRecipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensSent",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"sender",type:"address",indexed:!0,internalType:"address"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendTokensInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensWithdrawn",inputs:[{name:"recipient",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"Transfer",inputs:[{name:"from",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"},{name:"value",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1}];var Bt=85000n,Oe=({homeToRemote:t,amount:e,destinationBlockchainID:n,destinationTokenTransferrerAddress:r,recipient:i})=>encodeFunctionData({abi:t?G:K,functionName:"send",args:[{destinationBlockchainID:n,destinationTokenTransferrerAddress:r,recipient:i,primaryFeeTokenAddress:ie,primaryFee:0n,secondaryFee:0n,requiredGasLimit:Bt,multiHopFallback:ie},e]});function He({amount:t,address:e}){return encodeFunctionData({abi:h,functionName:"approve",args:[e,t]})}var Ft=async({params:{onStepChange:t,amount:e,fromAddress:n,sign:r,sourceChain:i,toAddress:a,sourceProvider:o},transferData:d,isAllowanceApprovalRequired:u,requiredSignatures:s})=>{let{tokenRemoteConfig:m,tokenHomeConfig:p,homeToRemote:y,chainBridgeConfig:T}=d,l=f({chain:i,provider:o});if(u){t?.({currentSignature:1,currentSignatureReason:"allowance-approval",requiredSignatures:s});let k=He({amount:e,address:y?p.tokenHomeAddress:m.tokenRemoteAddress}),P=await r({from:n,to:y?d.tokenHomeConfig.baseToken.address:m.tokenRemoteAddress,data:k},Z=>l.sendRawTransaction({serializedTransaction:Z}));await l.waitForTransactionReceipt({hash:P,pollingInterval:1e3});}t?.({currentSignature:u?2:1,currentSignatureReason:"tokens-transfer",requiredSignatures:s});let g=y?m.remoteChain.blockchainId:T.homeChain.blockchainId,A=y?m.tokenRemoteAddress:p.tokenHomeAddress,v=Oe({amount:e,recipient:a,destinationBlockchainID:g,destinationTokenTransferrerAddress:A,homeToRemote:y});return r({from:n,to:y?p.tokenHomeAddress:m.tokenRemoteAddress,data:v},k=>l.sendRawTransaction({serializedTransaction:k}))},Ot=async({params:t,transferData:e})=>{let{sourceChain:n,fromAddress:r,amount:i}=t,a=f({chain:n,provider:t.sourceProvider}),{homeToRemote:o,tokenHomeConfig:d,tokenRemoteConfig:u}=e,m=await a.readContract({address:o?d.baseToken.address:u.tokenRemoteAddress,abi:h,functionName:"allowance",args:[r,o?d.tokenHomeAddress:u.tokenRemoteAddress]})<i;return Ft({params:t,transferData:e,isAllowanceApprovalRequired:m,requiredSignatures:m?2:1})},Ht=async(t,e)=>{let{sourceChain:n,targetChain:r,asset:i,amount:a}=e,o=R({sourceChain:n,targetChain:r,asset:i,amount:a},t);return Ot({params:e,transferData:o})},Lt=async t=>{try{return await t.getBlockNumber()}catch{return}};async function Le(t,e,n){let r=await $(t,{...e,provider:e.sourceProvider}),i=S(e.asset)?r[e.asset.address]??0n:0n,a=await Ht(t,e),o=Date.now(),d=f({chain:e.targetChain}),u=await Lt(d);return {type:"ictt-erc20-erc20",environment:n,fromAddress:e.fromAddress,toAddress:e.toAddress,amount:e.amount,asset:e.asset,bridgeFee:i,sourceChain:e.sourceChain,sourceStartedAt:o,sourceTxHash:a,sourceConfirmationCount:0,sourceRequiredConfirmationCount:1,targetChain:e.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:u}}var Ve=({transferData:{homeToRemote:t,tokenHomeConfig:e,tokenRemoteConfig:n}})=>r=>{let i=t?e.tokenHomeAddress:n.tokenRemoteAddress,a=t?G:K,o="TokensSent",d=r.logs.find(m=>m.address.toLowerCase()===i.toLowerCase()?decodeEventLog({abi:a,...m}).eventName===o:!1);if(!d)throw new c("INVALID_PARAMS",`unable to find a TokensSent event in source transaction "${r.transactionHash}"`);return {teleporterMessageID:decodeEventLog({abi:a,eventName:o,...d}).args.teleporterMessageID}},Gt={name:"ReceiveCrossChainMessage",type:"event",inputs:[{name:"messageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"sourceBlockchainID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"deliverer",type:"address",indexed:!0,internalType:"address"},{name:"rewardRedeemer",type:"address",indexed:!1,internalType:"address"},{name:"message",type:"tuple",indexed:!1,internalType:"struct TeleporterMessage",components:[{name:"messageNonce",type:"uint256",internalType:"uint256"},{name:"originSenderAddress",type:"address",internalType:"address"},{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationAddress",type:"address",internalType:"address"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"allowedRelayerAddresses",type:"address[]",internalType:"address[]"},{name:"receipts",type:"tuple[]",internalType:"struct TeleporterMessageReceipt[]",components:[{name:"receivedMessageNonce",type:"uint256",internalType:"uint256"},{name:"relayerRewardAddress",type:"address",internalType:"address"}]},{name:"message",type:"bytes",internalType:"bytes"}]}]},Ge=({toAddress:t,transferData:{tokenHomeConfig:e,homeToRemote:n,tokenRemoteConfig:r},targetClient:i})=>async({fromBlock:a,toBlock:o,metadata:d})=>{if(!z(d))throw new c("INVALID_PARAMS");let s=(await i.getLogs({address:e.teleporterAddress,event:Gt,args:{messageID:d.teleporterMessageID},fromBlock:a,toBlock:o})).at(-1);if(isNil(s))return;let m=s.transactionHash,p=await i.getTransactionReceipt({hash:m}),y=n?K:G,T=n?r.tokenRemoteAddress:e.tokenHomeAddress,l=p.logs.find(A=>A.address.toLowerCase()===T.toLowerCase()?decodeEventLog({abi:y,...A}).eventName==="TokensWithdrawn":!1);if(isNil(l))return;if(decodeEventLog({abi:y,eventName:"TokensWithdrawn",...l}).args.recipient.toLowerCase()===t.toLowerCase())return m},z=t=>isObject(t)&&isHex(t.teleporterMessageID);var Kt=async(t,e)=>{let{bridgeTransfer:n}=e,{asset:r,amount:i,sourceChain:a,targetChain:o}=n,d=R({sourceChain:a,targetChain:o,asset:r,amount:i},t),u=f({chain:n.sourceChain,provider:e.sourceProvider}),s=f({chain:n.targetChain,provider:e.targetProvider}),m=Ve({transferData:d}),p=U({sourceClient:u,targetClient:s,getMetadata:m,checkMetadata:z,trackingParams:e,trackingConfig:x});return O({promise:p,delay:2e3,startAfter:x.initialDelayMs})},qt=async(t,e)=>{let{targetProvider:n,bridgeTransfer:r}=e,{targetChain:i,sourceChain:a,asset:o,amount:d,toAddress:u}=r,s=R({sourceChain:a,targetChain:i,asset:o,amount:d},t),m=f({chain:r.targetChain,provider:n}),p=Ge({transferData:s,targetClient:m,toAddress:u}),y=V({targetClient:m,getTargetTxHash:p,checkMetadata:z,trackingParams:e,trackingConfig:x});return O({promise:y,delay:2e3,startAfter:x.initialDelayMs})};function Ke(t,e){let n=J(e.bridgeTransfer),r,i=()=>{r?.();};return {result:(async()=>{let{sourceProvider:o,targetProvider:d,updateListener:u}=e,{result:s,cancel:m}=await Kt(t,{sourceProvider:o,targetProvider:d,updateListener:u,bridgeTransfer:n});r=m;let p=await s,{result:y,cancel:T}=await qt(t,{sourceProvider:o,targetProvider:d,updateListener:u,bridgeTransfer:p});return r=T,y})(),cancel:i}}async function qe(t,e){return R(e,t),1n}function We(t,e){let n=e.map(r=>r.toLowerCase());return t.some(({erc20Bridges:r})=>r.some(({teleporterAddress:i})=>n.includes(i.toLowerCase())))}var Xe="0x6F419E35a60439569640ca078ba5e86599E30cC6",Je="0x9660Ed66AEf60DfbA5467aFe865f612EDBFB5c71",$e="0x8578AE7723751446B196bD5124e1bF57B40EB7Bc",je="0x5425890298aed601595a70AB815c96711a31Bc65",ze="0xfb1EaDC07C1c32DB63615D59a22aA59935F39c08",Ze="0xaf1BDcE8B343dC0a34Dd78919A78cCCD0e4A7E99",Qe="0x8578AE7723751446B196bD5124e1bF57B40EB7Bc";var Ye={type:"native",name:"AVAX",symbol:"AVAX",decimals:18},et={type:"native",name:"DIS",symbol:"DIS",decimals:18},tt={type:"native",name:"ECH",symbol:"ECH",decimals:18},pe={type:"erc20",address:Xe,name:"Example Teleporter Token",symbol:"TLP",decimals:18},de={type:"erc20",address:je,name:"USD Coin",symbol:"USDC",decimals:6};var nt={blockchainId:"0x7fc93d85c6d62c5b2ac0b519c87010ea5294012d1e407030d6acd0021cac10d5",chainId:"eip155:43113",chainName:"Fuji",rpcUrl:"https://api.avax-test.network/ext/bc/C/rpc",networkToken:Ye},me={blockchainId:"0x9f3be606497285d0ffbb5ac9ba24aa60346a9b1812479ed66cb329f394a4b1c7",chainId:"eip155:779672",chainName:"Dispatch L1 Testnet",rpcUrl:"https://subnets.avax.network/dispatch/testnet/rpc",networkToken:et},rt={blockchainId:"0x1278d1be4b987e847be3465940eb5066c4604a7fbd6e086900823597d81af4c1",chainId:"eip155:173750",chainName:"Echo L1 Testnet",rpcUrl:"https://subnets.avax.network/echo/testnet/rpc",networkToken:tt};var ue=[{homeChain:nt,erc20Bridges:[{teleporterAddress:oe,tokenHomeAddress:Je,tokenHomeDecimals:pe.decimals,baseToken:pe,remotes:[{remoteChain:me,tokenRemoteAddress:$e}]},{teleporterAddress:oe,tokenHomeAddress:ze,tokenHomeDecimals:de.decimals,baseToken:de,remotes:[{remoteChain:rt,tokenRemoteAddress:Qe},{remoteChain:me,tokenRemoteAddress:Ze}]}]}];var at=async t=>{let e=t==="test"?ue:ue;return {type:"ictt-erc20-erc20",estimateGas:n=>Ne(e,n),getAssets:()=>Be(e),getFees:n=>$(e,n),getMinimumTransferAmount:n=>qe(e,n),isBridgeAddress:(...n)=>We(e,n),transferAsset:n=>Le(e,X(n),t),trackTransfer:n=>Ke(e,n)}};var Xt=new Map([["cctp",Me],["ictt-erc20-erc20",at]]),Jt=async(t,e)=>{let n=[...Xt].filter(([i])=>!e.includes(i)),r=await Promise.allSettled(n.map(async([i,a])=>[i,await a(t)]));return new Map(compact(r.map(i=>i.status==="fulfilled"?i.value:void 0)))},H=(t,e,n)=>{let r=e.destinations[n];for(let i of r??[]){let a=t.get(i);if(a)return {bridge:a,type:i}}throw new B};var di=({environment:t,enabledBridgeServices:e})=>({environment:t,getAssets:async()=>(await Promise.all(Array.from(e).map(([,p])=>p.getAssets()))).reduce((p,y)=>{for(let[T,l]of Object.entries(y)){let g=p[T];if(g)for(let A of l){let v=g.findIndex(({symbol:k})=>k===A.symbol);v===-1?g.push(A):mergeWith(g[v],A,(k,P)=>{if(isArray(k))return [...new Set(k.concat(P))]});}else p[T]=l;}return p},{}),getFees:async m=>{let{bridge:p}=H(e,m.asset,m.targetChain.chainId);return p.getFees(m)},estimateGas:async m=>{let{bridge:p}=H(e,m.asset,m.targetChain.chainId);return p.estimateGas(m)},canTransferAsset:(m,p)=>{try{return H(e,m,p),!0}catch{return !1}},isBridgeAddress:(...m)=>Array.from(e.values()).some(p=>p.isBridgeAddress(...m)),transferAsset:async m=>{let{bridge:p}=H(e,m.asset,m.targetChain.chainId);return p.transferAsset(m)},trackTransfer:m=>{let p=e.get(m.bridgeTransfer.type);if(!p)throw new B;return p.trackTransfer(m)},getMinimumTransferAmount:async m=>{let{bridge:p}=H(e,m.asset,m.targetChain.chainId);return p.getMinimumTransferAmount(m)}}); | ||
var Q=(n=>(n.NATIVE="native",n.ERC20="erc20",n))(Q||{}),S=t=>t.type==="erc20",zt=t=>t.type==="native";var _=(n=>(n.CCTP="cctp",n.ICTT_ERC20_ERC20="ictt-erc20-erc20",n))(_||{}),Y=(n=>(n.AllowanceApproval="allowance-approval",n.TokensTransfer="tokens-transfer",n))(Y||{});var ee=(r=>(r.PROD="production",r.STAGING="staging",r.TEST="test",r))(ee||{});var N=(a=>(a[a.BRIDGE_NOT_AVAILABLE=5001]="BRIDGE_NOT_AVAILABLE",a[a.INITIALIZATION_FAILED=5002]="INITIALIZATION_FAILED",a[a.INVALID_PARAMS=5003]="INVALID_PARAMS",a[a.TIMEOUT=5004]="TIMEOUT",a[a.TRANSACTION_REVERTED=5005]="TRANSACTION_REVERTED",a))(N||{}),b=(p=>(p.ENVIRONMENT_NOT_SUPPORTED="ENVIRONMENT_NOT_SUPPORTED",p.UNKNOWN="UNKNOWN",p.CONFIG_NOT_AVAILABLE="CONFIG_NOT_AVAILABLE",p.INVALID_PARAMS="INVALID_PARAMS",p.IDENTICAL_CHAINS_PROVIDED="IDENTICAL_CHAINS_PROVIDED",p.INCORRECT_AMOUNT_PROVIDED="INCORRECT_AMOUNT_PROVIDED",p.INCORRECT_ADDRESS_PROVIDED="INCORRECT_ADDRESS_PROVIDED",p.INCORRECT_TXHASH_PROVIDED="INCORRECT_TXHASH_PROVIDED",p.CHAIN_NOT_SUPPORTED="CHAIN_NOT_SUPPORTED",p.ASSET_NOT_SUPPORTED="ASSET_NOT_SUPPORTED",p.CONFIRMATION_COUNT_UNKNOWN="CONFIRMATION_COUNT_UNKNOWN",p))(b||{});function ye(t){let e=t.map(n=>n.chainId);return t.reduce((n,r)=>(n[r.chainId]=r.tokens.map(i=>({...i,type:"erc20",destinations:e.reduce((a,o)=>(r.chainId!==o&&(a[o]||(a[o]=[]),a[o]?.push("cctp")),a),{})})),n),{})}var it="^[-a-z0-9]{3,8}$",ot="^[-_a-zA-Z0-9]{1,50}$",ce=":",pt=t=>{let[e,n]=t.split(ce);if(!e||!n)throw new Error("Invalid identifier provided.");if(!new RegExp(it).test(e))throw new Error("Invalid namespace provided.");if(!new RegExp(ot).test(n))throw new Error("Invalid reference provided.");return {namespace:e,reference:n}},dt=({namespace:t,reference:e})=>`${t}${ce}${e}`,w={toJSON:pt,toString:dt};var lt=t=>{let{reference:e}=w.toJSON(t.chainId);return {id:Number(e),name:t.chainName,nativeCurrency:{decimals:t.networkToken.decimals,symbol:t.networkToken.symbol,name:t.networkToken.name},network:t.chainName,rpcUrls:{default:{http:[t.rpcUrl]},public:{http:[t.rpcUrl]}},...t.utilityAddresses?.multicall&&{contracts:{multicall3:{address:t.utilityAddresses.multicall}}}}},f=({chain:t,provider:e})=>{let n=lt(t),r=e?custom(e):http(t.rpcUrl,{batch:!0,retryCount:0});return createWalletClient({chain:n,transport:r}).extend(publicActions)};var M=[{inputs:[{internalType:"address",name:"circleTokenMessenger_",type:"address"},{internalType:"address",name:"burnToken_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"AlreadyAdmin",type:"error"},{inputs:[],name:"AlreadyFeeCollector",type:"error"},{inputs:[],name:"AlreadySupportedBurnToken",type:"error"},{inputs:[],name:"AmountLessThanFee",type:"error"},{inputs:[],name:"BalanceNotIncreased",type:"error"},{inputs:[],name:"CannotRemoveLastAdmin",type:"error"},{inputs:[],name:"FeePercentageGreaterThanMax",type:"error"},{inputs:[],name:"InvalidAdminAddress",type:"error"},{inputs:[],name:"InvalidFeeCollector",type:"error"},{inputs:[],name:"InvalidMintRecipientAddress",type:"error"},{inputs:[],name:"InvalidTokenAddress",type:"error"},{inputs:[],name:"InvalidTokenMessengerAddress",type:"error"},{inputs:[],name:"MaxFeeLessThanMinFee",type:"error"},{inputs:[],name:"NotAdmin",type:"error"},{inputs:[],name:"NotFeeCollector",type:"error"},{inputs:[],name:"UnSupportedBurnToken",type:"error"},{inputs:[],name:"UnsupportedDomain",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"admin",type:"address"}],name:"AdminAdded",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"admin",type:"address"}],name:"AdminRemoved",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"BurnTokenAdded",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"BurnTokenRemoved",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"feeCollector",type:"address"}],name:"FeeCollectorAdded",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"feeCollector",type:"address"}],name:"FeeCollectorRemoved",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint32",name:"domain",type:"uint32"},{components:[{internalType:"uint256",name:"maxFee",type:"uint256"},{internalType:"uint256",name:"minFee",type:"uint256"},{internalType:"uint32",name:"feePercentage",type:"uint32"},{internalType:"uint256",name:"txnFee",type:"uint256"},{internalType:"bool",name:"supported",type:"bool"}],indexed:!1,internalType:"struct FeeCalculator.FeeConfiguration",name:"feeConfiguration",type:"tuple"}],name:"FeeConfigurationUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Paused",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint64",name:"nonce",type:"uint64"},{indexed:!1,internalType:"address",name:"burnToken",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"depositor",type:"address"},{indexed:!1,internalType:"address",name:"mintRecipient",type:"address"},{indexed:!1,internalType:"uint32",name:"destinationDomain",type:"uint32"},{indexed:!1,internalType:"uint256",name:"totalFee",type:"uint256"}],name:"TransferTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Unpaused",type:"event"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"addAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"feeCollector",type:"address"}],name:"addFeeCollector",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"addSupportedBurnToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint32",name:"destinationDomain",type:"uint32"}],name:"calculateFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"circleTokenMessenger",outputs:[{internalType:"contract ICircleTokenMessenger",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"circleTokenMessengerAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"collectFees",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"getFeeAmounts",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getFeeConfiguration",outputs:[{components:[{internalType:"uint256",name:"maxFee",type:"uint256"},{internalType:"uint256",name:"minFee",type:"uint256"},{internalType:"uint32",name:"feePercentage",type:"uint32"},{internalType:"uint256",name:"txnFee",type:"uint256"},{internalType:"bool",name:"supported",type:"bool"}],internalType:"struct FeeCalculator.FeeConfiguration",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getFeePercentage",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getMaxFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getMinFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getTxnFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"isAdmin",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"isFeeCollector",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"isSupportedBurnToken",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"isSupportedDomain",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"paused",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"removeAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"feeCollector",type:"address"}],name:"removeFeeCollector",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"removeSupportedBurnToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"},{components:[{internalType:"uint256",name:"maxFee",type:"uint256"},{internalType:"uint256",name:"minFee",type:"uint256"},{internalType:"uint32",name:"feePercentage",type:"uint32"},{internalType:"uint256",name:"txnFee",type:"uint256"},{internalType:"bool",name:"supported",type:"bool"}],internalType:"struct FeeCalculator.FeeConfiguration",name:"feeConfiguration",type:"tuple"}],name:"setFeeConfiguration",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"supportedBurnTokens",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint32",name:"destinationDomain",type:"uint32"},{internalType:"address",name:"mintRecipient",type:"address"},{internalType:"address",name:"burnToken",type:"address"}],name:"transferTokens",outputs:[{internalType:"uint64",name:"nonce",type:"uint64"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"}];var D=class extends Error{constructor(n,r,i){super(n);this.code=r;this.details=i;}};var B=class extends D{constructor(e="UNKNOWN",n){super(e,5001,n),this.name="BridgeUnavailableError";}};var L=class extends D{constructor(e="UNKNOWN",n){super(e,5002,n),this.name="BridgeInitializationError";}};var c=class extends D{constructor(e="INVALID_PARAMS",n){super(e,5003,n),this.name="InvalidParamsError";}};var v=({sourceChain:t,targetChain:e,amount:n,asset:r},i)=>{if(t.chainId===e.chainId)throw new c("IDENTICAL_CHAINS_PROVIDED");if(n<=0n)throw new c("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let a=i.find(s=>s.chainId===t.chainId);if(!a)throw new c("CHAIN_NOT_SUPPORTED",`Not supported on source chain "${t.chainId}"`);let o=i.find(s=>s.chainId===e.chainId);if(!o)throw new c("CHAIN_NOT_SUPPORTED",`Not supported on target chain "${e.chainId}"`);let d=a.tokens.find(s=>s.symbol===r.symbol),u=o.tokens.find(s=>s.symbol===r.symbol);if(!d||!u)throw new c("ASSET_NOT_SUPPORTED");return {sourceChainData:a,targetChainData:o,burnToken:d,mintToken:u}};async function F(t,e){let{sourceChain:n,targetChain:r,asset:i,amount:a,provider:o}=e,{sourceChainData:d,targetChainData:u,burnToken:s}=v({sourceChain:n,targetChain:r,asset:i,amount:a},t),p=await f({chain:n,provider:o}).readContract({address:d.tokenRouterAddress,abi:M,functionName:"calculateFee",args:[a,u.domain]});return {[s.address]:p}}var h=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];function Te({amount:t,burnToken:e,targetChainData:n,toAddress:r}){return encodeFunctionData({abi:M,functionName:"transferTokens",args:[t,n.domain,r,e.address]})}function fe({amount:t,sourceChainData:e}){return encodeFunctionData({abi:h,functionName:"approve",args:[e.tokenRouterAddress,t]})}var Tt=async(t,e)=>{let{sourceChain:n,targetChain:r,asset:i,amount:a,fromAddress:o,toAddress:d,sourceProvider:u,onStepChange:s,sign:m}=e,{sourceChainData:p,targetChainData:y,burnToken:T}=v({sourceChain:n,targetChain:r,asset:i,amount:a},t),l=f({chain:n,provider:u}),A=await l.readContract({address:T.address,abi:h,functionName:"allowance",args:[o,p.tokenRouterAddress]})<a,I=A?2:1;if(A){s?.({currentSignature:1,currentSignatureReason:"allowance-approval",requiredSignatures:I});let P=fe({amount:a,sourceChainData:p}),Z=await m({from:o,to:T.address,data:P},st=>l.sendRawTransaction({serializedTransaction:st}));await l.waitForTransactionReceipt({hash:Z,pollingInterval:1e3});}s?.({currentSignature:A?2:1,currentSignatureReason:"tokens-transfer",requiredSignatures:I});let k=Te({amount:a,burnToken:T,targetChainData:y,toAddress:d});return m({from:o,to:p.tokenRouterAddress,data:k},P=>l.sendRawTransaction({serializedTransaction:P}))},ft=async t=>{try{return await t.getBlockNumber()}catch{return}};async function ge(t,e,n){let{minimumConfirmations:r}=t.find(p=>p.chainId===e.sourceChain.chainId)??{},{minimumConfirmations:i}=t.find(p=>p.chainId===e.targetChain.chainId)??{};if(!r||!i)throw new c("CONFIRMATION_COUNT_UNKNOWN");let a=await F(t,{...e,provider:e.sourceProvider}),o=S(e.asset)?a[e.asset.address]??0n:0n,d=await Tt(t,e),u=Date.now(),s=f({chain:e.targetChain,provider:e.targetProvider}),m=await ft(s);return {type:"cctp",environment:n,fromAddress:e.fromAddress,toAddress:e.toAddress??e.fromAddress,amount:e.amount,asset:e.asset,bridgeFee:o,sourceChain:e.sourceChain,sourceStartedAt:u,sourceTxHash:d,sourceConfirmationCount:0,sourceRequiredConfirmationCount:r,targetChain:e.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:i,targetStartBlockNumber:m}}var te=async t=>new Promise(e=>{setTimeout(e,t);});var O=({promise:t,delay:e,startAfter:n})=>{let r=!1,i=!1,a=0,o,d,u=p=>{o&&r&&(r=!1,o(p));},s=()=>{i=!0,d&&r&&(r=!1,d("cancelled"));};return {result:new Promise((p,y)=>{r=!0,o=p,d=y;let T=async()=>{if(!(!r||i)){try{if(await t(u),!r||i)return;await te(e);}catch(l){console.error(l.message),a+=1,await te(2**a*e);}await T();}};n?setTimeout(T,n):T();}),cancel:s}};var q=(n=>(n[n.Ethereum=0]="Ethereum",n[n.Avalanche=1]="Avalanche",n))(q||{});var ne=z$1.string().refine(t=>isAddress(t),t=>({message:`Invalid EVM address '${t}'`})).transform(t=>t),At=z$1.object({address:ne,name:z$1.string(),symbol:z$1.string(),decimals:z$1.number().positive()}),Ct=z$1.coerce.string().transform((t,e)=>{let n=t.startsWith("eip155:")?t:`eip155:${t}`;try{let r=w.toJSON(n);return w.toString(r)}catch{return e.addIssue({code:z$1.ZodIssueCode.custom,message:"Invalid chain id, neither numeric nor caip2 compliant"}),z$1.NEVER}}),bt=z$1.object({chainId:Ct,domain:z$1.nativeEnum(q),tokenRouterAddress:ne,messageTransmitterAddress:ne,tokens:z$1.array(At),minimumConfirmations:z$1.number().positive()}),Ae=z$1.array(bt);var Et=t=>t==="production"||t==="test",kt={test:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/cctp/cctp_config.test.json",production:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/cctp/cctp_config.json"},Ce=async t=>{if(!Et(t))throw new L("ENVIRONMENT_NOT_SUPPORTED",`CCTP does not support ${t} environment`);try{let n=await(await fetch(kt[t])).json();return Ae.parse(n)}catch(e){throw new L("CONFIG_NOT_AVAILABLE",`Error while fetching CCTP config: ${e.message}`)}},re=t=>{switch(t){case"eip155:43114":case"eip155:43113":return 1e3;default:return 2e4}};var C=(t,e,n)=>{Object.assign(t,Object.fromEntries(Object.entries(e).filter(([,r])=>r!==void 0))),n({...t});};var ht=1024n;var x={trackingLimitMs:108e5,maxBlocks:ht,initialDelayMs:5e3};var W=(t,e)=>t.gasPrice&&BigInt(t.gasPrice*e.gasUsed);var U=({targetClient:t,sourceClient:e,getMetadata:n,checkMetadata:r,trackingParams:{bridgeTransfer:i,updateListener:a},trackingConfig:{trackingLimitMs:o}})=>async u=>{let s={...i};if(s.completedAt||r(s.metadata))return u(s);if(s.sourceStartedAt+o<=Date.now())return C(s,{completedAt:Date.now(),errorCode:5004},a),u(s);let m=await e.getTransactionReceipt({hash:s.sourceTxHash});if(!s.sourceNetworkFee){let g=await e.getTransaction({hash:s.sourceTxHash}),A=W(g,m);A&&C(s,{sourceNetworkFee:A},a);}if(m.status==="reverted")return C(s,{completedAt:Date.now(),errorCode:5005},a),u(s);let p=await e.getTransactionConfirmations({hash:s.sourceTxHash}),y=p>s.sourceConfirmationCount,T=p>=s.sourceRequiredConfirmationCount;if(y){let g={};g.sourceConfirmationCount=Number(p),T||(g.targetStartBlockNumber=await t.getBlockNumber()),C(s,g,a);}if(!T)return;s.targetStartBlockNumber||C(s,{targetStartBlockNumber:await t.getBlockNumber()},a);let l=n(m);return C(s,{targetStartedAt:Date.now(),metadata:l},a),u(s)};var V=({targetClient:t,getTargetTxHash:e,checkMetadata:n,trackingParams:{bridgeTransfer:r,updateListener:i},trackingConfig:{trackingLimitMs:a,maxBlocks:o}})=>{if(!r.completedAt&&!n(r.metadata))throw new c("INVALID_PARAMS","metadata is missing");if(!r.targetStartBlockNumber)throw new c("INVALID_PARAMS","targetStartBlockNumber is missing");return async u=>{let s={...r};if(s.completedAt)return u(s);if(s.sourceStartedAt+a<=Date.now())return C(s,{completedAt:Date.now(),errorCode:5004},i),u(s);if(!s.targetStartBlockNumber)throw new Error("unreachable");if(!s.targetTxHash){let l=await t.getBlockNumber(),g=s.targetStartBlockNumber-o,A=g>=0n?g:"earliest",I=s.targetStartBlockNumber+o,k=I<l?I:"latest",P=await e({fromBlock:A,toBlock:k,metadata:s.metadata});if(P)C(s,{targetTxHash:P},i);else {C(s,{targetStartBlockNumber:l},i);return}}if(isNil(s.targetTxHash))return;let m=await t.getTransactionReceipt({hash:s.targetTxHash});if(!s.targetNetworkFee){let l=await t.getTransaction({hash:s.targetTxHash}),g=W(l,m);g&&C(s,{targetNetworkFee:g},i);}if(m.status==="reverted")return C(s,{completedAt:Date.now(),errorCode:5005},i),u(s);let p=await t.getTransactionConfirmations({hash:s.targetTxHash}),y=p>s.targetConfirmationCount,T=p>=s.targetRequiredConfirmationCount;if(y&&C(s,{targetConfirmationCount:Number(p)},i),!!T)return C(s,{completedAt:Date.now()},i),u(s)}};var ae=t=>{let{fromAddress:e,toAddress:n}=t,r=n??e;if(!isAddress(e)||!isAddress(r))throw new c("INCORRECT_ADDRESS_PROVIDED");return {fromAddress:e,toAddress:r}};var X=({fromAddress:t,toAddress:e,...n})=>{let{fromAddress:r,toAddress:i}=ae({fromAddress:t,toAddress:e});return {fromAddress:r,toAddress:i,...n}},J=({sourceTxHash:t,targetTxHash:e,toAddress:n,fromAddress:r,...i})=>{let{fromAddress:a,toAddress:o}=ae({fromAddress:r,toAddress:n});if(!isHash(t)||!isNil(e)&&!isHash(e))throw new c("INCORRECT_TXHASH_PROVIDED");return {sourceTxHash:t,targetTxHash:e,fromAddress:a,toAddress:o,...i}};var se=t=>isObject(t)&&typeof t.nonce=="bigint",he=({sourceChainData:t})=>n=>{let r=n.logs.find(o=>o.address.toLowerCase()===t.tokenRouterAddress.toLowerCase()?decodeEventLog({abi:M,...o}).eventName==="TransferTokens":!1);if(!r)throw new c("INVALID_PARAMS",`unable to find a TransferTokens event in source transaction "${n.transactionHash}"`);return {nonce:decodeEventLog({abi:M,eventName:"TransferTokens",...r}).args.nonce}},Rt={name:"MessageReceived",type:"event",inputs:[{indexed:!0,internalType:"address",name:"caller",type:"address"},{indexed:!1,internalType:"uint32",name:"sourceDomain",type:"uint32"},{indexed:!0,internalType:"uint64",name:"nonce",type:"uint64"},{indexed:!1,internalType:"bytes32",name:"sender",type:"bytes32"},{indexed:!1,internalType:"bytes",name:"messageBody",type:"bytes"}]},Ie=({targetClient:t,transferData:{targetChainData:e}})=>async({fromBlock:r,toBlock:i,metadata:a})=>(await t.getLogs({address:e.messageTransmitterAddress,event:Rt,args:{nonce:a?.nonce},fromBlock:r,toBlock:i}))[0]?.transactionHash;var Pt=async(t,e)=>{let{sourceProvider:n,targetProvider:r,bridgeTransfer:i}=e,{asset:a,amount:o,sourceChain:d,targetChain:u}=i,s=v({sourceChain:d,targetChain:u,asset:a,amount:o},t),{sourceChainData:m}=s,p=f({chain:d,provider:n}),y=f({chain:u,provider:r}),T=he(s),l=U({sourceClient:p,targetClient:y,getMetadata:T,checkMetadata:se,trackingParams:e,trackingConfig:x});return O({promise:l,delay:re(m.chainId),startAfter:x.initialDelayMs})},_t=async(t,e)=>{let{targetProvider:n,bridgeTransfer:r}=e,{asset:i,amount:a,sourceChain:o,targetChain:d}=r,u=f({chain:d,provider:n}),s=v({sourceChain:o,targetChain:d,asset:i,amount:a},t),m=Ie({targetClient:u,transferData:s}),p=V({targetClient:u,getTargetTxHash:m,checkMetadata:se,trackingParams:e,trackingConfig:x});return O({promise:p,delay:re(s.targetChainData.chainId),startAfter:x.initialDelayMs})};function ve(t,e){let n=J(e.bridgeTransfer),r,i=()=>{r?.();};return {result:(async()=>{let{sourceProvider:o,targetProvider:d,updateListener:u}=e,{result:s,cancel:m}=await Pt(t,{sourceProvider:o,targetProvider:d,updateListener:u,bridgeTransfer:n});r=m;let p=await s,{result:y,cancel:T}=await _t(t,{sourceProvider:o,targetProvider:d,updateListener:u,bridgeTransfer:p});return r=T,y})(),cancel:i}}var Dt=60000n,Re=175000n,wt=60000n,Pe=215000n;async function _e(t,e){let{sourceChain:n,targetChain:r,asset:i,amount:a,fromAddress:o,toAddress:d,sourceProvider:u}=e,s=d??o;if(!isAddress(o)||!isAddress(s))throw new c("INCORRECT_ADDRESS_PROVIDED");let{sourceChainData:m,burnToken:p}=v({sourceChain:n,targetChain:r,asset:i,amount:a},t),T=await f({chain:n,provider:u}).readContract({address:p.address,abi:h,functionName:"allowance",args:[o,m.tokenRouterAddress]}),l=m.domain===1;return T>=a?l?Pe:Re:l?wt+Pe:Dt+Re}async function De(t,e){let{sourceChain:n,targetChain:r,asset:i,amount:a}=e,{burnToken:o}=v({sourceChain:n,targetChain:r,asset:i,amount:a},t);return (await F(t,e))[o.address]??1n}function we(t,e){return t.some(n=>{let r=n.tokenRouterAddress.toLowerCase();return e.to.toLowerCase()===r||e.from.toLowerCase()===r})}var Me=async t=>{let e=await Ce(t);return {type:"cctp",isBridgeTx:n=>we(e,n),estimateGas:n=>_e(e,n),getAssets:()=>ye(e),getFees:n=>F(e,n),transferAsset:n=>ge(e,X(n),t),trackTransfer:n=>ve(e,n),getMinimumTransferAmount:n=>De(e,n)}};var Mt=({sourceChain:t,targetChain:e,asset:n},r)=>{let i=r.find(d=>d.homeChain.chainId===t.chainId),a=i?.erc20Bridges.find(d=>d.baseToken.address===n.address),o=a?.remotes.find(d=>d.remoteChain.chainId===e.chainId);return {chainBridgeConfig:i,tokenHomeConfig:a,tokenRemoteConfig:o}},St=({sourceChain:t,targetChain:e,asset:n},r)=>{let i=r.find(d=>d.homeChain.chainId===e.chainId),a=i?.erc20Bridges.find(d=>d.remotes.find(u=>u.tokenRemoteAddress===n.address&&u.remoteChain.chainId===t.chainId)),o=a?.remotes.find(d=>d.tokenRemoteAddress===n.address&&d.remoteChain.chainId===t.chainId);return {chainBridgeConfig:i,tokenHomeConfig:a,tokenRemoteConfig:o}},R=({sourceChain:t,targetChain:e,amount:n,asset:r},i)=>{if(t.chainId===e.chainId)throw new c("IDENTICAL_CHAINS_PROVIDED");if(n<=0n)throw new c("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");if(!S(r))throw new c("ASSET_NOT_SUPPORTED","Only ERC20 assets supported");let a=Mt({sourceChain:t,targetChain:e,asset:r},i),o=St({sourceChain:t,targetChain:e,asset:r},i);if(a.chainBridgeConfig&&a.tokenHomeConfig&&a.tokenRemoteConfig){let{chainBridgeConfig:d,tokenHomeConfig:u,tokenRemoteConfig:s}=a;return {homeToRemote:!0,chainBridgeConfig:d,tokenHomeConfig:u,tokenRemoteConfig:s}}if(o.chainBridgeConfig&&o.tokenHomeConfig&&o.tokenRemoteConfig){let{chainBridgeConfig:d,tokenHomeConfig:u,tokenRemoteConfig:s}=o;return {homeToRemote:!1,chainBridgeConfig:d,tokenHomeConfig:u,tokenRemoteConfig:s}}throw new c("ASSET_NOT_SUPPORTED","No Home->Remote or Remote->Home route exists for this asset")};var Nt=60000n,Se=215000n,Ne=async(t,e)=>{let{sourceChain:n,targetChain:r,asset:i,amount:a,sourceProvider:o,fromAddress:d}=e,{tokenHomeConfig:u,homeToRemote:s,tokenRemoteConfig:m}=R({sourceChain:n,targetChain:r,asset:i,amount:a},t);return await f({chain:n,provider:o}).readContract({address:s?u.baseToken.address:m.tokenRemoteAddress,abi:h,functionName:"allowance",args:[d,s?u.tokenHomeAddress:m.tokenRemoteAddress]})>=a?Se:Nt+Se};var Be=t=>{let e=t.reduce((r,i)=>(r[i.homeChain.chainId]=i.erc20Bridges.map(a=>({...a.baseToken,destinations:a.remotes.reduce((o,d)=>(o[d.remoteChain.chainId]=["ictt-erc20-erc20"],o),{})})),r),{}),n=t.reduce((r,i)=>{for(let a of i.erc20Bridges)for(let o of a.remotes){let d=r[o.remoteChain.chainId]??[];r[o.remoteChain.chainId]=[...d,{...a.baseToken,address:o.tokenRemoteAddress,destinations:{[i.homeChain.chainId]:["ictt-erc20-erc20"]}}];}return r},{});return {...e,...n}};async function $(t,e){return R(e,t),{}}var G=[{type:"constructor",inputs:[{name:"teleporterRegistryAddress",type:"address",internalType:"address"},{name:"teleporterManager",type:"address",internalType:"address"},{name:"tokenAddress_",type:"address",internalType:"address"},{name:"tokenDecimals_",type:"uint8",internalType:"uint8"}],stateMutability:"nonpayable"},{type:"function",name:"addCollateral",inputs:[{name:"remoteBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"remoteTokenTransferrerAddress",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"blockchainID",inputs:[],outputs:[{name:"",type:"bytes32",internalType:"bytes32"}],stateMutability:"view"},{type:"function",name:"getMinTeleporterVersion",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"isTeleporterAddressPaused",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"owner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"pauseTeleporterAddress",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"receiveTeleporterMessage",inputs:[{name:"sourceBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"originSenderAddress",type:"address",internalType:"address"},{name:"message",type:"bytes",internalType:"bytes"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"registeredRemotes",inputs:[{name:"remoteBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"remoteTokenTransferrerAddress",type:"address",internalType:"address"}],outputs:[{name:"registered",type:"bool",internalType:"bool"},{name:"collateralNeeded",type:"uint256",internalType:"uint256"},{name:"tokenMultiplier",type:"uint256",internalType:"uint256"},{name:"multiplyOnRemote",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"renounceOwnership",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"send",inputs:[{name:"input",type:"tuple",internalType:"struct SendTokensInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"}]},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"sendAndCall",inputs:[{name:"input",type:"tuple",internalType:"struct SendAndCallInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipientContract",type:"address",internalType:"address"},{name:"recipientPayload",type:"bytes",internalType:"bytes"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"recipientGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"},{name:"fallbackRecipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"}]},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"teleporterRegistry",inputs:[],outputs:[{name:"",type:"address",internalType:"contract TeleporterRegistry"}],stateMutability:"view"},{type:"function",name:"token",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IERC20"}],stateMutability:"view"},{type:"function",name:"tokenAddress",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"tokenDecimals",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"transferOwnership",inputs:[{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"transferredBalances",inputs:[{name:"remoteBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"remoteTokenTransferrerAddress",type:"address",internalType:"address"}],outputs:[{name:"balance",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"unpauseTeleporterAddress",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"updateMinTeleporterVersion",inputs:[{name:"version",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"event",name:"CallFailed",inputs:[{name:"recipientContract",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"CallSucceeded",inputs:[{name:"recipientContract",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"CollateralAdded",inputs:[{name:"remoteBlockchainID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"remoteTokenTransferrerAddress",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"},{name:"remaining",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"MinTeleporterVersionUpdated",inputs:[{name:"oldMinTeleporterVersion",type:"uint256",indexed:!0,internalType:"uint256"},{name:"newMinTeleporterVersion",type:"uint256",indexed:!0,internalType:"uint256"}],anonymous:!1},{type:"event",name:"OwnershipTransferred",inputs:[{name:"previousOwner",type:"address",indexed:!0,internalType:"address"},{name:"newOwner",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"RemoteRegistered",inputs:[{name:"remoteBlockchainID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"remoteTokenTransferrerAddress",type:"address",indexed:!0,internalType:"address"},{name:"initialCollateralNeeded",type:"uint256",indexed:!1,internalType:"uint256"},{name:"tokenDecimals",type:"uint8",indexed:!1,internalType:"uint8"}],anonymous:!1},{type:"event",name:"TeleporterAddressPaused",inputs:[{name:"teleporterAddress",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"TeleporterAddressUnpaused",inputs:[{name:"teleporterAddress",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"TokensAndCallRouted",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendAndCallInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipientContract",type:"address",internalType:"address"},{name:"recipientPayload",type:"bytes",internalType:"bytes"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"recipientGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"},{name:"fallbackRecipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensAndCallSent",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"sender",type:"address",indexed:!0,internalType:"address"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendAndCallInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipientContract",type:"address",internalType:"address"},{name:"recipientPayload",type:"bytes",internalType:"bytes"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"recipientGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"},{name:"fallbackRecipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensRouted",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendTokensInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensSent",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"sender",type:"address",indexed:!0,internalType:"address"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendTokensInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensWithdrawn",inputs:[{name:"recipient",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1}];var ie="0x0000000000000000000000000000000000000000",oe="0x253b2784c75e510dD0fF1da844684a1aC0aa5fcf";var K=[{type:"constructor",inputs:[{name:"settings",type:"tuple",internalType:"struct TokenRemoteSettings",components:[{name:"teleporterRegistryAddress",type:"address",internalType:"address"},{name:"teleporterManager",type:"address",internalType:"address"},{name:"tokenHomeBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"tokenHomeAddress",type:"address",internalType:"address"},{name:"tokenHomeDecimals",type:"uint8",internalType:"uint8"}]},{name:"tokenName",type:"string",internalType:"string"},{name:"tokenSymbol",type:"string",internalType:"string"},{name:"tokenDecimals_",type:"uint8",internalType:"uint8"}],stateMutability:"nonpayable"},{type:"function",name:"MULTI_HOP_CALL_GAS_PER_WORD",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MULTI_HOP_CALL_REQUIRED_GAS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MULTI_HOP_SEND_REQUIRED_GAS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"REGISTER_REMOTE_REQUIRED_GAS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"allowance",inputs:[{name:"owner",type:"address",internalType:"address"},{name:"spender",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"approve",inputs:[{name:"spender",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"nonpayable"},{type:"function",name:"balanceOf",inputs:[{name:"account",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"blockchainID",inputs:[],outputs:[{name:"",type:"bytes32",internalType:"bytes32"}],stateMutability:"view"},{type:"function",name:"calculateNumWords",inputs:[{name:"payloadSize",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"pure"},{type:"function",name:"decimals",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"decreaseAllowance",inputs:[{name:"spender",type:"address",internalType:"address"},{name:"subtractedValue",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"nonpayable"},{type:"function",name:"getMinTeleporterVersion",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"homeTokenDecimals",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"increaseAllowance",inputs:[{name:"spender",type:"address",internalType:"address"},{name:"addedValue",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"nonpayable"},{type:"function",name:"initialReserveImbalance",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"isCollateralized",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"isRegistered",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"isTeleporterAddressPaused",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"multiplyOnRemote",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"name",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"owner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"pauseTeleporterAddress",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"receiveTeleporterMessage",inputs:[{name:"sourceBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"originSenderAddress",type:"address",internalType:"address"},{name:"message",type:"bytes",internalType:"bytes"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"registerWithHome",inputs:[{name:"feeInfo",type:"tuple",internalType:"struct TeleporterFeeInfo",components:[{name:"feeTokenAddress",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}]}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"renounceOwnership",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"send",inputs:[{name:"input",type:"tuple",internalType:"struct SendTokensInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"}]},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"sendAndCall",inputs:[{name:"input",type:"tuple",internalType:"struct SendAndCallInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipientContract",type:"address",internalType:"address"},{name:"recipientPayload",type:"bytes",internalType:"bytes"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"recipientGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"},{name:"fallbackRecipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"}]},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"symbol",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"teleporterRegistry",inputs:[],outputs:[{name:"",type:"address",internalType:"contract TeleporterRegistry"}],stateMutability:"view"},{type:"function",name:"tokenDecimals",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"tokenHomeAddress",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"tokenHomeBlockchainID",inputs:[],outputs:[{name:"",type:"bytes32",internalType:"bytes32"}],stateMutability:"view"},{type:"function",name:"tokenMultiplier",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"totalSupply",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"transfer",inputs:[{name:"to",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"nonpayable"},{type:"function",name:"transferFrom",inputs:[{name:"from",type:"address",internalType:"address"},{name:"to",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"nonpayable"},{type:"function",name:"transferOwnership",inputs:[{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"unpauseTeleporterAddress",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"updateMinTeleporterVersion",inputs:[{name:"version",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"event",name:"Approval",inputs:[{name:"owner",type:"address",indexed:!0,internalType:"address"},{name:"spender",type:"address",indexed:!0,internalType:"address"},{name:"value",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"CallFailed",inputs:[{name:"recipientContract",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"CallSucceeded",inputs:[{name:"recipientContract",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"MinTeleporterVersionUpdated",inputs:[{name:"oldMinTeleporterVersion",type:"uint256",indexed:!0,internalType:"uint256"},{name:"newMinTeleporterVersion",type:"uint256",indexed:!0,internalType:"uint256"}],anonymous:!1},{type:"event",name:"OwnershipTransferred",inputs:[{name:"previousOwner",type:"address",indexed:!0,internalType:"address"},{name:"newOwner",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"TeleporterAddressPaused",inputs:[{name:"teleporterAddress",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"TeleporterAddressUnpaused",inputs:[{name:"teleporterAddress",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"TokensAndCallSent",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"sender",type:"address",indexed:!0,internalType:"address"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendAndCallInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipientContract",type:"address",internalType:"address"},{name:"recipientPayload",type:"bytes",internalType:"bytes"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"recipientGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"},{name:"fallbackRecipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensSent",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"sender",type:"address",indexed:!0,internalType:"address"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendTokensInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensWithdrawn",inputs:[{name:"recipient",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"Transfer",inputs:[{name:"from",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"},{name:"value",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1}];var Bt=85000n,Oe=({homeToRemote:t,amount:e,destinationBlockchainID:n,destinationTokenTransferrerAddress:r,recipient:i})=>encodeFunctionData({abi:t?G:K,functionName:"send",args:[{destinationBlockchainID:n,destinationTokenTransferrerAddress:r,recipient:i,primaryFeeTokenAddress:ie,primaryFee:0n,secondaryFee:0n,requiredGasLimit:Bt,multiHopFallback:ie},e]});function He({amount:t,address:e}){return encodeFunctionData({abi:h,functionName:"approve",args:[e,t]})}var Ft=async({params:{onStepChange:t,amount:e,fromAddress:n,sign:r,sourceChain:i,toAddress:a,sourceProvider:o},transferData:d,isAllowanceApprovalRequired:u,requiredSignatures:s})=>{let{tokenRemoteConfig:m,tokenHomeConfig:p,homeToRemote:y,chainBridgeConfig:T}=d,l=f({chain:i,provider:o});if(u){t?.({currentSignature:1,currentSignatureReason:"allowance-approval",requiredSignatures:s});let k=He({amount:e,address:y?p.tokenHomeAddress:m.tokenRemoteAddress}),P=await r({from:n,to:y?d.tokenHomeConfig.baseToken.address:m.tokenRemoteAddress,data:k},Z=>l.sendRawTransaction({serializedTransaction:Z}));await l.waitForTransactionReceipt({hash:P,pollingInterval:1e3});}t?.({currentSignature:u?2:1,currentSignatureReason:"tokens-transfer",requiredSignatures:s});let g=y?m.remoteChain.blockchainId:T.homeChain.blockchainId,A=y?m.tokenRemoteAddress:p.tokenHomeAddress,I=Oe({amount:e,recipient:a,destinationBlockchainID:g,destinationTokenTransferrerAddress:A,homeToRemote:y});return r({from:n,to:y?p.tokenHomeAddress:m.tokenRemoteAddress,data:I},k=>l.sendRawTransaction({serializedTransaction:k}))},Ot=async({params:t,transferData:e})=>{let{sourceChain:n,fromAddress:r,amount:i}=t,a=f({chain:n,provider:t.sourceProvider}),{homeToRemote:o,tokenHomeConfig:d,tokenRemoteConfig:u}=e,m=await a.readContract({address:o?d.baseToken.address:u.tokenRemoteAddress,abi:h,functionName:"allowance",args:[r,o?d.tokenHomeAddress:u.tokenRemoteAddress]})<i;return Ft({params:t,transferData:e,isAllowanceApprovalRequired:m,requiredSignatures:m?2:1})},Ht=async(t,e)=>{let{sourceChain:n,targetChain:r,asset:i,amount:a}=e,o=R({sourceChain:n,targetChain:r,asset:i,amount:a},t);return Ot({params:e,transferData:o})},Lt=async t=>{try{return await t.getBlockNumber()}catch{return}};async function Le(t,e,n){let r=await $(t,{...e,provider:e.sourceProvider}),i=S(e.asset)?r[e.asset.address]??0n:0n,a=await Ht(t,e),o=Date.now(),d=f({chain:e.targetChain}),u=await Lt(d);return {type:"ictt-erc20-erc20",environment:n,fromAddress:e.fromAddress,toAddress:e.toAddress,amount:e.amount,asset:e.asset,bridgeFee:i,sourceChain:e.sourceChain,sourceStartedAt:o,sourceTxHash:a,sourceConfirmationCount:0,sourceRequiredConfirmationCount:1,targetChain:e.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:u}}var Ve=({transferData:{homeToRemote:t,tokenHomeConfig:e,tokenRemoteConfig:n}})=>r=>{let i=t?e.tokenHomeAddress:n.tokenRemoteAddress,a=t?G:K,o="TokensSent",d=r.logs.find(m=>m.address.toLowerCase()===i.toLowerCase()?decodeEventLog({abi:a,...m}).eventName===o:!1);if(!d)throw new c("INVALID_PARAMS",`unable to find a TokensSent event in source transaction "${r.transactionHash}"`);return {teleporterMessageID:decodeEventLog({abi:a,eventName:o,...d}).args.teleporterMessageID}},Gt={name:"ReceiveCrossChainMessage",type:"event",inputs:[{name:"messageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"sourceBlockchainID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"deliverer",type:"address",indexed:!0,internalType:"address"},{name:"rewardRedeemer",type:"address",indexed:!1,internalType:"address"},{name:"message",type:"tuple",indexed:!1,internalType:"struct TeleporterMessage",components:[{name:"messageNonce",type:"uint256",internalType:"uint256"},{name:"originSenderAddress",type:"address",internalType:"address"},{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationAddress",type:"address",internalType:"address"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"allowedRelayerAddresses",type:"address[]",internalType:"address[]"},{name:"receipts",type:"tuple[]",internalType:"struct TeleporterMessageReceipt[]",components:[{name:"receivedMessageNonce",type:"uint256",internalType:"uint256"},{name:"relayerRewardAddress",type:"address",internalType:"address"}]},{name:"message",type:"bytes",internalType:"bytes"}]}]},Ge=({toAddress:t,transferData:{tokenHomeConfig:e,homeToRemote:n,tokenRemoteConfig:r},targetClient:i})=>async({fromBlock:a,toBlock:o,metadata:d})=>{if(!z(d))throw new c("INVALID_PARAMS");let s=(await i.getLogs({address:e.teleporterAddress,event:Gt,args:{messageID:d.teleporterMessageID},fromBlock:a,toBlock:o})).at(-1);if(isNil(s))return;let m=s.transactionHash,p=await i.getTransactionReceipt({hash:m}),y=n?K:G,T=n?r.tokenRemoteAddress:e.tokenHomeAddress,l=p.logs.find(A=>A.address.toLowerCase()===T.toLowerCase()?decodeEventLog({abi:y,...A}).eventName==="TokensWithdrawn":!1);if(isNil(l))return;if(decodeEventLog({abi:y,eventName:"TokensWithdrawn",...l}).args.recipient.toLowerCase()===t.toLowerCase())return m},z=t=>isObject(t)&&isHex(t.teleporterMessageID);var Kt=async(t,e)=>{let{bridgeTransfer:n}=e,{asset:r,amount:i,sourceChain:a,targetChain:o}=n,d=R({sourceChain:a,targetChain:o,asset:r,amount:i},t),u=f({chain:n.sourceChain,provider:e.sourceProvider}),s=f({chain:n.targetChain,provider:e.targetProvider}),m=Ve({transferData:d}),p=U({sourceClient:u,targetClient:s,getMetadata:m,checkMetadata:z,trackingParams:e,trackingConfig:x});return O({promise:p,delay:2e3,startAfter:x.initialDelayMs})},qt=async(t,e)=>{let{targetProvider:n,bridgeTransfer:r}=e,{targetChain:i,sourceChain:a,asset:o,amount:d,toAddress:u}=r,s=R({sourceChain:a,targetChain:i,asset:o,amount:d},t),m=f({chain:r.targetChain,provider:n}),p=Ge({transferData:s,targetClient:m,toAddress:u}),y=V({targetClient:m,getTargetTxHash:p,checkMetadata:z,trackingParams:e,trackingConfig:x});return O({promise:y,delay:2e3,startAfter:x.initialDelayMs})};function Ke(t,e){let n=J(e.bridgeTransfer),r,i=()=>{r?.();};return {result:(async()=>{let{sourceProvider:o,targetProvider:d,updateListener:u}=e,{result:s,cancel:m}=await Kt(t,{sourceProvider:o,targetProvider:d,updateListener:u,bridgeTransfer:n});r=m;let p=await s,{result:y,cancel:T}=await qt(t,{sourceProvider:o,targetProvider:d,updateListener:u,bridgeTransfer:p});return r=T,y})(),cancel:i}}async function qe(t,e){return R(e,t),1n}function We(t,e){return t.some(({erc20Bridges:n})=>n.some(({tokenHomeAddress:r})=>e.from.toLowerCase()===r.toLowerCase()||e.to.toLowerCase()===r.toLowerCase()))}var Xe="0x6F419E35a60439569640ca078ba5e86599E30cC6",Je="0x9660Ed66AEf60DfbA5467aFe865f612EDBFB5c71",$e="0x8578AE7723751446B196bD5124e1bF57B40EB7Bc",je="0x5425890298aed601595a70AB815c96711a31Bc65",ze="0xfb1EaDC07C1c32DB63615D59a22aA59935F39c08",Ze="0xaf1BDcE8B343dC0a34Dd78919A78cCCD0e4A7E99",Qe="0x8578AE7723751446B196bD5124e1bF57B40EB7Bc";var Ye={type:"native",name:"AVAX",symbol:"AVAX",decimals:18},et={type:"native",name:"DIS",symbol:"DIS",decimals:18},tt={type:"native",name:"ECH",symbol:"ECH",decimals:18},pe={type:"erc20",address:Xe,name:"Example Teleporter Token",symbol:"TLP",decimals:18},de={type:"erc20",address:je,name:"USD Coin",symbol:"USDC",decimals:6};var nt={blockchainId:"0x7fc93d85c6d62c5b2ac0b519c87010ea5294012d1e407030d6acd0021cac10d5",chainId:"eip155:43113",chainName:"Fuji",rpcUrl:"https://api.avax-test.network/ext/bc/C/rpc",networkToken:Ye},me={blockchainId:"0x9f3be606497285d0ffbb5ac9ba24aa60346a9b1812479ed66cb329f394a4b1c7",chainId:"eip155:779672",chainName:"Dispatch L1 Testnet",rpcUrl:"https://subnets.avax.network/dispatch/testnet/rpc",networkToken:et},rt={blockchainId:"0x1278d1be4b987e847be3465940eb5066c4604a7fbd6e086900823597d81af4c1",chainId:"eip155:173750",chainName:"Echo L1 Testnet",rpcUrl:"https://subnets.avax.network/echo/testnet/rpc",networkToken:tt};var ue=[{homeChain:nt,erc20Bridges:[{teleporterAddress:oe,tokenHomeAddress:Je,tokenHomeDecimals:pe.decimals,baseToken:pe,remotes:[{remoteChain:me,tokenRemoteAddress:$e}]},{teleporterAddress:oe,tokenHomeAddress:ze,tokenHomeDecimals:de.decimals,baseToken:de,remotes:[{remoteChain:rt,tokenRemoteAddress:Qe},{remoteChain:me,tokenRemoteAddress:Ze}]}]}];var at=async t=>{let e=t==="test"?ue:ue;return {type:"ictt-erc20-erc20",estimateGas:n=>Ne(e,n),getAssets:()=>Be(e),getFees:n=>$(e,n),getMinimumTransferAmount:n=>qe(e,n),isBridgeTx:n=>We(e,n),transferAsset:n=>Le(e,X(n),t),trackTransfer:n=>Ke(e,n)}};var Xt=new Map([["cctp",Me],["ictt-erc20-erc20",at]]),Jt=async(t,e)=>{let n=[...Xt].filter(([i])=>!e.includes(i)),r=await Promise.allSettled(n.map(async([i,a])=>[i,await a(t)]));return new Map(compact(r.map(i=>i.status==="fulfilled"?i.value:void 0)))},H=(t,e,n)=>{let r=e.destinations[n];for(let i of r??[]){let a=t.get(i);if(a)return {bridge:a,type:i}}throw new B};var di=({environment:t,enabledBridgeServices:e})=>({environment:t,getAssets:async()=>(await Promise.all(Array.from(e).map(([,p])=>p.getAssets()))).reduce((p,y)=>{for(let[T,l]of Object.entries(y)){let g=p[T];if(g)for(let A of l){let I=g.findIndex(({symbol:k})=>k===A.symbol);I===-1?g.push(A):mergeWith(g[I],A,(k,P)=>{if(isArray(k))return [...new Set(k.concat(P))]});}else p[T]=l;}return p},{}),getFees:async m=>{let{bridge:p}=H(e,m.asset,m.targetChain.chainId);return p.getFees(m)},estimateGas:async m=>{let{bridge:p}=H(e,m.asset,m.targetChain.chainId);return p.estimateGas(m)},canTransferAsset:(m,p)=>{try{return H(e,m,p),!0}catch{return !1}},isBridgeTx:m=>Array.from(e.values()).some(p=>p.isBridgeTx(m)),transferAsset:async m=>{let{bridge:p}=H(e,m.asset,m.targetChain.chainId);return p.transferAsset(m)},trackTransfer:m=>{let p=e.get(m.bridgeTransfer.type);if(!p)throw new B;return p.trackTransfer(m)},getMinimumTransferAmount:async m=>{let{bridge:p}=H(e,m.asset,m.targetChain.chainId);return p.getMinimumTransferAmount(m)}}); | ||
@@ -8,0 +8,0 @@ export { Y as BridgeSignatureReason, _ as BridgeType, ee as Environment, N as ErrorCode, b as ErrorReason, Q as TokenType, w as caip2, di as createUnifiedBridgeService, Jt as getEnabledBridgeServices, S as isErc20Asset, zt as isNativeAsset }; |
{ | ||
"name": "@avalabs/bridge-unified", | ||
"license": "Limited Ecosystem License", | ||
"version": "0.0.0-feat-is-bridge-address-20240909115936", | ||
"version": "0.0.0-feat-is-bridge-address-20240926120228", | ||
"main": "dist/index.cjs", | ||
@@ -6,0 +6,0 @@ "module": "dist/index.js", |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
566546
690