@avalabs/bridge-unified 4.0.2 → 4.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -12,7 +12,7 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
12
12
|
|
|
13
13
|
var ri__default = /*#__PURE__*/_interopDefault(ri);
|
|
14
14
|
|
|
15
|
-
var j=(r=>(r.NATIVE="native",r.ERC20="erc20",r))(j||{}),U=e=>e.type==="erc20",ce=e=>e.type==="native";var B=(s=>(s.AVALANCHE_EVM="avalanche-evm",s.AVALANCHE_BTC_AVA="avalanche-btc-ava",s.AVALANCHE_AVA_BTC="avalanche-ava-btc",s.CCTP="cctp",s.ICTT_ERC20_ERC20="ictt-erc20-erc20",s))(B||{}),Ni=["avalanche-ava-btc","avalanche-btc-ava"],yr=["avalanche-evm","cctp","ictt-erc20-erc20"],Ri=e=>yr.includes(e.type),dt=e=>e.type==="avalanche-ava-btc",ut=e=>e.type==="avalanche-btc-ava",de=(n=>(n.AllowanceApproval="allowance-approval",n.TokensTransfer="tokens-transfer",n.WrapToken="wrap-token",n))(de||{});var ne=(r=>(r.FUJI="eip155:43113",r.MAINNET="eip155:43114",r))(ne||{}),Re=(r=>(r.MAINNET="eip155:1",r.SEPOLIA="eip155:11155111",r))(Re||{}),re=(r=>(r.MAINNET="bip122:000000000019d6689c085ae165831e93",r.TESTNET="bip122:000000000933ea01ad0ee984209779ba",r))(re||{}),Di={chainId:"eip155:43113",chainName:"Avalanche Fuji",rpcUrl:"https://api.avax-test.network/ext/bc/C/rpc",networkToken:{type:"native",name:"AVAX",symbol:"AVAX",decimals:18}},_i={chainId:"eip155:43114",chainName:"Avalanche Mainnet",rpcUrl:"https://api.avax.network/ext/bc/C/rpc",networkToken:{type:"native",name:"AVAX",symbol:"AVAX",decimals:18}},Fi={chainId:"eip155:11155111",chainName:"Ethereum Sepolia",rpcUrl:"https://proxy-api.avax.network/proxy/infura/sepolia",networkToken:{type:"native",name:"ETH",symbol:"ETH",decimals:18}},Mi={chainId:"eip155:1",chainName:"Ethereum Mainnet",rpcUrl:"https://proxy-api.avax.network/proxy/infura/mainnet",networkToken:{type:"native",name:"ETH",symbol:"ETH",decimals:18}},Oi={chainId:"bip122:000000000933ea01ad0ee984209779ba",chainName:"Bitcoin Testnet",rpcUrl:"",networkToken:{type:"native",name:"Bitcoin",symbol:"BTC",decimals:8}},Hi={chainId:"bip122:000000000019d6689c085ae165831e93",chainName:"Bitcoin Mainnet",rpcUrl:"",networkToken:{type:"native",name:"Bitcoin",symbol:"BTC",decimals:8}};var ae=(i=>(i.DEV="dev",i.PROD="production",i.STAGING="staging",i.TEST="test",i))(ae||{});var z=(s=>(s[s.BRIDGE_NOT_AVAILABLE=5001]="BRIDGE_NOT_AVAILABLE",s[s.INITIALIZATION_FAILED=5002]="INITIALIZATION_FAILED",s[s.INVALID_PARAMS=5003]="INVALID_PARAMS",s[s.TIMEOUT=5004]="TIMEOUT",s[s.TRANSACTION_REVERTED=5005]="TRANSACTION_REVERTED",s))(z||{}),I=(A=>(A.ASSET_NOT_SUPPORTED="ASSET_NOT_SUPPORTED",A.CHAIN_NOT_SUPPORTED="CHAIN_NOT_SUPPORTED",A.CONFIG_NOT_AVAILABLE="CONFIG_NOT_AVAILABLE",A.CONFIRMATION_COUNT_UNKNOWN="CONFIRMATION_COUNT_UNKNOWN",A.ENVIRONMENT_NOT_SUPPORTED="ENVIRONMENT_NOT_SUPPORTED",A.IDENTICAL_CHAINS_PROVIDED="IDENTICAL_CHAINS_PROVIDED",A.INCORRECT_ADDRESS_PROVIDED="INCORRECT_ADDRESS_PROVIDED",A.INCORRECT_AMOUNT_PROVIDED="INCORRECT_AMOUNT_PROVIDED",A.INCORRECT_HASH_PROVIDED="INCORRECT_HASH_PROVIDED",A.INCORRECT_PROVIDER_PROVIDED="INCORRECT_PROVIDER_PROVIDED",A.INCORRECT_SIGNER_PROVIDED="INCORRECT_SIGNER_PROVIDED",A.INCORRECT_TXHASH_PROVIDED="INCORRECT_TXHASH_PROVIDED",A.INVALID_PARAMS="INVALID_PARAMS",A.UNKNOWN="UNKNOWN",A.VULNERABLE_TOKEN_APPROVAL_ADDRESS="VULNERABLE_TOKEN_APPROVAL_ADDRESS",A.WARDEN_CONFIG_MISMATCH="WARDEN_CONFIG_MISMATCH",A.WARDEN_CONFIG_MISSING_NETWORK="WARDEN_CONFIG_MISSING_NETWORK",A.ADDRESS_IS_BLOCKED="ADDRESS_IS_BLOCKED",A))(I||{});function yt(e){let t=e.map(r=>r.chainId);return e.reduce((r,n)=>(r[n.chainId]=n.tokens.map(i=>({...i,type:"erc20",destinations:t.reduce((s,o)=>(n.chainId!==o&&(s[o]||(s[o]=[]),s[o]?.push("cctp")),s),{})})),r),{})}var fr="^[-a-z0-9]{3,8}$",lr="^[-_a-zA-Z0-9]{1,50}$",ft=":",Tr=e=>{let[t,r]=e.split(ft);if(!t||!r)throw new Error("Invalid identifier provided.");if(!new RegExp(fr).test(t))throw new Error("Invalid namespace provided.");if(!new RegExp(lr).test(r))throw new Error("Invalid reference provided.");return {namespace:t,reference:r}},gr=({namespace:e,reference:t})=>`${e}${ft}${t}`,Ar=({namespace:e,reference:t})=>{if(e!=="eip155")throw new Error("Invalid namespace provided.");let r=Number(t);if(isNaN(r))throw new Error("Invalid reference provided.");return `0x${r.toString(16)}`},b={toJSON:Tr,toString:gr,toEip155HexChainId:Ar};var br=e=>{let{reference:t}=b.toJSON(e.chainId);return {id:Number(t),name:e.chainName,nativeCurrency:{decimals:e.networkToken.decimals,symbol:e.networkToken.symbol,name:e.networkToken.name},network:e.chainName,rpcUrls:{default:{http:[e.rpcUrl]},public:{http:[e.rpcUrl]}},...e.utilityAddresses?.multicall&&{contracts:{multicall3:{address:e.utilityAddresses.multicall}}}}},h=({chain:e})=>{let t=br(e),r=viem.http(e.rpcUrl,{batch:!0,retryCount:0});return viem.createWalletClient({chain:t,transport:r}).extend(viem.publicActions)};var ie=[{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 q=class extends Error{constructor(r,n,i){super(r);this.code=n;this.details=i;}};var Se=class extends q{constructor(t="UNKNOWN",r){super(t,5001,r),this.name="BridgeUnavailableError";}};var w=class extends q{constructor(t="UNKNOWN",r){super(t,5002,r),this.name="BridgeInitializationError";}};var l=class extends q{constructor(t="INVALID_PARAMS",r){super(t,5003,r),this.name="InvalidParamsError";}};var M=({sourceChain:e,targetChain:t,amount:r,asset:n},i)=>{if(e.chainId===t.chainId)throw new l("IDENTICAL_CHAINS_PROVIDED");if(r<=0n)throw new l("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let s=i.find(p=>p.chainId===e.chainId);if(!s)throw new l("CHAIN_NOT_SUPPORTED",`Not supported on source chain "${e.chainId}"`);let o=i.find(p=>p.chainId===t.chainId);if(!o)throw new l("CHAIN_NOT_SUPPORTED",`Not supported on target chain "${t.chainId}"`);let a=s.tokens.find(p=>p.symbol===n.symbol),m=o.tokens.find(p=>p.symbol===n.symbol);if(!a||!m)throw new l("ASSET_NOT_SUPPORTED");return {sourceChainData:s,targetChainData:o,burnToken:a,mintToken:m}};async function $(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s}=t,{sourceChainData:o,targetChainData:a,burnToken:m}=M({sourceChain:r,targetChain:n,asset:i,amount:s},e),c=await h({chain:r}).readContract({address:o.tokenRouterAddress,abi:ie,functionName:"calculateFee",args:[s,a.domain]});return {[o.chainId]:{[m.address]:c}}}var R=[{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"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"feeAddress",type:"address"},{indexed:!1,internalType:"uint256",name:"feeAmount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"originTxId",type:"bytes32"}],name:"Mint",type:"event"}];function Tt({amount:e,burnToken:t,targetChainData:r,toAddress:n}){return viem.encodeFunctionData({abi:ie,functionName:"transferTokens",args:[e,r.domain,n,t.address]})}function gt({amount:e,sourceChainData:t}){return viem.encodeFunctionData({abi:R,functionName:"approve",args:[t.tokenRouterAddress,e]})}var vr=async(e,t,r)=>{let{sourceChain:n,targetChain:i,asset:s,amount:o,fromAddress:a,toAddress:m,onStepChange:p,gasSettings:c}=t,{sourceChainData:d,targetChainData:u,burnToken:y}=M({sourceChain:n,targetChain:i,asset:s,amount:o},e),T=h({chain:n}),C=await T.readContract({address:y.address,abi:R,functionName:"allowance",args:[a,d.tokenRouterAddress]})<o,v=C?2:1;if(C){let S={currentSignature:1,currentSignatureReason:"allowance-approval",requiredSignatures:v};p?.(S);let F=gt({amount:o,sourceChainData:d}),he=await r.sign({from:a,to:y.address,data:F,...c?{maxFeePerGas:c.price,maxPriorityFeePerGas:c.tip}:null,chainId:b.toEip155HexChainId(b.toJSON(n.chainId))},ur=>T.sendRawTransaction({serializedTransaction:ur}),S);await T.waitForTransactionReceipt({hash:he,pollingInterval:1e3});}let A={currentSignature:C?2:1,currentSignatureReason:"tokens-transfer",requiredSignatures:v};p?.(A);let x=Tt({amount:o,burnToken:y,targetChainData:u,toAddress:m});return r.sign({from:a,to:d.tokenRouterAddress,data:x,...c?{maxFeePerGas:c.price,maxPriorityFeePerGas:c.tip}:null,chainId:b.toEip155HexChainId(b.toJSON(n.chainId))},S=>T.sendRawTransaction({serializedTransaction:S}),A)},Ir=async e=>{try{return await e.getBlockNumber()}catch{return}};async function At(e,t,r,n){let{minimumConfirmations:i}=e.find(u=>u.chainId===t.sourceChain.chainId)??{},{minimumConfirmations:s}=e.find(u=>u.chainId===t.targetChain.chainId)??{};if(!i||!s)throw new l("CONFIRMATION_COUNT_UNKNOWN");let o=await $(e,{asset:t.asset,amount:t.amount,sourceChain:t.sourceChain,targetChain:t.targetChain}),a=U(t.asset)?o[t.sourceChain.chainId]?.[t.asset.address]??0n:0n,m=await vr(e,t,n),p=Date.now(),c=h({chain:t.targetChain}),d=await Ir(c);return {type:"cctp",environment:r,fromAddress:t.fromAddress,toAddress:t.toAddress??t.fromAddress,amount:t.amount,asset:t.asset,bridgeFee:a,sourceChain:t.sourceChain,sourceStartedAt:p,sourceTxHash:m,sourceConfirmationCount:0,sourceRequiredConfirmationCount:i,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:s,targetStartBlockNumber:d}}var Ke=async e=>new Promise(t=>{setTimeout(t,e);});var D=({promise:e,delay:t,startAfter:r})=>{let n=!1,i=!1,s=0,o,a,m=d=>{o&&n&&(n=!1,o(d));},p=()=>{i=!0,a&&n&&(n=!1,a("cancelled"));};return {result:new Promise((d,u)=>{n=!0,o=d,a=u;let y=async()=>{if(!(!n||i)){try{if(await e(m),!n||i)return;await Ke(t);}catch(T){console.error(T.message),s+=1,await Ke(2**s*t);}await y();}};r?setTimeout(y,r):y();}),cancel:p}};var Ee=(r=>(r[r.Ethereum=0]="Ethereum",r[r.Avalanche=1]="Avalanche",r))(Ee||{});var X=zod.z.string().refine(e=>viem.isAddress(e),e=>({message:`Invalid EVM address '${e}'`})).transform(e=>e);var Br=zod.z.object({address:X,name:zod.z.string(),symbol:zod.z.string(),decimals:zod.z.number().positive()}),wr=zod.z.coerce.string().transform((e,t)=>{let r=e.startsWith("eip155:")?e:`eip155:${e}`;try{let n=b.toJSON(r);return b.toString(n)}catch{return t.addIssue({code:zod.z.ZodIssueCode.custom,message:"Invalid chain id, neither numeric nor caip2 compliant"}),zod.z.NEVER}}),Nr=zod.z.object({chainId:wr,domain:zod.z.nativeEnum(Ee),tokenRouterAddress:X,messageTransmitterAddress:X,tokens:zod.z.array(Br),minimumConfirmations:zod.z.number().positive()}),Ct=zod.z.array(Nr);var Rr=e=>e==="production"||e==="test",Sr={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"},ht=async e=>{if(!Rr(e))throw new w("ENVIRONMENT_NOT_SUPPORTED",`CCTP does not support ${e} environment`);try{let r=await(await fetch(Sr[e])).json();return Ct.parse(r)}catch(t){throw new w("CONFIG_NOT_AVAILABLE",`Error while fetching CCTP config: ${t.message}`)}},Je=e=>{switch(e){case"eip155:43114":case"eip155:43113":return 1e3;default:return 2e4}};var E=(e,t,r)=>{let n=lodash.omitBy(t,lodash.isNil),i={...lodash.cloneDeep(e),...lodash.cloneDeep(n)};return r(i),i},_r=1e3*60*60*3,Fr=1024n,Mr=5e3,k={trackingLimitMs:_r,maxBlocks:Fr,initialDelayMs:Mr};var K=(e,t)=>e.gasPrice&&BigInt(e.gasPrice*t.gasUsed);var se=({targetClient:e,sourceClient:t,getMetadata:r,checkMetadata:n,trackingParams:{bridgeTransfer:i,updateListener:s},trackingConfig:{trackingLimitMs:o}})=>{let a=lodash.cloneDeep(i);return async p=>{if(a.completedAt||n(a.metadata))return p(a);if(a.sourceStartedAt+o<=Date.now())return a=E(a,{completedAt:Date.now(),errorCode:5004},s),p(a);if(!viem.isHash(a.sourceTxHash))return;let c=await t.getTransactionReceipt({hash:a.sourceTxHash});if(a.sourceNetworkFee===void 0){let g=await t.getTransaction({hash:a.sourceTxHash}),C=K(g,c);C&&(a=E(a,{sourceNetworkFee:C},s));}if(c.status==="reverted")return a=E(a,{completedAt:Date.now(),errorCode:5005},s),p(a);if(!viem.isHash(a.sourceTxHash))return;let d=await t.getTransactionConfirmations({hash:a.sourceTxHash}),u=d>a.sourceConfirmationCount,y=d>=a.sourceRequiredConfirmationCount;if(u){let g={};g.sourceConfirmationCount=Number(d),y||(g.targetStartBlockNumber=await e.getBlockNumber()),a=E(a,g,s);}if(!y)return;a.targetStartBlockNumber||(a=E(a,{targetStartBlockNumber:await e.getBlockNumber()},s));let T=r(c);return a=E(a,{targetStartedAt:Date.now(),metadata:T},s),p(a)}};var oe=({targetClient:e,getTargetTxHash:t,checkMetadata:r,trackingParams:{bridgeTransfer:n,updateListener:i},trackingConfig:{trackingLimitMs:s,maxBlocks:o}})=>{if(!n.completedAt&&!r(n.metadata))throw new l("INVALID_PARAMS","metadata is missing");if(!n.targetStartBlockNumber)throw new l("INVALID_PARAMS","targetStartBlockNumber is missing");let a=lodash.cloneDeep(n);return async p=>{if(a.completedAt)return p(a);if(a.sourceStartedAt+s<=Date.now())return a=E(a,{completedAt:Date.now(),errorCode:5004},i),p(a);if(!a.targetStartBlockNumber)throw new Error("unreachable");if(!a.targetTxHash){let g=await e.getBlockNumber(),C=a.targetStartBlockNumber-o,v=C>=0n?C:"earliest",A=a.targetStartBlockNumber+o,x=A<g?A:"latest",S=await t({fromBlock:v,toBlock:x,metadata:a.metadata});if(S)a=E(a,{targetTxHash:S},i);else {a=E(a,{targetStartBlockNumber:g},i);return}}if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let d=await e.getTransactionReceipt({hash:a.targetTxHash});if(!a.targetNetworkFee){let g=await e.getTransaction({hash:a.targetTxHash}),C=K(g,d);C&&(a=E(a,{targetNetworkFee:C},i));}if(d.status==="reverted")return a=E(a,{completedAt:Date.now(),errorCode:5005},i),p(a);if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let u=await e.getTransactionConfirmations({hash:a.targetTxHash}),y=u>a.targetConfirmationCount,T=u>=a.targetRequiredConfirmationCount;if(y&&(a=E(a,{targetConfirmationCount:Number(u)},i)),!!T)return a=E(a,{completedAt:Date.now()},i),p(a)}};var Ze=e=>lodash.isObject(e)&&typeof e.nonce=="bigint",xt=({sourceChainData:e})=>r=>{let n=r.logs.find(o=>o.address.toLowerCase()===e.tokenRouterAddress.toLowerCase()?viem.decodeEventLog({abi:ie,...o}).eventName==="TransferTokens":!1);if(!n)throw new l("INVALID_PARAMS",`unable to find a TransferTokens event in source transaction "${r.transactionHash}"`);return {nonce:viem.decodeEventLog({abi:ie,eventName:"TransferTokens",...n}).args.nonce}},Lr={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"}]},Bt=({targetClient:e,transferData:{targetChainData:t}})=>async({fromBlock:n,toBlock:i,metadata:s})=>(await e.getLogs({address:t.messageTransmitterAddress,event:Lr,args:{nonce:s?.nonce},fromBlock:n,toBlock:i}))[0]?.transactionHash;var Gr=async(e,t)=>{let{bridgeTransfer:r}=t,{asset:n,amount:i,sourceChain:s,targetChain:o}=r,a=M({sourceChain:s,targetChain:o,asset:n,amount:i},e),{sourceChainData:m}=a,p=h({chain:s}),c=h({chain:o}),d=xt(a),u=se({sourceClient:p,targetClient:c,getMetadata:d,checkMetadata:Ze,trackingParams:t,trackingConfig:k});return D({promise:u,delay:Je(m.chainId),startAfter:k.initialDelayMs})},Ur=async(e,t)=>{let{bridgeTransfer:r}=t,{asset:n,amount:i,sourceChain:s,targetChain:o}=r,a=h({chain:o}),m=M({sourceChain:s,targetChain:o,asset:n,amount:i},e),p=Bt({targetClient:a,transferData:m}),c=oe({targetClient:a,getTargetTxHash:p,checkMetadata:Ze,trackingParams:t,trackingConfig:k});return D({promise:c,delay:Je(m.targetChainData.chainId),startAfter:k.initialDelayMs})};function Nt(e,t){if(!viem.isHash(t.bridgeTransfer.sourceTxHash)||t.bridgeTransfer.targetTxHash&&!viem.isHash(t.bridgeTransfer.targetTxHash))throw new l("INCORRECT_TXHASH_PROVIDED");let r,n=()=>{r?.();};return {result:(async()=>{let{updateListener:s,bridgeTransfer:o}=t,{result:a,cancel:m}=await Gr(e,{updateListener:s,bridgeTransfer:o});r=m;let p=await a,{result:c,cancel:d}=await Ur(e,{updateListener:s,bridgeTransfer:p});return r=d,c})(),cancel:n}}var zr=60000n,Rt=175000n,Wr=60000n,St=215000n;async function Pt(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s,fromAddress:o}=t,{sourceChainData:a,burnToken:m}=M({sourceChain:r,targetChain:n,asset:i,amount:s},e),c=await h({chain:r}).readContract({address:m.address,abi:R,functionName:"allowance",args:[o,a.tokenRouterAddress]}),d=a.domain===1;return c>=s?d?St:Rt:d?Wr+St:zr+Rt}async function Dt(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s}=t,{burnToken:o}=M({sourceChain:r,targetChain:n,asset:i,amount:s},e);return (await $(e,t))[r.chainId]?.[o.address]??1n}async function _t(e,t){let{mintToken:r,burnToken:n}=M(t,e),i={...r,type:"erc20"},s=await $(e,t);return {asset:i,amount:t.amount-(s[t.sourceChain.chainId]?.[n.address]??0n)}}var _="0x0000000000000000000000000000000000000000";function Ft(e,t){for(let r of e){if(r.chainId!==t.chainId)continue;let n=t.tokenTransfers.find(({symbol:d})=>r.tokens.some(({symbol:u})=>u===d));if(!n)continue;let i=r.domain===1,s=t.chainId==="eip155:43113"||t.chainId==="eip155:11155111",o=s?"eip155:11155111":"eip155:1",a=s?"eip155:43113":"eip155:43114";if(viem.isAddressEqual(t.to,r.tokenRouterAddress)||viem.isAddressEqual(n.to,r.tokenRouterAddress))return {isBridgeTx:!0,bridgeType:"cctp",sourceChainId:t.chainId,targetChainId:i?o:a};let p=viem.isAddressEqual(t.from,r.messageTransmitterAddress),c=viem.isAddressEqual(n.from,_);if(p||c)return {isBridgeTx:!0,bridgeType:"cctp",sourceChainId:i?o:a,targetChainId:t.chainId}}return {isBridgeTx:!1}}var Qe=e=>{let{fromAddress:t,toAddress:r}=e;if(!viem.isAddress(t)||!viem.isAddress(r))throw new l("INCORRECT_ADDRESS_PROVIDED");return {fromAddress:t,toAddress:r}};function ue(e){let{chainId:t,from:r,to:n,tokenTransfers:i}=e,{fromAddress:s,toAddress:o}=Qe({fromAddress:r,toAddress:n}),a=i.map(m=>{let{from:p,to:c,symbol:d}=m;if(!p||!viem.isAddress(p)||!c||!viem.isAddress(c))throw new l("INCORRECT_ADDRESS_PROVIDED");return {from:p,to:c,symbol:d}});return {chainId:t,from:s,to:o,tokenTransfers:a}}var W=({fromAddress:e,...t})=>{if(!viem.isAddress(e))throw new l("INCORRECT_ADDRESS_PROVIDED");return {fromAddress:e,...t}},ye=({fromAddress:e,toAddress:t,...r})=>{let{fromAddress:n,toAddress:i}=Qe({fromAddress:e,toAddress:t});return {fromAddress:n,toAddress:i,...r}};var Ot=async(e,t)=>{let r=await ht(e);return {type:"cctp",analyzeTx:n=>{try{return Ft(r,ue(n))}catch{return {isBridgeTx:!1}}},estimateGas:n=>Pt(r,W(n)),estimateReceiveAmount:n=>_t(r,W(n)),getAssets:()=>yt(r),getFees:n=>$(r,n),transferAsset:n=>At(r,ye(n),e,t),trackTransfer:n=>Nt(r,n),getMinimumTransferAmount:n=>Dt(r,n)}};var jr=({sourceChain:e,targetChain:t,asset:r},n)=>{let i=n.find(a=>a.homeChain.chainId===e.chainId),s=i?.erc20Bridges.find(a=>a.baseToken.address===r.address&&a.remotes.some(({remoteChain:m})=>m.chainId===t.chainId)),o=s?.remotes.find(a=>a.remoteChain.chainId===t.chainId);return {chainBridgeConfig:i,tokenHomeConfig:s,tokenRemoteConfig:o}},qr=({sourceChain:e,targetChain:t,asset:r},n)=>{let i=n.find(a=>a.homeChain.chainId===t.chainId),s=i?.erc20Bridges.find(a=>a.remotes.find(m=>m.tokenRemoteAddress===r.address&&m.remoteChain.chainId===e.chainId)),o=s?.remotes.find(a=>a.tokenRemoteAddress===r.address&&a.remoteChain.chainId===e.chainId);return {chainBridgeConfig:i,tokenHomeConfig:s,tokenRemoteConfig:o}},O=({sourceChain:e,targetChain:t,amount:r,asset:n},i)=>{if(e.chainId===t.chainId)throw new l("IDENTICAL_CHAINS_PROVIDED");if(r<=0n)throw new l("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");if(!U(n))throw new l("ASSET_NOT_SUPPORTED","Only ERC20 assets supported");let s=jr({sourceChain:e,targetChain:t,asset:n},i),o=qr({sourceChain:e,targetChain:t,asset:n},i);if(s.chainBridgeConfig&&s.tokenHomeConfig&&s.tokenRemoteConfig){let{chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:p}=s;return {homeToRemote:!0,chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:p}}if(o.chainBridgeConfig&&o.tokenHomeConfig&&o.tokenRemoteConfig){let{chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:p}=o;return {homeToRemote:!1,chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:p}}throw new l("ASSET_NOT_SUPPORTED","No Home->Remote or Remote->Home route exists for this asset")};var $r=60000n,Ht=215000n,Vt=async(e,t)=>{let{sourceChain:r,targetChain:n,asset:i,amount:s,fromAddress:o}=t,{tokenHomeConfig:a,homeToRemote:m,tokenRemoteConfig:p}=O({sourceChain:r,targetChain:n,asset:i,amount:s},e);return await h({chain:r}).readContract({address:m?a.baseToken.address:p.tokenRemoteAddress,abi:R,functionName:"allowance",args:[o,m?a.tokenHomeAddress:p.tokenRemoteAddress]})>=s?Ht:$r+Ht};var Lt=e=>{let t=e.reduce((n,i)=>(n[i.homeChain.chainId]=i.erc20Bridges.map(s=>({...s.baseToken,destinations:s.remotes.reduce((o,a)=>(o[a.remoteChain.chainId]=["ictt-erc20-erc20"],o),{})})),n),{}),r=e.reduce((n,i)=>{for(let s of i.erc20Bridges)for(let o of s.remotes){let a=n[o.remoteChain.chainId]??[];n[o.remoteChain.chainId]=[...a,{...s.baseToken,address:o.tokenRemoteAddress,destinations:{[i.homeChain.chainId]:["ictt-erc20-erc20"]}}];}return n},{});return {...t,...r}};async function fe(e,t){return O(t,e),{}}var be=[{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 ve=[{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 Xr=85000n,Ut=({homeToRemote:e,amount:t,destinationBlockchainID:r,destinationTokenTransferrerAddress:n,recipient:i})=>viem.encodeFunctionData({abi:e?be:ve,functionName:"send",args:[{destinationBlockchainID:r,destinationTokenTransferrerAddress:n,recipient:i,primaryFeeTokenAddress:_,primaryFee:0n,secondaryFee:0n,requiredGasLimit:Xr,multiHopFallback:_},t]});function zt({amount:e,address:t}){return viem.encodeFunctionData({abi:R,functionName:"approve",args:[t,e]})}var Kr=async({params:{onStepChange:e,amount:t,fromAddress:r,sourceChain:n,toAddress:i,gasSettings:s},transferData:o,isAllowanceApprovalRequired:a,requiredSignatures:m,signer:p})=>{let{tokenRemoteConfig:c,tokenHomeConfig:d,homeToRemote:u,chainBridgeConfig:y}=o,T=h({chain:n});if(a){let x={currentSignature:1,currentSignatureReason:"allowance-approval",requiredSignatures:m};e?.(x);let S=zt({amount:t,address:u?d.tokenHomeAddress:c.tokenRemoteAddress}),F=await p.sign({from:r,to:u?o.tokenHomeConfig.baseToken.address:c.tokenRemoteAddress,data:S,...s?{maxFeePerGas:s.price,maxPriorityFeePerGas:s.tip}:null,chainId:b.toEip155HexChainId(b.toJSON(n.chainId))},he=>T.sendRawTransaction({serializedTransaction:he}),x);await T.waitForTransactionReceipt({hash:F,pollingInterval:1e3});}let g={currentSignature:a?2:1,currentSignatureReason:"tokens-transfer",requiredSignatures:m};e?.(g);let C=u?c.remoteChain.blockchainId:y.homeChain.blockchainId,v=u?c.tokenRemoteAddress:d.tokenHomeAddress,A=Ut({amount:t,recipient:i,destinationBlockchainID:C,destinationTokenTransferrerAddress:v,homeToRemote:u});return p.sign({from:r,to:u?d.tokenHomeAddress:c.tokenRemoteAddress,data:A,...s?{maxFeePerGas:s.price,maxPriorityFeePerGas:s.tip}:null,chainId:b.toEip155HexChainId(b.toJSON(n.chainId))},x=>T.sendRawTransaction({serializedTransaction:x}),g)},Jr=async({params:e,transferData:t,signer:r})=>{let{sourceChain:n,fromAddress:i,amount:s}=e,o=h({chain:n}),{homeToRemote:a,tokenHomeConfig:m,tokenRemoteConfig:p}=t,d=await o.readContract({address:a?m.baseToken.address:p.tokenRemoteAddress,abi:R,functionName:"allowance",args:[i,a?m.tokenHomeAddress:p.tokenRemoteAddress]})<s;return Kr({params:e,transferData:t,isAllowanceApprovalRequired:d,requiredSignatures:d?2:1,signer:r})},Zr=async(e,t,r)=>{let{sourceChain:n,targetChain:i,asset:s,amount:o}=t,a=O({sourceChain:n,targetChain:i,asset:s,amount:o},e);return Jr({params:t,transferData:a,signer:r})},Qr=async e=>{try{return await e.getBlockNumber()}catch{return}};async function Wt(e,t,r,n){let i=await fe(e,{asset:t.asset,amount:t.amount,sourceChain:t.sourceChain,targetChain:t.targetChain}),s=U(t.asset)?i[t.targetChain.chainId]?.[t.asset.address]??0n:0n,o=await Zr(e,t,n),a=Date.now(),m=h({chain:t.targetChain}),p=await Qr(m);return {type:"ictt-erc20-erc20",environment:r,fromAddress:t.fromAddress,toAddress:t.toAddress,amount:t.amount,asset:t.asset,bridgeFee:s,sourceChain:t.sourceChain,sourceStartedAt:a,sourceTxHash:o,sourceConfirmationCount:0,sourceRequiredConfirmationCount:1,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:p}}var qt=({transferData:{homeToRemote:e,tokenHomeConfig:t,tokenRemoteConfig:r}})=>n=>{let i=e?t.tokenHomeAddress:r.tokenRemoteAddress,s=e?be:ve,o="TokensSent",a=n.logs.find(c=>c.address.toLowerCase()===i.toLowerCase()?viem.decodeEventLog({abi:s,...c}).eventName===o:!1);if(!a)throw new l("INVALID_PARAMS",`unable to find a TokensSent event in source transaction "${n.transactionHash}"`);return {teleporterMessageID:viem.decodeEventLog({abi:s,eventName:o,...a}).args.teleporterMessageID}},ta={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"}]}]},$t=({toAddress:e,transferData:{tokenHomeConfig:t,homeToRemote:r,tokenRemoteConfig:n},targetClient:i})=>async({fromBlock:s,toBlock:o,metadata:a})=>{if(!_e(a))throw new l("INVALID_PARAMS");let p=(await i.getLogs({address:t.teleporterAddress,event:ta,args:{messageID:a.teleporterMessageID},fromBlock:s,toBlock:o})).at(-1);if(lodash.isNil(p))return;let c=p.transactionHash,d=await i.getTransactionReceipt({hash:c}),u=r?ve:be,y=r?n.tokenRemoteAddress:t.tokenHomeAddress,T=d.logs.find(C=>C.address.toLowerCase()===y.toLowerCase()?viem.decodeEventLog({abi:u,...C}).eventName==="TokensWithdrawn":!1);if(lodash.isNil(T))return;if(viem.decodeEventLog({abi:u,eventName:"TokensWithdrawn",...T}).args.recipient.toLowerCase()===e.toLowerCase())return c},_e=e=>lodash.isObject(e)&&viem.isHex(e.teleporterMessageID);var na=async(e,t)=>{let{bridgeTransfer:r}=t,{asset:n,amount:i,sourceChain:s,targetChain:o}=r,a=O({sourceChain:s,targetChain:o,asset:n,amount:i},e),m=h({chain:r.sourceChain}),p=h({chain:r.targetChain}),c=qt({transferData:a}),d=se({sourceClient:m,targetClient:p,getMetadata:c,checkMetadata:_e,trackingParams:t,trackingConfig:k});return D({promise:d,delay:2e3,startAfter:k.initialDelayMs})},ra=async(e,t)=>{let{bridgeTransfer:r}=t,{targetChain:n,sourceChain:i,asset:s,amount:o,toAddress:a}=r,m=O({sourceChain:i,targetChain:n,asset:s,amount:o},e),p=h({chain:r.targetChain}),c=$t({transferData:m,targetClient:p,toAddress:a}),d=oe({targetClient:p,getTargetTxHash:c,checkMetadata:_e,trackingParams:t,trackingConfig:k});return D({promise:d,delay:2e3,startAfter:k.initialDelayMs})};function Xt(e,t){let r,n=()=>{r?.();};return {result:(async()=>{let{updateListener:s}=t,{result:o,cancel:a}=await na(e,t);r=a;let m=await o,{result:p,cancel:c}=await ra(e,{updateListener:s,bridgeTransfer:m});return r=c,p})(),cancel:n}}async function Kt(e,t){return O(t,e),1n}var et={encode(e){return base.base58.encode(utils.concatBytes(e,sha256.sha256(e).subarray(-4)))},decode(e){return base.base58.decode(e).subarray(0,-4)}};var sa=zod.z.object({subnetName:zod.z.string(),subnetID:zod.z.string(),blockchainID:zod.z.string(),chainID:zod.z.number(),network:zod.z.string()}),Zt=zod.z.array(sa),oa=zod.z.object({PKey:zod.z.string(),SKey:zod.z.string(),orgID:zod.z.string(),bridgeID:zod.z.string(),tokenAddress:X,tokenSymbol:zod.z.string(),tokenName:zod.z.string(),tokenDecimals:zod.z.number(),tokenHomeAddress:X,tokenHomeChainID:zod.z.number(),tokenRemoteAddress:X,tokenRemoteChainID:zod.z.number(),network:zod.z.string(),isRegisteredInBridgeApp:zod.z.enum(["Y","N"]),createdAt:zod.z.number(),updatedAt:zod.z.number()}),Qt=zod.z.array(oa);var Yt="0x253b2784c75e510dD0fF1da844684a1aC0aa5fcf",en={test:"https://ac-gateway-staging-us-east-1.avacloud-test.io/v1/bridge-app",production:"https://ac-gateway-production-us-east-1.avacloud.io/v1/bridge-app"},tn={chainID:43114,blockchainID:"2q9e4r6Mu3U68nU1fYjgbR6JvwrRx36CohpAX5UQxse55x1Q5"},nn={chainID:43113,blockchainID:"yH8D7ThNJkxmtkuv2jgBa4P1Rn3Qpr4pPr7QYNfcdoS6k6HWp"};var tt=async e=>await(await fetch(e)).json();var ma=e=>e==="production"||e==="test",pa=e=>e.status==="fulfilled",ca=async(e,t)=>{let r=await tt(`${e}/chains`);return [t==="production"?tn:nn,...Zt.parse(r)]},da=async(e,t)=>(await Promise.allSettled(t.map(async n=>{let i=await tt(`${e}/chains/${n.chainID}/bridges`);return Qt.parse(i)}))).filter(pa).flatMap(n=>n.value),an=async e=>{if(!ma(e))throw new w("ENVIRONMENT_NOT_SUPPORTED",`ICTT does not support ${e} environment`);try{let t=en[e],r=await ca(t,e),n=await da(t,r),i=[];return n.forEach(s=>{let o=r.find(({chainID:y})=>y===s.tokenHomeChainID);if(!o)return;let a=i.find(({homeChain:y})=>y.chainId===b.toString({namespace:"eip155",reference:String(o.chainID)}));a||(a={homeChain:{chainId:b.toString({namespace:"eip155",reference:String(o.chainID)}),blockchainId:viem.toHex(et.decode(o.blockchainID))},erc20Bridges:[]},i.push(a));let m=a.erc20Bridges.find(({tokenHomeAddress:y})=>y===s.tokenHomeAddress);m||(m={baseToken:{address:s.tokenAddress,decimals:s.tokenDecimals,name:s.tokenName||s.tokenSymbol,symbol:s.tokenSymbol,type:"erc20"},remotes:[],teleporterAddress:Yt,tokenHomeAddress:s.tokenHomeAddress,tokenHomeDecimals:s.tokenDecimals},a.erc20Bridges.push(m));let p=r.find(({chainID:y})=>y===s.tokenRemoteChainID);if(!p)return;let c=viem.toHex(et.decode(p.blockchainID)),d=b.toString({namespace:"eip155",reference:String(s.tokenRemoteChainID)});m.remotes.find(({tokenRemoteAddress:y,remoteChain:{chainId:T}})=>y===s.tokenRemoteAddress&&T===d)||m.remotes.push({remoteChain:{chainId:d,blockchainId:c},tokenRemoteAddress:s.tokenRemoteAddress});}),i.map(s=>({...s,erc20Bridges:s.erc20Bridges.filter(o=>o.remotes.length>0)})).filter(s=>s.erc20Bridges.length>0)}catch(t){throw new w("CONFIG_NOT_AVAILABLE",`Error while fetching ICTT-ERC20-ERC20 config: ${t.message}`)}};var sn=async(e,t)=>{let{homeToRemote:r,tokenHomeConfig:{baseToken:n},tokenRemoteConfig:{tokenRemoteAddress:i}}=O(t,e),s={...n,address:r?i:n.address},o=await fe(e,t);return {amount:t.amount-(o[t.targetChain.chainId]?.[n.address]??0n),asset:s}};function on(e,t){for(let r of e)for(let n of r.erc20Bridges){let i=t.tokenTransfers.find(({symbol:p})=>p===n.baseToken.symbol);if(!i)continue;let s=viem.isAddressEqual(n.teleporterAddress,t.to),o=viem.isAddressEqual(t.from,n.tokenHomeAddress)||viem.isAddressEqual(i.from,n.tokenHomeAddress),a=viem.isAddressEqual(t.from,_)||viem.isAddressEqual(i.from,_);if(s&&(o||a))return {isBridgeTx:!0,sourceChainId:n.remotes.length===1?n.remotes[0].remoteChain.chainId:void 0,targetChainId:t.chainId,bridgeType:"ictt-erc20-erc20"};if(viem.isAddressEqual(t.to,n.tokenHomeAddress)||viem.isAddressEqual(i.to,n.tokenHomeAddress))return {isBridgeTx:!0,sourceChainId:t.chainId,targetChainId:n.remotes.length===1?n.remotes[0].remoteChain.chainId:void 0,bridgeType:"ictt-erc20-erc20"}}return {isBridgeTx:!1}}var mn=async(e,t)=>{let r=await an(e);return {type:"ictt-erc20-erc20",analyzeTx:n=>{try{return on(r,ue(n))}catch{return {isBridgeTx:!1}}},estimateGas:n=>Vt(r,W(n)),estimateReceiveAmount:n=>sn(r,W(n)),getAssets:()=>Lt(r),getFees:n=>fe(r,n),getMinimumTransferAmount:n=>Kt(r,n),transferAsset:n=>Wt(r,ye(n),e,t),trackTransfer:n=>Xt(r,n)}};var le=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"src",type:"address"},{indexed:!0,internalType:"address",name:"guy",type:"address"},{indexed:!1,internalType:"uint256",name:"wad",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"dst",type:"address"},{indexed:!1,internalType:"uint256",name:"wad",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"src",type:"address"},{indexed:!0,internalType:"address",name:"dst",type:"address"},{indexed:!1,internalType:"uint256",name:"wad",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"src",type:"address"},{indexed:!1,internalType:"uint256",name:"wad",type:"uint256"}],name:"Withdrawal",type:"event"},{payable:!0,stateMutability:"payable",type:"fallback"},{constant:!0,inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"guy",type:"address"},{internalType:"uint256",name:"wad",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{internalType:"address",name:"",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[],name:"deposit",outputs:[],payable:!0,stateMutability:"payable",type:"function"},{constant:!0,inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"dst",type:"address"},{internalType:"uint256",name:"wad",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"src",type:"address"},{internalType:"address",name:"dst",type:"address"},{internalType:"uint256",name:"wad",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{internalType:"uint256",name:"wad",type:"uint256"}],name:"withdraw",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"chain_id",type:"uint256"}],name:"unwrap",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"swap",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{internalType:"address",name:"",type:"address"}],name:"swapSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"}];var Fe=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"guy",type:"address"},{name:"wad",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:"src",type:"address"},{name:"dst",type:"address"},{name:"wad",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{name:"wad",type:"uint256"}],name:"withdraw",outputs:[],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:"",type:"address"}],name:"balanceOf",outputs:[{name:"",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:"dst",type:"address"},{name:"wad",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[],name:"deposit",outputs:[],payable:!0,stateMutability:"payable",type:"function"},{constant:!0,inputs:[{name:"",type:"address"},{name:"",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:"src",type:"address"},{indexed:!0,name:"guy",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"src",type:"address"},{indexed:!0,name:"dst",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"dst",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"src",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Withdrawal",type:"event"}];function ya(e){return e.toLowerCase().startsWith("tb1")||e.toLowerCase().startsWith("bc1")}function nt(e){if(!ya(e))return !1;try{return base.bech32.decode(e),!0}catch{return !1}}function Ie(e,t){return nt(e)?e.toLowerCase().startsWith(t?"bc":"tb"):!1}var ke=zod.z.string().refine(e=>viem.isAddress(e),e=>({message:`Invalid EVM address '${e}'`})).transform(e=>e),la=zod.z.string().refine(e=>nt(e),e=>({message:`Invalid BTC address '${e}'`})),xe=(i=>(i.AVALANCHE="avalanche",i.ETHEREUM="ethereum",i.BITCOIN="bitcoin",i.UNKNOWN="",i))(xe||{}),Te=zod.z.nativeEnum(xe),Ta=zod.z.object({tokenName:zod.z.string(),nativeNetwork:Te,denomination:zod.z.number()}),ga=Ta.extend({nativeContractAddress:ke,wrappedContractAddress:ke,wrappedNetwork:Te}),pn=zod.z.object({disableFrontend:zod.z.boolean(),addressBlocklist:zod.z.array(zod.z.string())}),cn=pn.extend({assets:zod.z.record(zod.z.string(),ga),networks:zod.z.record(Te,zod.z.union([zod.z.number(),zod.z.undefined()])),walletAddresses:zod.z.record(Te,ke)}),dn=zod.z.object({minimumConfirmations:zod.z.record(Te,zod.z.optional(zod.z.number()))}),Aa=dn.extend({unwrapFeeApproximation:zod.z.record(zod.z.string(),zod.z.string()),wrapFeeApproximation:zod.z.record(zod.z.string(),zod.z.string())}),Me=zod.z.object({minimumFeeAmount:zod.z.string(),maximumFeeAmount:zod.z.string(),feePercentage:zod.z.number(),feePercentageDecimals:zod.z.number()}),Ca=dn.extend({unwrapFeeApproximation:zod.z.record(zod.z.string(),Me),wrapFeeApproximation:zod.z.record(zod.z.string(),Me)}),ha=zod.z.object({critical:cn,nonCritical:Aa}),Ea=zod.z.object({critical:cn,nonCritical:Ca}),ba=zod.z.object({tokenName:zod.z.string(),bech32AddressPrefix:zod.z.union([zod.z.literal("tb"),zod.z.literal("bc")]),wrappedContractAddress:ke,wrappedNetwork:Te}),va=pn.extend({addressBlocklist:zod.z.array(zod.z.string()),avalancheChainId:zod.z.number(),bitcoinAssets:zod.z.record(zod.z.string(),ba),walletAddresses:zod.z.object({btc:la,avalanche:ke})}),Ia=zod.z.object({dustThreshold:zod.z.number(),wrapFeeEstimate:zod.z.object({minimumFeeAmount:zod.z.string(),maximumFeeAmount:zod.z.string(),feePercentage:zod.z.number(),feePercentageDecimals:zod.z.number()}),unwrapFeeEstimate:zod.z.object({bridgeToll:zod.z.object({minimumFeeAmount:zod.z.string(),maximumFeeAmount:zod.z.string(),feePercentage:zod.z.number(),feePercentageDecimals:zod.z.number()}),estimatedTxFee:zod.z.object({constAmount:zod.z.number(),numeratorPerSat:zod.z.number(),denominatorPerSat:zod.z.number()})})}),ka=zod.z.object({wrapFeeAmount:zod.z.number(),constUnwrapFeeAmount:zod.z.number(),unwrapFeeNumerator:zod.z.number(),unwrapFeeDenominator:zod.z.number(),dustThreshold:zod.z.number()}),xa=zod.z.object({minimumConfirmations:zod.z.number(),minimumOnboardSize:zod.z.number(),currentBridgeFeeEstimate:zod.z.union([Ia,ka])}),Ba=zod.z.object({networkInfo:zod.z.record(zod.z.string(),xa)}),un=zod.z.object({criticalBitcoin:va,nonCriticalBitcoin:Ba}),wa=zod.z.intersection(Ea,un),Na=zod.z.intersection(ha,un),yn=zod.z.union([wa,Na]);var Ra=e=>"eip155:1"===e||"eip155:11155111"===e,rt=e=>Ra(e.chainId);var Be=e=>"eip155:43113"===e||"eip155:43114"===e,He=e=>Be(e.chainId);var Ve=e=>e==="bip122:000000000019d6689c085ae165831e93"||e==="bip122:000000000933ea01ad0ee984209779ba";var fn=e=>e==="eip155:1"||e==="eip155:43114"||e==="bip122:000000000019d6689c085ae165831e93",Le=e=>!fn(e),J=e=>fn(e.chainId);var we={type:"native",name:"Ether",symbol:"ETH",decimals:18};var ge=({destinations:e,...t})=>t;var Pa=e=>({source:e.nativeTokenConfig.ethereumToken,target:e.nativeTokenConfig.avalancheToken,ethToAva:!0}),ln=(e,t)=>{if(!U(t))throw new l("ASSET_NOT_SUPPORTED",`Wrong token type: ${t.type}`);return lodash.isEqual(e,ge(t))},Da=(e,t)=>{if(!U(t))throw new l("ASSET_NOT_SUPPORTED",`Wrong token type: ${t.type}`);let r=e.ethereumTokens[t.address];if(!r||!ln(r.token,t))throw new l("ASSET_NOT_SUPPORTED",`Unable to find matching ethereum token in config: ${t.symbol}`);let n=e.avalancheTokens[r.target.tokenAddress];if(!n)throw new l("ASSET_NOT_SUPPORTED",`Unable to get avalanche token in config: ${t.symbol}`);return {source:r,target:n,ethToAva:!0}},_a=(e,t)=>{if(!U(t))throw new l("ASSET_NOT_SUPPORTED",`Wrong token type: ${t.type}`);let r=e.avalancheTokens[t.address];if(!r||!ln(r.token,t))throw new l("ASSET_NOT_SUPPORTED",`Unable to find matching avalanche token in config: ${t.symbol}`);let n=e.ethereumTokens[r.target.tokenAddress];if(!n)throw new l("ASSET_NOT_SUPPORTED",`Unable to get ethereum token in config: ${t.symbol}`);return {source:r,target:n,ethToAva:!1}},Fa=(e,t)=>{let{reference:r}=b.toJSON(e.chainId),{reference:n}=b.toJSON(t.chainId);return [{source:1,target:43114},{source:43114,target:1},{source:11155111,target:43113},{source:43113,target:11155111}].some(({source:s,target:o})=>s.toString()===r&&o.toString()===n)},V=({sourceChain:e,targetChain:t,amount:r,asset:n},i)=>{if(e.chainId===t.chainId)throw new l("IDENTICAL_CHAINS_PROVIDED",`SourceChain and TargetChain need to be different network. But found the same chainId: ${e.chainId}`);if(!Fa(e,t))throw new l("INVALID_PARAMS","SourceChain and TargetChain combination is not correct or the chains provided are not supported");if(r<=0n)throw new l("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");return ce(n)&&n.symbol===we.symbol&&rt(e)?Pa(i):rt(e)?Da(i,n):_a(i,n)};async function Tn(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s,fromAddress:o}=t;if(!viem.isAddress(o))throw new l("INVALID_PARAMS",`Invalid fromAddress: ${o}`);let a=e.walletAddresses.ethereum,{source:m,ethToAva:p}=V({sourceChain:r,targetChain:n,asset:i,amount:s},e),c=h({chain:r}),d=0n;if(ce(i)&&p){d+=await c.estimateContractGas({address:m.token.address,abi:Fe,functionName:"deposit",account:o});try{d+=await c.estimateContractGas({address:m.token.address,abi:R,functionName:"transfer",account:o,args:[a,s]});}catch{let u=viem.encodeFunctionData({abi:R,functionName:"transfer",args:[a,s]});d+=await c.estimateGas({data:u,account:o,to:a,value:s});}}else d=await c.estimateContractGas({address:m.token.address,abi:p?R:le,functionName:p?"transfer":"unwrap",account:o,args:p?[a,s]:[s,0]});return d}var pe=e=>{try{return Me.parse(e),!0}catch{return !1}};var Ha=(e,{max:t,min:r})=>e>t?t:e<r?r:e,Ae=(e,t)=>{let{minimumFeeAmount:r,maximumFeeAmount:n,feePercentage:i,feePercentageDecimals:s}=t,o=BigInt(r),a=BigInt(n),m=i/10**s/100,p=Number(e)*m,c=BigInt(Math.ceil(p));return Ha(c,{min:o,max:a})};async function Z(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s}=t,{source:o,target:a,ethToAva:m}=V({sourceChain:r,targetChain:n,asset:i,amount:s},e),p=m?o.wrapFeeApproximation:o.unwrapFeeApproximation;if(pe(p)){let d=Ae(s,p);return {[a.chainId]:{[a.token.address]:d}}}let c=p??0n;return {[a.chainId]:{[a.token.address]:c}}}async function gn(e,t){let{target:r}=V(t,e),n=await Z(e,t);return {asset:r.token,amount:t.amount-(n[r.chainId]?.[r.token.address]??0n)}}function An(e){let t=Object.values(e.ethereumTokens).reduce((s,o)=>{if(o.token.symbol==="USDC")return s;let a=o.chainId,m=o.target.chainId,p={...o.token,destinations:{[m]:["avalanche-evm"]}},c=s[a]??[];return c.push(p),s[a]=c,s},{}),r=Object.values(e.avalancheTokens).reduce((s,o)=>{let a=o.chainId,m=o.target.chainId,p={...o.token,destinations:{[m]:["avalanche-evm"]}},c=s[a]??[];return c.push(p),s[a]=c,s},t),n="eip155:1";r[n]&&r[n].push({...we,destinations:{["eip155:43114"]:["avalanche-evm"]}});let i="eip155:11155111";return r[i]&&r[i].push({...we,destinations:{["eip155:43113"]:["avalanche-evm"]}}),r}var Cn=3n;async function Ge(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s}=t,{source:o,target:a,ethToAva:m}=V({sourceChain:r,targetChain:n,asset:i,amount:s},e),p=m?o.wrapFeeApproximation:o.unwrapFeeApproximation;if(pe(p)){let u=p.minimumFeeAmount;return BigInt(u)*Cn}let d=(await Z(e,t))[a.chainId]?.[a.token.address];if(d===void 0)throw new l("INVALID_PARAMS",`Unable to get static fee for ${i.symbol}`);return d*Cn}var Ue=()=>e=>({transactionHash:e.transactionHash}),hn=({params:{bridgeTransfer:{fromAddress:e}},transferData:{target:t,ethToAva:r},targetClient:n,config:i})=>async({fromBlock:s,toBlock:o,metadata:a})=>{if(!s)return;let m=t.token.address,p=r?_:i.walletAddresses.ethereum,c=r?void 0:{src:p,dst:e},d=r?{inputs:[{indexed:!1,name:"to",type:"address"},{indexed:!1,name:"amount",type:"uint256"},{indexed:!1,name:"feeAddress",type:"address"},{indexed:!1,name:"feeAmount",type:"uint256"},{indexed:!1,name:"originTxId",type:"bytes32"}],name:"Mint",type:"event"}:{inputs:[{indexed:!0,name:"src",type:"address"},{indexed:!0,name:"dst",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Transfer",type:"event"},u=await n.getLogs({address:m,event:d,args:c,fromBlock:s,toBlock:o}),y=r?u.find(T=>at(T)&&T.args.originTxId===a?.transactionHash):u.at(-1);if(!lodash.isNil(y))return y.transactionHash},at=e=>Ua(e)?Object.keys(e.args).includes("originTxId"):!1,Ua=e=>Object.keys(e).includes("args"),Ne=e=>lodash.isObject(e)&&viem.isHex(e.transactionHash);var za=async(e,t)=>{let{bridgeTransfer:r}=t,{targetChain:n,sourceChain:i,asset:s,amount:o}=r,a=V({sourceChain:i,targetChain:n,asset:s,amount:o},e),m=h({chain:r.targetChain}),p=hn({params:t,transferData:a,targetClient:m,config:e}),c=oe({targetClient:m,getTargetTxHash:p,checkMetadata:Ne,trackingParams:t,trackingConfig:k});return D({promise:c,delay:1e3*30,startAfter:k.initialDelayMs})},Wa=async e=>{let{sourceChain:t,targetChain:r}=e.bridgeTransfer,n=h({chain:t}),i=h({chain:r}),s=Ue(),o=se({sourceClient:n,targetClient:i,getMetadata:s,checkMetadata:Ne,trackingParams:e,trackingConfig:k});return D({promise:o,delay:1e3*30,startAfter:k.initialDelayMs})};function En(e,t){let r,n=()=>{r?.();};return {result:(async()=>{let{bridgeTransfer:s,updateListener:o}=t,{result:a,cancel:m}=await Wa({bridgeTransfer:s,updateListener:o});r=m;let p=await a,{result:c,cancel:d}=await za(e,{updateListener:o,bridgeTransfer:p});return r=d,c})(),cancel:n}}var ze=async({amount:e,source:t,sourceChain:r,fromAddress:n,sign:i,onStepChange:s,gasSettings:o})=>{let a=h({chain:r}),m={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};s?.(m);let p=viem.encodeFunctionData({abi:le,functionName:"unwrap",args:[e,0n]}),c=await i({from:n,to:t.token.address,data:p,...o?{maxFeePerGas:o.price,maxPriorityFeePerGas:o.tip}:null,chainId:b.toEip155HexChainId(b.toJSON(r.chainId))},d=>a.sendRawTransaction({serializedTransaction:d}),m);return await a.waitForTransactionReceipt({hash:c,pollingInterval:1e3}),c};var bn={ethereum:"0x6b7a87899490EcE95443e979cA9485CBE7E71522",avalanche:"0x9b17bAADf0f21F03e35249e0e59723F34994F806"},qa=async({amount:e,config:t,source:r,sourceChain:n,fromAddress:i,sign:s,onStepChange:o,gasSettings:a})=>{let m=t.walletAddresses.ethereum,p=h({chain:n}),c={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};o?.(c);let d=viem.encodeFunctionData({abi:R,functionName:"transfer",args:[m,e]}),u=await s({from:i,to:r.token.address,data:d,...a?{maxFeePerGas:a.price,maxPriorityFeePerGas:a.tip}:null,chainId:b.toEip155HexChainId(b.toJSON(n.chainId))},y=>p.sendRawTransaction({serializedTransaction:y}),c);return await p.waitForTransactionReceipt({hash:u,pollingInterval:1e3}),u},$a=async({config:e,fromAddress:t,sourceChain:r,targetChain:n})=>{if(e.environment!=="production"&&!J(r)&&!J(n))return !1;let i=e.nativeTokenConfig.ethereumToken,s=e.nativeTokenConfig.avalancheToken;try{return await h({chain:r}).readContract({address:i.token.address,abi:R,functionName:"allowance",args:[t,bn.ethereum]})!==0n?!0:await h({chain:n}).readContract({address:s.token.address,abi:R,functionName:"allowance",args:[t,bn.avalanche]})!==0n}catch{return !1}},Xa=async({amount:e,config:t,fromAddress:r,source:n,sourceChain:i,targetChain:s,sign:o,onStepChange:a,gasSettings:m})=>{let p=t.walletAddresses.ethereum,c=h({chain:i});if(!He(s))throw new l("INVALID_PARAMS","Invalid chain combinations");if(await $a({config:t,fromAddress:r,sourceChain:i,targetChain:s}))throw new l("VULNERABLE_TOKEN_APPROVAL_ADDRESS","Address has vulnerable token approvals");let u={currentSignature:1,currentSignatureReason:"wrap-token",requiredSignatures:2};a?.(u);let y=viem.encodeFunctionData({abi:Fe,functionName:"deposit"}),T=await o({from:r,to:n.token.address,value:e,data:y,...m?{maxFeePerGas:m.price,maxPriorityFeePerGas:m.tip}:null,chainId:b.toEip155HexChainId(b.toJSON(i.chainId))},A=>c.sendRawTransaction({serializedTransaction:A}),u);await c.waitForTransactionReceipt({hash:T,pollingInterval:1e3});let g={currentSignature:2,currentSignatureReason:"tokens-transfer",requiredSignatures:2};a?.(g);let C=viem.encodeFunctionData({abi:R,functionName:"transfer",args:[p,e]}),v=await o({from:r,to:n.token.address,data:C,...m?{maxFeePerGas:m.price,maxPriorityFeePerGas:m.tip}:null,chainId:b.toEip155HexChainId(b.toJSON(i.chainId))},A=>c.sendRawTransaction({serializedTransaction:A}),g);return await c.waitForTransactionReceipt({hash:v,pollingInterval:1e3}),v},vn=async({amount:e,asset:t,config:r,fromAddress:n,source:i,sourceChain:s,targetChain:o,sign:a,onStepChange:m,gasSettings:p})=>ce(t)?Xa({amount:e,config:r,fromAddress:n,source:i,sourceChain:s,targetChain:o,sign:a,onStepChange:m,gasSettings:p}):qa({amount:e,config:r,source:i,sourceChain:s,fromAddress:n,sign:a,onStepChange:m,gasSettings:p});var Ce=(e,t)=>{let r=t.map(i=>i.toLowerCase()),n=e.find(i=>r.includes(i.toLowerCase()));if(n)throw new l("ADDRESS_IS_BLOCKED",n)};async function In(e,t,r){let{sourceChain:n,targetChain:i,asset:s,amount:o,fromAddress:a,toAddress:m,onStepChange:p,gasSettings:c}=t;if(a!==m)throw new l("INVALID_PARAMS","fromAddress and toAddress do not match");Ce([a,m],e.addressBlocklist);let d=await Z(e,{asset:s,amount:o,sourceChain:n,targetChain:i}),{source:u,target:y,ethToAva:T}=V({sourceChain:n,targetChain:i,asset:s,amount:o},e),g=await Ge(e,{asset:s,amount:o,sourceChain:n,targetChain:i});if(o<g)throw new l("INVALID_PARAMS",`Minimum transfer amount is ${g.toString()}`);let C=He(n)?e.minimumConfirmations.avalanche:e.minimumConfirmations.ethereum,v=d[y.chainId]?.[y.token.address]??0n,A;T?A=await vn({amount:o,asset:s,config:e,fromAddress:a,source:u,sourceChain:n,targetChain:i,sign:r.sign,onStepChange:p,gasSettings:c}):A=await ze({amount:o,fromAddress:a,source:u,sourceChain:n,sign:r.sign,onStepChange:p,gasSettings:c});let x=Date.now(),S=h({chain:t.targetChain}),F;try{F=await S.getBlockNumber();}catch(he){console.error(he);}return {type:"avalanche-evm",environment:e.environment,fromAddress:t.fromAddress,toAddress:t.toAddress,amount:t.amount,asset:s,bridgeFee:v,sourceChain:t.sourceChain,sourceStartedAt:x,sourceTxHash:A,sourceConfirmationCount:0,sourceRequiredConfirmationCount:C,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:F}}var kn=(e,t)=>{let r=e.critical.assets,{ethereum:n,avalanche:i}=e.critical.networks;if(n===void 0||i===void 0)throw new w("WARDEN_CONFIG_MISSING_NETWORK","Critical networks info is missing from wardenConfig");let s=e.critical.walletAddresses.avalanche,o=e.critical.walletAddresses.ethereum;if(!s||!o)throw new w("CONFIG_NOT_AVAILABLE","Wallet address is missing from the critical config.");let a=Object.entries(r).reduce((T,[g,C])=>{let v={type:"erc20",address:C.nativeContractAddress,name:C.tokenName,symbol:g,decimals:C.denomination},A=e.nonCritical.wrapFeeApproximation[g];return T[C.nativeContractAddress]={chainId:`eip155:${n}`,token:v,target:{chainId:`eip155:${i}`,tokenAddress:C.wrappedContractAddress},wrapFeeApproximation:pe(A)?A:A?BigInt(A):void 0},T},{}),m=Object.values(a).find(T=>T.token.symbol==="WETH");if(!m)throw new w("CONFIG_NOT_AVAILABLE","WETH info is missing from config");let p=Object.entries(r).reduce((T,[g,C])=>{let v={type:"erc20",address:C.wrappedContractAddress,name:C.tokenName,symbol:`${g}.e`,decimals:C.denomination},A=e.nonCritical.unwrapFeeApproximation[g];return T[C.wrappedContractAddress]={chainId:`eip155:${i}`,token:v,target:{chainId:`eip155:${n}`,tokenAddress:C.nativeContractAddress},unwrapFeeApproximation:pe(A)?A:A?BigInt(A):void 0},T},{}),c=p[m.target.tokenAddress];if(!c)throw new w("CONFIG_NOT_AVAILABLE","WETH.e info is missing from config");let d=e.nonCritical.minimumConfirmations.avalanche,u=e.nonCritical.minimumConfirmations.ethereum;if(!d||!u)throw new w("CONFIG_NOT_AVAILABLE","Minimum confirmation info is missing");return {addressBlocklist:e.critical.addressBlocklist,ethereumTokens:a,avalancheTokens:p,minimumConfirmations:{avalanche:d,ethereum:u},environment:t,walletAddresses:{avalanche:s,ethereum:o},nativeTokenConfig:{ethereumToken:m,avalancheToken:c}}};var xn={environment:"dev",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.test.json",configMismatchThreshold:1,wardenConfigURLs:["https://warden1-avax-dev-storage.s3.amazonaws.com/bridge_settings.json","https://warden2-avax-dev-storage.s3.amazonaws.com/bridge_settings.json","https://warden3-avax-dev-storage.s3.amazonaws.com/bridge_settings.json"],disabledTokensOnNetwork:{avalanche:[],ethereum:["FAU"]}},Bn={...xn,environment:"staging"},wn={...Bn,environment:"test",configMismatchThreshold:2,wardenConfigURLs:["https://ava-warden-bucket.s3.eu-central-1.amazonaws.com/bridge_settings.json","https://ava-warden-testnet.s3.us-west-1.amazonaws.com/bridge_settings.json","https://assets.warden-testnet.avalanche.protofire.io/bridge_settings.json","https://avalabs-warden-test-blob.s3.amazonaws.com/bridge_settings.json","https://avawarden.s3.amazonaws.com/bridge_settings.json","https://blob-storage-testnet.warden-avascan.info/bridge_settings.json","https://chainstack-ava-warden-testnet.s3.us-west-2.amazonaws.com/bridge_settings.json","https://warden-mgmt-prod-testnet.blockdaemon.com/bridge_settings.json"]},Ka={...wn,environment:"production",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.json",wardenConfigURLs:["https://ava-warden-bucket-prod.s3.eu-central-1.amazonaws.com/bridge_settings.json","https://ava-warden-mainnet.s3.us-west-1.amazonaws.com/bridge_settings.json","https://assets.warden-mainnet.avalanche.protofire.io/bridge_settings.json","https://avawarden-prod.s3.amazonaws.com/bridge_settings.json","https://blob-storage-mainnet.warden-avascan.info/bridge_settings.json","https://chainstack-ava-warden-mainnet.s3.us-west-2.amazonaws.com/bridge_settings.json","https://warden-mgmt-prod-mainnet.blockdaemon.com/bridge_settings.json","https://warden-avax-storage.s3.amazonaws.com/bridge_settings.json"],disabledTokensOnNetwork:{avalanche:[],ethereum:["CRV"]}},Ja={production:Ka,staging:Bn,test:wn,dev:xn},We=e=>Ja[e];var ei=async e=>{let t=[];e.forEach(i=>t.push(fetch(i)));let r=await Promise.allSettled(t),n=[];for(let i of r)if(!(i.status==="rejected"||!i.value||!i.value.ok))try{let s=await i.value.json(),o=yn.parse(s);n.push(o);}catch(s){console.error(s);}return n},ti=e=>e.map(t=>{if(t.critical.disableFrontend)throw new w("CONFIG_NOT_AVAILABLE","Disable frontend");let r=e.reduce((n,i)=>n+(lodash.isEqual(t.critical,i.critical)?1:0),0);return {config:t,count:r}}),je=lodash.memoize(async e=>{let t=e.wardenConfigURLs,r=await ei(t),n=ti(r),i=lodash.maxBy(n,s=>s.count);if(!i||i.count<e.wardenConfigURLs.length-e.configMismatchThreshold)throw new w("WARDEN_CONFIG_MISMATCH","Warden config mismatch");return i.config});var Nn=async e=>{let t=We(e),r=await je(t);return kn(r,e)};function Rn(e,t){let r="eip155:43113"===t.chainId||"eip155:11155111"===t.chainId,n=r?"eip155:43113":"eip155:43114",i=r?"eip155:11155111":"eip155:1";return viem.isAddressEqual(t.from,e.walletAddresses.ethereum)||viem.isAddressEqual(t.to,e.walletAddresses.avalanche)?{isBridgeTx:!0,sourceChainId:n,targetChainId:i,bridgeType:"avalanche-evm"}:viem.isAddressEqual(t.from,e.walletAddresses.avalanche)||viem.isAddressEqual(t.to,e.walletAddresses.ethereum)?{isBridgeTx:!0,sourceChainId:i,targetChainId:n,bridgeType:"avalanche-evm"}:{isBridgeTx:!1}}var Sn=async(e,t)=>{let r=await Nn(e);return {type:"avalanche-evm",analyzeTx:n=>{try{return Rn(r,ue(n))}catch{return {isBridgeTx:!1}}},estimateGas:n=>Tn(r,W(n)),estimateReceiveAmount:n=>gn(r,W(n)),getAssets:()=>An(r),getFees:n=>Z(r,n),transferAsset:n=>In(r,ye(n),t),trackTransfer:n=>En(r,n),getMinimumTransferAmount:n=>Ge(r,n)}};var st=e=>"wrapFeeEstimate"in e,Q=e=>"wrapFeeEstimate"in e||"unwrapFeeEstimate"in e;var Pn=(e,t)=>{let r=e.criticalBitcoin,n=r.bitcoinAssets.btc;if(!n)throw new w("CONFIG_NOT_AVAILABLE","Bitcoin asset info is missing from config");let i=e.nonCriticalBitcoin.networkInfo.btc;if(!i)throw new w("CONFIG_NOT_AVAILABLE","Bitcoin network info was not found.");let s=i.currentBridgeFeeEstimate,o=st(s)?{wrapFeeEstimate:s.wrapFeeEstimate}:{wrapFeeAmount:s.wrapFeeAmount},a=n.bech32AddressPrefix==="bc"?"bip122:000000000019d6689c085ae165831e93":"bip122:000000000933ea01ad0ee984209779ba",m={chainId:a,token:{name:n.tokenName,symbol:"BTC",decimals:8,type:"native"},target:{networkId:`eip155:${r.avalancheChainId}`,tokenAddress:n.wrappedContractAddress},bridgeFeeEstimate:o},p=st(s)?{unwrapFeeEstimate:s.unwrapFeeEstimate}:{constUnwrapFeeAmount:s.constUnwrapFeeAmount,unwrapFeeNumerator:s.unwrapFeeNumerator,unwrapFeeDenominator:s.unwrapFeeDenominator},c={chainId:`eip155:${r.avalancheChainId}`,token:{name:n.tokenName,symbol:"BTC.b",decimals:8,type:"erc20",address:n.wrappedContractAddress},target:{networkId:a},bridgeFeeEstimate:p};return {addressBlocklist:e.criticalBitcoin.addressBlocklist,environment:t,dustThreshold:s.dustThreshold,minimumOnboardSize:i.minimumOnboardSize,minimumConfirmations:{bitcoin:i.minimumConfirmations,avalanche:e.nonCritical.minimumConfirmations.avalanche??1},nativeTokenConfig:{bitcoinToken:m,avalancheToken:c},walletAddresses:{bitcoin:r.walletAddresses.btc,avalanche:r.walletAddresses.avalanche}}};var $e=async e=>{try{let t=We(e),r=await je(t);return Pn(r,e)}catch{throw new w("CONFIG_NOT_AVAILABLE")}};function _n(e,t){let{chainId:r,from:n,to:i,tokenTransfers:s}=t,o=Be(r),a=Ve(r);if(!o&&!a)return {isBridgeTx:!1};let m=Le(r),p=m?"eip155:43113":"eip155:43114",c=m?"bip122:000000000933ea01ad0ee984209779ba":"bip122:000000000019d6689c085ae165831e93",d=a&&lodash.isEqual(i.toLowerCase(),e.walletAddresses.bitcoin.toLowerCase())&&s.some(y=>y.symbol==="BTC");return o&&lodash.isEqual(n,e.walletAddresses.avalanche)&&s.some(y=>y.symbol==="BTC.b"&&y.from===_)||d?{isBridgeTx:!0,sourceChainId:c,targetChainId:p,bridgeType:"avalanche-btc-ava"}:{isBridgeTx:!1}}var Fn=zod.z.object({txHash:zod.z.string(),txHex:zod.z.optional(zod.z.string()),index:zod.z.number(),value:zod.z.number(),script:zod.z.string(),blockHeight:zod.z.number(),confirmations:zod.z.number()}),Mn=zod.z.array(Fn);Fn.extend({script:zod.z.optional(zod.z.string())});var ni=zod.z.object({address:zod.z.string(),value:zod.z.number()}),On=zod.z.array(ni);function ai(e){let t=[];return e.filter(r=>{let n=r.txHash+r.index.toString();return t.includes(n)?!1:(t.push(n),!0)})}async function Xe(e,t,r,n,i,s){let o=ai(i),a=[{address:e,value:Number(r)}],{inputs:m,outputs:p,fee:c}=ri__default.default(o,a,n);if(typeof c!="number")throw new l("UNKNOWN","Unable to choose utxo properly");if(!m||!p||!p.length)return {fee:c};let d=await s.getScriptsForUtxos(m),u=Mn.parse(d),y=[p[0]],T=p[1];T&&y.push({address:t,value:T.value});let g=On.parse(y);return {inputs:u,outputs:g,fee:c}}var si=(e,t)=>[{source:"bip122:000000000019d6689c085ae165831e93",target:"eip155:43114"},{source:"bip122:000000000933ea01ad0ee984209779ba",target:"eip155:43113"}].some(({source:n,target:i})=>n===e.chainId&&i===t.chainId),oi=(e,t)=>lodash.isEqual(e,ge(t)),L=(e,t)=>{let{sourceChain:r,targetChain:n,amount:i,asset:s}=e;if(!si(r,n))throw new l("INVALID_PARAMS","SourceChain and TargetChain combination is not valid");if(i<=0n)throw new l("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let o=t.nativeTokenConfig.bitcoinToken;if(!oi(o.token,s))throw new l("ASSET_NOT_SUPPORTED","Incorrect Asset was provided");return {source:o,target:t.nativeTokenConfig.avalancheToken,btcToAva:!0}};async function Hn(e,t,r){let{fromAddress:n,sourceChain:i,targetChain:s,asset:o,amount:a}=t;L({sourceChain:i,targetChain:s,asset:o,amount:a},e);let m=e.walletAddresses.bitcoin,p=1,{utxos:c}=await r.getUtxoBalance(n,!1),{fee:d}=await Xe(m,n,a,p,c,r);return BigInt(d)}async function Y(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:s}=t,{source:o,target:a}=L({sourceChain:r,targetChain:n,amount:i,asset:s},e);if(Q(o.bridgeFeeEstimate)){let m=Ae(i,o.bridgeFeeEstimate.wrapFeeEstimate);return {[a.chainId]:{[a.token.address]:m}}}return {[a.chainId]:{[a.token.address]:BigInt(o.bridgeFeeEstimate.wrapFeeAmount)}}}async function Vn(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s}=t,{target:o}=L({sourceChain:r,targetChain:n,asset:i,amount:s},e),a=await Y(e,t);return {asset:o.token,amount:t.amount-(a[o.chainId]?.[o.token.address]??0n)}}function Ln(e){let t=e.nativeTokenConfig.bitcoinToken,r={...t.token,destinations:{[t.target.networkId]:["avalanche-btc-ava"]}};return {[t.chainId]:[r]}}async function Gn(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:s}=t,o=L({sourceChain:r,targetChain:n,amount:i,asset:s},e),a=await mi(e,t,o),m=e.minimumOnboardSize;return BigInt(Math.max(a*4,m))}async function mi(e,t,{source:r,target:n}){if(Q(r.bridgeFeeEstimate))return Number(r.bridgeFeeEstimate.wrapFeeEstimate.minimumFeeAmount);{let i=await Y(e,t);return Number(i[n.chainId]?.[n.token.address])}}var Un=({targetClient:e,checkMetadata:t,trackingParams:{bridgeTransfer:r,updateListener:n},trackingConfig:{trackingLimitMs:i},bitcoinFunctions:s})=>{let o=lodash.cloneDeep(r);return async m=>{let{sourceTxHash:p}=r;if(o.completedAt||t(o.metadata))return m(o);if(o.sourceStartedAt+i<=Date.now())return o=E(o,{completedAt:Date.now(),errorCode:5004},n),m(o);let{confirmations:c,fees:d}=await s.getTransaction(p);if(!o.sourceNetworkFee){let T=BigInt(Math.ceil(d));o=E(o,{sourceNetworkFee:T},n);}let u=c>o.sourceConfirmationCount,y=c>=o.sourceRequiredConfirmationCount;if(u){let T={};T.sourceConfirmationCount=Number(c),y||(T.targetStartBlockNumber=await e.getBlockNumber()),o=E(o,T,n);}if(y)return o.targetStartBlockNumber||(o=E(o,{targetStartBlockNumber:await e.getBlockNumber()},n)),o=E(o,{targetStartedAt:Date.now(),metadata:{transactionHash:p}},n),m(o)}};var jn=({targetClient:e,getTargetTxHash:t,checkMetadata:r,trackingParams:{bridgeTransfer:n,updateListener:i},trackingConfig:{trackingLimitMs:s,maxBlocks:o}})=>{if(!n.completedAt&&!r(n.metadata))throw new l("INVALID_PARAMS","metadata is missing");if(!n.targetStartBlockNumber)throw new l("INVALID_PARAMS","targetStartBlockNumber is missing");let a=lodash.cloneDeep(n);return async p=>{if(a.completedAt)return p(a);if(a.sourceStartedAt+s<=Date.now())return a=E(a,{completedAt:Date.now(),errorCode:5004},i),p(a);if(!a.targetStartBlockNumber)throw new Error("unreachable");if(!a.targetTxHash){let T=await e.getBlockNumber(),g=a.targetStartBlockNumber-o,C=g>=0n?g:"earliest",v=a.targetStartBlockNumber+o,A=v<T?v:"latest",x=await t({fromBlock:C,toBlock:A,metadata:a.metadata});if(x)a=E(a,{targetTxHash:x},i);else {a=E(a,{targetStartBlockNumber:T},i);return}}if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let c=await e.getTransactionReceipt({hash:a.targetTxHash});if(!a.targetNetworkFee){let T=await e.getTransaction({hash:a.targetTxHash}),g=K(T,c);g&&(a=E(a,{targetNetworkFee:g},i));}if(c.status==="reverted")return a=E(a,{completedAt:Date.now(),errorCode:5005},i),p(a);if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let d=await e.getTransactionConfirmations({hash:a.targetTxHash}),u=d>a.targetConfirmationCount,y=d>=a.targetRequiredConfirmationCount;if(u&&(a=E(a,{targetConfirmationCount:Number(d)},i)),!!y)return a=E(a,{completedAt:Date.now()},i),p(a)}};var ot=e=>lodash.isObject(e)&&!!e.transactionHash,qn=({transferData:{target:e},targetClient:t})=>async({fromBlock:r,toBlock:n,metadata:i})=>{if(!r)return;let s=e.token.address,o={inputs:[{indexed:!1,name:"to",type:"address"},{indexed:!1,name:"amount",type:"uint256"},{indexed:!1,name:"feeAddress",type:"address"},{indexed:!1,name:"feeAmount",type:"uint256"},{indexed:!1,name:"originTxId",type:"bytes32"},{indexed:!1,name:"originOutputIndex",type:"uint256"}],name:"Mint",type:"event"},m=(await t.getLogs({address:s,event:o,fromBlock:r,toBlock:n})).find(p=>at(p)&&p.args.originTxId===`0x${i?.transactionHash}`);if(!lodash.isNil(m))return m.transactionHash};var yi=async(e,t)=>{let{targetChain:r}=e.bridgeTransfer,n=h({chain:r}),i=Un({targetClient:n,trackingParams:e,trackingConfig:k,checkMetadata:ot,bitcoinFunctions:t});return D({promise:i,delay:1e3*60,startAfter:k.initialDelayMs})},fi=async(e,t)=>{let{bridgeTransfer:r}=e,n=h({chain:r.targetChain}),i=qn({transferData:t,targetClient:n}),s=jn({targetClient:n,getTargetTxHash:i,checkMetadata:ot,trackingParams:e,trackingConfig:k});return D({promise:s,delay:2e3,startAfter:k.initialDelayMs})};function $n(e,t,r){let n,i=()=>{n?.();};return {result:(async()=>{let{bridgeTransfer:o}=t,{targetChain:a,sourceChain:m,asset:p,amount:c}=o,d=L({sourceChain:m,targetChain:a,asset:p,amount:c},e),{result:u,cancel:y}=await yi(t,r);n=y;let T=await u,{result:g,cancel:C}=await fi({...t,bridgeTransfer:T},d);return n=C,g})(),cancel:i}}var Xn=async({config:e,amount:t,fromAddress:r,sign:n,onStepChange:i,bitcoinFunctions:s,gasSettings:o})=>{let a=o?Number(o.price):void 0,{low:m,high:p}=a?{low:a,high:a}:await s.getFeeRates(),c=e.environment==="production"?p:m,{utxos:d}=await s.getUtxoBalance(r,!1),u=e.walletAddresses.bitcoin,{inputs:y,outputs:T}=await Xe(u,r,t,c,d,s);if(!y||!T)throw new l("INVALID_PARAMS","Unable to create transaction");let g={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};return i?.(g),await n({inputs:y,outputs:T},s.issueRawTx,g)};async function Kn(e,t,r,n){let{fromAddress:i,toAddress:s,sourceChain:o,targetChain:a,asset:m,amount:p,onStepChange:c,gasSettings:d}=t;Ce([i,s],e.addressBlocklist);let{target:u}=L({sourceChain:o,targetChain:a,asset:m,amount:p},e),y=Date.now(),g=(await Y(e,{asset:m,amount:p,sourceChain:o,targetChain:a}))[u.chainId]?.[u.token.address]??0n,C=e.minimumConfirmations.bitcoin,v=await Xn({config:e,amount:p,sign:r.sign,onStepChange:c,fromAddress:i,bitcoinFunctions:n,gasSettings:d}),A=h({chain:a}),x;try{x=await A.getBlockNumber();}catch(F){console.error(F);}return {type:"avalanche-btc-ava",environment:e.environment,fromAddress:i,toAddress:s,amount:t.amount,asset:m,bridgeFee:g,sourceChain:o,sourceStartedAt:y,sourceTxHash:v,sourceConfirmationCount:0,sourceRequiredConfirmationCount:C,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:x}}var Jn=({fromAddress:e,toAddress:t,sourceChain:r,...n})=>{if(!viem.isAddress(t))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid toAddress was provided");let i=J(r);if(!Ie(e,i))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided: Make sure it is Btc Address from correct environment");return {fromAddress:e,toAddress:t,sourceChain:r,...n}},mt=({fromAddress:e,sourceChain:t,...r})=>{let n=J(t);if(!Ie(e,n))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided: Make sure it is Btc Address from correct environment");return {fromAddress:e,sourceChain:t,...r}};var Zn=async(e,t,r)=>{let n=await $e(e);return {type:"avalanche-btc-ava",analyzeTx:i=>_n(n,i),estimateGas:i=>Hn(n,mt(i),r),estimateReceiveAmount:i=>Vn(n,mt(i)),getAssets:()=>Ln(n),getFees:i=>Y(n,i),transferAsset:i=>Kn(n,Jn(i),t,r),trackTransfer:i=>$n(n,i,r),getMinimumTransferAmount:i=>Gn(n,i)}};function Yn(e,t){let{chainId:r,from:n,to:i,tokenTransfers:s}=t,o=Be(r),a=Ve(r);if(!o&&!a)return {isBridgeTx:!1};let m=Le(r),p=m?"eip155:43113":"eip155:43114",c=m?"bip122:000000000933ea01ad0ee984209779ba":"bip122:000000000019d6689c085ae165831e93",d=o&&lodash.isEqual(i.toLowerCase(),e.nativeTokenConfig.avalancheToken.token.address.toLowerCase())&&s.some(y=>y.to?.toLowerCase()===_.toLowerCase()&&y.symbol==="BTC.b"),u=a&&lodash.isEqual(n.toLowerCase(),e.walletAddresses.bitcoin.toLowerCase())&&s.some(y=>y.symbol==="BTC");return d||u?{isBridgeTx:!0,sourceChainId:p,targetChainId:c,bridgeType:"avalanche-ava-btc"}:{isBridgeTx:!1}}var gi=(e,t)=>[{source:"eip155:43114",target:"bip122:000000000019d6689c085ae165831e93"},{source:"eip155:43113",target:"bip122:000000000933ea01ad0ee984209779ba"}].some(({source:n,target:i})=>n===e.chainId&&i===t.chainId),Ai=(e,t)=>lodash.isEqual(e,ge(t)),G=(e,t)=>{let{sourceChain:r,targetChain:n,amount:i,asset:s}=e;if(!gi(r,n))throw new l("INVALID_PARAMS","SourceChain and TargetChain combination is not valid");if(i<=0n)throw new l("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let o=t.nativeTokenConfig.avalancheToken;if(!Ai(o.token,s))throw new l("ASSET_NOT_SUPPORTED","Incorrect Asset was provided");return {source:o,target:t.nativeTokenConfig.bitcoinToken,btcToAva:!1}};async function er(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s,fromAddress:o}=t,{source:a}=G({sourceChain:r,targetChain:n,asset:i,amount:s},e);return await h({chain:r}).estimateContractGas({address:a.token.address,abi:le,functionName:"unwrap",account:o,args:[s,0]})}async function ee(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:s}=t,{source:o}=G({sourceChain:r,targetChain:n,amount:i,asset:s},e);if(Q(o.bridgeFeeEstimate)){let{constAmount:a,numeratorPerSat:m,denominatorPerSat:p}=o.bridgeFeeEstimate.unwrapFeeEstimate.estimatedTxFee,c=a+m/p*Number(i),d=Ae(i,o.bridgeFeeEstimate.unwrapFeeEstimate.bridgeToll),u=BigInt(Math.ceil(c))+d;return {[n.chainId]:{NATIVE:BigInt(u)}}}else {let{constUnwrapFeeAmount:a,unwrapFeeNumerator:m,unwrapFeeDenominator:p}=o.bridgeFeeEstimate,c=a+m/p*Number(i),d=BigInt(Math.ceil(c));return {[n.chainId]:{NATIVE:BigInt(d)}}}}async function tr(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s}=t,{target:o}=G({sourceChain:r,targetChain:n,asset:i,amount:s},e),a=await ee(e,{sourceChain:r,targetChain:n,amount:s,asset:i});return {asset:o.token,amount:t.amount-(a[o.chainId]?.NATIVE??0n)}}function nr(e){let t=e.nativeTokenConfig.avalancheToken,r={...t.token,destinations:{[t.target.networkId]:["avalanche-ava-btc"]}};return {[t.chainId]:[r]}}async function rr(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:s}=t,o=G({sourceChain:r,targetChain:n,amount:i,asset:s},e),a=await Ci(e,t,o),m=e.dustThreshold;return BigInt(Math.ceil((a+m)*2))}async function Ci(e,t,{source:r}){if(Q(r.bridgeFeeEstimate)){let{constAmount:n,numeratorPerSat:i,denominatorPerSat:s}=r.bridgeFeeEstimate.unwrapFeeEstimate.estimatedTxFee,o=n+i/s*Number(t.amount);return Number(r.bridgeFeeEstimate.unwrapFeeEstimate.bridgeToll.minimumFeeAmount)+o}else {let n=await ee(e,t);return Number(n[t.targetChain.chainId]?.NATIVE)}}var ir=({sourceClient:e,getMetadata:t,checkMetadata:r,trackingParams:{bridgeTransfer:n,updateListener:i},trackingConfig:{trackingLimitMs:s},bitcoinFunctions:o})=>{let a=lodash.cloneDeep(n);return async p=>{if(a.completedAt||r(a.metadata))return p(a);if(a.sourceStartedAt+s<=Date.now())return a=E(a,{completedAt:Date.now(),errorCode:5004},i),p(a);if(!viem.isHash(a.sourceTxHash))return;let c=await e.getTransactionReceipt({hash:a.sourceTxHash});if(!a.sourceNetworkFee){let g=await e.getTransaction({hash:a.sourceTxHash}),C=K(g,c);C&&(a=E(a,{sourceNetworkFee:C},i));}if(c.status==="reverted")return a=E(a,{completedAt:Date.now(),errorCode:5005},i),p(a);if(!viem.isHash(a.sourceTxHash))return;let d=await e.getTransactionConfirmations({hash:a.sourceTxHash}),u=d>a.sourceConfirmationCount,y=d>=a.sourceRequiredConfirmationCount;if(u){let g={};g.sourceConfirmationCount=Number(d),y||(g.targetStartBlockNumber=BigInt(await o.getChainHeight())),a=E(a,g,i);}if(!y)return;a.targetStartBlockNumber||(a=E(a,{targetStartBlockNumber:BigInt(await o.getChainHeight())},i));let T=t(c);return a=E(a,{targetStartedAt:Date.now(),metadata:T},i),p(a)}};var sr=({trackingParams:{bridgeTransfer:e,updateListener:t},trackingConfig:{trackingLimitMs:r},config:n,bitcoinFunctions:i})=>{let{toAddress:s,targetStartBlockNumber:o,amount:a}=e;if(!e.targetStartBlockNumber)throw new l("INVALID_PARAMS","targetStartBlockNumber is missing");let m=lodash.cloneDeep(e);return async c=>{if(m.completedAt)return c(m);if(m.sourceStartedAt+r<=Date.now())return m=E(m,{completedAt:Date.now(),errorCode:5004},t),c(m);if(!m.targetStartBlockNumber)throw new Error("unreachable");let d;if(!m.targetTxHash){let{confirmed:y,unconfirmed:T}=await i.getUTXOs(s,!1),C=[...y.filter(v=>!o||v.blockHeight>=o).sort((v,A)=>v.blockHeight-A.blockHeight),...T];for(let v of C){if(d=await i.getTransaction(v.txHash),!d)return;if(d.addresses.includes(n.walletAddresses.bitcoin)){m=E(m,{targetTxHash:d.hash,targetNetworkFee:BigInt(d.fees),targetConfirmationCount:d.confirmations},t);let x=d.outputs.find(F=>F.addresses?.length===1&&F.addresses[0]===s),S=x&&BigInt(Math.ceil(Number(a)-x.value));S&&(m=E(m,{bridgeFee:S},t));break}}if(!m.targetTxHash)return}if(d||(d=await i.getTransaction(m.targetTxHash)),!d)return;if(d.confirmations>=m.targetRequiredConfirmationCount)return m=E(m,{completedAt:Date.now(),targetConfirmationCount:d.confirmations},t),c(m)}};var bi=async(e,t)=>{let{sourceChain:r}=e.bridgeTransfer,n=h({chain:r}),i=Ue(),s=ir({sourceClient:n,getMetadata:i,checkMetadata:Ne,trackingParams:e,trackingConfig:k,bitcoinFunctions:t});return D({promise:s,delay:2e3,startAfter:k.initialDelayMs})},vi=async(e,t,r)=>{let n=sr({trackingParams:t,trackingConfig:k,config:e,bitcoinFunctions:r});return D({promise:n,delay:1e3*60,startAfter:k.initialDelayMs})};function or(e,t,r){let n,i=()=>{n?.();};return {result:(async()=>{let{bridgeTransfer:o}=t,{targetChain:a,sourceChain:m,asset:p,amount:c}=o;G({sourceChain:m,targetChain:a,asset:p,amount:c},e);let{result:d,cancel:u}=await bi(t,r);n=u;let y=await d,{result:T,cancel:g}=await vi(e,{...t,bridgeTransfer:y},r);return n=g,T})(),cancel:i}}async function mr(e,t,r,n){let{sourceChain:i,targetChain:s,asset:o,amount:a,fromAddress:m,toAddress:p,onStepChange:c,gasSettings:d}=t;Ce([m,p],e.addressBlocklist);let{source:u}=G({sourceChain:i,targetChain:s,asset:o,amount:a},e),y=Date.now(),g=(await ee(e,{asset:o,amount:a,sourceChain:i,targetChain:s}))[s.chainId]?.NATIVE??0n,C=e.minimumConfirmations.avalanche,v=await ze({amount:a,source:u,sourceChain:i,fromAddress:m,sign:r.sign,onStepChange:c,gasSettings:d}),A=BigInt(await n.getChainHeight());return {type:"avalanche-ava-btc",environment:e.environment,fromAddress:m,toAddress:p,amount:t.amount,asset:o,bridgeFee:g,sourceChain:i,sourceStartedAt:y,sourceTxHash:v,sourceConfirmationCount:0,sourceRequiredConfirmationCount:C,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:A}}var cr=({fromAddress:e,toAddress:t,targetChain:r,...n})=>{if(!viem.isAddress(e))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided");let i=J(r);if(!Ie(t,i))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid toAddress was provided: Make sure it is Btc Address from correct environment");return {fromAddress:e,toAddress:t,targetChain:r,...n}},pt=({fromAddress:e,targetChain:t,...r})=>{if(!viem.isAddress(e))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided");return {fromAddress:e,targetChain:t,...r}};var dr=async(e,t,r)=>{let n=await $e(e);return {type:"avalanche-ava-btc",analyzeTx:i=>Yn(n,i),estimateGas:i=>er(n,pt(i)),estimateReceiveAmount:i=>tr(n,pt(i)),getAssets:()=>nr(n),getFees:i=>ee(n,i),transferAsset:i=>mr(n,cr(i),t,r),trackTransfer:i=>or(n,i,r),getMinimumTransferAmount:i=>rr(n,i)}};var ct={"avalanche-btc-ava":Zn,"avalanche-ava-btc":dr,"avalanche-evm":Sn,cctp:Ot,"ictt-erc20-erc20":mn},ki=async(e,t)=>{let r=await Promise.allSettled(t.map(async n=>{if(dt(n)){let s=ct[n.type];return [n.type,await s(e,n.signer,n.bitcoinFunctions)]}if(ut(n)){let s=ct[n.type];return [n.type,await s(e,n.signer,n.bitcoinFunctions)]}let i=ct[n.type];return [n.type,await i(e,n.signer)]}));return new Map(lodash.compact(r.map(n=>n.status==="fulfilled"?n.value:void 0)))},te=(e,t,r)=>{let n=t.destinations[r];for(let i of n??[]){let s=e.get(i);if(s)return {bridge:s,type:i}}throw new Se};var oT=({environment:e,enabledBridgeServices:t})=>({canTransferAsset:(u,y)=>{try{return te(t,u,y),!0}catch{return !1}},environment:e,estimateGas:async u=>{let{bridge:y}=te(t,u.asset,u.targetChain.chainId);return y.estimateGas(u)},estimateReceiveAmount:async u=>{let{bridge:y}=te(t,u.asset,u.targetChain.chainId);return y.estimateReceiveAmount(u)},getAssets:()=>Array.from(t.values()).map(y=>y.getAssets()).reduce((y,T)=>{for(let[g,C]of Object.entries(T)){let v=y[g];if(v)for(let A of C){let x=v.findIndex(({symbol:S})=>S===A.symbol);x===-1?v.push(A):lodash.mergeWith(v[x],A,(S,F)=>{if(lodash.isArray(S))return [...new Set(S.concat(F))]});}else y[g]=C;}return y},{}),getFees:async u=>{let{bridge:y}=te(t,u.asset,u.targetChain.chainId);return y.getFees(u)},analyzeTx:u=>{let y=["avalanche-ava-btc","avalanche-btc-ava","avalanche-evm","ictt-erc20-erc20","cctp"].map(T=>t.get(T)).filter(T=>!!T);for(let T of y){let g=T.analyzeTx(u);if(g.isBridgeTx)return g}return {isBridgeTx:!1}},getMinimumTransferAmount:async u=>{let{bridge:y}=te(t,u.asset,u.targetChain.chainId);return y.getMinimumTransferAmount(u)},trackTransfer:u=>{let{bridge:y}=te(t,u.bridgeTransfer.asset,u.bridgeTransfer.targetChain.chainId);return y.trackTransfer(u)},transferAsset:async u=>{let{bridge:y}=te(t,u.asset,u.targetChain.chainId);return y.transferAsset(u)}});
|
|
15
|
+
var j=(r=>(r.NATIVE="native",r.ERC20="erc20",r))(j||{}),U=e=>e.type==="erc20",ce=e=>e.type==="native";var B=(s=>(s.AVALANCHE_EVM="avalanche-evm",s.AVALANCHE_BTC_AVA="avalanche-btc-ava",s.AVALANCHE_AVA_BTC="avalanche-ava-btc",s.CCTP="cctp",s.ICTT_ERC20_ERC20="ictt-erc20-erc20",s))(B||{}),Ni=["avalanche-ava-btc","avalanche-btc-ava"],yr=["avalanche-evm","cctp","ictt-erc20-erc20"],Ri=e=>yr.includes(e.type),dt=e=>e.type==="avalanche-ava-btc",ut=e=>e.type==="avalanche-btc-ava",de=(n=>(n.AllowanceApproval="allowance-approval",n.TokensTransfer="tokens-transfer",n.WrapToken="wrap-token",n))(de||{});var ne=(r=>(r.FUJI="eip155:43113",r.MAINNET="eip155:43114",r))(ne||{}),Re=(r=>(r.MAINNET="eip155:1",r.SEPOLIA="eip155:11155111",r))(Re||{}),re=(r=>(r.MAINNET="bip122:000000000019d6689c085ae165831e93",r.TESTNET="bip122:000000000933ea01ad0ee984209779ba",r))(re||{}),Di={chainId:"eip155:43113",chainName:"Avalanche Fuji",rpcUrl:"https://api.avax-test.network/ext/bc/C/rpc",networkToken:{type:"native",name:"AVAX",symbol:"AVAX",decimals:18}},_i={chainId:"eip155:43114",chainName:"Avalanche Mainnet",rpcUrl:"https://api.avax.network/ext/bc/C/rpc",networkToken:{type:"native",name:"AVAX",symbol:"AVAX",decimals:18}},Fi={chainId:"eip155:11155111",chainName:"Ethereum Sepolia",rpcUrl:"https://proxy-api.avax.network/proxy/infura/sepolia",networkToken:{type:"native",name:"ETH",symbol:"ETH",decimals:18}},Mi={chainId:"eip155:1",chainName:"Ethereum Mainnet",rpcUrl:"https://proxy-api.avax.network/proxy/infura/mainnet",networkToken:{type:"native",name:"ETH",symbol:"ETH",decimals:18}},Oi={chainId:"bip122:000000000933ea01ad0ee984209779ba",chainName:"Bitcoin Testnet",rpcUrl:"",networkToken:{type:"native",name:"Bitcoin",symbol:"BTC",decimals:8}},Hi={chainId:"bip122:000000000019d6689c085ae165831e93",chainName:"Bitcoin Mainnet",rpcUrl:"",networkToken:{type:"native",name:"Bitcoin",symbol:"BTC",decimals:8}};var ae=(i=>(i.DEV="dev",i.PROD="production",i.STAGING="staging",i.TEST="test",i))(ae||{});var z=(s=>(s[s.BRIDGE_NOT_AVAILABLE=5001]="BRIDGE_NOT_AVAILABLE",s[s.INITIALIZATION_FAILED=5002]="INITIALIZATION_FAILED",s[s.INVALID_PARAMS=5003]="INVALID_PARAMS",s[s.TIMEOUT=5004]="TIMEOUT",s[s.TRANSACTION_REVERTED=5005]="TRANSACTION_REVERTED",s))(z||{}),I=(A=>(A.ASSET_NOT_SUPPORTED="ASSET_NOT_SUPPORTED",A.CHAIN_NOT_SUPPORTED="CHAIN_NOT_SUPPORTED",A.CONFIG_NOT_AVAILABLE="CONFIG_NOT_AVAILABLE",A.CONFIRMATION_COUNT_UNKNOWN="CONFIRMATION_COUNT_UNKNOWN",A.ENVIRONMENT_NOT_SUPPORTED="ENVIRONMENT_NOT_SUPPORTED",A.IDENTICAL_CHAINS_PROVIDED="IDENTICAL_CHAINS_PROVIDED",A.INCORRECT_ADDRESS_PROVIDED="INCORRECT_ADDRESS_PROVIDED",A.INCORRECT_AMOUNT_PROVIDED="INCORRECT_AMOUNT_PROVIDED",A.INCORRECT_HASH_PROVIDED="INCORRECT_HASH_PROVIDED",A.INCORRECT_PROVIDER_PROVIDED="INCORRECT_PROVIDER_PROVIDED",A.INCORRECT_SIGNER_PROVIDED="INCORRECT_SIGNER_PROVIDED",A.INCORRECT_TXHASH_PROVIDED="INCORRECT_TXHASH_PROVIDED",A.INVALID_PARAMS="INVALID_PARAMS",A.UNKNOWN="UNKNOWN",A.VULNERABLE_TOKEN_APPROVAL_ADDRESS="VULNERABLE_TOKEN_APPROVAL_ADDRESS",A.WARDEN_CONFIG_MISMATCH="WARDEN_CONFIG_MISMATCH",A.WARDEN_CONFIG_MISSING_NETWORK="WARDEN_CONFIG_MISSING_NETWORK",A.ADDRESS_IS_BLOCKED="ADDRESS_IS_BLOCKED",A))(I||{});function yt(e){let t=e.map(r=>r.chainId);return e.reduce((r,n)=>(r[n.chainId]=n.tokens.map(i=>({...i,type:"erc20",destinations:t.reduce((s,o)=>(n.chainId!==o&&(s[o]||(s[o]=[]),s[o]?.push("cctp")),s),{})})),r),{})}var fr="^[-a-z0-9]{3,8}$",lr="^[-_a-zA-Z0-9]{1,50}$",ft=":",Tr=e=>{let[t,r]=e.split(ft);if(!t||!r)throw new Error("Invalid identifier provided.");if(!new RegExp(fr).test(t))throw new Error("Invalid namespace provided.");if(!new RegExp(lr).test(r))throw new Error("Invalid reference provided.");return {namespace:t,reference:r}},gr=({namespace:e,reference:t})=>`${e}${ft}${t}`,Ar=({namespace:e,reference:t})=>{if(e!=="eip155")throw new Error("Invalid namespace provided.");let r=Number(t);if(isNaN(r))throw new Error("Invalid reference provided.");return `0x${r.toString(16)}`},b={toJSON:Tr,toString:gr,toEip155HexChainId:Ar};var br=e=>{let{reference:t}=b.toJSON(e.chainId);return {id:Number(t),name:e.chainName,nativeCurrency:{decimals:e.networkToken.decimals,symbol:e.networkToken.symbol,name:e.networkToken.name},network:e.chainName,rpcUrls:{default:{http:[e.rpcUrl]},public:{http:[e.rpcUrl]}},...e.utilityAddresses?.multicall&&{contracts:{multicall3:{address:e.utilityAddresses.multicall}}}}},h=({chain:e})=>{let t=br(e),r=viem.http(e.rpcUrl,{batch:!0,retryCount:0});return viem.createWalletClient({chain:t,transport:r}).extend(viem.publicActions)};var ie=[{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 q=class extends Error{constructor(r,n,i){super(r);this.code=n;this.details=i;}};var Se=class extends q{constructor(t="UNKNOWN",r){super(t,5001,r),this.name="BridgeUnavailableError";}};var w=class extends q{constructor(t="UNKNOWN",r){super(t,5002,r),this.name="BridgeInitializationError";}};var l=class extends q{constructor(t="INVALID_PARAMS",r){super(t,5003,r),this.name="InvalidParamsError";}};var M=({sourceChain:e,targetChain:t,amount:r,asset:n},i)=>{if(e.chainId===t.chainId)throw new l("IDENTICAL_CHAINS_PROVIDED");if(r<=0n)throw new l("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let s=i.find(p=>p.chainId===e.chainId);if(!s)throw new l("CHAIN_NOT_SUPPORTED",`Not supported on source chain "${e.chainId}"`);let o=i.find(p=>p.chainId===t.chainId);if(!o)throw new l("CHAIN_NOT_SUPPORTED",`Not supported on target chain "${t.chainId}"`);let a=s.tokens.find(p=>p.symbol===n.symbol),m=o.tokens.find(p=>p.symbol===n.symbol);if(!a||!m)throw new l("ASSET_NOT_SUPPORTED");return {sourceChainData:s,targetChainData:o,burnToken:a,mintToken:m}};async function $(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s}=t,{sourceChainData:o,targetChainData:a,burnToken:m}=M({sourceChain:r,targetChain:n,asset:i,amount:s},e),c=await h({chain:r}).readContract({address:o.tokenRouterAddress,abi:ie,functionName:"calculateFee",args:[s,a.domain]});return {[o.chainId]:{[m.address]:c}}}var R=[{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"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"feeAddress",type:"address"},{indexed:!1,internalType:"uint256",name:"feeAmount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"originTxId",type:"bytes32"}],name:"Mint",type:"event"}];function Tt({amount:e,burnToken:t,targetChainData:r,toAddress:n}){return viem.encodeFunctionData({abi:ie,functionName:"transferTokens",args:[e,r.domain,n,t.address]})}function gt({amount:e,sourceChainData:t}){return viem.encodeFunctionData({abi:R,functionName:"approve",args:[t.tokenRouterAddress,e]})}var vr=async(e,t,r)=>{let{sourceChain:n,targetChain:i,asset:s,amount:o,fromAddress:a,toAddress:m,onStepChange:p,gasSettings:c}=t,{sourceChainData:d,targetChainData:u,burnToken:y}=M({sourceChain:n,targetChain:i,asset:s,amount:o},e),T=h({chain:n}),C=await T.readContract({address:y.address,abi:R,functionName:"allowance",args:[a,d.tokenRouterAddress]})<o,v=C?2:1;if(C){let S={currentSignature:1,currentSignatureReason:"allowance-approval",requiredSignatures:v};p?.(S);let F=gt({amount:o,sourceChainData:d}),he=await r.sign({from:a,to:y.address,data:F,...c?{maxFeePerGas:c.price,maxPriorityFeePerGas:c.tip}:null,chainId:b.toEip155HexChainId(b.toJSON(n.chainId))},ur=>T.sendRawTransaction({serializedTransaction:ur}),S);await T.waitForTransactionReceipt({hash:he,pollingInterval:1e3});}let A={currentSignature:C?2:1,currentSignatureReason:"tokens-transfer",requiredSignatures:v};p?.(A);let x=Tt({amount:o,burnToken:y,targetChainData:u,toAddress:m});return r.sign({from:a,to:d.tokenRouterAddress,data:x,...c?{maxFeePerGas:c.price,maxPriorityFeePerGas:c.tip}:null,chainId:b.toEip155HexChainId(b.toJSON(n.chainId))},S=>T.sendRawTransaction({serializedTransaction:S}),A)},Ir=async e=>{try{return await e.getBlockNumber()}catch{return}};async function At(e,t,r,n){let{minimumConfirmations:i}=e.find(u=>u.chainId===t.sourceChain.chainId)??{},{minimumConfirmations:s}=e.find(u=>u.chainId===t.targetChain.chainId)??{};if(!i||!s)throw new l("CONFIRMATION_COUNT_UNKNOWN");let o=await $(e,{asset:t.asset,amount:t.amount,sourceChain:t.sourceChain,targetChain:t.targetChain}),a=U(t.asset)?o[t.sourceChain.chainId]?.[t.asset.address]??0n:0n,m=await vr(e,t,n),p=Date.now(),c=h({chain:t.targetChain}),d=await Ir(c);return {type:"cctp",environment:r,fromAddress:t.fromAddress,toAddress:t.toAddress??t.fromAddress,amount:t.amount,asset:t.asset,bridgeFee:a,sourceChain:t.sourceChain,sourceStartedAt:p,sourceTxHash:m,sourceConfirmationCount:0,sourceRequiredConfirmationCount:i,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:s,targetStartBlockNumber:d}}var Ke=async e=>new Promise(t=>{setTimeout(t,e);});var D=({promise:e,delay:t,startAfter:r})=>{let n=!1,i=!1,s=0,o,a,m=d=>{o&&n&&(n=!1,o(d));},p=()=>{i=!0,a&&n&&(n=!1,a("cancelled"));};return {result:new Promise((d,u)=>{n=!0,o=d,a=u;let y=async()=>{if(!(!n||i)){try{if(await e(m),!n||i)return;await Ke(t);}catch(T){console.error(T.message),s+=1,await Ke(2**s*t);}await y();}};r?setTimeout(y,r):y();}),cancel:p}};var Ee=(r=>(r[r.Ethereum=0]="Ethereum",r[r.Avalanche=1]="Avalanche",r))(Ee||{});var X=zod.z.string().refine(e=>viem.isAddress(e),e=>({message:`Invalid EVM address '${e}'`})).transform(e=>e);var Br=zod.z.object({address:X,name:zod.z.string(),symbol:zod.z.string(),decimals:zod.z.number().positive()}),wr=zod.z.coerce.string().transform((e,t)=>{let r=e.startsWith("eip155:")?e:`eip155:${e}`;try{let n=b.toJSON(r);return b.toString(n)}catch{return t.addIssue({code:zod.z.ZodIssueCode.custom,message:"Invalid chain id, neither numeric nor caip2 compliant"}),zod.z.NEVER}}),Nr=zod.z.object({chainId:wr,domain:zod.z.nativeEnum(Ee),tokenRouterAddress:X,messageTransmitterAddress:X,tokens:zod.z.array(Br),minimumConfirmations:zod.z.number().positive()}),Ct=zod.z.array(Nr);var Rr=e=>e==="production"||e==="test",Sr={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"},ht=async e=>{if(!Rr(e))throw new w("ENVIRONMENT_NOT_SUPPORTED",`CCTP does not support ${e} environment`);try{let r=await(await fetch(Sr[e])).json();return Ct.parse(r)}catch(t){throw new w("CONFIG_NOT_AVAILABLE",`Error while fetching CCTP config: ${t.message}`)}},Je=e=>{switch(e){case"eip155:43114":case"eip155:43113":return 1e3;default:return 2e4}};var E=(e,t,r)=>{let n=lodash.omitBy(t,lodash.isNil),i={...lodash.cloneDeep(e),...lodash.cloneDeep(n)};return r(i),i},_r=1e3*60*60*3,Fr=1024n,Mr=5e3,k={trackingLimitMs:_r,maxBlocks:Fr,initialDelayMs:Mr};var K=(e,t)=>e.gasPrice&&BigInt(e.gasPrice*t.gasUsed);var se=({targetClient:e,sourceClient:t,getMetadata:r,checkMetadata:n,trackingParams:{bridgeTransfer:i,updateListener:s},trackingConfig:{trackingLimitMs:o}})=>{let a=lodash.cloneDeep(i);return async p=>{if(a.completedAt||n(a.metadata))return p(a);if(a.sourceStartedAt+o<=Date.now())return a=E(a,{completedAt:Date.now(),errorCode:5004},s),p(a);if(!viem.isHash(a.sourceTxHash))return;let c=await t.getTransactionReceipt({hash:a.sourceTxHash});if(a.sourceNetworkFee===void 0){let g=await t.getTransaction({hash:a.sourceTxHash}),C=K(g,c);C&&(a=E(a,{sourceNetworkFee:C},s));}if(c.status==="reverted")return a=E(a,{completedAt:Date.now(),errorCode:5005},s),p(a);if(!viem.isHash(a.sourceTxHash))return;let d=await t.getTransactionConfirmations({hash:a.sourceTxHash}),u=d>a.sourceConfirmationCount,y=d>=a.sourceRequiredConfirmationCount;if(u){let g={};g.sourceConfirmationCount=Number(d),y||(g.targetStartBlockNumber=await e.getBlockNumber()),a=E(a,g,s);}if(!y)return;a.targetStartBlockNumber||(a=E(a,{targetStartBlockNumber:await e.getBlockNumber()},s));let T=r(c);return a=E(a,{targetStartedAt:Date.now(),metadata:T},s),p(a)}};var oe=({targetClient:e,getTargetTxHash:t,checkMetadata:r,trackingParams:{bridgeTransfer:n,updateListener:i},trackingConfig:{trackingLimitMs:s,maxBlocks:o}})=>{if(!n.completedAt&&!r(n.metadata))throw new l("INVALID_PARAMS","metadata is missing");if(!n.targetStartBlockNumber)throw new l("INVALID_PARAMS","targetStartBlockNumber is missing");let a=lodash.cloneDeep(n);return async p=>{if(a.completedAt)return p(a);if(a.sourceStartedAt+s<=Date.now())return a=E(a,{completedAt:Date.now(),errorCode:5004},i),p(a);if(!a.targetStartBlockNumber)throw new Error("unreachable");if(!a.targetTxHash){let g=await e.getBlockNumber(),C=a.targetStartBlockNumber-o,v=C>=0n?C:"earliest",A=a.targetStartBlockNumber+o,x=A<g?A:"latest",S=await t({fromBlock:v,toBlock:x,metadata:a.metadata});if(S)a=E(a,{targetTxHash:S},i);else {a=E(a,{targetStartBlockNumber:g},i);return}}if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let d=await e.getTransactionReceipt({hash:a.targetTxHash});if(!a.targetNetworkFee){let g=await e.getTransaction({hash:a.targetTxHash}),C=K(g,d);C&&(a=E(a,{targetNetworkFee:C},i));}if(d.status==="reverted")return a=E(a,{completedAt:Date.now(),errorCode:5005},i),p(a);if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let u=await e.getTransactionConfirmations({hash:a.targetTxHash}),y=u>a.targetConfirmationCount,T=u>=a.targetRequiredConfirmationCount;if(y&&(a=E(a,{targetConfirmationCount:Number(u)},i)),!!T)return a=E(a,{completedAt:Date.now()},i),p(a)}};var Ze=e=>lodash.isObject(e)&&typeof e.nonce=="bigint",xt=({sourceChainData:e})=>r=>{let n=r.logs.find(o=>o.address.toLowerCase()===e.tokenRouterAddress.toLowerCase()?viem.decodeEventLog({abi:ie,...o}).eventName==="TransferTokens":!1);if(!n)throw new l("INVALID_PARAMS",`unable to find a TransferTokens event in source transaction "${r.transactionHash}"`);return {nonce:viem.decodeEventLog({abi:ie,eventName:"TransferTokens",...n}).args.nonce}},Lr={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"}]},Bt=({targetClient:e,transferData:{targetChainData:t}})=>async({fromBlock:n,toBlock:i,metadata:s})=>(await e.getLogs({address:t.messageTransmitterAddress,event:Lr,args:{nonce:s?.nonce},fromBlock:n,toBlock:i}))[0]?.transactionHash;var Gr=async(e,t)=>{let{bridgeTransfer:r}=t,{asset:n,amount:i,sourceChain:s,targetChain:o}=r,a=M({sourceChain:s,targetChain:o,asset:n,amount:i},e),{sourceChainData:m}=a,p=h({chain:s}),c=h({chain:o}),d=xt(a),u=se({sourceClient:p,targetClient:c,getMetadata:d,checkMetadata:Ze,trackingParams:t,trackingConfig:k});return D({promise:u,delay:Je(m.chainId),startAfter:k.initialDelayMs})},Ur=async(e,t)=>{let{bridgeTransfer:r}=t,{asset:n,amount:i,sourceChain:s,targetChain:o}=r,a=h({chain:o}),m=M({sourceChain:s,targetChain:o,asset:n,amount:i},e),p=Bt({targetClient:a,transferData:m}),c=oe({targetClient:a,getTargetTxHash:p,checkMetadata:Ze,trackingParams:t,trackingConfig:k});return D({promise:c,delay:Je(m.targetChainData.chainId),startAfter:k.initialDelayMs})};function Nt(e,t){if(!viem.isHash(t.bridgeTransfer.sourceTxHash)||t.bridgeTransfer.targetTxHash&&!viem.isHash(t.bridgeTransfer.targetTxHash))throw new l("INCORRECT_TXHASH_PROVIDED");let r,n=()=>{r?.();};return {result:(async()=>{let{updateListener:s,bridgeTransfer:o}=t,{result:a,cancel:m}=await Gr(e,{updateListener:s,bridgeTransfer:o});r=m;let p=await a,{result:c,cancel:d}=await Ur(e,{updateListener:s,bridgeTransfer:p});return r=d,c})(),cancel:n}}var zr=60000n,Rt=175000n,Wr=60000n,St=215000n;async function Pt(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s,fromAddress:o}=t,{sourceChainData:a,burnToken:m}=M({sourceChain:r,targetChain:n,asset:i,amount:s},e),c=await h({chain:r}).readContract({address:m.address,abi:R,functionName:"allowance",args:[o,a.tokenRouterAddress]}),d=a.domain===1;return c>=s?d?St:Rt:d?Wr+St:zr+Rt}async function Dt(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s}=t,{burnToken:o}=M({sourceChain:r,targetChain:n,asset:i,amount:s},e);return (await $(e,t))[r.chainId]?.[o.address]??1n}async function _t(e,t){let{mintToken:r,burnToken:n}=M(t,e),i={...r,type:"erc20"},s=await $(e,t);return {asset:i,amount:t.amount-(s[t.sourceChain.chainId]?.[n.address]??0n)}}var _="0x0000000000000000000000000000000000000000";function Ft(e,t){for(let r of e){if(r.chainId!==t.chainId)continue;let n=t.tokenTransfers.find(({symbol:d})=>r.tokens.some(({symbol:u})=>u===d));if(!n)continue;let i=r.domain===1,s=t.chainId==="eip155:43113"||t.chainId==="eip155:11155111",o=s?"eip155:11155111":"eip155:1",a=s?"eip155:43113":"eip155:43114";if(viem.isAddressEqual(t.to,r.tokenRouterAddress)||viem.isAddressEqual(n.to,r.tokenRouterAddress))return {isBridgeTx:!0,bridgeType:"cctp",sourceChainId:t.chainId,targetChainId:i?o:a};let p=viem.isAddressEqual(t.from,r.messageTransmitterAddress),c=viem.isAddressEqual(n.from,_);if(p||c)return {isBridgeTx:!0,bridgeType:"cctp",sourceChainId:i?o:a,targetChainId:t.chainId}}return {isBridgeTx:!1}}var Qe=e=>{let{fromAddress:t,toAddress:r}=e;if(!viem.isAddress(t)||!viem.isAddress(r))throw new l("INCORRECT_ADDRESS_PROVIDED");return {fromAddress:t,toAddress:r}};function ue(e){let{chainId:t,from:r,to:n,tokenTransfers:i}=e,{fromAddress:s,toAddress:o}=Qe({fromAddress:r,toAddress:n}),a=i.map(m=>{let{from:p,to:c,symbol:d}=m;if(!p||!viem.isAddress(p)||!c||!viem.isAddress(c))throw new l("INCORRECT_ADDRESS_PROVIDED");return {from:p,to:c,symbol:d}});return {chainId:t,from:s,to:o,tokenTransfers:a}}var W=({fromAddress:e,...t})=>{if(!viem.isAddress(e))throw new l("INCORRECT_ADDRESS_PROVIDED");return {fromAddress:e,...t}},ye=({fromAddress:e,toAddress:t,...r})=>{let{fromAddress:n,toAddress:i}=Qe({fromAddress:e,toAddress:t});return {fromAddress:n,toAddress:i,...r}};var Ot=async(e,t)=>{let r=await ht(e);return {type:"cctp",analyzeTx:n=>{try{return Ft(r,ue(n))}catch{return {isBridgeTx:!1}}},estimateGas:n=>Pt(r,W(n)),estimateReceiveAmount:n=>_t(r,W(n)),getAssets:()=>yt(r),getFees:n=>$(r,n),transferAsset:n=>At(r,ye(n),e,t),trackTransfer:n=>Nt(r,n),getMinimumTransferAmount:n=>Dt(r,n)}};var jr=({sourceChain:e,targetChain:t,asset:r},n)=>{let i=n.find(a=>a.homeChain.chainId===e.chainId),s=i?.erc20Bridges.find(a=>a.baseToken.address===r.address&&a.remotes.some(({remoteChain:m})=>m.chainId===t.chainId)),o=s?.remotes.find(a=>a.remoteChain.chainId===t.chainId);return {chainBridgeConfig:i,tokenHomeConfig:s,tokenRemoteConfig:o}},qr=({sourceChain:e,targetChain:t,asset:r},n)=>{let i=n.find(a=>a.homeChain.chainId===t.chainId),s=i?.erc20Bridges.find(a=>a.remotes.find(m=>m.tokenRemoteAddress===r.address&&m.remoteChain.chainId===e.chainId)),o=s?.remotes.find(a=>a.tokenRemoteAddress===r.address&&a.remoteChain.chainId===e.chainId);return {chainBridgeConfig:i,tokenHomeConfig:s,tokenRemoteConfig:o}},O=({sourceChain:e,targetChain:t,amount:r,asset:n},i)=>{if(e.chainId===t.chainId)throw new l("IDENTICAL_CHAINS_PROVIDED");if(r<=0n)throw new l("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");if(!U(n))throw new l("ASSET_NOT_SUPPORTED","Only ERC20 assets supported");let s=jr({sourceChain:e,targetChain:t,asset:n},i),o=qr({sourceChain:e,targetChain:t,asset:n},i);if(s.chainBridgeConfig&&s.tokenHomeConfig&&s.tokenRemoteConfig){let{chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:p}=s;return {homeToRemote:!0,chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:p}}if(o.chainBridgeConfig&&o.tokenHomeConfig&&o.tokenRemoteConfig){let{chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:p}=o;return {homeToRemote:!1,chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:p}}throw new l("ASSET_NOT_SUPPORTED","No Home->Remote or Remote->Home route exists for this asset")};var $r=60000n,Ht=215000n,Vt=async(e,t)=>{let{sourceChain:r,targetChain:n,asset:i,amount:s,fromAddress:o}=t,{tokenHomeConfig:a,homeToRemote:m,tokenRemoteConfig:p}=O({sourceChain:r,targetChain:n,asset:i,amount:s},e);return await h({chain:r}).readContract({address:m?a.baseToken.address:p.tokenRemoteAddress,abi:R,functionName:"allowance",args:[o,m?a.tokenHomeAddress:p.tokenRemoteAddress]})>=s?Ht:$r+Ht};var Lt=e=>{let t=e.reduce((n,i)=>(n[i.homeChain.chainId]=i.erc20Bridges.map(s=>({...s.baseToken,destinations:s.remotes.reduce((o,a)=>(o[a.remoteChain.chainId]=["ictt-erc20-erc20"],o),{})})),n),{}),r=e.reduce((n,i)=>{for(let s of i.erc20Bridges)for(let o of s.remotes){let a=n[o.remoteChain.chainId]??[];n[o.remoteChain.chainId]=[...a,{...s.baseToken,address:o.tokenRemoteAddress,destinations:{[i.homeChain.chainId]:["ictt-erc20-erc20"]}}];}return n},{});return {...t,...r}};async function fe(e,t){return O(t,e),{}}var be=[{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 ve=[{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 Xr=85000n,Ut=({homeToRemote:e,amount:t,destinationBlockchainID:r,destinationTokenTransferrerAddress:n,recipient:i})=>viem.encodeFunctionData({abi:e?be:ve,functionName:"send",args:[{destinationBlockchainID:r,destinationTokenTransferrerAddress:n,recipient:i,primaryFeeTokenAddress:_,primaryFee:0n,secondaryFee:0n,requiredGasLimit:Xr,multiHopFallback:_},t]});function zt({amount:e,address:t}){return viem.encodeFunctionData({abi:R,functionName:"approve",args:[t,e]})}var Kr=async({params:{onStepChange:e,amount:t,fromAddress:r,sourceChain:n,toAddress:i,gasSettings:s},transferData:o,isAllowanceApprovalRequired:a,requiredSignatures:m,signer:p})=>{let{tokenRemoteConfig:c,tokenHomeConfig:d,homeToRemote:u,chainBridgeConfig:y}=o,T=h({chain:n});if(a){let x={currentSignature:1,currentSignatureReason:"allowance-approval",requiredSignatures:m};e?.(x);let S=zt({amount:t,address:u?d.tokenHomeAddress:c.tokenRemoteAddress}),F=await p.sign({from:r,to:u?o.tokenHomeConfig.baseToken.address:c.tokenRemoteAddress,data:S,...s?{maxFeePerGas:s.price,maxPriorityFeePerGas:s.tip}:null,chainId:b.toEip155HexChainId(b.toJSON(n.chainId))},he=>T.sendRawTransaction({serializedTransaction:he}),x);await T.waitForTransactionReceipt({hash:F,pollingInterval:1e3});}let g={currentSignature:a?2:1,currentSignatureReason:"tokens-transfer",requiredSignatures:m};e?.(g);let C=u?c.remoteChain.blockchainId:y.homeChain.blockchainId,v=u?c.tokenRemoteAddress:d.tokenHomeAddress,A=Ut({amount:t,recipient:i,destinationBlockchainID:C,destinationTokenTransferrerAddress:v,homeToRemote:u});return p.sign({from:r,to:u?d.tokenHomeAddress:c.tokenRemoteAddress,data:A,...s?{maxFeePerGas:s.price,maxPriorityFeePerGas:s.tip}:null,chainId:b.toEip155HexChainId(b.toJSON(n.chainId))},x=>T.sendRawTransaction({serializedTransaction:x}),g)},Jr=async({params:e,transferData:t,signer:r})=>{let{sourceChain:n,fromAddress:i,amount:s}=e,o=h({chain:n}),{homeToRemote:a,tokenHomeConfig:m,tokenRemoteConfig:p}=t,d=await o.readContract({address:a?m.baseToken.address:p.tokenRemoteAddress,abi:R,functionName:"allowance",args:[i,a?m.tokenHomeAddress:p.tokenRemoteAddress]})<s;return Kr({params:e,transferData:t,isAllowanceApprovalRequired:d,requiredSignatures:d?2:1,signer:r})},Zr=async(e,t,r)=>{let{sourceChain:n,targetChain:i,asset:s,amount:o}=t,a=O({sourceChain:n,targetChain:i,asset:s,amount:o},e);return Jr({params:t,transferData:a,signer:r})},Qr=async e=>{try{return await e.getBlockNumber()}catch{return}};async function Wt(e,t,r,n){let i=await fe(e,{asset:t.asset,amount:t.amount,sourceChain:t.sourceChain,targetChain:t.targetChain}),s=U(t.asset)?i[t.targetChain.chainId]?.[t.asset.address]??0n:0n,o=await Zr(e,t,n),a=Date.now(),m=h({chain:t.targetChain}),p=await Qr(m);return {type:"ictt-erc20-erc20",environment:r,fromAddress:t.fromAddress,toAddress:t.toAddress,amount:t.amount,asset:t.asset,bridgeFee:s,sourceChain:t.sourceChain,sourceStartedAt:a,sourceTxHash:o,sourceConfirmationCount:0,sourceRequiredConfirmationCount:1,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:p}}var qt=({transferData:{homeToRemote:e,tokenHomeConfig:t,tokenRemoteConfig:r}})=>n=>{let i=e?t.tokenHomeAddress:r.tokenRemoteAddress,s=e?be:ve,o="TokensSent",a=n.logs.find(c=>c.address.toLowerCase()===i.toLowerCase()?viem.decodeEventLog({abi:s,...c}).eventName===o:!1);if(!a)throw new l("INVALID_PARAMS",`unable to find a TokensSent event in source transaction "${n.transactionHash}"`);return {teleporterMessageID:viem.decodeEventLog({abi:s,eventName:o,...a}).args.teleporterMessageID}},ta={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"}]}]},$t=({toAddress:e,transferData:{tokenHomeConfig:t,homeToRemote:r,tokenRemoteConfig:n},targetClient:i})=>async({fromBlock:s,toBlock:o,metadata:a})=>{if(!_e(a))throw new l("INVALID_PARAMS");let p=(await i.getLogs({address:t.teleporterAddress,event:ta,args:{messageID:a.teleporterMessageID},fromBlock:s,toBlock:o})).at(-1);if(lodash.isNil(p))return;let c=p.transactionHash,d=await i.getTransactionReceipt({hash:c}),u=r?ve:be,y=r?n.tokenRemoteAddress:t.tokenHomeAddress,T=d.logs.find(C=>C.address.toLowerCase()===y.toLowerCase()?viem.decodeEventLog({abi:u,...C}).eventName==="TokensWithdrawn":!1);if(lodash.isNil(T))return;if(viem.decodeEventLog({abi:u,eventName:"TokensWithdrawn",...T}).args.recipient.toLowerCase()===e.toLowerCase())return c},_e=e=>lodash.isObject(e)&&viem.isHex(e.teleporterMessageID);var na=async(e,t)=>{let{bridgeTransfer:r}=t,{asset:n,amount:i,sourceChain:s,targetChain:o}=r,a=O({sourceChain:s,targetChain:o,asset:n,amount:i},e),m=h({chain:r.sourceChain}),p=h({chain:r.targetChain}),c=qt({transferData:a}),d=se({sourceClient:m,targetClient:p,getMetadata:c,checkMetadata:_e,trackingParams:t,trackingConfig:k});return D({promise:d,delay:2e3,startAfter:k.initialDelayMs})},ra=async(e,t)=>{let{bridgeTransfer:r}=t,{targetChain:n,sourceChain:i,asset:s,amount:o,toAddress:a}=r,m=O({sourceChain:i,targetChain:n,asset:s,amount:o},e),p=h({chain:r.targetChain}),c=$t({transferData:m,targetClient:p,toAddress:a}),d=oe({targetClient:p,getTargetTxHash:c,checkMetadata:_e,trackingParams:t,trackingConfig:k});return D({promise:d,delay:2e3,startAfter:k.initialDelayMs})};function Xt(e,t){let r,n=()=>{r?.();};return {result:(async()=>{let{updateListener:s}=t,{result:o,cancel:a}=await na(e,t);r=a;let m=await o,{result:p,cancel:c}=await ra(e,{updateListener:s,bridgeTransfer:m});return r=c,p})(),cancel:n}}async function Kt(e,t){return O(t,e),1n}var et={encode(e){return base.base58.encode(utils.concatBytes(e,sha256.sha256(e).subarray(-4)))},decode(e){return base.base58.decode(e).subarray(0,-4)}};var sa=zod.z.object({subnetName:zod.z.string(),subnetID:zod.z.string(),blockchainID:zod.z.string(),chainID:zod.z.number(),network:zod.z.string()}),Zt=zod.z.array(sa),oa=zod.z.object({PKey:zod.z.string(),SKey:zod.z.string(),orgID:zod.z.string(),bridgeID:zod.z.string(),tokenAddress:X,tokenSymbol:zod.z.string(),tokenName:zod.z.string(),tokenDecimals:zod.z.number(),tokenHomeAddress:X,tokenHomeChainID:zod.z.number(),tokenRemoteAddress:X,tokenRemoteChainID:zod.z.number(),network:zod.z.string(),isRegisteredInBridgeApp:zod.z.enum(["Y","N"]),createdAt:zod.z.number(),updatedAt:zod.z.number()}),Qt=zod.z.array(oa);var Yt="0x253b2784c75e510dD0fF1da844684a1aC0aa5fcf",en={test:"https://ac-gateway-staging-us-east-1.avacloud-test.io/v1/bridge-app",production:"https://ac-gateway-production-us-east-1.avacloud.io/v1/bridge-app"},tn={chainID:43114,blockchainID:"2q9e4r6Mu3U68nU1fYjgbR6JvwrRx36CohpAX5UQxse55x1Q5"},nn={chainID:43113,blockchainID:"yH8D7ThNJkxmtkuv2jgBa4P1Rn3Qpr4pPr7QYNfcdoS6k6HWp"};var tt=async e=>await(await fetch(e)).json();var ma=e=>e==="production"||e==="test",pa=e=>e.status==="fulfilled",ca=async(e,t)=>{let r=await tt(`${e}/chains`);return [t==="production"?tn:nn,...Zt.parse(r)]},da=async(e,t)=>(await Promise.allSettled(t.map(async n=>{let i=await tt(`${e}/chains/${n.chainID}/bridges`);return Qt.parse(i)}))).filter(pa).flatMap(n=>n.value),an=async e=>{if(!ma(e))throw new w("ENVIRONMENT_NOT_SUPPORTED",`ICTT does not support ${e} environment`);try{let t=en[e],r=await ca(t,e),n=await da(t,r),i=[];return n.forEach(s=>{let o=r.find(({chainID:y})=>y===s.tokenHomeChainID);if(!o)return;let a=i.find(({homeChain:y})=>y.chainId===b.toString({namespace:"eip155",reference:String(o.chainID)}));a||(a={homeChain:{chainId:b.toString({namespace:"eip155",reference:String(o.chainID)}),blockchainId:viem.toHex(et.decode(o.blockchainID))},erc20Bridges:[]},i.push(a));let m=a.erc20Bridges.find(({tokenHomeAddress:y})=>y===s.tokenHomeAddress);m||(m={baseToken:{address:s.tokenAddress,decimals:s.tokenDecimals,name:s.tokenName||s.tokenSymbol,symbol:s.tokenSymbol,type:"erc20"},remotes:[],teleporterAddress:Yt,tokenHomeAddress:s.tokenHomeAddress,tokenHomeDecimals:s.tokenDecimals},a.erc20Bridges.push(m));let p=r.find(({chainID:y})=>y===s.tokenRemoteChainID);if(!p)return;let c=viem.toHex(et.decode(p.blockchainID)),d=b.toString({namespace:"eip155",reference:String(s.tokenRemoteChainID)});m.remotes.find(({tokenRemoteAddress:y,remoteChain:{chainId:T}})=>y===s.tokenRemoteAddress&&T===d)||m.remotes.push({remoteChain:{chainId:d,blockchainId:c},tokenRemoteAddress:s.tokenRemoteAddress});}),i.map(s=>({...s,erc20Bridges:s.erc20Bridges.filter(o=>o.remotes.length>0)})).filter(s=>s.erc20Bridges.length>0)}catch(t){throw new w("CONFIG_NOT_AVAILABLE",`Error while fetching ICTT-ERC20-ERC20 config: ${t.message}`)}};var sn=async(e,t)=>{let{homeToRemote:r,tokenHomeConfig:{baseToken:n},tokenRemoteConfig:{tokenRemoteAddress:i}}=O(t,e),s={...n,address:r?i:n.address},o=await fe(e,t);return {amount:t.amount-(o[t.targetChain.chainId]?.[n.address]??0n),asset:s}};function on(e,t){for(let r of e)for(let n of r.erc20Bridges){let i=t.tokenTransfers.find(({symbol:p})=>p===n.baseToken.symbol);if(!i)continue;let s=viem.isAddressEqual(n.teleporterAddress,t.to),o=viem.isAddressEqual(t.from,n.tokenHomeAddress)||viem.isAddressEqual(i.from,n.tokenHomeAddress),a=viem.isAddressEqual(t.from,_)||viem.isAddressEqual(i.from,_);if(s&&(o||a))return {isBridgeTx:!0,sourceChainId:n.remotes.length===1?n.remotes[0].remoteChain.chainId:void 0,targetChainId:t.chainId,bridgeType:"ictt-erc20-erc20"};if(viem.isAddressEqual(t.to,n.tokenHomeAddress)||viem.isAddressEqual(i.to,n.tokenHomeAddress))return {isBridgeTx:!0,sourceChainId:t.chainId,targetChainId:n.remotes.length===1?n.remotes[0].remoteChain.chainId:void 0,bridgeType:"ictt-erc20-erc20"}}return {isBridgeTx:!1}}var mn=async(e,t)=>{let r=await an(e);return {type:"ictt-erc20-erc20",analyzeTx:n=>{try{return on(r,ue(n))}catch{return {isBridgeTx:!1}}},estimateGas:n=>Vt(r,W(n)),estimateReceiveAmount:n=>sn(r,W(n)),getAssets:()=>Lt(r),getFees:n=>fe(r,n),getMinimumTransferAmount:n=>Kt(r,n),transferAsset:n=>Wt(r,ye(n),e,t),trackTransfer:n=>Xt(r,n)}};var le=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"src",type:"address"},{indexed:!0,internalType:"address",name:"guy",type:"address"},{indexed:!1,internalType:"uint256",name:"wad",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"dst",type:"address"},{indexed:!1,internalType:"uint256",name:"wad",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"src",type:"address"},{indexed:!0,internalType:"address",name:"dst",type:"address"},{indexed:!1,internalType:"uint256",name:"wad",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"src",type:"address"},{indexed:!1,internalType:"uint256",name:"wad",type:"uint256"}],name:"Withdrawal",type:"event"},{payable:!0,stateMutability:"payable",type:"fallback"},{constant:!0,inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"guy",type:"address"},{internalType:"uint256",name:"wad",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{internalType:"address",name:"",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[],name:"deposit",outputs:[],payable:!0,stateMutability:"payable",type:"function"},{constant:!0,inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"dst",type:"address"},{internalType:"uint256",name:"wad",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"src",type:"address"},{internalType:"address",name:"dst",type:"address"},{internalType:"uint256",name:"wad",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{internalType:"uint256",name:"wad",type:"uint256"}],name:"withdraw",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"chain_id",type:"uint256"}],name:"unwrap",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"swap",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{internalType:"address",name:"",type:"address"}],name:"swapSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"}];var Fe=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"guy",type:"address"},{name:"wad",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:"src",type:"address"},{name:"dst",type:"address"},{name:"wad",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{name:"wad",type:"uint256"}],name:"withdraw",outputs:[],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:"",type:"address"}],name:"balanceOf",outputs:[{name:"",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:"dst",type:"address"},{name:"wad",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[],name:"deposit",outputs:[],payable:!0,stateMutability:"payable",type:"function"},{constant:!0,inputs:[{name:"",type:"address"},{name:"",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:"src",type:"address"},{indexed:!0,name:"guy",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"src",type:"address"},{indexed:!0,name:"dst",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"dst",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"src",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Withdrawal",type:"event"}];function ya(e){return e.toLowerCase().startsWith("tb1")||e.toLowerCase().startsWith("bc1")}function nt(e){if(!ya(e))return !1;try{return base.bech32.decode(e),!0}catch{return !1}}function Ie(e,t){return nt(e)?e.toLowerCase().startsWith(t?"bc":"tb"):!1}var ke=zod.z.string().refine(e=>viem.isAddress(e),e=>({message:`Invalid EVM address '${e}'`})).transform(e=>e),la=zod.z.string().refine(e=>nt(e),e=>({message:`Invalid BTC address '${e}'`})),xe=(i=>(i.AVALANCHE="avalanche",i.ETHEREUM="ethereum",i.BITCOIN="bitcoin",i.UNKNOWN="",i))(xe||{}),Te=zod.z.nativeEnum(xe),Ta=zod.z.object({tokenName:zod.z.string(),nativeNetwork:Te,denomination:zod.z.number()}),ga=Ta.extend({nativeContractAddress:ke,wrappedContractAddress:ke,wrappedNetwork:Te}),pn=zod.z.object({disableFrontend:zod.z.boolean(),addressBlocklist:zod.z.array(zod.z.string())}),cn=pn.extend({assets:zod.z.record(zod.z.string(),ga),networks:zod.z.record(Te,zod.z.union([zod.z.number(),zod.z.undefined()])),walletAddresses:zod.z.record(Te,ke)}),dn=zod.z.object({minimumConfirmations:zod.z.record(Te,zod.z.optional(zod.z.number()))}),Aa=dn.extend({unwrapFeeApproximation:zod.z.record(zod.z.string(),zod.z.string()),wrapFeeApproximation:zod.z.record(zod.z.string(),zod.z.string())}),Me=zod.z.object({minimumFeeAmount:zod.z.string(),maximumFeeAmount:zod.z.string(),feePercentage:zod.z.number(),feePercentageDecimals:zod.z.number()}),Ca=dn.extend({unwrapFeeApproximation:zod.z.record(zod.z.string(),Me),wrapFeeApproximation:zod.z.record(zod.z.string(),Me)}),ha=zod.z.object({critical:cn,nonCritical:Aa}),Ea=zod.z.object({critical:cn,nonCritical:Ca}),ba=zod.z.object({tokenName:zod.z.string(),bech32AddressPrefix:zod.z.union([zod.z.literal("tb"),zod.z.literal("bc")]),wrappedContractAddress:ke,wrappedNetwork:Te}),va=pn.extend({addressBlocklist:zod.z.array(zod.z.string()),avalancheChainId:zod.z.number(),bitcoinAssets:zod.z.record(zod.z.string(),ba),walletAddresses:zod.z.object({btc:la,avalanche:ke})}),Ia=zod.z.object({dustThreshold:zod.z.number(),wrapFeeEstimate:zod.z.object({minimumFeeAmount:zod.z.string(),maximumFeeAmount:zod.z.string(),feePercentage:zod.z.number(),feePercentageDecimals:zod.z.number()}),unwrapFeeEstimate:zod.z.object({bridgeToll:zod.z.object({minimumFeeAmount:zod.z.string(),maximumFeeAmount:zod.z.string(),feePercentage:zod.z.number(),feePercentageDecimals:zod.z.number()}),estimatedTxFee:zod.z.object({constAmount:zod.z.number(),numeratorPerSat:zod.z.number(),denominatorPerSat:zod.z.number()})})}),ka=zod.z.object({wrapFeeAmount:zod.z.number(),constUnwrapFeeAmount:zod.z.number(),unwrapFeeNumerator:zod.z.number(),unwrapFeeDenominator:zod.z.number(),dustThreshold:zod.z.number()}),xa=zod.z.object({minimumConfirmations:zod.z.number(),minimumOnboardSize:zod.z.number(),currentBridgeFeeEstimate:zod.z.union([Ia,ka])}),Ba=zod.z.object({networkInfo:zod.z.record(zod.z.string(),xa)}),un=zod.z.object({criticalBitcoin:va,nonCriticalBitcoin:Ba}),wa=zod.z.intersection(Ea,un),Na=zod.z.intersection(ha,un),yn=zod.z.union([wa,Na]);var Ra=e=>"eip155:1"===e||"eip155:11155111"===e,rt=e=>Ra(e.chainId);var Be=e=>"eip155:43113"===e||"eip155:43114"===e,He=e=>Be(e.chainId);var Ve=e=>e==="bip122:000000000019d6689c085ae165831e93"||e==="bip122:000000000933ea01ad0ee984209779ba";var fn=e=>e==="eip155:1"||e==="eip155:43114"||e==="bip122:000000000019d6689c085ae165831e93",Le=e=>!fn(e),J=e=>fn(e.chainId);var we={type:"native",name:"Ether",symbol:"ETH",decimals:18};var ge=({destinations:e,...t})=>t;var Pa=e=>({source:e.nativeTokenConfig.ethereumToken,target:e.nativeTokenConfig.avalancheToken,ethToAva:!0}),ln=(e,t)=>{if(!U(t))throw new l("ASSET_NOT_SUPPORTED",`Wrong token type: ${t.type}`);return lodash.isEqual(e,ge(t))},Da=(e,t)=>{if(!U(t))throw new l("ASSET_NOT_SUPPORTED",`Wrong token type: ${t.type}`);let r=e.ethereumTokens[t.address];if(!r||!ln(r.token,t))throw new l("ASSET_NOT_SUPPORTED",`Unable to find matching ethereum token in config: ${t.symbol}`);let n=e.avalancheTokens[r.target.tokenAddress];if(!n)throw new l("ASSET_NOT_SUPPORTED",`Unable to get avalanche token in config: ${t.symbol}`);return {source:r,target:n,ethToAva:!0}},_a=(e,t)=>{if(!U(t))throw new l("ASSET_NOT_SUPPORTED",`Wrong token type: ${t.type}`);let r=e.avalancheTokens[t.address];if(!r||!ln(r.token,t))throw new l("ASSET_NOT_SUPPORTED",`Unable to find matching avalanche token in config: ${t.symbol}`);let n=e.ethereumTokens[r.target.tokenAddress];if(!n)throw new l("ASSET_NOT_SUPPORTED",`Unable to get ethereum token in config: ${t.symbol}`);return {source:r,target:n,ethToAva:!1}},Fa=(e,t)=>{let{reference:r}=b.toJSON(e.chainId),{reference:n}=b.toJSON(t.chainId);return [{source:1,target:43114},{source:43114,target:1},{source:11155111,target:43113},{source:43113,target:11155111}].some(({source:s,target:o})=>s.toString()===r&&o.toString()===n)},V=({sourceChain:e,targetChain:t,amount:r,asset:n},i)=>{if(e.chainId===t.chainId)throw new l("IDENTICAL_CHAINS_PROVIDED",`SourceChain and TargetChain need to be different network. But found the same chainId: ${e.chainId}`);if(!Fa(e,t))throw new l("INVALID_PARAMS","SourceChain and TargetChain combination is not correct or the chains provided are not supported");if(r<=0n)throw new l("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");return ce(n)&&n.symbol===we.symbol&&rt(e)?Pa(i):rt(e)?Da(i,n):_a(i,n)};async function Tn(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s,fromAddress:o}=t;if(!viem.isAddress(o))throw new l("INVALID_PARAMS",`Invalid fromAddress: ${o}`);let a=e.walletAddresses.ethereum,{source:m,ethToAva:p}=V({sourceChain:r,targetChain:n,asset:i,amount:s},e),c=h({chain:r}),d=0n;if(ce(i)&&p){d+=await c.estimateContractGas({address:m.token.address,abi:Fe,functionName:"deposit",account:o});try{d+=await c.estimateContractGas({address:m.token.address,abi:R,functionName:"transfer",account:o,args:[a,s]});}catch{let u=viem.encodeFunctionData({abi:R,functionName:"transfer",args:[a,s]});d+=await c.estimateGas({data:u,account:o,to:a,value:s});}}else d=await c.estimateContractGas({address:m.token.address,abi:p?R:le,functionName:p?"transfer":"unwrap",account:o,args:p?[a,s]:[s,0]});return d}var pe=e=>{try{return Me.parse(e),!0}catch{return !1}};var Ha=(e,{max:t,min:r})=>e>t?t:e<r?r:e,Ae=(e,t)=>{let{minimumFeeAmount:r,maximumFeeAmount:n,feePercentage:i,feePercentageDecimals:s}=t,o=BigInt(r),a=BigInt(n),m=i/10**s/100,p=Number(e)*m,c=BigInt(Math.ceil(p));return Ha(c,{min:o,max:a})};async function Z(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s}=t,{source:o,target:a,ethToAva:m}=V({sourceChain:r,targetChain:n,asset:i,amount:s},e),p=m?o.wrapFeeApproximation:o.unwrapFeeApproximation;if(pe(p)){let d=Ae(s,p);return {[a.chainId]:{[a.token.address]:d}}}let c=p??0n;return {[a.chainId]:{[a.token.address]:c}}}async function gn(e,t){let{target:r}=V(t,e),n=await Z(e,t);return {asset:r.token,amount:t.amount-(n[r.chainId]?.[r.token.address]??0n)}}function An(e){let t=Object.values(e.ethereumTokens).reduce((s,o)=>{if(o.token.symbol==="USDC")return s;let a=o.chainId,m=o.target.chainId,p={...o.token,destinations:{[m]:["avalanche-evm"]}},c=s[a]??[];return c.push(p),s[a]=c,s},{}),r=Object.values(e.avalancheTokens).reduce((s,o)=>{let a=o.chainId,m=o.target.chainId,p={...o.token,destinations:{[m]:["avalanche-evm"]}},c=s[a]??[];return c.push(p),s[a]=c,s},t),n="eip155:1";r[n]&&r[n].push({...we,destinations:{["eip155:43114"]:["avalanche-evm"]}});let i="eip155:11155111";return r[i]&&r[i].push({...we,destinations:{["eip155:43113"]:["avalanche-evm"]}}),r}var Cn=3n;async function Ge(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s}=t,{source:o,target:a,ethToAva:m}=V({sourceChain:r,targetChain:n,asset:i,amount:s},e),p=m?o.wrapFeeApproximation:o.unwrapFeeApproximation;if(pe(p)){let u=p.minimumFeeAmount;return BigInt(u)*Cn}let d=(await Z(e,t))[a.chainId]?.[a.token.address];if(d===void 0)throw new l("INVALID_PARAMS",`Unable to get static fee for ${i.symbol}`);return d*Cn}var Ue=()=>e=>({transactionHash:e.transactionHash}),hn=({params:{bridgeTransfer:{fromAddress:e}},transferData:{target:t,ethToAva:r},targetClient:n,config:i})=>async({fromBlock:s,toBlock:o,metadata:a})=>{if(!s)return;let m=t.token.address,p=r?_:i.walletAddresses.ethereum,c=r?void 0:{src:p,dst:e},d=r?{inputs:[{indexed:!1,name:"to",type:"address"},{indexed:!1,name:"amount",type:"uint256"},{indexed:!1,name:"feeAddress",type:"address"},{indexed:!1,name:"feeAmount",type:"uint256"},{indexed:!1,name:"originTxId",type:"bytes32"}],name:"Mint",type:"event"}:{inputs:[{indexed:!0,name:"src",type:"address"},{indexed:!0,name:"dst",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Transfer",type:"event"},u=await n.getLogs({address:m,event:d,args:c,fromBlock:s,toBlock:o}),y=r?u.find(T=>at(T)&&T.args.originTxId===a?.transactionHash):u.at(-1);if(!lodash.isNil(y))return y.transactionHash},at=e=>Ua(e)?Object.keys(e.args).includes("originTxId"):!1,Ua=e=>Object.keys(e).includes("args"),Ne=e=>lodash.isObject(e)&&viem.isHex(e.transactionHash);var za=async(e,t)=>{let{bridgeTransfer:r}=t,{targetChain:n,sourceChain:i,asset:s,amount:o}=r,a=V({sourceChain:i,targetChain:n,asset:s,amount:o},e),m=h({chain:r.targetChain}),p=hn({params:t,transferData:a,targetClient:m,config:e}),c=oe({targetClient:m,getTargetTxHash:p,checkMetadata:Ne,trackingParams:t,trackingConfig:k});return D({promise:c,delay:1e3*30,startAfter:k.initialDelayMs})},Wa=async e=>{let{sourceChain:t,targetChain:r}=e.bridgeTransfer,n=h({chain:t}),i=h({chain:r}),s=Ue(),o=se({sourceClient:n,targetClient:i,getMetadata:s,checkMetadata:Ne,trackingParams:e,trackingConfig:k});return D({promise:o,delay:1e3*30,startAfter:k.initialDelayMs})};function En(e,t){let r,n=()=>{r?.();};return {result:(async()=>{let{bridgeTransfer:s,updateListener:o}=t,{result:a,cancel:m}=await Wa({bridgeTransfer:s,updateListener:o});r=m;let p=await a,{result:c,cancel:d}=await za(e,{updateListener:o,bridgeTransfer:p});return r=d,c})(),cancel:n}}var ze=async({amount:e,source:t,sourceChain:r,fromAddress:n,sign:i,onStepChange:s,gasSettings:o})=>{let a=h({chain:r}),m={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};s?.(m);let p=viem.encodeFunctionData({abi:le,functionName:"unwrap",args:[e,0n]}),c=await i({from:n,to:t.token.address,data:p,...o?{maxFeePerGas:o.price,maxPriorityFeePerGas:o.tip}:null,chainId:b.toEip155HexChainId(b.toJSON(r.chainId))},d=>a.sendRawTransaction({serializedTransaction:d}),m);return await a.waitForTransactionReceipt({hash:c,pollingInterval:1e3}),c};var bn={ethereum:"0x6b7a87899490EcE95443e979cA9485CBE7E71522",avalanche:"0x9b17bAADf0f21F03e35249e0e59723F34994F806"},qa=async({amount:e,config:t,source:r,sourceChain:n,fromAddress:i,sign:s,onStepChange:o,gasSettings:a})=>{let m=t.walletAddresses.ethereum,p=h({chain:n}),c={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};o?.(c);let d=viem.encodeFunctionData({abi:R,functionName:"transfer",args:[m,e]}),u=await s({from:i,to:r.token.address,data:d,...a?{maxFeePerGas:a.price,maxPriorityFeePerGas:a.tip}:null,chainId:b.toEip155HexChainId(b.toJSON(n.chainId))},y=>p.sendRawTransaction({serializedTransaction:y}),c);return await p.waitForTransactionReceipt({hash:u,pollingInterval:1e3}),u},$a=async({config:e,fromAddress:t,sourceChain:r,targetChain:n})=>{if(e.environment!=="production"&&!J(r)&&!J(n))return !1;let i=e.nativeTokenConfig.ethereumToken,s=e.nativeTokenConfig.avalancheToken;try{return await h({chain:r}).readContract({address:i.token.address,abi:R,functionName:"allowance",args:[t,bn.ethereum]})!==0n?!0:await h({chain:n}).readContract({address:s.token.address,abi:R,functionName:"allowance",args:[t,bn.avalanche]})!==0n}catch{return !1}},Xa=async({amount:e,config:t,fromAddress:r,source:n,sourceChain:i,targetChain:s,sign:o,onStepChange:a,gasSettings:m})=>{let p=t.walletAddresses.ethereum,c=h({chain:i});if(!He(s))throw new l("INVALID_PARAMS","Invalid chain combinations");if(await $a({config:t,fromAddress:r,sourceChain:i,targetChain:s}))throw new l("VULNERABLE_TOKEN_APPROVAL_ADDRESS","Address has vulnerable token approvals");let u={currentSignature:1,currentSignatureReason:"wrap-token",requiredSignatures:2};a?.(u);let y=viem.encodeFunctionData({abi:Fe,functionName:"deposit"}),T=await o({from:r,to:n.token.address,value:e,data:y,...m?{maxFeePerGas:m.price,maxPriorityFeePerGas:m.tip}:null,chainId:b.toEip155HexChainId(b.toJSON(i.chainId))},A=>c.sendRawTransaction({serializedTransaction:A}),u);await c.waitForTransactionReceipt({hash:T,pollingInterval:1e3});let g={currentSignature:2,currentSignatureReason:"tokens-transfer",requiredSignatures:2};a?.(g);let C=viem.encodeFunctionData({abi:R,functionName:"transfer",args:[p,e]}),v=await o({from:r,to:n.token.address,data:C,...m?{maxFeePerGas:m.price,maxPriorityFeePerGas:m.tip}:null,chainId:b.toEip155HexChainId(b.toJSON(i.chainId))},A=>c.sendRawTransaction({serializedTransaction:A}),g);return await c.waitForTransactionReceipt({hash:v,pollingInterval:1e3}),v},vn=async({amount:e,asset:t,config:r,fromAddress:n,source:i,sourceChain:s,targetChain:o,sign:a,onStepChange:m,gasSettings:p})=>ce(t)?Xa({amount:e,config:r,fromAddress:n,source:i,sourceChain:s,targetChain:o,sign:a,onStepChange:m,gasSettings:p}):qa({amount:e,config:r,source:i,sourceChain:s,fromAddress:n,sign:a,onStepChange:m,gasSettings:p});var Ce=(e,t)=>{let r=t.map(i=>i.toLowerCase()),n=e.find(i=>r.includes(i.toLowerCase()));if(n)throw new l("ADDRESS_IS_BLOCKED",n)};async function In(e,t,r){let{sourceChain:n,targetChain:i,asset:s,amount:o,fromAddress:a,toAddress:m,onStepChange:p,gasSettings:c}=t;if(a!==m)throw new l("INVALID_PARAMS","fromAddress and toAddress do not match");Ce([a,m],e.addressBlocklist);let d=await Z(e,{asset:s,amount:o,sourceChain:n,targetChain:i}),{source:u,target:y,ethToAva:T}=V({sourceChain:n,targetChain:i,asset:s,amount:o},e),g=await Ge(e,{asset:s,amount:o,sourceChain:n,targetChain:i});if(o<g)throw new l("INVALID_PARAMS",`Minimum transfer amount is ${g.toString()}`);let C=He(n)?e.minimumConfirmations.avalanche:e.minimumConfirmations.ethereum,v=d[y.chainId]?.[y.token.address]??0n,A;T?A=await vn({amount:o,asset:s,config:e,fromAddress:a,source:u,sourceChain:n,targetChain:i,sign:r.sign,onStepChange:p,gasSettings:c}):A=await ze({amount:o,fromAddress:a,source:u,sourceChain:n,sign:r.sign,onStepChange:p,gasSettings:c});let x=Date.now(),S=h({chain:t.targetChain}),F;try{F=await S.getBlockNumber();}catch(he){console.error(he);}return {type:"avalanche-evm",environment:e.environment,fromAddress:t.fromAddress,toAddress:t.toAddress,amount:t.amount,asset:s,bridgeFee:v,sourceChain:t.sourceChain,sourceStartedAt:x,sourceTxHash:A,sourceConfirmationCount:0,sourceRequiredConfirmationCount:C,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:F}}var kn=(e,t)=>{let r=e.critical.assets,{ethereum:n,avalanche:i}=e.critical.networks;if(n===void 0||i===void 0)throw new w("WARDEN_CONFIG_MISSING_NETWORK","Critical networks info is missing from wardenConfig");let s=e.critical.walletAddresses.avalanche,o=e.critical.walletAddresses.ethereum;if(!s||!o)throw new w("CONFIG_NOT_AVAILABLE","Wallet address is missing from the critical config.");let a=Object.entries(r).reduce((T,[g,C])=>{let v={type:"erc20",address:C.nativeContractAddress,name:C.tokenName,symbol:g,decimals:C.denomination},A=e.nonCritical.wrapFeeApproximation[g];return T[C.nativeContractAddress]={chainId:`eip155:${n}`,token:v,target:{chainId:`eip155:${i}`,tokenAddress:C.wrappedContractAddress},wrapFeeApproximation:pe(A)?A:A?BigInt(A):void 0},T},{}),m=Object.values(a).find(T=>T.token.symbol==="WETH");if(!m)throw new w("CONFIG_NOT_AVAILABLE","WETH info is missing from config");let p=Object.entries(r).reduce((T,[g,C])=>{let v={type:"erc20",address:C.wrappedContractAddress,name:C.tokenName,symbol:`${g}.e`,decimals:C.denomination},A=e.nonCritical.unwrapFeeApproximation[g];return T[C.wrappedContractAddress]={chainId:`eip155:${i}`,token:v,target:{chainId:`eip155:${n}`,tokenAddress:C.nativeContractAddress},unwrapFeeApproximation:pe(A)?A:A?BigInt(A):void 0},T},{}),c=p[m.target.tokenAddress];if(!c)throw new w("CONFIG_NOT_AVAILABLE","WETH.e info is missing from config");let d=e.nonCritical.minimumConfirmations.avalanche,u=e.nonCritical.minimumConfirmations.ethereum;if(!d||!u)throw new w("CONFIG_NOT_AVAILABLE","Minimum confirmation info is missing");return {addressBlocklist:e.critical.addressBlocklist,ethereumTokens:a,avalancheTokens:p,minimumConfirmations:{avalanche:d,ethereum:u},environment:t,walletAddresses:{avalanche:s,ethereum:o},nativeTokenConfig:{ethereumToken:m,avalancheToken:c}}};var xn={environment:"dev",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.test.json",configMismatchThreshold:1,wardenConfigURLs:["https://warden1-avax-dev-storage.s3.amazonaws.com/bridge_settings.json","https://warden2-avax-dev-storage.s3.amazonaws.com/bridge_settings.json","https://warden3-avax-dev-storage.s3.amazonaws.com/bridge_settings.json"],disabledTokensOnNetwork:{avalanche:[],ethereum:["FAU"]}},Bn={...xn,environment:"staging"},wn={...Bn,environment:"test",configMismatchThreshold:2,wardenConfigURLs:["https://ava-warden-bucket.s3.eu-central-1.amazonaws.com/bridge_settings.json","https://ava-warden-testnet.s3.us-west-1.amazonaws.com/bridge_settings.json","https://assets.warden-testnet.avalanche.protofire.io/bridge_settings.json","https://avalabs-warden-test-blob.s3.amazonaws.com/bridge_settings.json","https://avawarden.s3.amazonaws.com/bridge_settings.json","https://blob-storage-testnet.warden-avascan.info/bridge_settings.json","https://chainstack-ava-warden-testnet.s3.us-west-2.amazonaws.com/bridge_settings.json","https://em-warden-testnet.enclave-warden.com/bridge_settings.json"]},Ka={...wn,environment:"production",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.json",wardenConfigURLs:["https://ava-warden-bucket-prod.s3.eu-central-1.amazonaws.com/bridge_settings.json","https://ava-warden-mainnet.s3.us-west-1.amazonaws.com/bridge_settings.json","https://assets.warden-mainnet.avalanche.protofire.io/bridge_settings.json","https://avawarden-prod.s3.amazonaws.com/bridge_settings.json","https://blob-storage-mainnet.warden-avascan.info/bridge_settings.json","https://chainstack-ava-warden-mainnet.s3.us-west-2.amazonaws.com/bridge_settings.json","https://em-warden-mainnet.enclave-warden.com/bridge_settings.json","https://warden-avax-storage.s3.amazonaws.com/bridge_settings.json"],disabledTokensOnNetwork:{avalanche:[],ethereum:["CRV"]}},Ja={production:Ka,staging:Bn,test:wn,dev:xn},We=e=>Ja[e];var ei=async e=>{let t=[];e.forEach(i=>t.push(fetch(i)));let r=await Promise.allSettled(t),n=[];for(let i of r)if(!(i.status==="rejected"||!i.value||!i.value.ok))try{let s=await i.value.json(),o=yn.parse(s);n.push(o);}catch(s){console.error(s);}return n},ti=e=>e.map(t=>{if(t.critical.disableFrontend)throw new w("CONFIG_NOT_AVAILABLE","Disable frontend");let r=e.reduce((n,i)=>n+(lodash.isEqual(t.critical,i.critical)?1:0),0);return {config:t,count:r}}),je=lodash.memoize(async e=>{let t=e.wardenConfigURLs,r=await ei(t),n=ti(r),i=lodash.maxBy(n,s=>s.count);if(!i||i.count<e.wardenConfigURLs.length-e.configMismatchThreshold)throw new w("WARDEN_CONFIG_MISMATCH","Warden config mismatch");return i.config});var Nn=async e=>{let t=We(e),r=await je(t);return kn(r,e)};function Rn(e,t){let r="eip155:43113"===t.chainId||"eip155:11155111"===t.chainId,n=r?"eip155:43113":"eip155:43114",i=r?"eip155:11155111":"eip155:1";return viem.isAddressEqual(t.from,e.walletAddresses.ethereum)||viem.isAddressEqual(t.to,e.walletAddresses.avalanche)?{isBridgeTx:!0,sourceChainId:n,targetChainId:i,bridgeType:"avalanche-evm"}:viem.isAddressEqual(t.from,e.walletAddresses.avalanche)||viem.isAddressEqual(t.to,e.walletAddresses.ethereum)?{isBridgeTx:!0,sourceChainId:i,targetChainId:n,bridgeType:"avalanche-evm"}:{isBridgeTx:!1}}var Sn=async(e,t)=>{let r=await Nn(e);return {type:"avalanche-evm",analyzeTx:n=>{try{return Rn(r,ue(n))}catch{return {isBridgeTx:!1}}},estimateGas:n=>Tn(r,W(n)),estimateReceiveAmount:n=>gn(r,W(n)),getAssets:()=>An(r),getFees:n=>Z(r,n),transferAsset:n=>In(r,ye(n),t),trackTransfer:n=>En(r,n),getMinimumTransferAmount:n=>Ge(r,n)}};var st=e=>"wrapFeeEstimate"in e,Q=e=>"wrapFeeEstimate"in e||"unwrapFeeEstimate"in e;var Pn=(e,t)=>{let r=e.criticalBitcoin,n=r.bitcoinAssets.btc;if(!n)throw new w("CONFIG_NOT_AVAILABLE","Bitcoin asset info is missing from config");let i=e.nonCriticalBitcoin.networkInfo.btc;if(!i)throw new w("CONFIG_NOT_AVAILABLE","Bitcoin network info was not found.");let s=i.currentBridgeFeeEstimate,o=st(s)?{wrapFeeEstimate:s.wrapFeeEstimate}:{wrapFeeAmount:s.wrapFeeAmount},a=n.bech32AddressPrefix==="bc"?"bip122:000000000019d6689c085ae165831e93":"bip122:000000000933ea01ad0ee984209779ba",m={chainId:a,token:{name:n.tokenName,symbol:"BTC",decimals:8,type:"native"},target:{networkId:`eip155:${r.avalancheChainId}`,tokenAddress:n.wrappedContractAddress},bridgeFeeEstimate:o},p=st(s)?{unwrapFeeEstimate:s.unwrapFeeEstimate}:{constUnwrapFeeAmount:s.constUnwrapFeeAmount,unwrapFeeNumerator:s.unwrapFeeNumerator,unwrapFeeDenominator:s.unwrapFeeDenominator},c={chainId:`eip155:${r.avalancheChainId}`,token:{name:n.tokenName,symbol:"BTC.b",decimals:8,type:"erc20",address:n.wrappedContractAddress},target:{networkId:a},bridgeFeeEstimate:p};return {addressBlocklist:e.criticalBitcoin.addressBlocklist,environment:t,dustThreshold:s.dustThreshold,minimumOnboardSize:i.minimumOnboardSize,minimumConfirmations:{bitcoin:i.minimumConfirmations,avalanche:e.nonCritical.minimumConfirmations.avalanche??1},nativeTokenConfig:{bitcoinToken:m,avalancheToken:c},walletAddresses:{bitcoin:r.walletAddresses.btc,avalanche:r.walletAddresses.avalanche}}};var $e=async e=>{try{let t=We(e),r=await je(t);return Pn(r,e)}catch{throw new w("CONFIG_NOT_AVAILABLE")}};function _n(e,t){let{chainId:r,from:n,to:i,tokenTransfers:s}=t,o=Be(r),a=Ve(r);if(!o&&!a)return {isBridgeTx:!1};let m=Le(r),p=m?"eip155:43113":"eip155:43114",c=m?"bip122:000000000933ea01ad0ee984209779ba":"bip122:000000000019d6689c085ae165831e93",d=a&&lodash.isEqual(i.toLowerCase(),e.walletAddresses.bitcoin.toLowerCase())&&s.some(y=>y.symbol==="BTC");return o&&lodash.isEqual(n,e.walletAddresses.avalanche)&&s.some(y=>y.symbol==="BTC.b"&&y.from===_)||d?{isBridgeTx:!0,sourceChainId:c,targetChainId:p,bridgeType:"avalanche-btc-ava"}:{isBridgeTx:!1}}var Fn=zod.z.object({txHash:zod.z.string(),txHex:zod.z.optional(zod.z.string()),index:zod.z.number(),value:zod.z.number(),script:zod.z.string(),blockHeight:zod.z.number(),confirmations:zod.z.number()}),Mn=zod.z.array(Fn);Fn.extend({script:zod.z.optional(zod.z.string())});var ni=zod.z.object({address:zod.z.string(),value:zod.z.number()}),On=zod.z.array(ni);function ai(e){let t=[];return e.filter(r=>{let n=r.txHash+r.index.toString();return t.includes(n)?!1:(t.push(n),!0)})}async function Xe(e,t,r,n,i,s){let o=ai(i),a=[{address:e,value:Number(r)}],{inputs:m,outputs:p,fee:c}=ri__default.default(o,a,n);if(typeof c!="number")throw new l("UNKNOWN","Unable to choose utxo properly");if(!m||!p||!p.length)return {fee:c};let d=await s.getScriptsForUtxos(m),u=Mn.parse(d),y=[p[0]],T=p[1];T&&y.push({address:t,value:T.value});let g=On.parse(y);return {inputs:u,outputs:g,fee:c}}var si=(e,t)=>[{source:"bip122:000000000019d6689c085ae165831e93",target:"eip155:43114"},{source:"bip122:000000000933ea01ad0ee984209779ba",target:"eip155:43113"}].some(({source:n,target:i})=>n===e.chainId&&i===t.chainId),oi=(e,t)=>lodash.isEqual(e,ge(t)),L=(e,t)=>{let{sourceChain:r,targetChain:n,amount:i,asset:s}=e;if(!si(r,n))throw new l("INVALID_PARAMS","SourceChain and TargetChain combination is not valid");if(i<=0n)throw new l("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let o=t.nativeTokenConfig.bitcoinToken;if(!oi(o.token,s))throw new l("ASSET_NOT_SUPPORTED","Incorrect Asset was provided");return {source:o,target:t.nativeTokenConfig.avalancheToken,btcToAva:!0}};async function Hn(e,t,r){let{fromAddress:n,sourceChain:i,targetChain:s,asset:o,amount:a}=t;L({sourceChain:i,targetChain:s,asset:o,amount:a},e);let m=e.walletAddresses.bitcoin,p=1,{utxos:c}=await r.getUtxoBalance(n,!1),{fee:d}=await Xe(m,n,a,p,c,r);return BigInt(d)}async function Y(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:s}=t,{source:o,target:a}=L({sourceChain:r,targetChain:n,amount:i,asset:s},e);if(Q(o.bridgeFeeEstimate)){let m=Ae(i,o.bridgeFeeEstimate.wrapFeeEstimate);return {[a.chainId]:{[a.token.address]:m}}}return {[a.chainId]:{[a.token.address]:BigInt(o.bridgeFeeEstimate.wrapFeeAmount)}}}async function Vn(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s}=t,{target:o}=L({sourceChain:r,targetChain:n,asset:i,amount:s},e),a=await Y(e,t);return {asset:o.token,amount:t.amount-(a[o.chainId]?.[o.token.address]??0n)}}function Ln(e){let t=e.nativeTokenConfig.bitcoinToken,r={...t.token,destinations:{[t.target.networkId]:["avalanche-btc-ava"]}};return {[t.chainId]:[r]}}async function Gn(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:s}=t,o=L({sourceChain:r,targetChain:n,amount:i,asset:s},e),a=await mi(e,t,o),m=e.minimumOnboardSize;return BigInt(Math.max(a*4,m))}async function mi(e,t,{source:r,target:n}){if(Q(r.bridgeFeeEstimate))return Number(r.bridgeFeeEstimate.wrapFeeEstimate.minimumFeeAmount);{let i=await Y(e,t);return Number(i[n.chainId]?.[n.token.address])}}var Un=({targetClient:e,checkMetadata:t,trackingParams:{bridgeTransfer:r,updateListener:n},trackingConfig:{trackingLimitMs:i},bitcoinFunctions:s})=>{let o=lodash.cloneDeep(r);return async m=>{let{sourceTxHash:p}=r;if(o.completedAt||t(o.metadata))return m(o);if(o.sourceStartedAt+i<=Date.now())return o=E(o,{completedAt:Date.now(),errorCode:5004},n),m(o);let{confirmations:c,fees:d}=await s.getTransaction(p);if(!o.sourceNetworkFee){let T=BigInt(Math.ceil(d));o=E(o,{sourceNetworkFee:T},n);}let u=c>o.sourceConfirmationCount,y=c>=o.sourceRequiredConfirmationCount;if(u){let T={};T.sourceConfirmationCount=Number(c),y||(T.targetStartBlockNumber=await e.getBlockNumber()),o=E(o,T,n);}if(y)return o.targetStartBlockNumber||(o=E(o,{targetStartBlockNumber:await e.getBlockNumber()},n)),o=E(o,{targetStartedAt:Date.now(),metadata:{transactionHash:p}},n),m(o)}};var jn=({targetClient:e,getTargetTxHash:t,checkMetadata:r,trackingParams:{bridgeTransfer:n,updateListener:i},trackingConfig:{trackingLimitMs:s,maxBlocks:o}})=>{if(!n.completedAt&&!r(n.metadata))throw new l("INVALID_PARAMS","metadata is missing");if(!n.targetStartBlockNumber)throw new l("INVALID_PARAMS","targetStartBlockNumber is missing");let a=lodash.cloneDeep(n);return async p=>{if(a.completedAt)return p(a);if(a.sourceStartedAt+s<=Date.now())return a=E(a,{completedAt:Date.now(),errorCode:5004},i),p(a);if(!a.targetStartBlockNumber)throw new Error("unreachable");if(!a.targetTxHash){let T=await e.getBlockNumber(),g=a.targetStartBlockNumber-o,C=g>=0n?g:"earliest",v=a.targetStartBlockNumber+o,A=v<T?v:"latest",x=await t({fromBlock:C,toBlock:A,metadata:a.metadata});if(x)a=E(a,{targetTxHash:x},i);else {a=E(a,{targetStartBlockNumber:T},i);return}}if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let c=await e.getTransactionReceipt({hash:a.targetTxHash});if(!a.targetNetworkFee){let T=await e.getTransaction({hash:a.targetTxHash}),g=K(T,c);g&&(a=E(a,{targetNetworkFee:g},i));}if(c.status==="reverted")return a=E(a,{completedAt:Date.now(),errorCode:5005},i),p(a);if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let d=await e.getTransactionConfirmations({hash:a.targetTxHash}),u=d>a.targetConfirmationCount,y=d>=a.targetRequiredConfirmationCount;if(u&&(a=E(a,{targetConfirmationCount:Number(d)},i)),!!y)return a=E(a,{completedAt:Date.now()},i),p(a)}};var ot=e=>lodash.isObject(e)&&!!e.transactionHash,qn=({transferData:{target:e},targetClient:t})=>async({fromBlock:r,toBlock:n,metadata:i})=>{if(!r)return;let s=e.token.address,o={inputs:[{indexed:!1,name:"to",type:"address"},{indexed:!1,name:"amount",type:"uint256"},{indexed:!1,name:"feeAddress",type:"address"},{indexed:!1,name:"feeAmount",type:"uint256"},{indexed:!1,name:"originTxId",type:"bytes32"},{indexed:!1,name:"originOutputIndex",type:"uint256"}],name:"Mint",type:"event"},m=(await t.getLogs({address:s,event:o,fromBlock:r,toBlock:n})).find(p=>at(p)&&p.args.originTxId===`0x${i?.transactionHash}`);if(!lodash.isNil(m))return m.transactionHash};var yi=async(e,t)=>{let{targetChain:r}=e.bridgeTransfer,n=h({chain:r}),i=Un({targetClient:n,trackingParams:e,trackingConfig:k,checkMetadata:ot,bitcoinFunctions:t});return D({promise:i,delay:1e3*60,startAfter:k.initialDelayMs})},fi=async(e,t)=>{let{bridgeTransfer:r}=e,n=h({chain:r.targetChain}),i=qn({transferData:t,targetClient:n}),s=jn({targetClient:n,getTargetTxHash:i,checkMetadata:ot,trackingParams:e,trackingConfig:k});return D({promise:s,delay:2e3,startAfter:k.initialDelayMs})};function $n(e,t,r){let n,i=()=>{n?.();};return {result:(async()=>{let{bridgeTransfer:o}=t,{targetChain:a,sourceChain:m,asset:p,amount:c}=o,d=L({sourceChain:m,targetChain:a,asset:p,amount:c},e),{result:u,cancel:y}=await yi(t,r);n=y;let T=await u,{result:g,cancel:C}=await fi({...t,bridgeTransfer:T},d);return n=C,g})(),cancel:i}}var Xn=async({config:e,amount:t,fromAddress:r,sign:n,onStepChange:i,bitcoinFunctions:s,gasSettings:o})=>{let a=o?Number(o.price):void 0,{low:m,high:p}=a?{low:a,high:a}:await s.getFeeRates(),c=e.environment==="production"?p:m,{utxos:d}=await s.getUtxoBalance(r,!1),u=e.walletAddresses.bitcoin,{inputs:y,outputs:T}=await Xe(u,r,t,c,d,s);if(!y||!T)throw new l("INVALID_PARAMS","Unable to create transaction");let g={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};return i?.(g),await n({inputs:y,outputs:T},s.issueRawTx,g)};async function Kn(e,t,r,n){let{fromAddress:i,toAddress:s,sourceChain:o,targetChain:a,asset:m,amount:p,onStepChange:c,gasSettings:d}=t;Ce([i,s],e.addressBlocklist);let{target:u}=L({sourceChain:o,targetChain:a,asset:m,amount:p},e),y=Date.now(),g=(await Y(e,{asset:m,amount:p,sourceChain:o,targetChain:a}))[u.chainId]?.[u.token.address]??0n,C=e.minimumConfirmations.bitcoin,v=await Xn({config:e,amount:p,sign:r.sign,onStepChange:c,fromAddress:i,bitcoinFunctions:n,gasSettings:d}),A=h({chain:a}),x;try{x=await A.getBlockNumber();}catch(F){console.error(F);}return {type:"avalanche-btc-ava",environment:e.environment,fromAddress:i,toAddress:s,amount:t.amount,asset:m,bridgeFee:g,sourceChain:o,sourceStartedAt:y,sourceTxHash:v,sourceConfirmationCount:0,sourceRequiredConfirmationCount:C,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:x}}var Jn=({fromAddress:e,toAddress:t,sourceChain:r,...n})=>{if(!viem.isAddress(t))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid toAddress was provided");let i=J(r);if(!Ie(e,i))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided: Make sure it is Btc Address from correct environment");return {fromAddress:e,toAddress:t,sourceChain:r,...n}},mt=({fromAddress:e,sourceChain:t,...r})=>{let n=J(t);if(!Ie(e,n))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided: Make sure it is Btc Address from correct environment");return {fromAddress:e,sourceChain:t,...r}};var Zn=async(e,t,r)=>{let n=await $e(e);return {type:"avalanche-btc-ava",analyzeTx:i=>_n(n,i),estimateGas:i=>Hn(n,mt(i),r),estimateReceiveAmount:i=>Vn(n,mt(i)),getAssets:()=>Ln(n),getFees:i=>Y(n,i),transferAsset:i=>Kn(n,Jn(i),t,r),trackTransfer:i=>$n(n,i,r),getMinimumTransferAmount:i=>Gn(n,i)}};function Yn(e,t){let{chainId:r,from:n,to:i,tokenTransfers:s}=t,o=Be(r),a=Ve(r);if(!o&&!a)return {isBridgeTx:!1};let m=Le(r),p=m?"eip155:43113":"eip155:43114",c=m?"bip122:000000000933ea01ad0ee984209779ba":"bip122:000000000019d6689c085ae165831e93",d=o&&lodash.isEqual(i.toLowerCase(),e.nativeTokenConfig.avalancheToken.token.address.toLowerCase())&&s.some(y=>y.to?.toLowerCase()===_.toLowerCase()&&y.symbol==="BTC.b"),u=a&&lodash.isEqual(n.toLowerCase(),e.walletAddresses.bitcoin.toLowerCase())&&s.some(y=>y.symbol==="BTC");return d||u?{isBridgeTx:!0,sourceChainId:p,targetChainId:c,bridgeType:"avalanche-ava-btc"}:{isBridgeTx:!1}}var gi=(e,t)=>[{source:"eip155:43114",target:"bip122:000000000019d6689c085ae165831e93"},{source:"eip155:43113",target:"bip122:000000000933ea01ad0ee984209779ba"}].some(({source:n,target:i})=>n===e.chainId&&i===t.chainId),Ai=(e,t)=>lodash.isEqual(e,ge(t)),G=(e,t)=>{let{sourceChain:r,targetChain:n,amount:i,asset:s}=e;if(!gi(r,n))throw new l("INVALID_PARAMS","SourceChain and TargetChain combination is not valid");if(i<=0n)throw new l("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let o=t.nativeTokenConfig.avalancheToken;if(!Ai(o.token,s))throw new l("ASSET_NOT_SUPPORTED","Incorrect Asset was provided");return {source:o,target:t.nativeTokenConfig.bitcoinToken,btcToAva:!1}};async function er(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s,fromAddress:o}=t,{source:a}=G({sourceChain:r,targetChain:n,asset:i,amount:s},e);return await h({chain:r}).estimateContractGas({address:a.token.address,abi:le,functionName:"unwrap",account:o,args:[s,0]})}async function ee(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:s}=t,{source:o}=G({sourceChain:r,targetChain:n,amount:i,asset:s},e);if(Q(o.bridgeFeeEstimate)){let{constAmount:a,numeratorPerSat:m,denominatorPerSat:p}=o.bridgeFeeEstimate.unwrapFeeEstimate.estimatedTxFee,c=a+m/p*Number(i),d=Ae(i,o.bridgeFeeEstimate.unwrapFeeEstimate.bridgeToll),u=BigInt(Math.ceil(c))+d;return {[n.chainId]:{NATIVE:BigInt(u)}}}else {let{constUnwrapFeeAmount:a,unwrapFeeNumerator:m,unwrapFeeDenominator:p}=o.bridgeFeeEstimate,c=a+m/p*Number(i),d=BigInt(Math.ceil(c));return {[n.chainId]:{NATIVE:BigInt(d)}}}}async function tr(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s}=t,{target:o}=G({sourceChain:r,targetChain:n,asset:i,amount:s},e),a=await ee(e,{sourceChain:r,targetChain:n,amount:s,asset:i});return {asset:o.token,amount:t.amount-(a[o.chainId]?.NATIVE??0n)}}function nr(e){let t=e.nativeTokenConfig.avalancheToken,r={...t.token,destinations:{[t.target.networkId]:["avalanche-ava-btc"]}};return {[t.chainId]:[r]}}async function rr(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:s}=t,o=G({sourceChain:r,targetChain:n,amount:i,asset:s},e),a=await Ci(e,t,o),m=e.dustThreshold;return BigInt(Math.ceil((a+m)*2))}async function Ci(e,t,{source:r}){if(Q(r.bridgeFeeEstimate)){let{constAmount:n,numeratorPerSat:i,denominatorPerSat:s}=r.bridgeFeeEstimate.unwrapFeeEstimate.estimatedTxFee,o=n+i/s*Number(t.amount);return Number(r.bridgeFeeEstimate.unwrapFeeEstimate.bridgeToll.minimumFeeAmount)+o}else {let n=await ee(e,t);return Number(n[t.targetChain.chainId]?.NATIVE)}}var ir=({sourceClient:e,getMetadata:t,checkMetadata:r,trackingParams:{bridgeTransfer:n,updateListener:i},trackingConfig:{trackingLimitMs:s},bitcoinFunctions:o})=>{let a=lodash.cloneDeep(n);return async p=>{if(a.completedAt||r(a.metadata))return p(a);if(a.sourceStartedAt+s<=Date.now())return a=E(a,{completedAt:Date.now(),errorCode:5004},i),p(a);if(!viem.isHash(a.sourceTxHash))return;let c=await e.getTransactionReceipt({hash:a.sourceTxHash});if(!a.sourceNetworkFee){let g=await e.getTransaction({hash:a.sourceTxHash}),C=K(g,c);C&&(a=E(a,{sourceNetworkFee:C},i));}if(c.status==="reverted")return a=E(a,{completedAt:Date.now(),errorCode:5005},i),p(a);if(!viem.isHash(a.sourceTxHash))return;let d=await e.getTransactionConfirmations({hash:a.sourceTxHash}),u=d>a.sourceConfirmationCount,y=d>=a.sourceRequiredConfirmationCount;if(u){let g={};g.sourceConfirmationCount=Number(d),y||(g.targetStartBlockNumber=BigInt(await o.getChainHeight())),a=E(a,g,i);}if(!y)return;a.targetStartBlockNumber||(a=E(a,{targetStartBlockNumber:BigInt(await o.getChainHeight())},i));let T=t(c);return a=E(a,{targetStartedAt:Date.now(),metadata:T},i),p(a)}};var sr=({trackingParams:{bridgeTransfer:e,updateListener:t},trackingConfig:{trackingLimitMs:r},config:n,bitcoinFunctions:i})=>{let{toAddress:s,targetStartBlockNumber:o,amount:a}=e;if(!e.targetStartBlockNumber)throw new l("INVALID_PARAMS","targetStartBlockNumber is missing");let m=lodash.cloneDeep(e);return async c=>{if(m.completedAt)return c(m);if(m.sourceStartedAt+r<=Date.now())return m=E(m,{completedAt:Date.now(),errorCode:5004},t),c(m);if(!m.targetStartBlockNumber)throw new Error("unreachable");let d;if(!m.targetTxHash){let{confirmed:y,unconfirmed:T}=await i.getUTXOs(s,!1),C=[...y.filter(v=>!o||v.blockHeight>=o).sort((v,A)=>v.blockHeight-A.blockHeight),...T];for(let v of C){if(d=await i.getTransaction(v.txHash),!d)return;if(d.addresses.includes(n.walletAddresses.bitcoin)){m=E(m,{targetTxHash:d.hash,targetNetworkFee:BigInt(d.fees),targetConfirmationCount:d.confirmations},t);let x=d.outputs.find(F=>F.addresses?.length===1&&F.addresses[0]===s),S=x&&BigInt(Math.ceil(Number(a)-x.value));S&&(m=E(m,{bridgeFee:S},t));break}}if(!m.targetTxHash)return}if(d||(d=await i.getTransaction(m.targetTxHash)),!d)return;if(d.confirmations>=m.targetRequiredConfirmationCount)return m=E(m,{completedAt:Date.now(),targetConfirmationCount:d.confirmations},t),c(m)}};var bi=async(e,t)=>{let{sourceChain:r}=e.bridgeTransfer,n=h({chain:r}),i=Ue(),s=ir({sourceClient:n,getMetadata:i,checkMetadata:Ne,trackingParams:e,trackingConfig:k,bitcoinFunctions:t});return D({promise:s,delay:2e3,startAfter:k.initialDelayMs})},vi=async(e,t,r)=>{let n=sr({trackingParams:t,trackingConfig:k,config:e,bitcoinFunctions:r});return D({promise:n,delay:1e3*60,startAfter:k.initialDelayMs})};function or(e,t,r){let n,i=()=>{n?.();};return {result:(async()=>{let{bridgeTransfer:o}=t,{targetChain:a,sourceChain:m,asset:p,amount:c}=o;G({sourceChain:m,targetChain:a,asset:p,amount:c},e);let{result:d,cancel:u}=await bi(t,r);n=u;let y=await d,{result:T,cancel:g}=await vi(e,{...t,bridgeTransfer:y},r);return n=g,T})(),cancel:i}}async function mr(e,t,r,n){let{sourceChain:i,targetChain:s,asset:o,amount:a,fromAddress:m,toAddress:p,onStepChange:c,gasSettings:d}=t;Ce([m,p],e.addressBlocklist);let{source:u}=G({sourceChain:i,targetChain:s,asset:o,amount:a},e),y=Date.now(),g=(await ee(e,{asset:o,amount:a,sourceChain:i,targetChain:s}))[s.chainId]?.NATIVE??0n,C=e.minimumConfirmations.avalanche,v=await ze({amount:a,source:u,sourceChain:i,fromAddress:m,sign:r.sign,onStepChange:c,gasSettings:d}),A=BigInt(await n.getChainHeight());return {type:"avalanche-ava-btc",environment:e.environment,fromAddress:m,toAddress:p,amount:t.amount,asset:o,bridgeFee:g,sourceChain:i,sourceStartedAt:y,sourceTxHash:v,sourceConfirmationCount:0,sourceRequiredConfirmationCount:C,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:A}}var cr=({fromAddress:e,toAddress:t,targetChain:r,...n})=>{if(!viem.isAddress(e))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided");let i=J(r);if(!Ie(t,i))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid toAddress was provided: Make sure it is Btc Address from correct environment");return {fromAddress:e,toAddress:t,targetChain:r,...n}},pt=({fromAddress:e,targetChain:t,...r})=>{if(!viem.isAddress(e))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided");return {fromAddress:e,targetChain:t,...r}};var dr=async(e,t,r)=>{let n=await $e(e);return {type:"avalanche-ava-btc",analyzeTx:i=>Yn(n,i),estimateGas:i=>er(n,pt(i)),estimateReceiveAmount:i=>tr(n,pt(i)),getAssets:()=>nr(n),getFees:i=>ee(n,i),transferAsset:i=>mr(n,cr(i),t,r),trackTransfer:i=>or(n,i,r),getMinimumTransferAmount:i=>rr(n,i)}};var ct={"avalanche-btc-ava":Zn,"avalanche-ava-btc":dr,"avalanche-evm":Sn,cctp:Ot,"ictt-erc20-erc20":mn},ki=async(e,t)=>{let r=await Promise.allSettled(t.map(async n=>{if(dt(n)){let s=ct[n.type];return [n.type,await s(e,n.signer,n.bitcoinFunctions)]}if(ut(n)){let s=ct[n.type];return [n.type,await s(e,n.signer,n.bitcoinFunctions)]}let i=ct[n.type];return [n.type,await i(e,n.signer)]}));return new Map(lodash.compact(r.map(n=>n.status==="fulfilled"?n.value:void 0)))},te=(e,t,r)=>{let n=t.destinations[r];for(let i of n??[]){let s=e.get(i);if(s)return {bridge:s,type:i}}throw new Se};var oT=({environment:e,enabledBridgeServices:t})=>({canTransferAsset:(u,y)=>{try{return te(t,u,y),!0}catch{return !1}},environment:e,estimateGas:async u=>{let{bridge:y}=te(t,u.asset,u.targetChain.chainId);return y.estimateGas(u)},estimateReceiveAmount:async u=>{let{bridge:y}=te(t,u.asset,u.targetChain.chainId);return y.estimateReceiveAmount(u)},getAssets:()=>Array.from(t.values()).map(y=>y.getAssets()).reduce((y,T)=>{for(let[g,C]of Object.entries(T)){let v=y[g];if(v)for(let A of C){let x=v.findIndex(({symbol:S})=>S===A.symbol);x===-1?v.push(A):lodash.mergeWith(v[x],A,(S,F)=>{if(lodash.isArray(S))return [...new Set(S.concat(F))]});}else y[g]=C;}return y},{}),getFees:async u=>{let{bridge:y}=te(t,u.asset,u.targetChain.chainId);return y.getFees(u)},analyzeTx:u=>{let y=["avalanche-ava-btc","avalanche-btc-ava","avalanche-evm","ictt-erc20-erc20","cctp"].map(T=>t.get(T)).filter(T=>!!T);for(let T of y){let g=T.analyzeTx(u);if(g.isBridgeTx)return g}return {isBridgeTx:!1}},getMinimumTransferAmount:async u=>{let{bridge:y}=te(t,u.asset,u.targetChain.chainId);return y.getMinimumTransferAmount(u)},trackTransfer:u=>{let{bridge:y}=te(t,u.bridgeTransfer.asset,u.bridgeTransfer.targetChain.chainId);return y.trackTransfer(u)},transferAsset:async u=>{let{bridge:y}=te(t,u.asset,u.targetChain.chainId);return y.transferAsset(u)}});
|
|
16
16
|
|
|
17
17
|
exports.AVALANCHE_FUJI_CHAIN = Di;
|
|
18
18
|
exports.AVALANCHE_MAINNET_CHAIN = _i;
|