@avalabs/bridge-unified 4.4.0 → 4.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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
|
@@ -13,7 +13,7 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
13
13
|
|
|
14
14
|
var Zi__default = /*#__PURE__*/_interopDefault(Zi);
|
|
15
15
|
|
|
16
|
-
var K=(r=>(r.NATIVE="native",r.ERC20="erc20",r))(K||{}),j=e=>e.type==="erc20",ye=e=>e.type==="native";var k=(a=>(a.AVALANCHE_EVM="avalanche-evm",a.AVALANCHE_BTC_AVA="avalanche-btc-ava",a.AVALANCHE_AVA_BTC="avalanche-ava-btc",a.CCTP="cctp",a.ICTT_ERC20_ERC20="ictt-erc20-erc20",a.LOMBARD_BTC_TO_BTCB="lombard-btc-to-btcb",a.LOMBARD_BTCB_TO_BTC="lombard-btcb-to-btc",a))(k||{}),eo=["avalanche-ava-btc","avalanche-btc-ava","lombard-btc-to-btcb","lombard-btcb-to-btc"],oa=["avalanche-evm","cctp","ictt-erc20-erc20"],It=e=>e.type==="lombard-btc-to-btcb"||e.type==="lombard-btcb-to-btc",to=e=>oa.includes(e.type),vt=e=>e.type==="avalanche-ava-btc",kt=e=>e.type==="avalanche-btc-ava",Z=(i=>(i.AllowanceApproval="allowance-approval",i.TokensTransfer="tokens-transfer",i.WrapToken="wrap-token",i.AddressOwnership="address-ownership",i))(Z||{});var q=(r=>(r.FUJI="eip155:43113",r.MAINNET="eip155:43114",r))(q||{}),Fe=(r=>(r.MAINNET="eip155:1",r.SEPOLIA="eip155:11155111",r))(Fe||{}),z=(r=>(r.MAINNET="bip122:000000000019d6689c085ae165831e93",r.TESTNET="bip122:000000000933ea01ad0ee984209779ba",r))(z||{}),ao={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}},io={chainId:"eip155:43114",chainName:"Avalanche Mainnet",rpcUrl:"https://api.avax.network/ext/bc/C/rpc",networkToken:{type:"native",name:"AVAX",symbol:"AVAX",decimals:18}},so={chainId:"eip155:11155111",chainName:"Ethereum Sepolia",rpcUrl:"https://proxy-api.avax.network/proxy/infura/sepolia",networkToken:{type:"native",name:"ETH",symbol:"ETH",decimals:18}},oo={chainId:"eip155:1",chainName:"Ethereum Mainnet",rpcUrl:"https://proxy-api.avax.network/proxy/infura/mainnet",networkToken:{type:"native",name:"ETH",symbol:"ETH",decimals:18}},mo={chainId:"bip122:000000000933ea01ad0ee984209779ba",chainName:"Bitcoin Testnet",rpcUrl:"",networkToken:{type:"native",name:"Bitcoin",symbol:"BTC",decimals:8}},co={chainId:"bip122:000000000019d6689c085ae165831e93",chainName:"Bitcoin Mainnet",rpcUrl:"",networkToken:{type:"native",name:"Bitcoin",symbol:"BTC",decimals:8}};var X=(i=>(i.DEV="dev",i.PROD="production",i.STAGING="staging",i.TEST="test",i))(X||{});var W=(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[s.NOTARIZATION_FAILED=5006]="NOTARIZATION_FAILED",s))(W||{}),B=(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))(B||{});function xt(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((o,s)=>(n.chainId!==s&&(o[s]||(o[s]=[]),o[s]?.push("cctp")),o),{})})),r),{})}var ma="^[-a-z0-9]{3,8}$",ca="^[-_a-zA-Z0-9]{1,50}$",wt=":",pa=e=>{let[t,r]=e.split(wt);if(!t||!r)throw new Error("Invalid identifier provided.");if(!new RegExp(ma).test(t))throw new Error("Invalid namespace provided.");if(!new RegExp(ca).test(r))throw new Error("Invalid reference provided.");return {namespace:t,reference:r}},da=({namespace:e,reference:t})=>`${e}${wt}${t}`,ua=({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)}`},I={toJSON:pa,toString:da,toEip155HexChainId:ua};var Ta=e=>{let{reference:t}=I.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=Ta(e),r=viem.http(e.rpcUrl,{batch:!0,retryCount:6,retryDelay:200,timeout:15e3});return viem.createWalletClient({chain:t,transport:r}).extend(viem.publicActions)};var ce=[{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 Me=class extends Q{constructor(t="UNKNOWN",r){super(t,5001,r),this.name="BridgeUnavailableError";}};var N=class extends Q{constructor(t="UNKNOWN",r){super(t,5002,r),this.name="BridgeInitializationError";}};var y=class extends Q{constructor(t="INVALID_PARAMS",r){super(t,5003,r),this.name="InvalidParamsError";}};var O=({sourceChain:e,targetChain:t,amount:r,asset:n},i)=>{if(e.chainId===t.chainId)throw new y("IDENTICAL_CHAINS_PROVIDED");if(r<=0n)throw new y("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let o=i.find(c=>c.chainId===e.chainId);if(!o)throw new y("CHAIN_NOT_SUPPORTED",`Not supported on source chain "${e.chainId}"`);let s=i.find(c=>c.chainId===t.chainId);if(!s)throw new y("CHAIN_NOT_SUPPORTED",`Not supported on target chain "${t.chainId}"`);let a=o.tokens.find(c=>c.symbol===n.symbol),m=s.tokens.find(c=>c.symbol===n.symbol);if(!a||!m)throw new y("ASSET_NOT_SUPPORTED");return {sourceChainData:o,targetChainData:s,burnToken:a,mintToken:m}};async function Y(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o}=t,{sourceChainData:s,targetChainData:a,burnToken:m}=O({sourceChain:r,targetChain:n,asset:i,amount:o},e),p=await h({chain:r}).readContract({address:s.tokenRouterAddress,abi:ce,functionName:"calculateFee",args:[o,a.domain]});return {[s.chainId]:{[m.address]:p}}}var S=[{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 Nt({amount:e,burnToken:t,targetChainData:r,toAddress:n}){return viem.encodeFunctionData({abi:ce,functionName:"transferTokens",args:[e,r.domain,n,t.address]})}function Rt({amount:e,sourceChainData:t}){return viem.encodeFunctionData({abi:S,functionName:"approve",args:[t.tokenRouterAddress,e]})}var ga=async(e,t,r)=>{let{sourceChain:n,targetChain:i,asset:o,amount:s,fromAddress:a,toAddress:m,onStepChange:c,gasSettings:p}=t,{sourceChainData:u,targetChainData:d,burnToken:f}=O({sourceChain:n,targetChain:i,asset:o,amount:s},e),T=h({chain:n}),C=await T.readContract({address:f.address,abi:S,functionName:"allowance",args:[a,u.tokenRouterAddress]})<s,b=C?2:1;if(C){let w={currentSignature:1,currentSignatureReason:"allowance-approval",requiredSignatures:b};c?.(w);let M=Rt({amount:s,sourceChainData:u}),me=await r.sign({from:a,to:f.address,data:M,...p?{maxFeePerGas:p.price,maxPriorityFeePerGas:p.tip}:null,chainId:I.toEip155HexChainId(I.toJSON(n.chainId))},sa=>T.sendRawTransaction({serializedTransaction:sa}),w);await T.waitForTransactionReceipt({hash:me});}let A={currentSignature:C?2:1,currentSignatureReason:"tokens-transfer",requiredSignatures:b};c?.(A);let v=Nt({amount:s,burnToken:f,targetChainData:d,toAddress:m});return r.sign({from:a,to:u.tokenRouterAddress,data:v,...p?{maxFeePerGas:p.price,maxPriorityFeePerGas:p.tip}:null,chainId:I.toEip155HexChainId(I.toJSON(n.chainId))},w=>T.sendRawTransaction({serializedTransaction:w}),A)},Aa=async e=>{try{return await e.getBlockNumber()}catch{return}};async function Dt(e,t,r,n){let{minimumConfirmations:i}=e.find(d=>d.chainId===t.sourceChain.chainId)??{},{minimumConfirmations:o}=e.find(d=>d.chainId===t.targetChain.chainId)??{};if(!i||!o)throw new y("CONFIRMATION_COUNT_UNKNOWN");let s=await Y(e,{asset:t.asset,amount:t.amount,sourceChain:t.sourceChain,targetChain:t.targetChain}),a=j(t.asset)?s[t.sourceChain.chainId]?.[t.asset.address]??0n:0n,m=await ga(e,t,n),c=Date.now(),p=h({chain:t.targetChain}),u=await Aa(p);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:c,sourceTxHash:m,sourceConfirmationCount:0,sourceRequiredConfirmationCount:i,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:o,targetStartBlockNumber:u}}var ot=async e=>new Promise(t=>{setTimeout(t,e);});var D=({promise:e,delay:t,startAfter:r})=>{let n=!1,i=!1,o=0,s,a,m=u=>{s&&n&&(n=!1,s(u));},c=()=>{i=!0,a&&n&&(n=!1,a("cancelled"));};return {result:new Promise((u,d)=>{n=!0,s=u,a=d;let f=async()=>{if(!(!n||i)){try{if(await e(m),!n||i)return;await ot(t);}catch(T){console.error(T.message),o+=1,await ot(2**o*t);}await f();}};r?setTimeout(f,r):f();}),cancel:c}};var ve=(r=>(r[r.Ethereum=0]="Ethereum",r[r.Avalanche=1]="Avalanche",r))(ve||{});var ee=zod.z.string().refine(e=>viem.isAddress(e),e=>({message:`Invalid EVM address '${e}'`})).transform(e=>e);var Ea=zod.z.object({address:ee,name:zod.z.string(),symbol:zod.z.string(),decimals:zod.z.number().positive()}),ba=zod.z.coerce.string().transform((e,t)=>{let r=e.startsWith("eip155:")?e:`eip155:${e}`;try{let n=I.toJSON(r);return I.toString(n)}catch{return t.addIssue({code:zod.z.ZodIssueCode.custom,message:"Invalid chain id, neither numeric nor caip2 compliant"}),zod.z.NEVER}}),Ba=zod.z.object({chainId:ba,domain:zod.z.nativeEnum(ve),tokenRouterAddress:ee,messageTransmitterAddress:ee,tokens:zod.z.array(Ea),minimumConfirmations:zod.z.number().positive()}),_t=zod.z.array(Ba);var Ia=e=>e==="production"||e==="test",va={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"},Pt=async e=>{if(!Ia(e))throw new N("ENVIRONMENT_NOT_SUPPORTED",`CCTP does not support ${e} environment`);try{let r=await(await fetch(va[e])).json();return _t.parse(r)}catch(t){throw new N("CONFIG_NOT_AVAILABLE",`Error while fetching CCTP config: ${t.message}`)}},mt=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},wa=1e3*60*60*3,Sa=1024n,Na=5e3,x={trackingLimitMs:wa,maxBlocks:Sa,initialDelayMs:Na};var te=(e,t)=>e.gasPrice&&BigInt(e.gasPrice*t.gasUsed);var pe=({targetClient:e,sourceClient:t,getMetadata:r,checkMetadata:n,trackingParams:{bridgeTransfer:i,updateListener:o},trackingConfig:{trackingLimitMs:s}})=>{let a=lodash.cloneDeep(i);return async c=>{if(a.completedAt||n(a.metadata))return c(a);if(a.sourceStartedAt+s<=Date.now())return a=E(a,{completedAt:Date.now(),errorCode:5004},o),c(a);if(!viem.isHash(a.sourceTxHash))return;let p=await t.getTransactionReceipt({hash:a.sourceTxHash});if(a.sourceNetworkFee===void 0){let g=await t.getTransaction({hash:a.sourceTxHash}),C=te(g,p);C&&(a=E(a,{sourceNetworkFee:C},o));}if(p.status==="reverted")return a=E(a,{completedAt:Date.now(),errorCode:5005},o),c(a);if(!viem.isHash(a.sourceTxHash))return;let u=await t.getTransactionConfirmations({hash:a.sourceTxHash}),d=u>a.sourceConfirmationCount,f=u>=a.sourceRequiredConfirmationCount;if(d){let g={};g.sourceConfirmationCount=Number(u),f||(g.targetStartBlockNumber=await e.getBlockNumber()),a=E(a,g,o);}if(!f)return;a.targetStartBlockNumber||(a=E(a,{targetStartBlockNumber:await e.getBlockNumber()},o));let T=r(p);return a=E(a,{targetStartedAt:Date.now(),metadata:T},o),c(a)}};var de=({targetClient:e,getTargetTxHash:t,checkMetadata:r,trackingParams:{bridgeTransfer:n,updateListener:i},trackingConfig:{trackingLimitMs:o,maxBlocks:s}})=>{if(!n.completedAt&&!r(n.metadata))throw new y("INVALID_PARAMS","metadata is missing");if(!n.targetStartBlockNumber)throw new y("INVALID_PARAMS","targetStartBlockNumber is missing");let a=lodash.cloneDeep(n);return async c=>{if(a.completedAt)return c(a);if(a.sourceStartedAt+o<=Date.now())return a=E(a,{completedAt:Date.now(),errorCode:5004},i),c(a);if(!a.targetStartBlockNumber)throw new Error("unreachable");if(!a.targetTxHash){let g=await e.getBlockNumber(),C=a.targetStartBlockNumber-s,b=C>=0n?C:"earliest",A=a.targetStartBlockNumber+s,v=A<g?A:"latest",w=await t({fromBlock:b,toBlock:v,metadata:a.metadata});if(w)a=E(a,{targetTxHash:w},i);else {a=E(a,{targetStartBlockNumber:g},i);return}}if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let u=await e.getTransactionReceipt({hash:a.targetTxHash});if(!a.targetNetworkFee){let g=await e.getTransaction({hash:a.targetTxHash}),C=te(g,u);C&&(a=E(a,{targetNetworkFee:C},i));}if(u.status==="reverted")return a=E(a,{completedAt:Date.now(),errorCode:5005},i),c(a);if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let d=await e.getTransactionConfirmations({hash:a.targetTxHash}),f=d>a.targetConfirmationCount,T=d>=a.targetRequiredConfirmationCount;if(f&&(a=E(a,{targetConfirmationCount:Number(d)},i)),!!T)return a=E(a,{completedAt:Date.now()},i),c(a)}};var ct=e=>lodash.isObject(e)&&typeof e.nonce=="bigint",Lt=({sourceChainData:e})=>r=>{let n=r.logs.find(s=>s.address.toLowerCase()===e.tokenRouterAddress.toLowerCase()?viem.decodeEventLog({abi:ce,...s}).eventName==="TransferTokens":!1);if(!n)throw new y("INVALID_PARAMS",`unable to find a TransferTokens event in source transaction "${r.transactionHash}"`);return {nonce:viem.decodeEventLog({abi:ce,eventName:"TransferTokens",...n}).args.nonce}},Pa={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"}]},Ut=({targetClient:e,transferData:{targetChainData:t}})=>async({fromBlock:n,toBlock:i,metadata:o})=>(await e.getLogs({address:t.messageTransmitterAddress,event:Pa,args:{nonce:o?.nonce},fromBlock:n,toBlock:i}))[0]?.transactionHash;var Fa=async(e,t)=>{let{bridgeTransfer:r}=t,{asset:n,amount:i,sourceChain:o,targetChain:s}=r,a=O({sourceChain:o,targetChain:s,asset:n,amount:i},e),{sourceChainData:m}=a,c=h({chain:o}),p=h({chain:s}),u=Lt(a),d=pe({sourceClient:c,targetClient:p,getMetadata:u,checkMetadata:ct,trackingParams:t,trackingConfig:x});return D({promise:d,delay:mt(m.chainId),startAfter:x.initialDelayMs})},Ma=async(e,t)=>{let{bridgeTransfer:r}=t,{asset:n,amount:i,sourceChain:o,targetChain:s}=r,a=h({chain:s}),m=O({sourceChain:o,targetChain:s,asset:n,amount:i},e),c=Ut({targetClient:a,transferData:m}),p=de({targetClient:a,getTargetTxHash:c,checkMetadata:ct,trackingParams:t,trackingConfig:x});return D({promise:p,delay:mt(m.targetChainData.chainId),startAfter:x.initialDelayMs})};function zt(e,t){if(!viem.isHash(t.bridgeTransfer.sourceTxHash)||t.bridgeTransfer.targetTxHash&&!viem.isHash(t.bridgeTransfer.targetTxHash))throw new y("INCORRECT_TXHASH_PROVIDED");let r,n=()=>{r?.();};return {result:(async()=>{let{updateListener:o,bridgeTransfer:s}=t,{result:a,cancel:m}=await Fa(e,{updateListener:o,bridgeTransfer:s});r=m;let c=await a,{result:p,cancel:u}=await Ma(e,{updateListener:o,bridgeTransfer:c});return r=u,p})(),cancel:n}}var Oa=60000n,Wt=175000n,Ha=60000n,jt=215000n;async function qt(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o,fromAddress:s}=t,{sourceChainData:a,burnToken:m}=O({sourceChain:r,targetChain:n,asset:i,amount:o},e),p=await h({chain:r}).readContract({address:m.address,abi:S,functionName:"allowance",args:[s,a.tokenRouterAddress]}),u=a.domain===1;return p>=o?u?jt:Wt:u?Ha+jt:Oa+Wt}async function Xt(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o}=t,{burnToken:s}=O({sourceChain:r,targetChain:n,asset:i,amount:o},e);return (await Y(e,t))[r.chainId]?.[s.address]??1n}async function $t(e,t){let{mintToken:r,burnToken:n}=O(t,e),i={...r,type:"erc20"},s=(await Y(e,t))[t.sourceChain.chainId]?.[n.address]??0n,a=t.amount-s;return {asset:i,amount:a>=0n?a:0n}}var _="0x0000000000000000000000000000000000000000";function Kt(e,t){for(let r of e){if(r.chainId!==t.chainId)continue;let n=t.tokenTransfers.find(({symbol:u})=>r.tokens.some(({symbol:d})=>d===u));if(!n)continue;let i=r.domain===1,o=t.chainId==="eip155:43113"||t.chainId==="eip155:11155111",s=o?"eip155:11155111":"eip155:1",a=o?"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?s:a};let c=viem.isAddressEqual(t.from,r.messageTransmitterAddress),p=viem.isAddressEqual(n.from,_);if(c||p)return {isBridgeTx:!0,bridgeType:"cctp",sourceChainId:i?s:a,targetChainId:t.chainId}}return {isBridgeTx:!1}}var pt=e=>{let{fromAddress:t,toAddress:r}=e;if(!viem.isAddress(t)||!viem.isAddress(r))throw new y("INCORRECT_ADDRESS_PROVIDED");return {fromAddress:t,toAddress:r}};function le(e){let{chainId:t,from:r,to:n,tokenTransfers:i}=e,{fromAddress:o,toAddress:s}=pt({fromAddress:r,toAddress:n}),a=i.map(m=>{let{from:c,to:p,symbol:u}=m;if(!c||!viem.isAddress(c)||!p||!viem.isAddress(p))throw new y("INCORRECT_ADDRESS_PROVIDED");return {from:c,to:p,symbol:u}});return {chainId:t,from:o,to:s,tokenTransfers:a}}var J=({fromAddress:e,...t})=>{if(!viem.isAddress(e))throw new y("INCORRECT_ADDRESS_PROVIDED");return {fromAddress:e,...t}},Te=({fromAddress:e,toAddress:t,...r})=>{let{fromAddress:n,toAddress:i}=pt({fromAddress:e,toAddress:t});return {fromAddress:n,toAddress:i,...r}};var Zt=async(e,t)=>{let r=await Pt(e);return {type:"cctp",analyzeTx:n=>{try{return Kt(r,le(n))}catch{return {isBridgeTx:!1}}},estimateGas:n=>qt(r,J(n)),estimateReceiveAmount:n=>$t(r,J(n)),getAssets:()=>xt(r),getFees:n=>Y(r,n),transferAsset:n=>Dt(r,Te(n),e,t),trackTransfer:n=>zt(r,n),getMinimumTransferAmount:n=>Xt(r,n)}};var Va=({sourceChain:e,targetChain:t,asset:r},n)=>{let i=n.find(a=>a.homeChain.chainId===e.chainId),o=i?.erc20Bridges.find(a=>a.baseToken.address===r.address&&a.remotes.some(({remoteChain:m})=>m.chainId===t.chainId)),s=o?.remotes.find(a=>a.remoteChain.chainId===t.chainId);return {chainBridgeConfig:i,tokenHomeConfig:o,tokenRemoteConfig:s}},La=({sourceChain:e,targetChain:t,asset:r},n)=>{let i=n.find(a=>a.homeChain.chainId===t.chainId),o=i?.erc20Bridges.find(a=>a.remotes.find(m=>m.tokenRemoteAddress===r.address&&m.remoteChain.chainId===e.chainId)),s=o?.remotes.find(a=>a.tokenRemoteAddress===r.address&&a.remoteChain.chainId===e.chainId);return {chainBridgeConfig:i,tokenHomeConfig:o,tokenRemoteConfig:s}},H=({sourceChain:e,targetChain:t,amount:r,asset:n},i)=>{if(e.chainId===t.chainId)throw new y("IDENTICAL_CHAINS_PROVIDED");if(r<=0n)throw new y("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");if(!j(n))throw new y("ASSET_NOT_SUPPORTED","Only ERC20 assets supported");let o=Va({sourceChain:e,targetChain:t,asset:n},i),s=La({sourceChain:e,targetChain:t,asset:n},i);if(o.chainBridgeConfig&&o.tokenHomeConfig&&o.tokenRemoteConfig){let{chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:c}=o;return {homeToRemote:!0,chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:c}}if(s.chainBridgeConfig&&s.tokenHomeConfig&&s.tokenRemoteConfig){let{chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:c}=s;return {homeToRemote:!1,chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:c}}throw new y("ASSET_NOT_SUPPORTED","No Home->Remote or Remote->Home route exists for this asset")};var Ua=60000n,Qt=215000n,Yt=async(e,t)=>{let{sourceChain:r,targetChain:n,asset:i,amount:o,fromAddress:s}=t,{tokenHomeConfig:a,homeToRemote:m,tokenRemoteConfig:c}=H({sourceChain:r,targetChain:n,asset:i,amount:o},e);return await h({chain:r}).readContract({address:m?a.baseToken.address:c.tokenRemoteAddress,abi:S,functionName:"allowance",args:[s,m?a.tokenHomeAddress:c.tokenRemoteAddress]})>=o?Qt:Ua+Qt};var en=e=>{let t=e.reduce((n,i)=>(n[i.homeChain.chainId]=i.erc20Bridges.map(o=>({...o.baseToken,destinations:o.remotes.reduce((s,a)=>(s[a.remoteChain.chainId]=["ictt-erc20-erc20"],s),{})})),n),{}),r=e.reduce((n,i)=>{for(let o of i.erc20Bridges)for(let s of o.remotes){let a=n[s.remoteChain.chainId]??[];n[s.remoteChain.chainId]=[...a,{...o.baseToken,address:s.tokenRemoteAddress,destinations:{[i.homeChain.chainId]:["ictt-erc20-erc20"]}}];}return n},{});return {...t,...r}};async function ge(e,t){return H(t,e),{}}var ke=[{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 xe=[{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 Ga=85000n,nn=({homeToRemote:e,amount:t,destinationBlockchainID:r,destinationTokenTransferrerAddress:n,recipient:i})=>viem.encodeFunctionData({abi:e?ke:xe,functionName:"send",args:[{destinationBlockchainID:r,destinationTokenTransferrerAddress:n,recipient:i,primaryFeeTokenAddress:_,primaryFee:0n,secondaryFee:0n,requiredGasLimit:Ga,multiHopFallback:_},t]});function rn({amount:e,address:t}){return viem.encodeFunctionData({abi:S,functionName:"approve",args:[t,e]})}var za=async({params:{onStepChange:e,amount:t,fromAddress:r,sourceChain:n,toAddress:i,gasSettings:o},transferData:s,isAllowanceApprovalRequired:a,requiredSignatures:m,signer:c})=>{let{tokenRemoteConfig:p,tokenHomeConfig:u,homeToRemote:d,chainBridgeConfig:f}=s,T=h({chain:n});if(a){let v={currentSignature:1,currentSignatureReason:"allowance-approval",requiredSignatures:m};e?.(v);let w=rn({amount:t,address:d?u.tokenHomeAddress:p.tokenRemoteAddress}),M=await c.sign({from:r,to:d?s.tokenHomeConfig.baseToken.address:p.tokenRemoteAddress,data:w,...o?{maxFeePerGas:o.price,maxPriorityFeePerGas:o.tip}:null,chainId:I.toEip155HexChainId(I.toJSON(n.chainId))},me=>T.sendRawTransaction({serializedTransaction:me}),v);await T.waitForTransactionReceipt({hash:M});}let g={currentSignature:a?2:1,currentSignatureReason:"tokens-transfer",requiredSignatures:m};e?.(g);let C=d?p.remoteChain.blockchainId:f.homeChain.blockchainId,b=d?p.tokenRemoteAddress:u.tokenHomeAddress,A=nn({amount:t,recipient:i,destinationBlockchainID:C,destinationTokenTransferrerAddress:b,homeToRemote:d});return c.sign({from:r,to:d?u.tokenHomeAddress:p.tokenRemoteAddress,data:A,...o?{maxFeePerGas:o.price,maxPriorityFeePerGas:o.tip}:null,chainId:I.toEip155HexChainId(I.toJSON(n.chainId))},v=>T.sendRawTransaction({serializedTransaction:v}),g)},Wa=async({params:e,transferData:t,signer:r})=>{let{sourceChain:n,fromAddress:i,amount:o}=e,s=h({chain:n}),{homeToRemote:a,tokenHomeConfig:m,tokenRemoteConfig:c}=t,u=await s.readContract({address:a?m.baseToken.address:c.tokenRemoteAddress,abi:S,functionName:"allowance",args:[i,a?m.tokenHomeAddress:c.tokenRemoteAddress]})<o;return za({params:e,transferData:t,isAllowanceApprovalRequired:u,requiredSignatures:u?2:1,signer:r})},ja=async(e,t,r)=>{let{sourceChain:n,targetChain:i,asset:o,amount:s}=t,a=H({sourceChain:n,targetChain:i,asset:o,amount:s},e);return Wa({params:t,transferData:a,signer:r})},qa=async e=>{try{return await e.getBlockNumber()}catch{return}};async function an(e,t,r,n){let i=await ge(e,{asset:t.asset,amount:t.amount,sourceChain:t.sourceChain,targetChain:t.targetChain}),o=j(t.asset)?i[t.targetChain.chainId]?.[t.asset.address]??0n:0n,s=await ja(e,t,n),a=Date.now(),m=h({chain:t.targetChain}),c=await qa(m);return {type:"ictt-erc20-erc20",environment:r,fromAddress:t.fromAddress,toAddress:t.toAddress,amount:t.amount,asset:t.asset,bridgeFee:o,sourceChain:t.sourceChain,sourceStartedAt:a,sourceTxHash:s,sourceConfirmationCount:0,sourceRequiredConfirmationCount:1,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:c}}var on=({transferData:{homeToRemote:e,tokenHomeConfig:t,tokenRemoteConfig:r}})=>n=>{let i=e?t.tokenHomeAddress:r.tokenRemoteAddress,o=e?ke:xe,s="TokensSent",a=n.logs.find(p=>p.address.toLowerCase()===i.toLowerCase()?viem.decodeEventLog({abi:o,...p}).eventName===s:!1);if(!a)throw new y("INVALID_PARAMS",`unable to find a TokensSent event in source transaction "${n.transactionHash}"`);return {teleporterMessageID:viem.decodeEventLog({abi:o,eventName:s,...a}).args.teleporterMessageID}},Ka={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"}]}]},mn=({toAddress:e,transferData:{tokenHomeConfig:t,homeToRemote:r,tokenRemoteConfig:n},targetClient:i})=>async({fromBlock:o,toBlock:s,metadata:a})=>{if(!Ve(a))throw new y("INVALID_PARAMS");let c=(await i.getLogs({address:t.teleporterAddress,event:Ka,args:{messageID:a.teleporterMessageID},fromBlock:o,toBlock:s})).at(-1);if(lodash.isNil(c))return;let p=c.transactionHash,u=await i.getTransactionReceipt({hash:p}),d=r?xe:ke,f=r?n.tokenRemoteAddress:t.tokenHomeAddress,T=u.logs.find(C=>C.address.toLowerCase()===f.toLowerCase()?viem.decodeEventLog({abi:d,...C}).eventName==="TokensWithdrawn":!1);if(lodash.isNil(T))return;if(viem.decodeEventLog({abi:d,eventName:"TokensWithdrawn",...T}).args.recipient.toLowerCase()===e.toLowerCase())return p},Ve=e=>lodash.isObject(e)&&viem.isHex(e.teleporterMessageID);var Ja=async(e,t)=>{let{bridgeTransfer:r}=t,{asset:n,amount:i,sourceChain:o,targetChain:s}=r,a=H({sourceChain:o,targetChain:s,asset:n,amount:i},e),m=h({chain:r.sourceChain}),c=h({chain:r.targetChain}),p=on({transferData:a}),u=pe({sourceClient:m,targetClient:c,getMetadata:p,checkMetadata:Ve,trackingParams:t,trackingConfig:x});return D({promise:u,delay:2e3,startAfter:x.initialDelayMs})},Za=async(e,t)=>{let{bridgeTransfer:r}=t,{targetChain:n,sourceChain:i,asset:o,amount:s,toAddress:a}=r,m=H({sourceChain:i,targetChain:n,asset:o,amount:s},e),c=h({chain:r.targetChain}),p=mn({transferData:m,targetClient:c,toAddress:a}),u=de({targetClient:c,getTargetTxHash:p,checkMetadata:Ve,trackingParams:t,trackingConfig:x});return D({promise:u,delay:2e3,startAfter:x.initialDelayMs})};function cn(e,t){let r,n=()=>{r?.();};return {result:(async()=>{let{updateListener:o}=t,{result:s,cancel:a}=await Ja(e,t);r=a;let m=await s,{result:c,cancel:p}=await Za(e,{updateListener:o,bridgeTransfer:m});return r=p,c})(),cancel:n}}async function pn(e,t){return H(t,e),1n}var ut={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 ei=zod.z.object({subnetName:zod.z.string(),subnetID:zod.z.string(),blockchainID:zod.z.string(),chainID:zod.z.number(),network:zod.z.string()}),un=zod.z.array(ei),ti=zod.z.object({PKey:zod.z.string(),SKey:zod.z.string(),orgID:zod.z.string(),bridgeID:zod.z.string(),tokenAddress:ee,tokenSymbol:zod.z.string(),tokenName:zod.z.string(),tokenDecimals:zod.z.number(),tokenHomeAddress:ee,tokenHomeChainID:zod.z.number(),tokenRemoteAddress:ee,tokenRemoteChainID:zod.z.number(),network:zod.z.string(),isRegisteredInBridgeApp:zod.z.enum(["Y","N"]),createdAt:zod.z.number(),updatedAt:zod.z.number()}),fn=zod.z.array(ti);var yn="0x253b2784c75e510dD0fF1da844684a1aC0aa5fcf",ln={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"},gn={chainID:43113,blockchainID:"yH8D7ThNJkxmtkuv2jgBa4P1Rn3Qpr4pPr7QYNfcdoS6k6HWp"};var ft=async e=>await(await fetch(e)).json();var ni=e=>e==="production"||e==="test",ri=e=>e.status==="fulfilled",ai=async(e,t)=>{let r=await ft(`${e}/chains`);return [t==="production"?Tn:gn,...un.parse(r)]},ii=async(e,t)=>(await Promise.allSettled(t.map(async n=>{let i=await ft(`${e}/chains/${n.chainID}/bridges`);return fn.parse(i)}))).filter(ri).flatMap(n=>n.value),Cn=async e=>{if(!ni(e))throw new N("ENVIRONMENT_NOT_SUPPORTED",`ICTT does not support ${e} environment`);try{let t=ln[e],r=await ai(t,e),n=await ii(t,r),i=[];return n.forEach(o=>{let s=r.find(({chainID:f})=>f===o.tokenHomeChainID);if(!s)return;let a=i.find(({homeChain:f})=>f.chainId===I.toString({namespace:"eip155",reference:String(s.chainID)}));a||(a={homeChain:{chainId:I.toString({namespace:"eip155",reference:String(s.chainID)}),blockchainId:viem.toHex(ut.decode(s.blockchainID))},erc20Bridges:[]},i.push(a));let m=a.erc20Bridges.find(({tokenHomeAddress:f})=>f===o.tokenHomeAddress);m||(m={baseToken:{address:o.tokenAddress,decimals:o.tokenDecimals,name:o.tokenName||o.tokenSymbol,symbol:o.tokenSymbol,type:"erc20"},remotes:[],teleporterAddress:yn,tokenHomeAddress:o.tokenHomeAddress,tokenHomeDecimals:o.tokenDecimals},a.erc20Bridges.push(m));let c=r.find(({chainID:f})=>f===o.tokenRemoteChainID);if(!c)return;let p=viem.toHex(ut.decode(c.blockchainID)),u=I.toString({namespace:"eip155",reference:String(o.tokenRemoteChainID)});m.remotes.find(({tokenRemoteAddress:f,remoteChain:{chainId:T}})=>f===o.tokenRemoteAddress&&T===u)||m.remotes.push({remoteChain:{chainId:u,blockchainId:p},tokenRemoteAddress:o.tokenRemoteAddress});}),i.map(o=>({...o,erc20Bridges:o.erc20Bridges.filter(s=>s.remotes.length>0)})).filter(o=>o.erc20Bridges.length>0)}catch(t){throw new N("CONFIG_NOT_AVAILABLE",`Error while fetching ICTT-ERC20-ERC20 config: ${t.message}`)}};var hn=async(e,t)=>{let{homeToRemote:r,tokenHomeConfig:{baseToken:n},tokenRemoteConfig:{tokenRemoteAddress:i}}=H(t,e),o={...n,address:r?i:n.address},a=(await ge(e,t))[t.targetChain.chainId]?.[n.address]??0n,m=t.amount-a;return {amount:m>=0n?m:0n,asset:o}};function En(e,t){for(let r of e)for(let n of r.erc20Bridges){let i=t.tokenTransfers.find(({symbol:c})=>c===n.baseToken.symbol);if(!i)continue;let o=viem.isAddressEqual(n.teleporterAddress,t.to),s=viem.isAddressEqual(t.from,n.tokenHomeAddress)||viem.isAddressEqual(i.from,n.tokenHomeAddress),a=viem.isAddressEqual(t.from,_)||viem.isAddressEqual(i.from,_);if(o&&(s||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 bn=async(e,t)=>{let r=await Cn(e);return {type:"ictt-erc20-erc20",analyzeTx:n=>{try{return En(r,le(n))}catch{return {isBridgeTx:!1}}},estimateGas:n=>Yt(r,J(n)),estimateReceiveAmount:n=>hn(r,J(n)),getAssets:()=>en(r),getFees:n=>ge(r,n),getMinimumTransferAmount:n=>pn(r,n),transferAsset:n=>an(r,Te(n),e,t),trackTransfer:n=>cn(r,n)}};var Ae=[{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 Le=[{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 oi(e){return e.toLowerCase().startsWith("tb1")||e.toLowerCase().startsWith("bc1")}function yt(e){if(!oi(e))return !1;try{return base.bech32.decode(e),!0}catch{return !1}}function we(e,t){return yt(e)?e.toLowerCase().startsWith(t?"bc":"tb"):!1}var Se=zod.z.string().refine(e=>viem.isAddress(e),e=>({message:`Invalid EVM address '${e}'`})).transform(e=>e),ci=zod.z.string().refine(e=>yt(e),e=>({message:`Invalid BTC address '${e}'`})),Ne=(i=>(i.AVALANCHE="avalanche",i.ETHEREUM="ethereum",i.BITCOIN="bitcoin",i.UNKNOWN="",i))(Ne||{}),Ce=zod.z.nativeEnum(Ne),pi=zod.z.object({tokenName:zod.z.string(),nativeNetwork:Ce,denomination:zod.z.number()}),di=pi.extend({nativeContractAddress:Se,wrappedContractAddress:Se,wrappedNetwork:Ce}),Bn=zod.z.object({disableFrontend:zod.z.boolean(),addressBlocklist:zod.z.array(zod.z.string())}),In=Bn.extend({assets:zod.z.record(zod.z.string(),di),networks:zod.z.record(Ce,zod.z.union([zod.z.number(),zod.z.undefined()])),walletAddresses:zod.z.record(Ce,Se)}),vn=zod.z.object({minimumConfirmations:zod.z.record(Ce,zod.z.optional(zod.z.number()))}),ui=vn.extend({unwrapFeeApproximation:zod.z.record(zod.z.string(),zod.z.string()),wrapFeeApproximation:zod.z.record(zod.z.string(),zod.z.string())}),Ue=zod.z.object({minimumFeeAmount:zod.z.string(),maximumFeeAmount:zod.z.string(),feePercentage:zod.z.number(),feePercentageDecimals:zod.z.number()}),fi=vn.extend({unwrapFeeApproximation:zod.z.record(zod.z.string(),Ue),wrapFeeApproximation:zod.z.record(zod.z.string(),Ue)}),yi=zod.z.object({critical:In,nonCritical:ui}),li=zod.z.object({critical:In,nonCritical:fi}),Ti=zod.z.object({tokenName:zod.z.string(),bech32AddressPrefix:zod.z.union([zod.z.literal("tb"),zod.z.literal("bc")]),wrappedContractAddress:Se,wrappedNetwork:Ce}),gi=Bn.extend({addressBlocklist:zod.z.array(zod.z.string()),avalancheChainId:zod.z.number(),bitcoinAssets:zod.z.record(zod.z.string(),Ti),walletAddresses:zod.z.object({btc:ci,avalanche:Se})}),Ai=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()})})}),Ci=zod.z.object({wrapFeeAmount:zod.z.number(),constUnwrapFeeAmount:zod.z.number(),unwrapFeeNumerator:zod.z.number(),unwrapFeeDenominator:zod.z.number(),dustThreshold:zod.z.number()}),hi=zod.z.object({minimumConfirmations:zod.z.number(),minimumOnboardSize:zod.z.number(),currentBridgeFeeEstimate:zod.z.union([Ai,Ci])}),Ei=zod.z.object({networkInfo:zod.z.record(zod.z.string(),hi)}),kn=zod.z.object({criticalBitcoin:gi,nonCriticalBitcoin:Ei}),bi=zod.z.intersection(li,kn),Bi=zod.z.intersection(yi,kn),xn=zod.z.union([bi,Bi]);var Ii=e=>"eip155:1"===e||"eip155:11155111"===e,lt=e=>Ii(e.chainId);var Re=e=>"eip155:43113"===e||"eip155:43114"===e,ze=e=>Re(e.chainId);var We=e=>e==="bip122:000000000019d6689c085ae165831e93"||e==="bip122:000000000933ea01ad0ee984209779ba";var wn=e=>e==="eip155:1"||e==="eip155:43114"||e==="bip122:000000000019d6689c085ae165831e93",je=e=>!wn(e),ne=e=>wn(e.chainId);var De={type:"native",name:"Ether",symbol:"ETH",decimals:18};var he=({destinations:e,...t})=>t;var ki=e=>({source:e.nativeTokenConfig.ethereumToken,target:e.nativeTokenConfig.avalancheToken,ethToAva:!0}),Sn=(e,t)=>{if(!j(t))throw new y("ASSET_NOT_SUPPORTED",`Wrong token type: ${t.type}`);return lodash.isEqual(e,he(t))},xi=(e,t)=>{if(!j(t))throw new y("ASSET_NOT_SUPPORTED",`Wrong token type: ${t.type}`);let r=e.ethereumTokens[t.address];if(!r||!Sn(r.token,t))throw new y("ASSET_NOT_SUPPORTED",`Unable to find matching ethereum token in config: ${t.symbol}`);let n=e.avalancheTokens[r.target.tokenAddress];if(!n)throw new y("ASSET_NOT_SUPPORTED",`Unable to get avalanche token in config: ${t.symbol}`);return {source:r,target:n,ethToAva:!0}},wi=(e,t)=>{if(!j(t))throw new y("ASSET_NOT_SUPPORTED",`Wrong token type: ${t.type}`);let r=e.avalancheTokens[t.address];if(!r||!Sn(r.token,t))throw new y("ASSET_NOT_SUPPORTED",`Unable to find matching avalanche token in config: ${t.symbol}`);let n=e.ethereumTokens[r.target.tokenAddress];if(!n)throw new y("ASSET_NOT_SUPPORTED",`Unable to get ethereum token in config: ${t.symbol}`);return {source:r,target:n,ethToAva:!1}},Si=(e,t)=>{let{reference:r}=I.toJSON(e.chainId),{reference:n}=I.toJSON(t.chainId);return [{source:1,target:43114},{source:43114,target:1},{source:11155111,target:43113},{source:43113,target:11155111}].some(({source:o,target:s})=>o.toString()===r&&s.toString()===n)},L=({sourceChain:e,targetChain:t,amount:r,asset:n},i)=>{if(e.chainId===t.chainId)throw new y("IDENTICAL_CHAINS_PROVIDED",`SourceChain and TargetChain need to be different network. But found the same chainId: ${e.chainId}`);if(!Si(e,t))throw new y("INVALID_PARAMS","SourceChain and TargetChain combination is not correct or the chains provided are not supported");if(r<=0n)throw new y("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");return ye(n)&&n.symbol===De.symbol&<(e)?ki(i):lt(e)?xi(i,n):wi(i,n)};async function Nn(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o,fromAddress:s}=t;if(!viem.isAddress(s))throw new y("INVALID_PARAMS",`Invalid fromAddress: ${s}`);let a=e.walletAddresses.ethereum,{source:m,ethToAva:c}=L({sourceChain:r,targetChain:n,asset:i,amount:o},e),p=h({chain:r}),u=0n;if(ye(i)&&c){u+=await p.estimateContractGas({address:m.token.address,abi:Le,functionName:"deposit",account:s});try{u+=await p.estimateContractGas({address:m.token.address,abi:S,functionName:"transfer",account:s,args:[a,o]});}catch{let d=viem.encodeFunctionData({abi:S,functionName:"transfer",args:[a,o]});u+=await p.estimateGas({data:d,account:s,to:a,value:o});}}else u=await p.estimateContractGas({address:m.token.address,abi:c?S:Ae,functionName:c?"transfer":"unwrap",account:s,args:c?[a,o]:[o,0]});return u}var fe=e=>{try{return Ue.parse(e),!0}catch{return !1}};var Di=(e,{max:t,min:r})=>e>t?t:e<r?r:e,Ee=(e,t)=>{let{minimumFeeAmount:r,maximumFeeAmount:n,feePercentage:i,feePercentageDecimals:o}=t,s=BigInt(r),a=BigInt(n),m=i/10**o/100,c=Number(e)*m,p=BigInt(Math.ceil(c));return Di(p,{min:s,max:a})};async function re(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o}=t,{source:s,target:a,ethToAva:m}=L({sourceChain:r,targetChain:n,asset:i,amount:o},e),c=m?s.wrapFeeApproximation:s.unwrapFeeApproximation;if(fe(c)){let u=Ee(o,c);return {[a.chainId]:{[a.token.address]:u}}}let p=c??0n;return {[a.chainId]:{[a.token.address]:p}}}async function Rn(e,t){let{target:r}=L(t,e),i=(await re(e,t))[r.chainId]?.[r.token.address]??0n,o=t.amount-i;return {asset:r.token,amount:o>=0n?o:0n}}function Dn(e){let t=Object.values(e.ethereumTokens).reduce((o,s)=>{if(s.token.symbol==="USDC")return o;let a=s.chainId,m=s.target.chainId,c={...s.token,destinations:{[m]:["avalanche-evm"]}},p=o[a]??[];return p.push(c),o[a]=p,o},{}),r=Object.values(e.avalancheTokens).reduce((o,s)=>{let a=s.chainId,m=s.target.chainId,c={...s.token,destinations:{[m]:["avalanche-evm"]}},p=o[a]??[];return p.push(c),o[a]=p,o},t),n="eip155:1";r[n]&&r[n].push({...De,destinations:{["eip155:43114"]:["avalanche-evm"]}});let i="eip155:11155111";return r[i]&&r[i].push({...De,destinations:{["eip155:43113"]:["avalanche-evm"]}}),r}var _n=3n;async function qe(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o}=t,{source:s,target:a,ethToAva:m}=L({sourceChain:r,targetChain:n,asset:i,amount:o},e),c=m?s.wrapFeeApproximation:s.unwrapFeeApproximation;if(fe(c)){let d=c.minimumFeeAmount;return BigInt(d)*_n}let u=(await re(e,t))[a.chainId]?.[a.token.address];if(u===void 0)throw new y("INVALID_PARAMS",`Unable to get static fee for ${i.symbol}`);return u*_n}var Xe=()=>e=>({transactionHash:e.transactionHash}),Pn=({params:{bridgeTransfer:{fromAddress:e}},transferData:{target:t,ethToAva:r},targetClient:n,config:i})=>async({fromBlock:o,toBlock:s,metadata:a})=>{if(!o)return;let m=t.token.address,c=r?_:i.walletAddresses.ethereum,p=r?void 0:{src:c,dst:e},u=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"},d=await n.getLogs({address:m,event:u,args:p,fromBlock:o,toBlock:s}),f=r?d.find(T=>Tt(T)&&T.args.originTxId===a?.transactionHash):d.at(-1);if(!lodash.isNil(f))return f.transactionHash},Tt=e=>Mi(e)?Object.keys(e.args).includes("originTxId"):!1,Mi=e=>Object.keys(e).includes("args"),_e=e=>lodash.isObject(e)&&viem.isHex(e.transactionHash);var Oi=async(e,t)=>{let{bridgeTransfer:r}=t,{targetChain:n,sourceChain:i,asset:o,amount:s}=r,a=L({sourceChain:i,targetChain:n,asset:o,amount:s},e),m=h({chain:r.targetChain}),c=Pn({params:t,transferData:a,targetClient:m,config:e}),p=de({targetClient:m,getTargetTxHash:c,checkMetadata:_e,trackingParams:t,trackingConfig:x});return D({promise:p,delay:1e3*30,startAfter:x.initialDelayMs})},Hi=async e=>{let{sourceChain:t,targetChain:r}=e.bridgeTransfer,n=h({chain:t}),i=h({chain:r}),o=Xe(),s=pe({sourceClient:n,targetClient:i,getMetadata:o,checkMetadata:_e,trackingParams:e,trackingConfig:x});return D({promise:s,delay:1e3*30,startAfter:x.initialDelayMs})};function Fn(e,t){let r,n=()=>{r?.();};return {result:(async()=>{let{bridgeTransfer:o,updateListener:s}=t,{result:a,cancel:m}=await Hi({bridgeTransfer:o,updateListener:s});r=m;let c=await a,{result:p,cancel:u}=await Oi(e,{updateListener:s,bridgeTransfer:c});return r=u,p})(),cancel:n}}var $e=async({amount:e,source:t,sourceChain:r,fromAddress:n,sign:i,onStepChange:o,gasSettings:s})=>{let a=h({chain:r}),m={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};o?.(m);let c=viem.encodeFunctionData({abi:Ae,functionName:"unwrap",args:[e,0n]}),p=await i({from:n,to:t.token.address,data:c,...s?{maxFeePerGas:s.price,maxPriorityFeePerGas:s.tip}:null,chainId:I.toEip155HexChainId(I.toJSON(r.chainId))},u=>a.sendRawTransaction({serializedTransaction:u}),m);return await a.waitForTransactionReceipt({hash:p}),p};var Mn={ethereum:"0x6b7a87899490EcE95443e979cA9485CBE7E71522",avalanche:"0x9b17bAADf0f21F03e35249e0e59723F34994F806"},Li=async({amount:e,config:t,source:r,sourceChain:n,fromAddress:i,sign:o,onStepChange:s,gasSettings:a})=>{let m=t.walletAddresses.ethereum,c=h({chain:n}),p={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};s?.(p);let u=viem.encodeFunctionData({abi:S,functionName:"transfer",args:[m,e]}),d=await o({from:i,to:r.token.address,data:u,...a?{maxFeePerGas:a.price,maxPriorityFeePerGas:a.tip}:null,chainId:I.toEip155HexChainId(I.toJSON(n.chainId))},f=>c.sendRawTransaction({serializedTransaction:f}),p);return await c.waitForTransactionReceipt({hash:d}),d},Ui=async({config:e,fromAddress:t,sourceChain:r,targetChain:n})=>{if(e.environment!=="production"&&!ne(r)&&!ne(n))return !1;let i=e.nativeTokenConfig.ethereumToken,o=e.nativeTokenConfig.avalancheToken;try{return await h({chain:r}).readContract({address:i.token.address,abi:S,functionName:"allowance",args:[t,Mn.ethereum]})!==0n?!0:await h({chain:n}).readContract({address:o.token.address,abi:S,functionName:"allowance",args:[t,Mn.avalanche]})!==0n}catch{return !1}},Gi=async({amount:e,config:t,fromAddress:r,source:n,sourceChain:i,targetChain:o,sign:s,onStepChange:a,gasSettings:m})=>{let c=t.walletAddresses.ethereum,p=h({chain:i});if(!ze(o))throw new y("INVALID_PARAMS","Invalid chain combinations");if(await Ui({config:t,fromAddress:r,sourceChain:i,targetChain:o}))throw new y("VULNERABLE_TOKEN_APPROVAL_ADDRESS","Address has vulnerable token approvals");let d={currentSignature:1,currentSignatureReason:"wrap-token",requiredSignatures:2};a?.(d);let f=viem.encodeFunctionData({abi:Le,functionName:"deposit"}),T=await s({from:r,to:n.token.address,value:e,data:f,...m?{maxFeePerGas:m.price,maxPriorityFeePerGas:m.tip}:null,chainId:I.toEip155HexChainId(I.toJSON(i.chainId))},A=>p.sendRawTransaction({serializedTransaction:A}),d);await p.waitForTransactionReceipt({hash:T});let g={currentSignature:2,currentSignatureReason:"tokens-transfer",requiredSignatures:2};a?.(g);let C=viem.encodeFunctionData({abi:S,functionName:"transfer",args:[c,e]}),b=await s({from:r,to:n.token.address,data:C,...m?{maxFeePerGas:m.price,maxPriorityFeePerGas:m.tip}:null,chainId:I.toEip155HexChainId(I.toJSON(i.chainId))},A=>p.sendRawTransaction({serializedTransaction:A}),g);return await p.waitForTransactionReceipt({hash:b}),b},On=async({amount:e,asset:t,config:r,fromAddress:n,source:i,sourceChain:o,targetChain:s,sign:a,onStepChange:m,gasSettings:c})=>ye(t)?Gi({amount:e,config:r,fromAddress:n,source:i,sourceChain:o,targetChain:s,sign:a,onStepChange:m,gasSettings:c}):Li({amount:e,config:r,source:i,sourceChain:o,fromAddress:n,sign:a,onStepChange:m,gasSettings:c});var be=(e,t)=>{let r=t.map(i=>i.toLowerCase()),n=e.find(i=>r.includes(i.toLowerCase()));if(n)throw new y("ADDRESS_IS_BLOCKED",n)};async function Hn(e,t,r){let{sourceChain:n,targetChain:i,asset:o,amount:s,fromAddress:a,toAddress:m,onStepChange:c,gasSettings:p}=t;if(a!==m)throw new y("INVALID_PARAMS","fromAddress and toAddress do not match");be([a,m],e.addressBlocklist);let u=await re(e,{asset:o,amount:s,sourceChain:n,targetChain:i}),{source:d,target:f,ethToAva:T}=L({sourceChain:n,targetChain:i,asset:o,amount:s},e),g=await qe(e,{asset:o,amount:s,sourceChain:n,targetChain:i});if(s<g)throw new y("INVALID_PARAMS",`Minimum transfer amount is ${g.toString()}`);let C=ze(n)?e.minimumConfirmations.avalanche:e.minimumConfirmations.ethereum,b=u[f.chainId]?.[f.token.address]??0n,A;T?A=await On({amount:s,asset:o,config:e,fromAddress:a,source:d,sourceChain:n,targetChain:i,sign:r.sign,onStepChange:c,gasSettings:p}):A=await $e({amount:s,fromAddress:a,source:d,sourceChain:n,sign:r.sign,onStepChange:c,gasSettings:p});let v=Date.now(),w=h({chain:t.targetChain}),M;try{M=await w.getBlockNumber();}catch(me){console.error(me);}return {type:"avalanche-evm",environment:e.environment,fromAddress:t.fromAddress,toAddress:t.toAddress,amount:t.amount,asset:o,bridgeFee:b,sourceChain:t.sourceChain,sourceStartedAt:v,sourceTxHash:A,sourceConfirmationCount:0,sourceRequiredConfirmationCount:C,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:M}}var Vn=(e,t)=>{let r=e.critical.assets,{ethereum:n,avalanche:i}=e.critical.networks;if(n===void 0||i===void 0)throw new N("WARDEN_CONFIG_MISSING_NETWORK","Critical networks info is missing from wardenConfig");let o=e.critical.walletAddresses.avalanche,s=e.critical.walletAddresses.ethereum;if(!o||!s)throw new N("CONFIG_NOT_AVAILABLE","Wallet address is missing from the critical config.");let a=Object.entries(r).reduce((T,[g,C])=>{let b={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:b,target:{chainId:`eip155:${i}`,tokenAddress:C.wrappedContractAddress},wrapFeeApproximation:fe(A)?A:A?BigInt(A):void 0},T},{}),m=Object.values(a).find(T=>T.token.symbol==="WETH");if(!m)throw new N("CONFIG_NOT_AVAILABLE","WETH info is missing from config");let c=Object.entries(r).reduce((T,[g,C])=>{let b={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:b,target:{chainId:`eip155:${n}`,tokenAddress:C.nativeContractAddress},unwrapFeeApproximation:fe(A)?A:A?BigInt(A):void 0},T},{}),p=c[m.target.tokenAddress];if(!p)throw new N("CONFIG_NOT_AVAILABLE","WETH.e info is missing from config");let u=e.nonCritical.minimumConfirmations.avalanche,d=e.nonCritical.minimumConfirmations.ethereum;if(!u||!d)throw new N("CONFIG_NOT_AVAILABLE","Minimum confirmation info is missing");return {addressBlocklist:e.critical.addressBlocklist,ethereumTokens:a,avalancheTokens:c,minimumConfirmations:{avalanche:u,ethereum:d},environment:t,walletAddresses:{avalanche:o,ethereum:s},nativeTokenConfig:{ethereumToken:m,avalancheToken:p}}};var Ln={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"]}},Un={...Ln,environment:"staging"},Gn={...Un,environment:"test",configMismatchThreshold:2,wardenConfigURLs:["https://warden-testnet.19bc5bfd-25de-4c8f-8c4c-5887a9e59ee7.net/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"]},zi={...Gn,environment:"production",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.json",wardenConfigURLs:["https://warden-mainnet.19bc5bfd-25de-4c8f-8c4c-5887a9e59ee7.net/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"]}},Wi={production:zi,staging:Un,test:Gn,dev:Ln},Ke=e=>Wi[e];var $i=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 o=await i.value.json(),s=xn.parse(o);n.push(s);}catch(o){console.error(o);}return n},Ki=e=>e.map(t=>{if(t.critical.disableFrontend)throw new N("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 $i(t),n=Ki(r),i=lodash.maxBy(n,o=>o.count);if(!i||i.count<e.wardenConfigURLs.length-e.configMismatchThreshold)throw new N("WARDEN_CONFIG_MISMATCH","Warden config mismatch");return i.config});var zn=async e=>{let t=Ke(e),r=await Je(t);return Vn(r,e)};function Wn(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 jn=async(e,t)=>{let r=await zn(e);return {type:"avalanche-evm",analyzeTx:n=>{try{return Wn(r,le(n))}catch{return {isBridgeTx:!1}}},estimateGas:n=>Nn(r,J(n)),estimateReceiveAmount:n=>Rn(r,J(n)),getAssets:()=>Dn(r),getFees:n=>re(r,n),transferAsset:n=>Hn(r,Te(n),t),trackTransfer:n=>Fn(r,n),getMinimumTransferAmount:n=>qe(r,n)}};var At=e=>"wrapFeeEstimate"in e,ae=e=>"wrapFeeEstimate"in e||"unwrapFeeEstimate"in e;var qn=(e,t)=>{let r=e.criticalBitcoin,n=r.bitcoinAssets.btc;if(!n)throw new N("CONFIG_NOT_AVAILABLE","Bitcoin asset info is missing from config");let i=e.nonCriticalBitcoin.networkInfo.btc;if(!i)throw new N("CONFIG_NOT_AVAILABLE","Bitcoin network info was not found.");let o=i.currentBridgeFeeEstimate,s=At(o)?{wrapFeeEstimate:o.wrapFeeEstimate}:{wrapFeeAmount:o.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:s},c=At(o)?{unwrapFeeEstimate:o.unwrapFeeEstimate}:{constUnwrapFeeAmount:o.constUnwrapFeeAmount,unwrapFeeNumerator:o.unwrapFeeNumerator,unwrapFeeDenominator:o.unwrapFeeDenominator},p={chainId:`eip155:${r.avalancheChainId}`,token:{name:n.tokenName,symbol:"BTC.b",decimals:8,type:"erc20",address:n.wrappedContractAddress},target:{networkId:a},bridgeFeeEstimate:c};return {addressBlocklist:e.criticalBitcoin.addressBlocklist,environment:t,dustThreshold:o.dustThreshold,minimumOnboardSize:i.minimumOnboardSize,minimumConfirmations:{bitcoin:i.minimumConfirmations,avalanche:e.nonCritical.minimumConfirmations.avalanche??1},nativeTokenConfig:{bitcoinToken:m,avalancheToken:p},walletAddresses:{bitcoin:r.walletAddresses.btc,avalanche:r.walletAddresses.avalanche}}};var Qe=async e=>{try{let t=Ke(e),r=await Je(t);return qn(r,e)}catch{throw new N("CONFIG_NOT_AVAILABLE")}};function $n(e,t){let{chainId:r,from:n,to:i,tokenTransfers:o}=t,s=Re(r),a=We(r);if(!s&&!a)return {isBridgeTx:!1};let m=je(r),c=m?"eip155:43113":"eip155:43114",p=m?"bip122:000000000933ea01ad0ee984209779ba":"bip122:000000000019d6689c085ae165831e93",u=a&&lodash.isEqual(i.toLowerCase(),e.walletAddresses.bitcoin.toLowerCase())&&o.some(f=>f.symbol==="BTC");return s&&lodash.isEqual(n,e.walletAddresses.avalanche)&&o.some(f=>f.symbol==="BTC.b"&&f.from===_)||u?{isBridgeTx:!0,sourceChainId:p,targetChainId:c,bridgeType:"avalanche-btc-ava"}:{isBridgeTx:!1}}var Kn=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()}),Jn=zod.z.array(Kn);Kn.extend({script:zod.z.optional(zod.z.string())});var Ji=zod.z.object({address:zod.z.string(),value:zod.z.number()}),Zn=zod.z.array(Ji);function Qi(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 Ye(e,t,r,n,i,o){let s=Qi(i),a=[{address:e,value:Number(r)}],{inputs:m,outputs:c,fee:p}=Zi__default.default(s,a,n);if(typeof p!="number")throw new y("UNKNOWN","Unable to choose utxo properly");if(!m||!c||!c.length)return {fee:p};let u=await o.getScriptsForUtxos(m),d=Jn.parse(u),f=[c[0]],T=c[1];T&&f.push({address:t,value:T.value});let g=Zn.parse(f);return {inputs:d,outputs:g,fee:p}}var es=(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),ts=(e,t)=>lodash.isEqual(e,he(t)),U=(e,t)=>{let{sourceChain:r,targetChain:n,amount:i,asset:o}=e;if(!es(r,n))throw new y("INVALID_PARAMS","SourceChain and TargetChain combination is not valid");if(i<=0n)throw new y("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let s=t.nativeTokenConfig.bitcoinToken;if(!ts(s.token,o))throw new y("ASSET_NOT_SUPPORTED","Incorrect Asset was provided");return {source:s,target:t.nativeTokenConfig.avalancheToken,btcToAva:!0}};async function Qn(e,t,r){let{fromAddress:n,sourceChain:i,targetChain:o,asset:s,amount:a}=t;U({sourceChain:i,targetChain:o,asset:s,amount:a},e);let m=e.walletAddresses.bitcoin,c=1,{utxos:p}=await r.getUtxoBalance(n,!1),{fee:u}=await Ye(m,n,a,c,p,r);return BigInt(u)}async function ie(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:o}=t,{source:s,target:a}=U({sourceChain:r,targetChain:n,amount:i,asset:o},e);if(ae(s.bridgeFeeEstimate)){let m=Ee(i,s.bridgeFeeEstimate.wrapFeeEstimate);return {[a.chainId]:{[a.token.address]:m}}}return {[a.chainId]:{[a.token.address]:BigInt(s.bridgeFeeEstimate.wrapFeeAmount)}}}async function Yn(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o}=t,{target:s}=U({sourceChain:r,targetChain:n,asset:i,amount:o},e),m=(await ie(e,t))[s.chainId]?.[s.token.address]??0n,c=t.amount-m;return {asset:s.token,amount:c>=0n?c:0n}}function er(e){let t=e.nativeTokenConfig.bitcoinToken,r={...t.token,destinations:{[t.target.networkId]:["avalanche-btc-ava"]}};return {[t.chainId]:[r]}}async function tr(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:o}=t,s=U({sourceChain:r,targetChain:n,amount:i,asset:o},e),a=await ns(e,t,s),m=e.minimumOnboardSize;return BigInt(Math.max(a*4,m))}async function ns(e,t,{source:r,target:n}){if(ae(r.bridgeFeeEstimate))return Number(r.bridgeFeeEstimate.wrapFeeEstimate.minimumFeeAmount);{let i=await ie(e,t);return Number(i[n.chainId]?.[n.token.address])}}var nr=({targetClient:e,checkMetadata:t,trackingParams:{bridgeTransfer:r,updateListener:n},trackingConfig:{trackingLimitMs:i},bitcoinFunctions:o})=>{let s=lodash.cloneDeep(r);return async m=>{let{sourceTxHash:c}=r;if(s.completedAt||t(s.metadata))return m(s);if(s.sourceStartedAt+i<=Date.now())return s=E(s,{completedAt:Date.now(),errorCode:5004},n),m(s);let{confirmations:p,fees:u}=await o.getTransaction(c);if(!s.sourceNetworkFee){let T=BigInt(Math.ceil(u));s=E(s,{sourceNetworkFee:T},n);}let d=p>s.sourceConfirmationCount,f=p>=s.sourceRequiredConfirmationCount;if(d){let T={};T.sourceConfirmationCount=Number(p),f||(T.targetStartBlockNumber=await e.getBlockNumber()),s=E(s,T,n);}if(f)return s.targetStartBlockNumber||(s=E(s,{targetStartBlockNumber:await e.getBlockNumber()},n)),s=E(s,{targetStartedAt:Date.now(),metadata:{transactionHash:c}},n),m(s)}};var ir=({targetClient:e,getTargetTxHash:t,checkMetadata:r,trackingParams:{bridgeTransfer:n,updateListener:i},trackingConfig:{trackingLimitMs:o,maxBlocks:s}})=>{if(!n.completedAt&&!r(n.metadata))throw new y("INVALID_PARAMS","metadata is missing");if(!n.targetStartBlockNumber)throw new y("INVALID_PARAMS","targetStartBlockNumber is missing");let a=lodash.cloneDeep(n);return async c=>{if(a.completedAt)return c(a);if(a.sourceStartedAt+o<=Date.now())return a=E(a,{completedAt:Date.now(),errorCode:5004},i),c(a);if(!a.targetStartBlockNumber)throw new Error("unreachable");if(!a.targetTxHash){let T=await e.getBlockNumber(),g=a.targetStartBlockNumber-s,C=g>=0n?g:"earliest",b=a.targetStartBlockNumber+s,A=b<T?b:"latest",v=await t({fromBlock:C,toBlock:A,metadata:a.metadata});if(v)a=E(a,{targetTxHash:v},i);else {a=E(a,{targetStartBlockNumber:T},i);return}}if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let p=await e.getTransactionReceipt({hash:a.targetTxHash});if(!a.targetNetworkFee){let T=await e.getTransaction({hash:a.targetTxHash}),g=te(T,p);g&&(a=E(a,{targetNetworkFee:g},i));}if(p.status==="reverted")return a=E(a,{completedAt:Date.now(),errorCode:5005},i),c(a);if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let u=await e.getTransactionConfirmations({hash:a.targetTxHash}),d=u>a.targetConfirmationCount,f=u>=a.targetRequiredConfirmationCount;if(d&&(a=E(a,{targetConfirmationCount:Number(u)},i)),!!f)return a=E(a,{completedAt:Date.now()},i),c(a)}};var Ct=e=>lodash.isObject(e)&&!!e.transactionHash,sr=({transferData:{target:e},targetClient:t})=>async({fromBlock:r,toBlock:n,metadata:i})=>{if(!r)return;let o=e.token.address,s={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:o,event:s,fromBlock:r,toBlock:n})).find(c=>Tt(c)&&c.args.originTxId===`0x${i?.transactionHash}`);if(!lodash.isNil(m))return m.transactionHash};var os=async(e,t)=>{let{targetChain:r}=e.bridgeTransfer,n=h({chain:r}),i=nr({targetClient:n,trackingParams:e,trackingConfig:x,checkMetadata:Ct,bitcoinFunctions:t});return D({promise:i,delay:1e3*60,startAfter:x.initialDelayMs})},ms=async(e,t)=>{let{bridgeTransfer:r}=e,n=h({chain:r.targetChain}),i=sr({transferData:t,targetClient:n}),o=ir({targetClient:n,getTargetTxHash:i,checkMetadata:Ct,trackingParams:e,trackingConfig:x});return D({promise:o,delay:2e3,startAfter:x.initialDelayMs})};function or(e,t,r){let n,i=()=>{n?.();};return {result:(async()=>{let{bridgeTransfer:s}=t,{targetChain:a,sourceChain:m,asset:c,amount:p}=s,u=U({sourceChain:m,targetChain:a,asset:c,amount:p},e),{result:d,cancel:f}=await os(t,r);n=f;let T=await d,{result:g,cancel:C}=await ms({...t,bridgeTransfer:T},u);return n=C,g})(),cancel:i}}var mr=async({config:e,amount:t,fromAddress:r,sign:n,onStepChange:i,bitcoinFunctions:o,gasSettings:s})=>{let a=s?Number(s.price):void 0,{low:m,high:c}=a?{low:a,high:a}:await o.getFeeRates(),p=e.environment==="production"?c:m,{utxos:u}=await o.getUtxoBalance(r,!1),d=e.walletAddresses.bitcoin,{inputs:f,outputs:T}=await Ye(d,r,t,p,u,o);if(!f||!T)throw new y("INVALID_PARAMS","Unable to create transaction");let g={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};return i?.(g),await n({inputs:f,outputs:T},o.issueRawTx,g)};async function cr(e,t,r,n){let{fromAddress:i,toAddress:o,sourceChain:s,targetChain:a,asset:m,amount:c,onStepChange:p,gasSettings:u}=t;be([i,o],e.addressBlocklist);let{target:d}=U({sourceChain:s,targetChain:a,asset:m,amount:c},e),f=Date.now(),g=(await ie(e,{asset:m,amount:c,sourceChain:s,targetChain:a}))[d.chainId]?.[d.token.address]??0n,C=e.minimumConfirmations.bitcoin,b=await mr({config:e,amount:c,sign:r.sign,onStepChange:p,fromAddress:i,bitcoinFunctions:n,gasSettings:u}),A=h({chain:a}),v;try{v=await A.getBlockNumber();}catch(M){console.error(M);}return {type:"avalanche-btc-ava",environment:e.environment,fromAddress:i,toAddress:o,amount:t.amount,asset:m,bridgeFee:g,sourceChain:s,sourceStartedAt:f,sourceTxHash:b,sourceConfirmationCount:0,sourceRequiredConfirmationCount:C,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:v}}var pr=({fromAddress:e,toAddress:t,sourceChain:r,...n})=>{if(!viem.isAddress(t))throw new y("INCORRECT_ADDRESS_PROVIDED","Invalid toAddress was provided");let i=ne(r);if(!we(e,i))throw new y("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided: Make sure it is Btc Address from correct environment");return {fromAddress:e,toAddress:t,sourceChain:r,...n}},ht=({fromAddress:e,sourceChain:t,...r})=>{let n=ne(t);if(!we(e,n))throw new y("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided: Make sure it is Btc Address from correct environment");return {fromAddress:e,sourceChain:t,...r}};var dr=async(e,t,r)=>{let n=await Qe(e);return {type:"avalanche-btc-ava",analyzeTx:i=>$n(n,i),estimateGas:i=>Qn(n,ht(i),r),estimateReceiveAmount:i=>Yn(n,ht(i)),getAssets:()=>er(n),getFees:i=>ie(n,i),transferAsset:i=>cr(n,pr(i),t,r),trackTransfer:i=>or(n,i,r),getMinimumTransferAmount:i=>tr(n,i)}};function fr(e,t){let{chainId:r,from:n,to:i,tokenTransfers:o}=t,s=Re(r),a=We(r);if(!s&&!a)return {isBridgeTx:!1};let m=je(r),c=m?"eip155:43113":"eip155:43114",p=m?"bip122:000000000933ea01ad0ee984209779ba":"bip122:000000000019d6689c085ae165831e93",u=s&&lodash.isEqual(i.toLowerCase(),e.nativeTokenConfig.avalancheToken.token.address.toLowerCase())&&o.some(f=>f.to?.toLowerCase()===_.toLowerCase()&&f.symbol==="BTC.b"),d=a&&lodash.isEqual(n.toLowerCase(),e.walletAddresses.bitcoin.toLowerCase())&&o.some(f=>f.symbol==="BTC");return u||d?{isBridgeTx:!0,sourceChainId:c,targetChainId:p,bridgeType:"avalanche-ava-btc"}:{isBridgeTx:!1}}var ds=(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),us=(e,t)=>lodash.isEqual(e,he(t)),G=(e,t)=>{let{sourceChain:r,targetChain:n,amount:i,asset:o}=e;if(!ds(r,n))throw new y("INVALID_PARAMS","SourceChain and TargetChain combination is not valid");if(i<=0n)throw new y("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let s=t.nativeTokenConfig.avalancheToken;if(!us(s.token,o))throw new y("ASSET_NOT_SUPPORTED","Incorrect Asset was provided");return {source:s,target:t.nativeTokenConfig.bitcoinToken,btcToAva:!1}};async function yr(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o,fromAddress:s}=t,{source:a}=G({sourceChain:r,targetChain:n,asset:i,amount:o},e);return await h({chain:r}).estimateContractGas({address:a.token.address,abi:Ae,functionName:"unwrap",account:s,args:[o,0]})}async function se(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:o}=t,{source:s}=G({sourceChain:r,targetChain:n,amount:i,asset:o},e);if(ae(s.bridgeFeeEstimate)){let{constAmount:a,numeratorPerSat:m,denominatorPerSat:c}=s.bridgeFeeEstimate.unwrapFeeEstimate.estimatedTxFee,p=a+m/c*Number(i),u=Ee(i,s.bridgeFeeEstimate.unwrapFeeEstimate.bridgeToll),d=BigInt(Math.ceil(p))+u;return {[n.chainId]:{NATIVE:BigInt(d)}}}else {let{constUnwrapFeeAmount:a,unwrapFeeNumerator:m,unwrapFeeDenominator:c}=s.bridgeFeeEstimate,p=a+m/c*Number(i),u=BigInt(Math.ceil(p));return {[n.chainId]:{NATIVE:BigInt(u)}}}}async function lr(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o}=t,{target:s}=G({sourceChain:r,targetChain:n,asset:i,amount:o},e),m=(await se(e,{sourceChain:r,targetChain:n,amount:o,asset:i}))[s.chainId]?.NATIVE??0n,c=t.amount-m;return {asset:s.token,amount:c>=0n?c:0n}}function Tr(e){let t=e.nativeTokenConfig.avalancheToken,r={...t.token,destinations:{[t.target.networkId]:["avalanche-ava-btc"]}};return {[t.chainId]:[r]}}async function gr(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:o}=t,s=G({sourceChain:r,targetChain:n,amount:i,asset:o},e),a=await fs(e,t,s),m=e.dustThreshold;return BigInt(Math.ceil((a+m)*2))}async function fs(e,t,{source:r}){if(ae(r.bridgeFeeEstimate)){let{constAmount:n,numeratorPerSat:i,denominatorPerSat:o}=r.bridgeFeeEstimate.unwrapFeeEstimate.estimatedTxFee,s=n+i/o*Number(t.amount);return Number(r.bridgeFeeEstimate.unwrapFeeEstimate.bridgeToll.minimumFeeAmount)+s}else {let n=await se(e,t);return Number(n[t.targetChain.chainId]?.NATIVE)}}var Cr=({sourceClient:e,getMetadata:t,checkMetadata:r,trackingParams:{bridgeTransfer:n,updateListener:i},trackingConfig:{trackingLimitMs:o},bitcoinFunctions:s})=>{let a=lodash.cloneDeep(n);return async c=>{if(a.completedAt||r(a.metadata))return c(a);if(a.sourceStartedAt+o<=Date.now())return a=E(a,{completedAt:Date.now(),errorCode:5004},i),c(a);if(!viem.isHash(a.sourceTxHash))return;let p=await e.getTransactionReceipt({hash:a.sourceTxHash});if(!a.sourceNetworkFee){let g=await e.getTransaction({hash:a.sourceTxHash}),C=te(g,p);C&&(a=E(a,{sourceNetworkFee:C},i));}if(p.status==="reverted")return a=E(a,{completedAt:Date.now(),errorCode:5005},i),c(a);if(!viem.isHash(a.sourceTxHash))return;let u=await e.getTransactionConfirmations({hash:a.sourceTxHash}),d=u>a.sourceConfirmationCount,f=u>=a.sourceRequiredConfirmationCount;if(d){let g={};g.sourceConfirmationCount=Number(u),f||(g.targetStartBlockNumber=BigInt(await s.getChainHeight())),a=E(a,g,i);}if(!f)return;a.targetStartBlockNumber||(a=E(a,{targetStartBlockNumber:BigInt(await s.getChainHeight())},i));let T=t(p);return a=E(a,{targetStartedAt:Date.now(),metadata:T},i),c(a)}};var hr=({trackingParams:{bridgeTransfer:e,updateListener:t},trackingConfig:{trackingLimitMs:r},config:n,bitcoinFunctions:i})=>{let{toAddress:o,targetStartBlockNumber:s,amount:a}=e;if(!e.targetStartBlockNumber)throw new y("INVALID_PARAMS","targetStartBlockNumber is missing");let m=lodash.cloneDeep(e);return async p=>{if(m.completedAt)return p(m);if(m.sourceStartedAt+r<=Date.now())return m=E(m,{completedAt:Date.now(),errorCode:5004},t),p(m);if(!m.targetStartBlockNumber)throw new Error("unreachable");let u;if(!m.targetTxHash){let{confirmed:f,unconfirmed:T}=await i.getUTXOs(o,!1),C=[...f.filter(b=>!s||b.blockHeight>=s).sort((b,A)=>b.blockHeight-A.blockHeight),...T];for(let b of C){if(u=await i.getTransaction(b.txHash),!u)return;if(u.addresses.includes(n.walletAddresses.bitcoin)){m=E(m,{targetTxHash:u.hash,targetNetworkFee:BigInt(u.fees),targetConfirmationCount:u.confirmations},t);let v=u.outputs.find(M=>M.addresses?.length===1&&M.addresses[0]===o),w=v&&BigInt(Math.ceil(Number(a)-v.value));w&&(m=E(m,{bridgeFee:w},t));break}}if(!m.targetTxHash)return}if(u||(u=await i.getTransaction(m.targetTxHash)),!u)return;if(u.confirmations>=m.targetRequiredConfirmationCount)return m=E(m,{completedAt:Date.now(),targetConfirmationCount:u.confirmations},t),p(m)}};var Ts=async(e,t)=>{let{sourceChain:r}=e.bridgeTransfer,n=h({chain:r}),i=Xe(),o=Cr({sourceClient:n,getMetadata:i,checkMetadata:_e,trackingParams:e,trackingConfig:x,bitcoinFunctions:t});return D({promise:o,delay:2e3,startAfter:x.initialDelayMs})},gs=async(e,t,r)=>{let n=hr({trackingParams:t,trackingConfig:x,config:e,bitcoinFunctions:r});return D({promise:n,delay:1e3*60,startAfter:x.initialDelayMs})};function Er(e,t,r){let n,i=()=>{n?.();};return {result:(async()=>{let{bridgeTransfer:s}=t,{targetChain:a,sourceChain:m,asset:c,amount:p}=s;G({sourceChain:m,targetChain:a,asset:c,amount:p},e);let{result:u,cancel:d}=await Ts(t,r);n=d;let f=await u,{result:T,cancel:g}=await gs(e,{...t,bridgeTransfer:f},r);return n=g,T})(),cancel:i}}async function br(e,t,r,n){let{sourceChain:i,targetChain:o,asset:s,amount:a,fromAddress:m,toAddress:c,onStepChange:p,gasSettings:u}=t;be([m,c],e.addressBlocklist);let{source:d}=G({sourceChain:i,targetChain:o,asset:s,amount:a},e),f=Date.now(),g=(await se(e,{asset:s,amount:a,sourceChain:i,targetChain:o}))[o.chainId]?.NATIVE??0n,C=e.minimumConfirmations.avalanche,b=await $e({amount:a,source:d,sourceChain:i,fromAddress:m,sign:r.sign,onStepChange:p,gasSettings:u}),A=BigInt(await n.getChainHeight());return {type:"avalanche-ava-btc",environment:e.environment,fromAddress:m,toAddress:c,amount:t.amount,asset:s,bridgeFee:g,sourceChain:i,sourceStartedAt:f,sourceTxHash:b,sourceConfirmationCount:0,sourceRequiredConfirmationCount:C,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:A}}var Ir=({fromAddress:e,toAddress:t,targetChain:r,...n})=>{if(!viem.isAddress(e))throw new y("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided");let i=ne(r);if(!we(t,i))throw new y("INCORRECT_ADDRESS_PROVIDED","Invalid toAddress was provided: Make sure it is Btc Address from correct environment");return {fromAddress:e,toAddress:t,targetChain:r,...n}},Et=({fromAddress:e,targetChain:t,...r})=>{if(!viem.isAddress(e))throw new y("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided");return {fromAddress:e,targetChain:t,...r}};var vr=async(e,t,r)=>{let n=await Qe(e);return {type:"avalanche-ava-btc",analyzeTx:i=>fr(n,i),estimateGas:i=>yr(n,Et(i)),estimateReceiveAmount:i=>lr(n,Et(i)),getAssets:()=>Tr(n),getFees:i=>se(n,i),transferAsset:i=>br(n,Ir(i),t,r),trackTransfer:i=>Er(n,i,r),getMinimumTransferAmount:i=>gr(n,i)}};var bt="core",kr=6,tt=1,nt={dev:sdk.Env.dev,test:sdk.Env.ibc,staging:sdk.Env.stage,production:sdk.Env.prod},xr=2e-4,As=6,wr=e=>{switch(e){case"lombard-btcb-to-btc":return As;default:return}};var Be={type:"native",name:"Bitcoin",symbol:"BTC",decimals:8},Cs={[sdk.Env.dev]:{43113:"0x7FbdC44BfEBDe80C970ba622B678daB36cee31f6"},[sdk.Env.ibc]:{43113:"0x71ba2b8dc58e7ca1b6d81a60729e31aefa37ae02"},[sdk.Env.stage]:{43113:"0x7FbdC44BfEBDe80C970ba622B678daB36cee31f6"},[sdk.Env.testnet]:{43113:"0xB14f240714Bd23Bda103A7189D512A90326E4D01"},[sdk.Env.prod]:{43114:"0x152b9d0FdC40C096757F570A51E494bd4b943E50"}},Sr={[sdk.Env.dev]:{43113:"0x0A65C37d07c32E5eA8ea40495b7f249cdE26935e"},[sdk.Env.ibc]:{43113:"0x1391f9AC408cf13214DDB71d359002658eaF9ebb"},[sdk.Env.stage]:{43113:"0x0A65C37d07c32E5eA8ea40495b7f249cdE26935e"},[sdk.Env.testnet]:{43113:"0x41BCd71e7C92b1c8dDe53037F9b2c4AA2058b1cB"},[sdk.Env.prod]:{43114:"0x85D1D52e11290F174444d21C2a167bEDBE36e4d2"}},rt=(e,t)=>{let r=Cs[t]?.[e];if(!r)throw new Error(`No BTCb address configured for env: ${t}, chainId: ${e}`);return {type:"erc20",name:"Bitcoin",symbol:"BTC.b",decimals:8,address:r}};async function at(e,t,r){let[n,i,o]=await Promise.all([sdk.getMintingFee({token:e,chainId:t,env:r}),sdk.getRedeemFee({token:e,chainId:t,env:r}),sdk.getMinRedeemAmount({token:e,chainId:t,env:r})]);return {mintingFee:BigInt(sdk.toBaseDenomination(n,8).toFixed()),redeemFee:BigInt(sdk.toBaseDenomination(i,8).toFixed()),minRedeemAmount:BigInt(sdk.toBaseDenomination(o,8).toFixed())}}function Ie(e){let{namespace:t,reference:r}=I.toJSON(e);if(t!=="eip155")throw new Error("Invalid namespace provided.");return Number(r)}function Nr(e,t){return {isBridgeTx:!1}}var Rr=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()}),Dr=zod.z.array(Rr);Rr.extend({script:zod.z.optional(zod.z.string())});var Bs=zod.z.object({address:zod.z.string(),value:zod.z.number()}),_r=zod.z.array(Bs);function vs(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 it(e,t,r,n,i,o){let s=vs(i),a=[{address:e,value:Number(r)}],{inputs:m,outputs:c,fee:p}=Zi__default.default(s,a,n);if(typeof p!="number")throw new y("UNKNOWN","Unable to choose utxo properly");if(!m||!c||!c.length)return {fee:p};let u=await o.getScriptsForUtxos(m),d=Dr.parse(u),f=[c[0]],T=c[1];T&&f.push({address:t,value:T.value});let g=_r.parse(f);return {inputs:d,outputs:g,fee:p}}var ks="bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq",xs="tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx";async function Pr(e,t,r){let{fromAddress:n,amount:i}=t,s=e.sourceChain==="bip122:000000000019d6689c085ae165831e93"?ks:xs,a=1,{utxos:m}=await r.getUtxoBalance(n,!1),{fee:c}=await it(s,n,i,a,m,r);return BigInt(c)}async function Fr(e,t){return {asset:e.targetAsset,amount:t.amount-e.mintingFee}}function Mr(e){return {[e.sourceChain]:[{...Be,destinations:{[e.targetChain]:["lombard-btc-to-btcb"]}}]}}async function Or(e,t){return {[e.targetChain]:{[e.targetAsset.address]:e.mintingFee}}}async function Hr(e,t){return BigInt(sdk.toBaseDenomination(xr,Be.decimals).toFixed())}var Vr=e=>e.notarizationStatus===sdk.ENotarizationStatus.NOTARIZATION_STATUS_FAILED||e.sessionState===sdk.ESessionState.SESSION_STATE_EXPIRED,Lr=(e,t,r)=>{let n=t!==void 0&&e?.notarizationStatus!==t,i=r!==void 0&&e?.sessionState!==r;return {needsNotarizationUpdate:n,needsSessionStateUpdate:i}};var Gr=(e,t,r)=>({bridgeTransfer:n,updateListener:i})=>{let o=()=>{},s=h({chain:n.targetChain}),a=lodash.cloneDeep(n);return {cancel:o,result:(async()=>{if(a.completedAt)return a;let{confirmations:c,fees:p}=await t.getTransaction(a.sourceTxHash);if(a.sourceNetworkFee||(a=E(a,{sourceNetworkFee:BigInt(Math.ceil(p))},i)),c>a.sourceConfirmationCount&&(a=E(a,{sourceConfirmationCount:c},i)),c>a.sourceRequiredConfirmationCount){let f=await s.getBlockNumber();a=E(a,{targetStartBlockNumber:f},i);}let d=(await sdk.getDepositsByAddress({address:a.toAddress,env:r})).find(f=>f.txHash.toLowerCase()===a.sourceTxHash.toLowerCase());if(d){let f=d.claimTxHash,T,g,C,{needsNotarizationUpdate:b,needsSessionStateUpdate:A}=Lr(a.metadata,d.notarizationStatus,d.sessionState);if(b||A){let v={...a.metadata};b&&(v.notarizationStatus=d.notarizationStatus),A&&(v.sessionState=d.sessionState),a=E(a,{metadata:v},i);}if(Vr(d)&&(a=E(a,{completedAt:Date.now(),errorCode:5006},i)),f){let v=await s.waitForTransactionReceipt({hash:f});T=BigInt(v.gasUsed??0n)*BigInt(v.effectiveGasPrice??0n),g=Number(await s.getTransactionConfirmations({transactionReceipt:v}));let{timestamp:w}=await s.getBlock({blockNumber:v.blockNumber});C=Number(w),a=E(a,{targetTxHash:f,targetNetworkFee:T,targetConfirmationCount:g,completedAt:C},i);}}return a})()}},zr=(e,t,r)=>({bridgeTransfer:n,updateListener:i})=>{let o=()=>{},s=h({chain:n.sourceChain}),a=lodash.cloneDeep(n);return {cancel:o,result:(async()=>{if(a.completedAt)return a;let c=await s.waitForTransactionReceipt({hash:a.sourceTxHash}),p=Number(await s.getTransactionConfirmations({transactionReceipt:c}));if(p>a.sourceConfirmationCount&&(a=E(a,{sourceConfirmationCount:p},i)),!a.sourceNetworkFee){let f=BigInt(c.gasUsed??0n)*BigInt(c.effectiveGasPrice??0n);a=E(a,{sourceNetworkFee:f},i);}let d=(await sdk.getUnstakesByAddress({address:a.fromAddress,env:r})).find(f=>f.txHash.toLowerCase()===a.sourceTxHash.toLowerCase());if(d&&d.payoutTxHash&&(a=E(a,{targetTxHash:d.payoutTxHash},i)),a.targetTxHash){let T=(await t.getTransaction(a.targetTxHash)).confirmations;T>a.targetConfirmationCount&&(a=E(a,{targetConfirmationCount:T},i)),T>=a.targetRequiredConfirmationCount&&(a=E(a,{completedAt:Date.now()},i));}return a})()}};var _s=1e3*30;function Wr(e,t,r){let n=Gr("lombard-btc-to-btcb",r,e.env);return D({promise:(o=>{let s=o.bridgeTransfer;return async a=>{let{result:m}=n({...o,bridgeTransfer:s});if(s=await m,s.completedAt)return a(s)}})(t),delay:_s,startAfter:x.initialDelayMs})}function Fs(e){return e.toLowerCase().startsWith("tb1")||e.toLowerCase().startsWith("bc1")}function Ms(e){if(!Fs(e))return !1;try{return base.bech32.decode(e),!0}catch{return !1}}function Pe(e,t){return Ms(e)?e.toLowerCase().startsWith(t?"bc":"tb"):!1}async function jr(e,t,{evmSigner:r,btcSigner:n,bitcoinFunctions:i}){let o=h({chain:t.targetChain});if(!Pe(t.fromAddress,e.environment==="production"))throw new y("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided: Make sure it is Btc Address from correct environment");let s=t.toAddress,a=Ie(t.targetChain.chainId),m;try{m=await sdk.getDepositBtcAddress({address:s,chainId:a,partnerId:bt,env:e.env,token:e.targetToken});}catch{}let c=m?1:2,p={currentSignature:1,currentSignatureReason:m?"tokens-transfer":"address-ownership",requiredSignatures:c};if(!m){let w=`destination chain id is ${a}`,M=await r.signMessage({message:w,address:s,chainId:a},me=>o.sendRawTransaction({serializedTransaction:me}),p);if(p.currentSignature=2,p.currentSignatureReason="tokens-transfer",m=await sdk.generateDepositBtcAddress({token:e.targetToken,address:s,chainId:a,signature:M,partnerId:bt,env:e.env}),m===sdk.SANCTIONED_ADDRESS)throw new y("ADDRESS_IS_BLOCKED",m)}if(!Pe(m,e.environment==="production"))throw new y("INCORRECT_ADDRESS_PROVIDED","Generated deposit address (toAddress) is invalid");let{low:u,high:d}=await i.getFeeRates(),f=e.environment==="production"?d:u,{utxos:T}=await i.getUtxoBalance(t.fromAddress,!1),{inputs:g,outputs:C}=await it(m,t.fromAddress,t.amount,f,T,i);if(!g||!C)throw new y("INVALID_PARAMS","Unable to create transaction");let b=Date.now();t?.onStepChange?.(p);let A=await n.sign({inputs:g,outputs:C},i.issueRawTx,p),v;try{v=await h({chain:t.targetChain}).getBlockNumber();}catch{}return {type:"lombard-btc-to-btcb",environment:e.environment,fromAddress:t.fromAddress,toAddress:t.toAddress,amount:t.amount,asset:t.asset,bridgeFee:0n,sourceChain:t.sourceChain,sourceStartedAt:b,sourceTxHash:A,sourceConfirmationCount:0,sourceRequiredConfirmationCount:kr,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:tt,targetStartBlockNumber:v}}var Xr=async(e,t,r,n)=>{let i=nt[e],o=i===sdk.Env.prod?"bip122:000000000019d6689c085ae165831e93":"bip122:000000000933ea01ad0ee984209779ba",s=i===sdk.Env.prod?"eip155:43114":"eip155:43113",a=Ie(s),m=sdk.Token.BTCb,c=rt(a,i),p=await at(m,a,i),u={environment:e,env:i,sourceChain:o,targetChain:s,targetChainId:a,targetAsset:c,targetToken:m,mintingFee:p.mintingFee};return {type:"lombard-btc-to-btcb",analyzeTx:d=>Nr(),estimateGas:d=>Pr(u,d,n),estimateReceiveAmount:d=>Fr(u,d),getAssets:()=>Mr(u),getFees:d=>Or(u),transferAsset:d=>jr(u,d,{evmSigner:t,btcSigner:r,bitcoinFunctions:n}),trackTransfer:d=>Wr(u,d,n),getMinimumTransferAmount:d=>Hr()}};function $r(e,t){let{chainId:r,tokenTransfers:n}=t;if(r!==e.sourceChain)return {isBridgeTx:!1};if(n.some(o=>o.symbol===e.sourceAsset.symbol&&o.to&&viem.isAddressEqual(o.to,_))){let o=r==="eip155:43113";return {isBridgeTx:!0,bridgeType:"lombard-btcb-to-btc",sourceChainId:r,targetChainId:o?"bip122:000000000933ea01ad0ee984209779ba":"bip122:000000000019d6689c085ae165831e93"}}return {isBridgeTx:!1}}var zs=60000n,Kr=300000n;async function Jr(e,t){let{fromAddress:r,amount:n}=t;if(!viem.isAddress(r))throw new y("INVALID_PARAMS",`Invalid fromAddress: ${r}`);return await h({chain:t.sourceChain}).readContract({address:e.sourceAsset.address,abi:S,functionName:"allowance",args:[r,e.adapterAddress]})>=n?Kr:zs+Kr}async function Zr(e,t){return {asset:e.targetAsset,amount:t.amount-e.redeemFee}}function Qr(e){return {[e.sourceChain]:[{...e.sourceAsset,destinations:{[e.targetChain]:["lombard-btcb-to-btc"]}}]}}async function Yr(e,t){return {[e.targetChain]:{NATIVE:e.redeemFee}}}async function ea(e,t){return e.minRedeemAmount}var Ws=1e3*60;function ta(e,t,r){let n=zr("lombard-btcb-to-btc",r,e.env);return D({promise:(o=>{let s=o.bridgeTransfer;return async a=>{let{result:m}=n({...o,bridgeTransfer:s});if(s=await m,s.completedAt)return a(s)}})(t),delay:Ws,startAfter:x.initialDelayMs})}function na(e){return {sign:async(t,r)=>{let n={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};return e.sign(t,r,n)}}}async function ra(e,t,{evmSigner:r,bitcoinFunctions:n}){if(!Pe(t.toAddress,e.environment==="production"))throw new y("INCORRECT_ADDRESS_PROVIDED","Invalid toAddress was provided: Make sure it is Btc Address from correct environment");let i=await sdk.redeemToken({account:t.fromAddress,btcAddress:t.toAddress,amount:sdk.fromBaseDenomination(Number(t.amount),e.sourceAsset.decimals),chainId:e.sourceChainId,signer:na(r),tokenIn:sdk.Token.BTCb,tokenOut:void 0,env:e.env}),o=Date.now(),s;try{s=BigInt(await n.getChainHeight());}catch{}return {type:"lombard-btcb-to-btc",environment:e.environment,fromAddress:t.fromAddress,toAddress:t.toAddress,amount:t.amount,asset:t.asset,bridgeFee:e.redeemFee,sourceChain:t.sourceChain,sourceStartedAt:o,sourceTxHash:i,sourceConfirmationCount:0,sourceRequiredConfirmationCount:tt,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:s}}var ia=async(e,t,r,n)=>{let i=nt[e],o=i===sdk.Env.prod?"eip155:43114":"eip155:43113",s=i===sdk.Env.prod?"bip122:000000000019d6689c085ae165831e93":"bip122:000000000933ea01ad0ee984209779ba",a=Ie(o),m=rt(a,i),c=Sr[i]?.[a];if(!c)throw new Error(`No BTCb adapter address configured for env: ${i}, chainId: ${a}`);let p=await at(sdk.Token.BTCb,a,i),u={environment:e,env:i,sourceChain:o,targetChain:s,sourceChainId:a,sourceAsset:m,adapterAddress:c,targetAsset:Be,redeemFee:p.redeemFee,minRedeemAmount:p.minRedeemAmount};return {type:"lombard-btcb-to-btc",analyzeTx:d=>$r(u,d),estimateGas:d=>Jr(u,d),estimateReceiveAmount:d=>Zr(u,d),getAssets:()=>Qr(u),getFees:d=>Yr(u),transferAsset:d=>ra(u,d,{evmSigner:t,bitcoinFunctions:n}),trackTransfer:d=>ta(u,d,n),getMinimumTransferAmount:d=>ea(u)}};var st={"avalanche-btc-ava":dr,"avalanche-ava-btc":vr,"avalanche-evm":jn,cctp:Zt,"ictt-erc20-erc20":bn,"lombard-btc-to-btcb":Xr,"lombard-btcb-to-btc":ia},Js=async(e,t)=>{let r=await Promise.allSettled(t.map(async n=>{if(It(n)){let o=st[n.type];return [n.type,await o(e,n.evmSigner,n.btcSigner,n.bitcoinFunctions)]}if(vt(n)){let o=st[n.type];return [n.type,await o(e,n.signer,n.bitcoinFunctions)]}if(kt(n)){let o=st[n.type];return [n.type,await o(e,n.signer,n.bitcoinFunctions)]}let i=st[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)))},oe=(e,t,r)=>{let n=t.destinations[r];for(let i of n??[]){let o=e.get(i);if(o)return {bridge:o,type:i}}throw new Me};var ZC=({environment:e,enabledBridgeServices:t})=>({canTransferAsset:(d,f)=>{try{return oe(t,d,f),!0}catch{return !1}},environment:e,estimateGas:async d=>{let{bridge:f}=oe(t,d.asset,d.targetChain.chainId);return f.estimateGas(d)},estimateReceiveAmount:async d=>{let{bridge:f}=oe(t,d.asset,d.targetChain.chainId);return f.estimateReceiveAmount(d)},getAssets:()=>Array.from(t.values()).map(f=>f.getAssets()).reduce((f,T)=>{for(let[g,C]of Object.entries(T)){let b=f[g];if(b)for(let A of C){let v=b.findIndex(({symbol:w})=>w===A.symbol);v===-1?b.push(A):lodash.mergeWith(b[v],A,(w,M)=>{if(lodash.isArray(w))return [...new Set(w.concat(M))]});}else f[g]=C;}return f},{}),getFees:async d=>{let{bridge:f}=oe(t,d.asset,d.targetChain.chainId);return f.getFees(d)},analyzeTx:d=>{let f=["avalanche-ava-btc","avalanche-btc-ava","avalanche-evm","ictt-erc20-erc20","cctp"].map(T=>t.get(T)).filter(T=>!!T);for(let T of f){let g=T.analyzeTx(d);if(g.isBridgeTx)return g}return {isBridgeTx:!1}},getMinimumTransferAmount:async d=>{let{bridge:f}=oe(t,d.asset,d.targetChain.chainId);return f.getMinimumTransferAmount(d)},trackTransfer:d=>{let{bridge:f}=oe(t,d.bridgeTransfer.asset,d.bridgeTransfer.targetChain.chainId);return f.trackTransfer(d)},transferAsset:async d=>{let{bridge:f}=oe(t,d.asset,d.targetChain.chainId);return f.transferAsset(d)}});
|
|
16
|
+
var K=(r=>(r.NATIVE="native",r.ERC20="erc20",r))(K||{}),j=e=>e.type==="erc20",ye=e=>e.type==="native";var k=(a=>(a.AVALANCHE_EVM="avalanche-evm",a.AVALANCHE_BTC_AVA="avalanche-btc-ava",a.AVALANCHE_AVA_BTC="avalanche-ava-btc",a.CCTP="cctp",a.ICTT_ERC20_ERC20="ictt-erc20-erc20",a.LOMBARD_BTC_TO_BTCB="lombard-btc-to-btcb",a.LOMBARD_BTCB_TO_BTC="lombard-btcb-to-btc",a))(k||{}),eo=["avalanche-ava-btc","avalanche-btc-ava","lombard-btc-to-btcb","lombard-btcb-to-btc"],oa=["avalanche-evm","cctp","ictt-erc20-erc20"],It=e=>e.type==="lombard-btc-to-btcb"||e.type==="lombard-btcb-to-btc",to=e=>oa.includes(e.type),vt=e=>e.type==="avalanche-ava-btc",kt=e=>e.type==="avalanche-btc-ava",Z=(i=>(i.AllowanceApproval="allowance-approval",i.TokensTransfer="tokens-transfer",i.WrapToken="wrap-token",i.AddressOwnership="address-ownership",i))(Z||{});var q=(r=>(r.FUJI="eip155:43113",r.MAINNET="eip155:43114",r))(q||{}),Fe=(r=>(r.MAINNET="eip155:1",r.SEPOLIA="eip155:11155111",r))(Fe||{}),z=(r=>(r.MAINNET="bip122:000000000019d6689c085ae165831e93",r.TESTNET="bip122:000000000933ea01ad0ee984209779ba",r))(z||{}),ao={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}},io={chainId:"eip155:43114",chainName:"Avalanche Mainnet",rpcUrl:"https://api.avax.network/ext/bc/C/rpc",networkToken:{type:"native",name:"AVAX",symbol:"AVAX",decimals:18}},so={chainId:"eip155:11155111",chainName:"Ethereum Sepolia",rpcUrl:"https://proxy-api.avax.network/proxy/infura/sepolia",networkToken:{type:"native",name:"ETH",symbol:"ETH",decimals:18}},oo={chainId:"eip155:1",chainName:"Ethereum Mainnet",rpcUrl:"https://proxy-api.avax.network/proxy/infura/mainnet",networkToken:{type:"native",name:"ETH",symbol:"ETH",decimals:18}},mo={chainId:"bip122:000000000933ea01ad0ee984209779ba",chainName:"Bitcoin Testnet",rpcUrl:"",networkToken:{type:"native",name:"Bitcoin",symbol:"BTC",decimals:8}},co={chainId:"bip122:000000000019d6689c085ae165831e93",chainName:"Bitcoin Mainnet",rpcUrl:"",networkToken:{type:"native",name:"Bitcoin",symbol:"BTC",decimals:8}};var X=(i=>(i.DEV="dev",i.PROD="production",i.STAGING="staging",i.TEST="test",i))(X||{});var W=(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[s.NOTARIZATION_FAILED=5006]="NOTARIZATION_FAILED",s))(W||{}),B=(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))(B||{});function xt(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((o,s)=>(n.chainId!==s&&(o[s]||(o[s]=[]),o[s]?.push("cctp")),o),{})})),r),{})}var ma="^[-a-z0-9]{3,8}$",ca="^[-_a-zA-Z0-9]{1,50}$",wt=":",pa=e=>{let[t,r]=e.split(wt);if(!t||!r)throw new Error("Invalid identifier provided.");if(!new RegExp(ma).test(t))throw new Error("Invalid namespace provided.");if(!new RegExp(ca).test(r))throw new Error("Invalid reference provided.");return {namespace:t,reference:r}},da=({namespace:e,reference:t})=>`${e}${wt}${t}`,ua=({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)}`},I={toJSON:pa,toString:da,toEip155HexChainId:ua};var Ta=e=>{let{reference:t}=I.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=Ta(e),r=viem.http(e.rpcUrl,{batch:!0,retryCount:6,retryDelay:200,timeout:15e3});return viem.createWalletClient({chain:t,transport:r}).extend(viem.publicActions)};var ce=[{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 Me=class extends Q{constructor(t="UNKNOWN",r){super(t,5001,r),this.name="BridgeUnavailableError";}};var N=class extends Q{constructor(t="UNKNOWN",r){super(t,5002,r),this.name="BridgeInitializationError";}};var y=class extends Q{constructor(t="INVALID_PARAMS",r){super(t,5003,r),this.name="InvalidParamsError";}};var O=({sourceChain:e,targetChain:t,amount:r,asset:n},i)=>{if(e.chainId===t.chainId)throw new y("IDENTICAL_CHAINS_PROVIDED");if(r<=0n)throw new y("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let o=i.find(c=>c.chainId===e.chainId);if(!o)throw new y("CHAIN_NOT_SUPPORTED",`Not supported on source chain "${e.chainId}"`);let s=i.find(c=>c.chainId===t.chainId);if(!s)throw new y("CHAIN_NOT_SUPPORTED",`Not supported on target chain "${t.chainId}"`);let a=o.tokens.find(c=>c.symbol===n.symbol),m=s.tokens.find(c=>c.symbol===n.symbol);if(!a||!m)throw new y("ASSET_NOT_SUPPORTED");return {sourceChainData:o,targetChainData:s,burnToken:a,mintToken:m}};async function Y(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o}=t,{sourceChainData:s,targetChainData:a,burnToken:m}=O({sourceChain:r,targetChain:n,asset:i,amount:o},e),p=await h({chain:r}).readContract({address:s.tokenRouterAddress,abi:ce,functionName:"calculateFee",args:[o,a.domain]});return {[s.chainId]:{[m.address]:p}}}var S=[{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 Nt({amount:e,burnToken:t,targetChainData:r,toAddress:n}){return viem.encodeFunctionData({abi:ce,functionName:"transferTokens",args:[e,r.domain,n,t.address]})}function Rt({amount:e,sourceChainData:t}){return viem.encodeFunctionData({abi:S,functionName:"approve",args:[t.tokenRouterAddress,e]})}var ga=async(e,t,r)=>{let{sourceChain:n,targetChain:i,asset:o,amount:s,fromAddress:a,toAddress:m,onStepChange:c,gasSettings:p}=t,{sourceChainData:u,targetChainData:d,burnToken:f}=O({sourceChain:n,targetChain:i,asset:o,amount:s},e),T=h({chain:n}),C=await T.readContract({address:f.address,abi:S,functionName:"allowance",args:[a,u.tokenRouterAddress]})<s,b=C?2:1;if(C){let w={currentSignature:1,currentSignatureReason:"allowance-approval",requiredSignatures:b};c?.(w);let M=Rt({amount:s,sourceChainData:u}),me=await r.sign({from:a,to:f.address,data:M,...p?{maxFeePerGas:p.price,maxPriorityFeePerGas:p.tip}:null,chainId:I.toEip155HexChainId(I.toJSON(n.chainId))},sa=>T.sendRawTransaction({serializedTransaction:sa}),w);await T.waitForTransactionReceipt({hash:me});}let A={currentSignature:C?2:1,currentSignatureReason:"tokens-transfer",requiredSignatures:b};c?.(A);let v=Nt({amount:s,burnToken:f,targetChainData:d,toAddress:m});return r.sign({from:a,to:u.tokenRouterAddress,data:v,...p?{maxFeePerGas:p.price,maxPriorityFeePerGas:p.tip}:null,chainId:I.toEip155HexChainId(I.toJSON(n.chainId))},w=>T.sendRawTransaction({serializedTransaction:w}),A)},Aa=async e=>{try{return await e.getBlockNumber()}catch{return}};async function Dt(e,t,r,n){let{minimumConfirmations:i}=e.find(d=>d.chainId===t.sourceChain.chainId)??{},{minimumConfirmations:o}=e.find(d=>d.chainId===t.targetChain.chainId)??{};if(!i||!o)throw new y("CONFIRMATION_COUNT_UNKNOWN");let s=await Y(e,{asset:t.asset,amount:t.amount,sourceChain:t.sourceChain,targetChain:t.targetChain}),a=j(t.asset)?s[t.sourceChain.chainId]?.[t.asset.address]??0n:0n,m=await ga(e,t,n),c=Date.now(),p=h({chain:t.targetChain}),u=await Aa(p);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:c,sourceTxHash:m,sourceConfirmationCount:0,sourceRequiredConfirmationCount:i,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:o,targetStartBlockNumber:u}}var ot=async e=>new Promise(t=>{setTimeout(t,e);});var D=({promise:e,delay:t,startAfter:r})=>{let n=!1,i=!1,o=0,s,a,m=u=>{s&&n&&(n=!1,s(u));},c=()=>{i=!0,a&&n&&(n=!1,a("cancelled"));};return {result:new Promise((u,d)=>{n=!0,s=u,a=d;let f=async()=>{if(!(!n||i)){try{if(await e(m),!n||i)return;await ot(t);}catch(T){console.error(T.message),o+=1,await ot(2**o*t);}await f();}};r?setTimeout(f,r):f();}),cancel:c}};var ve=(r=>(r[r.Ethereum=0]="Ethereum",r[r.Avalanche=1]="Avalanche",r))(ve||{});var ee=zod.z.string().refine(e=>viem.isAddress(e),e=>({message:`Invalid EVM address '${e}'`})).transform(e=>e);var Ea=zod.z.object({address:ee,name:zod.z.string(),symbol:zod.z.string(),decimals:zod.z.number().positive()}),ba=zod.z.coerce.string().transform((e,t)=>{let r=e.startsWith("eip155:")?e:`eip155:${e}`;try{let n=I.toJSON(r);return I.toString(n)}catch{return t.addIssue({code:zod.z.ZodIssueCode.custom,message:"Invalid chain id, neither numeric nor caip2 compliant"}),zod.z.NEVER}}),Ba=zod.z.object({chainId:ba,domain:zod.z.nativeEnum(ve),tokenRouterAddress:ee,messageTransmitterAddress:ee,tokens:zod.z.array(Ea),minimumConfirmations:zod.z.number().positive()}),_t=zod.z.array(Ba);var Ia=e=>e==="production"||e==="test",va={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"},Pt=async e=>{if(!Ia(e))throw new N("ENVIRONMENT_NOT_SUPPORTED",`CCTP does not support ${e} environment`);try{let r=await(await fetch(va[e])).json();return _t.parse(r)}catch(t){throw new N("CONFIG_NOT_AVAILABLE",`Error while fetching CCTP config: ${t.message}`)}},mt=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},wa=1e3*60*60*3,Sa=1024n,Na=5e3,x={trackingLimitMs:wa,maxBlocks:Sa,initialDelayMs:Na};var te=(e,t)=>e.gasPrice&&BigInt(e.gasPrice*t.gasUsed);var pe=({targetClient:e,sourceClient:t,getMetadata:r,checkMetadata:n,trackingParams:{bridgeTransfer:i,updateListener:o},trackingConfig:{trackingLimitMs:s}})=>{let a=lodash.cloneDeep(i);return async c=>{if(a.completedAt||n(a.metadata))return c(a);if(a.sourceStartedAt+s<=Date.now())return a=E(a,{completedAt:Date.now(),errorCode:5004},o),c(a);if(!viem.isHash(a.sourceTxHash))return;let p=await t.getTransactionReceipt({hash:a.sourceTxHash});if(a.sourceNetworkFee===void 0){let g=await t.getTransaction({hash:a.sourceTxHash}),C=te(g,p);C&&(a=E(a,{sourceNetworkFee:C},o));}if(p.status==="reverted")return a=E(a,{completedAt:Date.now(),errorCode:5005},o),c(a);if(!viem.isHash(a.sourceTxHash))return;let u=await t.getTransactionConfirmations({hash:a.sourceTxHash}),d=u>a.sourceConfirmationCount,f=u>=a.sourceRequiredConfirmationCount;if(d){let g={};g.sourceConfirmationCount=Number(u),f||(g.targetStartBlockNumber=await e.getBlockNumber()),a=E(a,g,o);}if(!f)return;a.targetStartBlockNumber||(a=E(a,{targetStartBlockNumber:await e.getBlockNumber()},o));let T=r(p);return a=E(a,{targetStartedAt:Date.now(),metadata:T},o),c(a)}};var de=({targetClient:e,getTargetTxHash:t,checkMetadata:r,trackingParams:{bridgeTransfer:n,updateListener:i},trackingConfig:{trackingLimitMs:o,maxBlocks:s}})=>{if(!n.completedAt&&!r(n.metadata))throw new y("INVALID_PARAMS","metadata is missing");if(!n.targetStartBlockNumber)throw new y("INVALID_PARAMS","targetStartBlockNumber is missing");let a=lodash.cloneDeep(n);return async c=>{if(a.completedAt)return c(a);if(a.sourceStartedAt+o<=Date.now())return a=E(a,{completedAt:Date.now(),errorCode:5004},i),c(a);if(!a.targetStartBlockNumber)throw new Error("unreachable");if(!a.targetTxHash){let g=await e.getBlockNumber(),C=a.targetStartBlockNumber-s,b=C>=0n?C:"earliest",A=a.targetStartBlockNumber+s,v=A<g?A:"latest",w=await t({fromBlock:b,toBlock:v,metadata:a.metadata});if(w)a=E(a,{targetTxHash:w},i);else {a=E(a,{targetStartBlockNumber:g},i);return}}if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let u=await e.getTransactionReceipt({hash:a.targetTxHash});if(!a.targetNetworkFee){let g=await e.getTransaction({hash:a.targetTxHash}),C=te(g,u);C&&(a=E(a,{targetNetworkFee:C},i));}if(u.status==="reverted")return a=E(a,{completedAt:Date.now(),errorCode:5005},i),c(a);if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let d=await e.getTransactionConfirmations({hash:a.targetTxHash}),f=d>a.targetConfirmationCount,T=d>=a.targetRequiredConfirmationCount;if(f&&(a=E(a,{targetConfirmationCount:Number(d)},i)),!!T)return a=E(a,{completedAt:Date.now()},i),c(a)}};var ct=e=>lodash.isObject(e)&&typeof e.nonce=="bigint",Lt=({sourceChainData:e})=>r=>{let n=r.logs.find(s=>s.address.toLowerCase()===e.tokenRouterAddress.toLowerCase()?viem.decodeEventLog({abi:ce,...s}).eventName==="TransferTokens":!1);if(!n)throw new y("INVALID_PARAMS",`unable to find a TransferTokens event in source transaction "${r.transactionHash}"`);return {nonce:viem.decodeEventLog({abi:ce,eventName:"TransferTokens",...n}).args.nonce}},Pa={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"}]},Ut=({targetClient:e,transferData:{targetChainData:t}})=>async({fromBlock:n,toBlock:i,metadata:o})=>(await e.getLogs({address:t.messageTransmitterAddress,event:Pa,args:{nonce:o?.nonce},fromBlock:n,toBlock:i}))[0]?.transactionHash;var Fa=async(e,t)=>{let{bridgeTransfer:r}=t,{asset:n,amount:i,sourceChain:o,targetChain:s}=r,a=O({sourceChain:o,targetChain:s,asset:n,amount:i},e),{sourceChainData:m}=a,c=h({chain:o}),p=h({chain:s}),u=Lt(a),d=pe({sourceClient:c,targetClient:p,getMetadata:u,checkMetadata:ct,trackingParams:t,trackingConfig:x});return D({promise:d,delay:mt(m.chainId),startAfter:x.initialDelayMs})},Ma=async(e,t)=>{let{bridgeTransfer:r}=t,{asset:n,amount:i,sourceChain:o,targetChain:s}=r,a=h({chain:s}),m=O({sourceChain:o,targetChain:s,asset:n,amount:i},e),c=Ut({targetClient:a,transferData:m}),p=de({targetClient:a,getTargetTxHash:c,checkMetadata:ct,trackingParams:t,trackingConfig:x});return D({promise:p,delay:mt(m.targetChainData.chainId),startAfter:x.initialDelayMs})};function zt(e,t){if(!viem.isHash(t.bridgeTransfer.sourceTxHash)||t.bridgeTransfer.targetTxHash&&!viem.isHash(t.bridgeTransfer.targetTxHash))throw new y("INCORRECT_TXHASH_PROVIDED");let r,n=()=>{r?.();};return {result:(async()=>{let{updateListener:o,bridgeTransfer:s}=t,{result:a,cancel:m}=await Fa(e,{updateListener:o,bridgeTransfer:s});r=m;let c=await a,{result:p,cancel:u}=await Ma(e,{updateListener:o,bridgeTransfer:c});return r=u,p})(),cancel:n}}var Oa=60000n,Wt=175000n,Ha=60000n,jt=215000n;async function qt(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o,fromAddress:s}=t,{sourceChainData:a,burnToken:m}=O({sourceChain:r,targetChain:n,asset:i,amount:o},e),p=await h({chain:r}).readContract({address:m.address,abi:S,functionName:"allowance",args:[s,a.tokenRouterAddress]}),u=a.domain===1;return p>=o?u?jt:Wt:u?Ha+jt:Oa+Wt}async function Xt(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o}=t,{burnToken:s}=O({sourceChain:r,targetChain:n,asset:i,amount:o},e);return (await Y(e,t))[r.chainId]?.[s.address]??1n}async function $t(e,t){let{mintToken:r,burnToken:n}=O(t,e),i={...r,type:"erc20"},s=(await Y(e,t))[t.sourceChain.chainId]?.[n.address]??0n,a=t.amount-s;return {asset:i,amount:a>=0n?a:0n}}var _="0x0000000000000000000000000000000000000000";function Kt(e,t){for(let r of e){if(r.chainId!==t.chainId)continue;let n=t.tokenTransfers.find(({symbol:u})=>r.tokens.some(({symbol:d})=>d===u));if(!n)continue;let i=r.domain===1,o=t.chainId==="eip155:43113"||t.chainId==="eip155:11155111",s=o?"eip155:11155111":"eip155:1",a=o?"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?s:a};let c=viem.isAddressEqual(t.from,r.messageTransmitterAddress),p=viem.isAddressEqual(n.from,_);if(c||p)return {isBridgeTx:!0,bridgeType:"cctp",sourceChainId:i?s:a,targetChainId:t.chainId}}return {isBridgeTx:!1}}var pt=e=>{let{fromAddress:t,toAddress:r}=e;if(!viem.isAddress(t)||!viem.isAddress(r))throw new y("INCORRECT_ADDRESS_PROVIDED");return {fromAddress:t,toAddress:r}};function le(e){let{chainId:t,from:r,to:n,tokenTransfers:i}=e,{fromAddress:o,toAddress:s}=pt({fromAddress:r,toAddress:n}),a=i.map(m=>{let{from:c,to:p,symbol:u}=m;if(!c||!viem.isAddress(c)||!p||!viem.isAddress(p))throw new y("INCORRECT_ADDRESS_PROVIDED");return {from:c,to:p,symbol:u}});return {chainId:t,from:o,to:s,tokenTransfers:a}}var J=({fromAddress:e,...t})=>{if(!viem.isAddress(e))throw new y("INCORRECT_ADDRESS_PROVIDED");return {fromAddress:e,...t}},Te=({fromAddress:e,toAddress:t,...r})=>{let{fromAddress:n,toAddress:i}=pt({fromAddress:e,toAddress:t});return {fromAddress:n,toAddress:i,...r}};var Zt=async(e,t)=>{let r=await Pt(e);return {type:"cctp",analyzeTx:n=>{try{return Kt(r,le(n))}catch{return {isBridgeTx:!1}}},estimateGas:n=>qt(r,J(n)),estimateReceiveAmount:n=>$t(r,J(n)),getAssets:()=>xt(r),getFees:n=>Y(r,n),transferAsset:n=>Dt(r,Te(n),e,t),trackTransfer:n=>zt(r,n),getMinimumTransferAmount:n=>Xt(r,n)}};var Va=({sourceChain:e,targetChain:t,asset:r},n)=>{let i=n.find(a=>a.homeChain.chainId===e.chainId),o=i?.erc20Bridges.find(a=>a.baseToken.address===r.address&&a.remotes.some(({remoteChain:m})=>m.chainId===t.chainId)),s=o?.remotes.find(a=>a.remoteChain.chainId===t.chainId);return {chainBridgeConfig:i,tokenHomeConfig:o,tokenRemoteConfig:s}},La=({sourceChain:e,targetChain:t,asset:r},n)=>{let i=n.find(a=>a.homeChain.chainId===t.chainId),o=i?.erc20Bridges.find(a=>a.remotes.find(m=>m.tokenRemoteAddress===r.address&&m.remoteChain.chainId===e.chainId)),s=o?.remotes.find(a=>a.tokenRemoteAddress===r.address&&a.remoteChain.chainId===e.chainId);return {chainBridgeConfig:i,tokenHomeConfig:o,tokenRemoteConfig:s}},H=({sourceChain:e,targetChain:t,amount:r,asset:n},i)=>{if(e.chainId===t.chainId)throw new y("IDENTICAL_CHAINS_PROVIDED");if(r<=0n)throw new y("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");if(!j(n))throw new y("ASSET_NOT_SUPPORTED","Only ERC20 assets supported");let o=Va({sourceChain:e,targetChain:t,asset:n},i),s=La({sourceChain:e,targetChain:t,asset:n},i);if(o.chainBridgeConfig&&o.tokenHomeConfig&&o.tokenRemoteConfig){let{chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:c}=o;return {homeToRemote:!0,chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:c}}if(s.chainBridgeConfig&&s.tokenHomeConfig&&s.tokenRemoteConfig){let{chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:c}=s;return {homeToRemote:!1,chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:c}}throw new y("ASSET_NOT_SUPPORTED","No Home->Remote or Remote->Home route exists for this asset")};var Ua=60000n,Qt=215000n,Yt=async(e,t)=>{let{sourceChain:r,targetChain:n,asset:i,amount:o,fromAddress:s}=t,{tokenHomeConfig:a,homeToRemote:m,tokenRemoteConfig:c}=H({sourceChain:r,targetChain:n,asset:i,amount:o},e);return await h({chain:r}).readContract({address:m?a.baseToken.address:c.tokenRemoteAddress,abi:S,functionName:"allowance",args:[s,m?a.tokenHomeAddress:c.tokenRemoteAddress]})>=o?Qt:Ua+Qt};var en=e=>{let t=e.reduce((n,i)=>(n[i.homeChain.chainId]=i.erc20Bridges.map(o=>({...o.baseToken,destinations:o.remotes.reduce((s,a)=>(s[a.remoteChain.chainId]=["ictt-erc20-erc20"],s),{})})),n),{}),r=e.reduce((n,i)=>{for(let o of i.erc20Bridges)for(let s of o.remotes){let a=n[s.remoteChain.chainId]??[];n[s.remoteChain.chainId]=[...a,{...o.baseToken,address:s.tokenRemoteAddress,destinations:{[i.homeChain.chainId]:["ictt-erc20-erc20"]}}];}return n},{});return {...t,...r}};async function ge(e,t){return H(t,e),{}}var ke=[{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 xe=[{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 Ga=85000n,nn=({homeToRemote:e,amount:t,destinationBlockchainID:r,destinationTokenTransferrerAddress:n,recipient:i})=>viem.encodeFunctionData({abi:e?ke:xe,functionName:"send",args:[{destinationBlockchainID:r,destinationTokenTransferrerAddress:n,recipient:i,primaryFeeTokenAddress:_,primaryFee:0n,secondaryFee:0n,requiredGasLimit:Ga,multiHopFallback:_},t]});function rn({amount:e,address:t}){return viem.encodeFunctionData({abi:S,functionName:"approve",args:[t,e]})}var za=async({params:{onStepChange:e,amount:t,fromAddress:r,sourceChain:n,toAddress:i,gasSettings:o},transferData:s,isAllowanceApprovalRequired:a,requiredSignatures:m,signer:c})=>{let{tokenRemoteConfig:p,tokenHomeConfig:u,homeToRemote:d,chainBridgeConfig:f}=s,T=h({chain:n});if(a){let v={currentSignature:1,currentSignatureReason:"allowance-approval",requiredSignatures:m};e?.(v);let w=rn({amount:t,address:d?u.tokenHomeAddress:p.tokenRemoteAddress}),M=await c.sign({from:r,to:d?s.tokenHomeConfig.baseToken.address:p.tokenRemoteAddress,data:w,...o?{maxFeePerGas:o.price,maxPriorityFeePerGas:o.tip}:null,chainId:I.toEip155HexChainId(I.toJSON(n.chainId))},me=>T.sendRawTransaction({serializedTransaction:me}),v);await T.waitForTransactionReceipt({hash:M});}let g={currentSignature:a?2:1,currentSignatureReason:"tokens-transfer",requiredSignatures:m};e?.(g);let C=d?p.remoteChain.blockchainId:f.homeChain.blockchainId,b=d?p.tokenRemoteAddress:u.tokenHomeAddress,A=nn({amount:t,recipient:i,destinationBlockchainID:C,destinationTokenTransferrerAddress:b,homeToRemote:d});return c.sign({from:r,to:d?u.tokenHomeAddress:p.tokenRemoteAddress,data:A,...o?{maxFeePerGas:o.price,maxPriorityFeePerGas:o.tip}:null,chainId:I.toEip155HexChainId(I.toJSON(n.chainId))},v=>T.sendRawTransaction({serializedTransaction:v}),g)},Wa=async({params:e,transferData:t,signer:r})=>{let{sourceChain:n,fromAddress:i,amount:o}=e,s=h({chain:n}),{homeToRemote:a,tokenHomeConfig:m,tokenRemoteConfig:c}=t,u=await s.readContract({address:a?m.baseToken.address:c.tokenRemoteAddress,abi:S,functionName:"allowance",args:[i,a?m.tokenHomeAddress:c.tokenRemoteAddress]})<o;return za({params:e,transferData:t,isAllowanceApprovalRequired:u,requiredSignatures:u?2:1,signer:r})},ja=async(e,t,r)=>{let{sourceChain:n,targetChain:i,asset:o,amount:s}=t,a=H({sourceChain:n,targetChain:i,asset:o,amount:s},e);return Wa({params:t,transferData:a,signer:r})},qa=async e=>{try{return await e.getBlockNumber()}catch{return}};async function an(e,t,r,n){let i=await ge(e,{asset:t.asset,amount:t.amount,sourceChain:t.sourceChain,targetChain:t.targetChain}),o=j(t.asset)?i[t.targetChain.chainId]?.[t.asset.address]??0n:0n,s=await ja(e,t,n),a=Date.now(),m=h({chain:t.targetChain}),c=await qa(m);return {type:"ictt-erc20-erc20",environment:r,fromAddress:t.fromAddress,toAddress:t.toAddress,amount:t.amount,asset:t.asset,bridgeFee:o,sourceChain:t.sourceChain,sourceStartedAt:a,sourceTxHash:s,sourceConfirmationCount:0,sourceRequiredConfirmationCount:1,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:c}}var on=({transferData:{homeToRemote:e,tokenHomeConfig:t,tokenRemoteConfig:r}})=>n=>{let i=e?t.tokenHomeAddress:r.tokenRemoteAddress,o=e?ke:xe,s="TokensSent",a=n.logs.find(p=>p.address.toLowerCase()===i.toLowerCase()?viem.decodeEventLog({abi:o,...p}).eventName===s:!1);if(!a)throw new y("INVALID_PARAMS",`unable to find a TokensSent event in source transaction "${n.transactionHash}"`);return {teleporterMessageID:viem.decodeEventLog({abi:o,eventName:s,...a}).args.teleporterMessageID}},Ka={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"}]}]},mn=({toAddress:e,transferData:{tokenHomeConfig:t,homeToRemote:r,tokenRemoteConfig:n},targetClient:i})=>async({fromBlock:o,toBlock:s,metadata:a})=>{if(!Ve(a))throw new y("INVALID_PARAMS");let c=(await i.getLogs({address:t.teleporterAddress,event:Ka,args:{messageID:a.teleporterMessageID},fromBlock:o,toBlock:s})).at(-1);if(lodash.isNil(c))return;let p=c.transactionHash,u=await i.getTransactionReceipt({hash:p}),d=r?xe:ke,f=r?n.tokenRemoteAddress:t.tokenHomeAddress,T=u.logs.find(C=>C.address.toLowerCase()===f.toLowerCase()?viem.decodeEventLog({abi:d,...C}).eventName==="TokensWithdrawn":!1);if(lodash.isNil(T))return;if(viem.decodeEventLog({abi:d,eventName:"TokensWithdrawn",...T}).args.recipient.toLowerCase()===e.toLowerCase())return p},Ve=e=>lodash.isObject(e)&&viem.isHex(e.teleporterMessageID);var Ja=async(e,t)=>{let{bridgeTransfer:r}=t,{asset:n,amount:i,sourceChain:o,targetChain:s}=r,a=H({sourceChain:o,targetChain:s,asset:n,amount:i},e),m=h({chain:r.sourceChain}),c=h({chain:r.targetChain}),p=on({transferData:a}),u=pe({sourceClient:m,targetClient:c,getMetadata:p,checkMetadata:Ve,trackingParams:t,trackingConfig:x});return D({promise:u,delay:2e3,startAfter:x.initialDelayMs})},Za=async(e,t)=>{let{bridgeTransfer:r}=t,{targetChain:n,sourceChain:i,asset:o,amount:s,toAddress:a}=r,m=H({sourceChain:i,targetChain:n,asset:o,amount:s},e),c=h({chain:r.targetChain}),p=mn({transferData:m,targetClient:c,toAddress:a}),u=de({targetClient:c,getTargetTxHash:p,checkMetadata:Ve,trackingParams:t,trackingConfig:x});return D({promise:u,delay:2e3,startAfter:x.initialDelayMs})};function cn(e,t){let r,n=()=>{r?.();};return {result:(async()=>{let{updateListener:o}=t,{result:s,cancel:a}=await Ja(e,t);r=a;let m=await s,{result:c,cancel:p}=await Za(e,{updateListener:o,bridgeTransfer:m});return r=p,c})(),cancel:n}}async function pn(e,t){return H(t,e),1n}var ut={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 ei=zod.z.object({subnetName:zod.z.string(),subnetID:zod.z.string(),blockchainID:zod.z.string(),chainID:zod.z.number(),network:zod.z.string()}),un=zod.z.array(ei),ti=zod.z.object({PKey:zod.z.string(),SKey:zod.z.string(),orgID:zod.z.string(),bridgeID:zod.z.string(),tokenAddress:ee,tokenSymbol:zod.z.string(),tokenName:zod.z.string(),tokenDecimals:zod.z.number(),tokenHomeAddress:ee,tokenHomeChainID:zod.z.number(),tokenRemoteAddress:ee,tokenRemoteChainID:zod.z.number(),network:zod.z.string(),isRegisteredInBridgeApp:zod.z.enum(["Y","N"]),createdAt:zod.z.number(),updatedAt:zod.z.number()}),fn=zod.z.array(ti);var yn="0x253b2784c75e510dD0fF1da844684a1aC0aa5fcf",ln={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"},gn={chainID:43113,blockchainID:"yH8D7ThNJkxmtkuv2jgBa4P1Rn3Qpr4pPr7QYNfcdoS6k6HWp"};var ft=async e=>await(await fetch(e)).json();var ni=e=>e==="production"||e==="test",ri=e=>e.status==="fulfilled",ai=async(e,t)=>{let r=await ft(`${e}/chains`);return [t==="production"?Tn:gn,...un.parse(r)]},ii=async(e,t)=>(await Promise.allSettled(t.map(async n=>{let i=await ft(`${e}/chains/${n.chainID}/bridges`);return fn.parse(i)}))).filter(ri).flatMap(n=>n.value),Cn=async e=>{if(!ni(e))throw new N("ENVIRONMENT_NOT_SUPPORTED",`ICTT does not support ${e} environment`);try{let t=ln[e],r=await ai(t,e),n=await ii(t,r),i=[];return n.forEach(o=>{let s=r.find(({chainID:f})=>f===o.tokenHomeChainID);if(!s)return;let a=i.find(({homeChain:f})=>f.chainId===I.toString({namespace:"eip155",reference:String(s.chainID)}));a||(a={homeChain:{chainId:I.toString({namespace:"eip155",reference:String(s.chainID)}),blockchainId:viem.toHex(ut.decode(s.blockchainID))},erc20Bridges:[]},i.push(a));let m=a.erc20Bridges.find(({tokenHomeAddress:f})=>f===o.tokenHomeAddress);m||(m={baseToken:{address:o.tokenAddress,decimals:o.tokenDecimals,name:o.tokenName||o.tokenSymbol,symbol:o.tokenSymbol,type:"erc20"},remotes:[],teleporterAddress:yn,tokenHomeAddress:o.tokenHomeAddress,tokenHomeDecimals:o.tokenDecimals},a.erc20Bridges.push(m));let c=r.find(({chainID:f})=>f===o.tokenRemoteChainID);if(!c)return;let p=viem.toHex(ut.decode(c.blockchainID)),u=I.toString({namespace:"eip155",reference:String(o.tokenRemoteChainID)});m.remotes.find(({tokenRemoteAddress:f,remoteChain:{chainId:T}})=>f===o.tokenRemoteAddress&&T===u)||m.remotes.push({remoteChain:{chainId:u,blockchainId:p},tokenRemoteAddress:o.tokenRemoteAddress});}),i.map(o=>({...o,erc20Bridges:o.erc20Bridges.filter(s=>s.remotes.length>0)})).filter(o=>o.erc20Bridges.length>0)}catch(t){throw new N("CONFIG_NOT_AVAILABLE",`Error while fetching ICTT-ERC20-ERC20 config: ${t.message}`)}};var hn=async(e,t)=>{let{homeToRemote:r,tokenHomeConfig:{baseToken:n},tokenRemoteConfig:{tokenRemoteAddress:i}}=H(t,e),o={...n,address:r?i:n.address},a=(await ge(e,t))[t.targetChain.chainId]?.[n.address]??0n,m=t.amount-a;return {amount:m>=0n?m:0n,asset:o}};function En(e,t){for(let r of e)for(let n of r.erc20Bridges){let i=t.tokenTransfers.find(({symbol:c})=>c===n.baseToken.symbol);if(!i)continue;let o=viem.isAddressEqual(n.teleporterAddress,t.to),s=viem.isAddressEqual(t.from,n.tokenHomeAddress)||viem.isAddressEqual(i.from,n.tokenHomeAddress),a=viem.isAddressEqual(t.from,_)||viem.isAddressEqual(i.from,_);if(o&&(s||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 bn=async(e,t)=>{let r=await Cn(e);return {type:"ictt-erc20-erc20",analyzeTx:n=>{try{return En(r,le(n))}catch{return {isBridgeTx:!1}}},estimateGas:n=>Yt(r,J(n)),estimateReceiveAmount:n=>hn(r,J(n)),getAssets:()=>en(r),getFees:n=>ge(r,n),getMinimumTransferAmount:n=>pn(r,n),transferAsset:n=>an(r,Te(n),e,t),trackTransfer:n=>cn(r,n)}};var Ae=[{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 Le=[{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 oi(e){return e.toLowerCase().startsWith("tb1")||e.toLowerCase().startsWith("bc1")}function yt(e){if(!oi(e))return !1;try{return base.bech32.decode(e),!0}catch{return !1}}function we(e,t){return yt(e)?e.toLowerCase().startsWith(t?"bc":"tb"):!1}var Se=zod.z.string().refine(e=>viem.isAddress(e),e=>({message:`Invalid EVM address '${e}'`})).transform(e=>e),ci=zod.z.string().refine(e=>yt(e),e=>({message:`Invalid BTC address '${e}'`})),Ne=(i=>(i.AVALANCHE="avalanche",i.ETHEREUM="ethereum",i.BITCOIN="bitcoin",i.UNKNOWN="",i))(Ne||{}),Ce=zod.z.nativeEnum(Ne),pi=zod.z.object({tokenName:zod.z.string(),nativeNetwork:Ce,denomination:zod.z.number()}),di=pi.extend({nativeContractAddress:Se,wrappedContractAddress:Se,wrappedNetwork:Ce}),Bn=zod.z.object({disableFrontend:zod.z.boolean(),addressBlocklist:zod.z.array(zod.z.string())}),In=Bn.extend({assets:zod.z.record(zod.z.string(),di),networks:zod.z.record(Ce,zod.z.union([zod.z.number(),zod.z.undefined()])),walletAddresses:zod.z.record(Ce,Se)}),vn=zod.z.object({minimumConfirmations:zod.z.record(Ce,zod.z.optional(zod.z.number()))}),ui=vn.extend({unwrapFeeApproximation:zod.z.record(zod.z.string(),zod.z.string()),wrapFeeApproximation:zod.z.record(zod.z.string(),zod.z.string())}),Ue=zod.z.object({minimumFeeAmount:zod.z.string(),maximumFeeAmount:zod.z.string(),feePercentage:zod.z.number(),feePercentageDecimals:zod.z.number()}),fi=vn.extend({unwrapFeeApproximation:zod.z.record(zod.z.string(),Ue),wrapFeeApproximation:zod.z.record(zod.z.string(),Ue)}),yi=zod.z.object({critical:In,nonCritical:ui}),li=zod.z.object({critical:In,nonCritical:fi}),Ti=zod.z.object({tokenName:zod.z.string(),bech32AddressPrefix:zod.z.union([zod.z.literal("tb"),zod.z.literal("bc")]),wrappedContractAddress:Se,wrappedNetwork:Ce}),gi=Bn.extend({addressBlocklist:zod.z.array(zod.z.string()),avalancheChainId:zod.z.number(),bitcoinAssets:zod.z.record(zod.z.string(),Ti),walletAddresses:zod.z.object({btc:ci,avalanche:Se})}),Ai=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()})})}),Ci=zod.z.object({wrapFeeAmount:zod.z.number(),constUnwrapFeeAmount:zod.z.number(),unwrapFeeNumerator:zod.z.number(),unwrapFeeDenominator:zod.z.number(),dustThreshold:zod.z.number()}),hi=zod.z.object({minimumConfirmations:zod.z.number(),minimumOnboardSize:zod.z.number(),currentBridgeFeeEstimate:zod.z.union([Ai,Ci])}),Ei=zod.z.object({networkInfo:zod.z.record(zod.z.string(),hi).nullable()}),kn=zod.z.object({criticalBitcoin:gi,nonCriticalBitcoin:Ei}),bi=zod.z.intersection(li,kn),Bi=zod.z.intersection(yi,kn),xn=zod.z.union([bi,Bi]);var Ii=e=>"eip155:1"===e||"eip155:11155111"===e,lt=e=>Ii(e.chainId);var Re=e=>"eip155:43113"===e||"eip155:43114"===e,ze=e=>Re(e.chainId);var We=e=>e==="bip122:000000000019d6689c085ae165831e93"||e==="bip122:000000000933ea01ad0ee984209779ba";var wn=e=>e==="eip155:1"||e==="eip155:43114"||e==="bip122:000000000019d6689c085ae165831e93",je=e=>!wn(e),ne=e=>wn(e.chainId);var De={type:"native",name:"Ether",symbol:"ETH",decimals:18};var he=({destinations:e,...t})=>t;var ki=e=>({source:e.nativeTokenConfig.ethereumToken,target:e.nativeTokenConfig.avalancheToken,ethToAva:!0}),Sn=(e,t)=>{if(!j(t))throw new y("ASSET_NOT_SUPPORTED",`Wrong token type: ${t.type}`);return lodash.isEqual(e,he(t))},xi=(e,t)=>{if(!j(t))throw new y("ASSET_NOT_SUPPORTED",`Wrong token type: ${t.type}`);let r=e.ethereumTokens[t.address];if(!r||!Sn(r.token,t))throw new y("ASSET_NOT_SUPPORTED",`Unable to find matching ethereum token in config: ${t.symbol}`);let n=e.avalancheTokens[r.target.tokenAddress];if(!n)throw new y("ASSET_NOT_SUPPORTED",`Unable to get avalanche token in config: ${t.symbol}`);return {source:r,target:n,ethToAva:!0}},wi=(e,t)=>{if(!j(t))throw new y("ASSET_NOT_SUPPORTED",`Wrong token type: ${t.type}`);let r=e.avalancheTokens[t.address];if(!r||!Sn(r.token,t))throw new y("ASSET_NOT_SUPPORTED",`Unable to find matching avalanche token in config: ${t.symbol}`);let n=e.ethereumTokens[r.target.tokenAddress];if(!n)throw new y("ASSET_NOT_SUPPORTED",`Unable to get ethereum token in config: ${t.symbol}`);return {source:r,target:n,ethToAva:!1}},Si=(e,t)=>{let{reference:r}=I.toJSON(e.chainId),{reference:n}=I.toJSON(t.chainId);return [{source:1,target:43114},{source:43114,target:1},{source:11155111,target:43113},{source:43113,target:11155111}].some(({source:o,target:s})=>o.toString()===r&&s.toString()===n)},L=({sourceChain:e,targetChain:t,amount:r,asset:n},i)=>{if(e.chainId===t.chainId)throw new y("IDENTICAL_CHAINS_PROVIDED",`SourceChain and TargetChain need to be different network. But found the same chainId: ${e.chainId}`);if(!Si(e,t))throw new y("INVALID_PARAMS","SourceChain and TargetChain combination is not correct or the chains provided are not supported");if(r<=0n)throw new y("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");return ye(n)&&n.symbol===De.symbol&<(e)?ki(i):lt(e)?xi(i,n):wi(i,n)};async function Nn(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o,fromAddress:s}=t;if(!viem.isAddress(s))throw new y("INVALID_PARAMS",`Invalid fromAddress: ${s}`);let a=e.walletAddresses.ethereum,{source:m,ethToAva:c}=L({sourceChain:r,targetChain:n,asset:i,amount:o},e),p=h({chain:r}),u=0n;if(ye(i)&&c){u+=await p.estimateContractGas({address:m.token.address,abi:Le,functionName:"deposit",account:s});try{u+=await p.estimateContractGas({address:m.token.address,abi:S,functionName:"transfer",account:s,args:[a,o]});}catch{let d=viem.encodeFunctionData({abi:S,functionName:"transfer",args:[a,o]});u+=await p.estimateGas({data:d,account:s,to:a,value:o});}}else u=await p.estimateContractGas({address:m.token.address,abi:c?S:Ae,functionName:c?"transfer":"unwrap",account:s,args:c?[a,o]:[o,0]});return u}var fe=e=>{try{return Ue.parse(e),!0}catch{return !1}};var Di=(e,{max:t,min:r})=>e>t?t:e<r?r:e,Ee=(e,t)=>{let{minimumFeeAmount:r,maximumFeeAmount:n,feePercentage:i,feePercentageDecimals:o}=t,s=BigInt(r),a=BigInt(n),m=i/10**o/100,c=Number(e)*m,p=BigInt(Math.ceil(c));return Di(p,{min:s,max:a})};async function re(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o}=t,{source:s,target:a,ethToAva:m}=L({sourceChain:r,targetChain:n,asset:i,amount:o},e),c=m?s.wrapFeeApproximation:s.unwrapFeeApproximation;if(fe(c)){let u=Ee(o,c);return {[a.chainId]:{[a.token.address]:u}}}let p=c??0n;return {[a.chainId]:{[a.token.address]:p}}}async function Rn(e,t){let{target:r}=L(t,e),i=(await re(e,t))[r.chainId]?.[r.token.address]??0n,o=t.amount-i;return {asset:r.token,amount:o>=0n?o:0n}}function Dn(e){let t=Object.values(e.ethereumTokens).reduce((o,s)=>{if(s.token.symbol==="USDC")return o;let a=s.chainId,m=s.target.chainId,c={...s.token,destinations:{[m]:["avalanche-evm"]}},p=o[a]??[];return p.push(c),o[a]=p,o},{}),r=Object.values(e.avalancheTokens).reduce((o,s)=>{let a=s.chainId,m=s.target.chainId,c={...s.token,destinations:{[m]:["avalanche-evm"]}},p=o[a]??[];return p.push(c),o[a]=p,o},t),n="eip155:1";r[n]&&r[n].push({...De,destinations:{["eip155:43114"]:["avalanche-evm"]}});let i="eip155:11155111";return r[i]&&r[i].push({...De,destinations:{["eip155:43113"]:["avalanche-evm"]}}),r}var _n=3n;async function qe(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o}=t,{source:s,target:a,ethToAva:m}=L({sourceChain:r,targetChain:n,asset:i,amount:o},e),c=m?s.wrapFeeApproximation:s.unwrapFeeApproximation;if(fe(c)){let d=c.minimumFeeAmount;return BigInt(d)*_n}let u=(await re(e,t))[a.chainId]?.[a.token.address];if(u===void 0)throw new y("INVALID_PARAMS",`Unable to get static fee for ${i.symbol}`);return u*_n}var Xe=()=>e=>({transactionHash:e.transactionHash}),Pn=({params:{bridgeTransfer:{fromAddress:e}},transferData:{target:t,ethToAva:r},targetClient:n,config:i})=>async({fromBlock:o,toBlock:s,metadata:a})=>{if(!o)return;let m=t.token.address,c=r?_:i.walletAddresses.ethereum,p=r?void 0:{src:c,dst:e},u=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"},d=await n.getLogs({address:m,event:u,args:p,fromBlock:o,toBlock:s}),f=r?d.find(T=>Tt(T)&&T.args.originTxId===a?.transactionHash):d.at(-1);if(!lodash.isNil(f))return f.transactionHash},Tt=e=>Mi(e)?Object.keys(e.args).includes("originTxId"):!1,Mi=e=>Object.keys(e).includes("args"),_e=e=>lodash.isObject(e)&&viem.isHex(e.transactionHash);var Oi=async(e,t)=>{let{bridgeTransfer:r}=t,{targetChain:n,sourceChain:i,asset:o,amount:s}=r,a=L({sourceChain:i,targetChain:n,asset:o,amount:s},e),m=h({chain:r.targetChain}),c=Pn({params:t,transferData:a,targetClient:m,config:e}),p=de({targetClient:m,getTargetTxHash:c,checkMetadata:_e,trackingParams:t,trackingConfig:x});return D({promise:p,delay:1e3*30,startAfter:x.initialDelayMs})},Hi=async e=>{let{sourceChain:t,targetChain:r}=e.bridgeTransfer,n=h({chain:t}),i=h({chain:r}),o=Xe(),s=pe({sourceClient:n,targetClient:i,getMetadata:o,checkMetadata:_e,trackingParams:e,trackingConfig:x});return D({promise:s,delay:1e3*30,startAfter:x.initialDelayMs})};function Fn(e,t){let r,n=()=>{r?.();};return {result:(async()=>{let{bridgeTransfer:o,updateListener:s}=t,{result:a,cancel:m}=await Hi({bridgeTransfer:o,updateListener:s});r=m;let c=await a,{result:p,cancel:u}=await Oi(e,{updateListener:s,bridgeTransfer:c});return r=u,p})(),cancel:n}}var $e=async({amount:e,source:t,sourceChain:r,fromAddress:n,sign:i,onStepChange:o,gasSettings:s})=>{let a=h({chain:r}),m={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};o?.(m);let c=viem.encodeFunctionData({abi:Ae,functionName:"unwrap",args:[e,0n]}),p=await i({from:n,to:t.token.address,data:c,...s?{maxFeePerGas:s.price,maxPriorityFeePerGas:s.tip}:null,chainId:I.toEip155HexChainId(I.toJSON(r.chainId))},u=>a.sendRawTransaction({serializedTransaction:u}),m);return await a.waitForTransactionReceipt({hash:p}),p};var Mn={ethereum:"0x6b7a87899490EcE95443e979cA9485CBE7E71522",avalanche:"0x9b17bAADf0f21F03e35249e0e59723F34994F806"},Li=async({amount:e,config:t,source:r,sourceChain:n,fromAddress:i,sign:o,onStepChange:s,gasSettings:a})=>{let m=t.walletAddresses.ethereum,c=h({chain:n}),p={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};s?.(p);let u=viem.encodeFunctionData({abi:S,functionName:"transfer",args:[m,e]}),d=await o({from:i,to:r.token.address,data:u,...a?{maxFeePerGas:a.price,maxPriorityFeePerGas:a.tip}:null,chainId:I.toEip155HexChainId(I.toJSON(n.chainId))},f=>c.sendRawTransaction({serializedTransaction:f}),p);return await c.waitForTransactionReceipt({hash:d}),d},Ui=async({config:e,fromAddress:t,sourceChain:r,targetChain:n})=>{if(e.environment!=="production"&&!ne(r)&&!ne(n))return !1;let i=e.nativeTokenConfig.ethereumToken,o=e.nativeTokenConfig.avalancheToken;try{return await h({chain:r}).readContract({address:i.token.address,abi:S,functionName:"allowance",args:[t,Mn.ethereum]})!==0n?!0:await h({chain:n}).readContract({address:o.token.address,abi:S,functionName:"allowance",args:[t,Mn.avalanche]})!==0n}catch{return !1}},Gi=async({amount:e,config:t,fromAddress:r,source:n,sourceChain:i,targetChain:o,sign:s,onStepChange:a,gasSettings:m})=>{let c=t.walletAddresses.ethereum,p=h({chain:i});if(!ze(o))throw new y("INVALID_PARAMS","Invalid chain combinations");if(await Ui({config:t,fromAddress:r,sourceChain:i,targetChain:o}))throw new y("VULNERABLE_TOKEN_APPROVAL_ADDRESS","Address has vulnerable token approvals");let d={currentSignature:1,currentSignatureReason:"wrap-token",requiredSignatures:2};a?.(d);let f=viem.encodeFunctionData({abi:Le,functionName:"deposit"}),T=await s({from:r,to:n.token.address,value:e,data:f,...m?{maxFeePerGas:m.price,maxPriorityFeePerGas:m.tip}:null,chainId:I.toEip155HexChainId(I.toJSON(i.chainId))},A=>p.sendRawTransaction({serializedTransaction:A}),d);await p.waitForTransactionReceipt({hash:T});let g={currentSignature:2,currentSignatureReason:"tokens-transfer",requiredSignatures:2};a?.(g);let C=viem.encodeFunctionData({abi:S,functionName:"transfer",args:[c,e]}),b=await s({from:r,to:n.token.address,data:C,...m?{maxFeePerGas:m.price,maxPriorityFeePerGas:m.tip}:null,chainId:I.toEip155HexChainId(I.toJSON(i.chainId))},A=>p.sendRawTransaction({serializedTransaction:A}),g);return await p.waitForTransactionReceipt({hash:b}),b},On=async({amount:e,asset:t,config:r,fromAddress:n,source:i,sourceChain:o,targetChain:s,sign:a,onStepChange:m,gasSettings:c})=>ye(t)?Gi({amount:e,config:r,fromAddress:n,source:i,sourceChain:o,targetChain:s,sign:a,onStepChange:m,gasSettings:c}):Li({amount:e,config:r,source:i,sourceChain:o,fromAddress:n,sign:a,onStepChange:m,gasSettings:c});var be=(e,t)=>{let r=t.map(i=>i.toLowerCase()),n=e.find(i=>r.includes(i.toLowerCase()));if(n)throw new y("ADDRESS_IS_BLOCKED",n)};async function Hn(e,t,r){let{sourceChain:n,targetChain:i,asset:o,amount:s,fromAddress:a,toAddress:m,onStepChange:c,gasSettings:p}=t;if(a!==m)throw new y("INVALID_PARAMS","fromAddress and toAddress do not match");be([a,m],e.addressBlocklist);let u=await re(e,{asset:o,amount:s,sourceChain:n,targetChain:i}),{source:d,target:f,ethToAva:T}=L({sourceChain:n,targetChain:i,asset:o,amount:s},e),g=await qe(e,{asset:o,amount:s,sourceChain:n,targetChain:i});if(s<g)throw new y("INVALID_PARAMS",`Minimum transfer amount is ${g.toString()}`);let C=ze(n)?e.minimumConfirmations.avalanche:e.minimumConfirmations.ethereum,b=u[f.chainId]?.[f.token.address]??0n,A;T?A=await On({amount:s,asset:o,config:e,fromAddress:a,source:d,sourceChain:n,targetChain:i,sign:r.sign,onStepChange:c,gasSettings:p}):A=await $e({amount:s,fromAddress:a,source:d,sourceChain:n,sign:r.sign,onStepChange:c,gasSettings:p});let v=Date.now(),w=h({chain:t.targetChain}),M;try{M=await w.getBlockNumber();}catch(me){console.error(me);}return {type:"avalanche-evm",environment:e.environment,fromAddress:t.fromAddress,toAddress:t.toAddress,amount:t.amount,asset:o,bridgeFee:b,sourceChain:t.sourceChain,sourceStartedAt:v,sourceTxHash:A,sourceConfirmationCount:0,sourceRequiredConfirmationCount:C,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:M}}var Vn=(e,t)=>{let r=e.critical.assets,{ethereum:n,avalanche:i}=e.critical.networks;if(n===void 0||i===void 0)throw new N("WARDEN_CONFIG_MISSING_NETWORK","Critical networks info is missing from wardenConfig");let o=e.critical.walletAddresses.avalanche,s=e.critical.walletAddresses.ethereum;if(!o||!s)throw new N("CONFIG_NOT_AVAILABLE","Wallet address is missing from the critical config.");let a=Object.entries(r).reduce((T,[g,C])=>{let b={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:b,target:{chainId:`eip155:${i}`,tokenAddress:C.wrappedContractAddress},wrapFeeApproximation:fe(A)?A:A?BigInt(A):void 0},T},{}),m=Object.values(a).find(T=>T.token.symbol==="WETH");if(!m)throw new N("CONFIG_NOT_AVAILABLE","WETH info is missing from config");let c=Object.entries(r).reduce((T,[g,C])=>{let b={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:b,target:{chainId:`eip155:${n}`,tokenAddress:C.nativeContractAddress},unwrapFeeApproximation:fe(A)?A:A?BigInt(A):void 0},T},{}),p=c[m.target.tokenAddress];if(!p)throw new N("CONFIG_NOT_AVAILABLE","WETH.e info is missing from config");let u=e.nonCritical.minimumConfirmations.avalanche,d=e.nonCritical.minimumConfirmations.ethereum;if(!u||!d)throw new N("CONFIG_NOT_AVAILABLE","Minimum confirmation info is missing");return {addressBlocklist:e.critical.addressBlocklist,ethereumTokens:a,avalancheTokens:c,minimumConfirmations:{avalanche:u,ethereum:d},environment:t,walletAddresses:{avalanche:o,ethereum:s},nativeTokenConfig:{ethereumToken:m,avalancheToken:p}}};var Ln={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"]}},Un={...Ln,environment:"staging"},Gn={...Un,environment:"test",configMismatchThreshold:2,wardenConfigURLs:["https://warden-testnet.19bc5bfd-25de-4c8f-8c4c-5887a9e59ee7.net/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"]},zi={...Gn,environment:"production",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.json",wardenConfigURLs:["https://warden-mainnet.19bc5bfd-25de-4c8f-8c4c-5887a9e59ee7.net/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"]}},Wi={production:zi,staging:Un,test:Gn,dev:Ln},Ke=e=>Wi[e];var $i=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 o=await i.value.json(),s=xn.parse(o);n.push(s);}catch(o){console.error(o);}return n},Ki=e=>e.map(t=>{if(t.critical.disableFrontend)throw new N("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 $i(t),n=Ki(r),i=lodash.maxBy(n,o=>o.count);if(!i||i.count<e.wardenConfigURLs.length-e.configMismatchThreshold)throw new N("WARDEN_CONFIG_MISMATCH","Warden config mismatch");return i.config});var zn=async e=>{let t=Ke(e),r=await Je(t);return Vn(r,e)};function Wn(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 jn=async(e,t)=>{let r=await zn(e);return {type:"avalanche-evm",analyzeTx:n=>{try{return Wn(r,le(n))}catch{return {isBridgeTx:!1}}},estimateGas:n=>Nn(r,J(n)),estimateReceiveAmount:n=>Rn(r,J(n)),getAssets:()=>Dn(r),getFees:n=>re(r,n),transferAsset:n=>Hn(r,Te(n),t),trackTransfer:n=>Fn(r,n),getMinimumTransferAmount:n=>qe(r,n)}};var At=e=>"wrapFeeEstimate"in e,ae=e=>"wrapFeeEstimate"in e||"unwrapFeeEstimate"in e;var qn=(e,t)=>{let r=e.criticalBitcoin,n=r.bitcoinAssets.btc;if(!n)throw new N("CONFIG_NOT_AVAILABLE","Bitcoin asset info is missing from config");let i=e.nonCriticalBitcoin.networkInfo?.btc;if(!i)throw new N("CONFIG_NOT_AVAILABLE","Bitcoin network info was not found.");let o=i.currentBridgeFeeEstimate,s=At(o)?{wrapFeeEstimate:o.wrapFeeEstimate}:{wrapFeeAmount:o.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:s},c=At(o)?{unwrapFeeEstimate:o.unwrapFeeEstimate}:{constUnwrapFeeAmount:o.constUnwrapFeeAmount,unwrapFeeNumerator:o.unwrapFeeNumerator,unwrapFeeDenominator:o.unwrapFeeDenominator},p={chainId:`eip155:${r.avalancheChainId}`,token:{name:n.tokenName,symbol:"BTC.b",decimals:8,type:"erc20",address:n.wrappedContractAddress},target:{networkId:a},bridgeFeeEstimate:c};return {addressBlocklist:e.criticalBitcoin.addressBlocklist,environment:t,dustThreshold:o.dustThreshold,minimumOnboardSize:i.minimumOnboardSize,minimumConfirmations:{bitcoin:i.minimumConfirmations,avalanche:e.nonCritical.minimumConfirmations.avalanche??1},nativeTokenConfig:{bitcoinToken:m,avalancheToken:p},walletAddresses:{bitcoin:r.walletAddresses.btc,avalanche:r.walletAddresses.avalanche}}};var Qe=async e=>{try{let t=Ke(e),r=await Je(t);return qn(r,e)}catch{throw new N("CONFIG_NOT_AVAILABLE")}};function $n(e,t){let{chainId:r,from:n,to:i,tokenTransfers:o}=t,s=Re(r),a=We(r);if(!s&&!a)return {isBridgeTx:!1};let m=je(r),c=m?"eip155:43113":"eip155:43114",p=m?"bip122:000000000933ea01ad0ee984209779ba":"bip122:000000000019d6689c085ae165831e93",u=a&&lodash.isEqual(i.toLowerCase(),e.walletAddresses.bitcoin.toLowerCase())&&o.some(f=>f.symbol==="BTC");return s&&lodash.isEqual(n,e.walletAddresses.avalanche)&&o.some(f=>f.symbol==="BTC.b"&&f.from===_)||u?{isBridgeTx:!0,sourceChainId:p,targetChainId:c,bridgeType:"avalanche-btc-ava"}:{isBridgeTx:!1}}var Kn=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()}),Jn=zod.z.array(Kn);Kn.extend({script:zod.z.optional(zod.z.string())});var Ji=zod.z.object({address:zod.z.string(),value:zod.z.number()}),Zn=zod.z.array(Ji);function Qi(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 Ye(e,t,r,n,i,o){let s=Qi(i),a=[{address:e,value:Number(r)}],{inputs:m,outputs:c,fee:p}=Zi__default.default(s,a,n);if(typeof p!="number")throw new y("UNKNOWN","Unable to choose utxo properly");if(!m||!c||!c.length)return {fee:p};let u=await o.getScriptsForUtxos(m),d=Jn.parse(u),f=[c[0]],T=c[1];T&&f.push({address:t,value:T.value});let g=Zn.parse(f);return {inputs:d,outputs:g,fee:p}}var es=(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),ts=(e,t)=>lodash.isEqual(e,he(t)),U=(e,t)=>{let{sourceChain:r,targetChain:n,amount:i,asset:o}=e;if(!es(r,n))throw new y("INVALID_PARAMS","SourceChain and TargetChain combination is not valid");if(i<=0n)throw new y("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let s=t.nativeTokenConfig.bitcoinToken;if(!ts(s.token,o))throw new y("ASSET_NOT_SUPPORTED","Incorrect Asset was provided");return {source:s,target:t.nativeTokenConfig.avalancheToken,btcToAva:!0}};async function Qn(e,t,r){let{fromAddress:n,sourceChain:i,targetChain:o,asset:s,amount:a}=t;U({sourceChain:i,targetChain:o,asset:s,amount:a},e);let m=e.walletAddresses.bitcoin,c=1,{utxos:p}=await r.getUtxoBalance(n,!1),{fee:u}=await Ye(m,n,a,c,p,r);return BigInt(u)}async function ie(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:o}=t,{source:s,target:a}=U({sourceChain:r,targetChain:n,amount:i,asset:o},e);if(ae(s.bridgeFeeEstimate)){let m=Ee(i,s.bridgeFeeEstimate.wrapFeeEstimate);return {[a.chainId]:{[a.token.address]:m}}}return {[a.chainId]:{[a.token.address]:BigInt(s.bridgeFeeEstimate.wrapFeeAmount)}}}async function Yn(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o}=t,{target:s}=U({sourceChain:r,targetChain:n,asset:i,amount:o},e),m=(await ie(e,t))[s.chainId]?.[s.token.address]??0n,c=t.amount-m;return {asset:s.token,amount:c>=0n?c:0n}}function er(e){let t=e.nativeTokenConfig.bitcoinToken,r={...t.token,destinations:{[t.target.networkId]:["avalanche-btc-ava"]}};return {[t.chainId]:[r]}}async function tr(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:o}=t,s=U({sourceChain:r,targetChain:n,amount:i,asset:o},e),a=await ns(e,t,s),m=e.minimumOnboardSize;return BigInt(Math.max(a*4,m))}async function ns(e,t,{source:r,target:n}){if(ae(r.bridgeFeeEstimate))return Number(r.bridgeFeeEstimate.wrapFeeEstimate.minimumFeeAmount);{let i=await ie(e,t);return Number(i[n.chainId]?.[n.token.address])}}var nr=({targetClient:e,checkMetadata:t,trackingParams:{bridgeTransfer:r,updateListener:n},trackingConfig:{trackingLimitMs:i},bitcoinFunctions:o})=>{let s=lodash.cloneDeep(r);return async m=>{let{sourceTxHash:c}=r;if(s.completedAt||t(s.metadata))return m(s);if(s.sourceStartedAt+i<=Date.now())return s=E(s,{completedAt:Date.now(),errorCode:5004},n),m(s);let{confirmations:p,fees:u}=await o.getTransaction(c);if(!s.sourceNetworkFee){let T=BigInt(Math.ceil(u));s=E(s,{sourceNetworkFee:T},n);}let d=p>s.sourceConfirmationCount,f=p>=s.sourceRequiredConfirmationCount;if(d){let T={};T.sourceConfirmationCount=Number(p),f||(T.targetStartBlockNumber=await e.getBlockNumber()),s=E(s,T,n);}if(f)return s.targetStartBlockNumber||(s=E(s,{targetStartBlockNumber:await e.getBlockNumber()},n)),s=E(s,{targetStartedAt:Date.now(),metadata:{transactionHash:c}},n),m(s)}};var ir=({targetClient:e,getTargetTxHash:t,checkMetadata:r,trackingParams:{bridgeTransfer:n,updateListener:i},trackingConfig:{trackingLimitMs:o,maxBlocks:s}})=>{if(!n.completedAt&&!r(n.metadata))throw new y("INVALID_PARAMS","metadata is missing");if(!n.targetStartBlockNumber)throw new y("INVALID_PARAMS","targetStartBlockNumber is missing");let a=lodash.cloneDeep(n);return async c=>{if(a.completedAt)return c(a);if(a.sourceStartedAt+o<=Date.now())return a=E(a,{completedAt:Date.now(),errorCode:5004},i),c(a);if(!a.targetStartBlockNumber)throw new Error("unreachable");if(!a.targetTxHash){let T=await e.getBlockNumber(),g=a.targetStartBlockNumber-s,C=g>=0n?g:"earliest",b=a.targetStartBlockNumber+s,A=b<T?b:"latest",v=await t({fromBlock:C,toBlock:A,metadata:a.metadata});if(v)a=E(a,{targetTxHash:v},i);else {a=E(a,{targetStartBlockNumber:T},i);return}}if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let p=await e.getTransactionReceipt({hash:a.targetTxHash});if(!a.targetNetworkFee){let T=await e.getTransaction({hash:a.targetTxHash}),g=te(T,p);g&&(a=E(a,{targetNetworkFee:g},i));}if(p.status==="reverted")return a=E(a,{completedAt:Date.now(),errorCode:5005},i),c(a);if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let u=await e.getTransactionConfirmations({hash:a.targetTxHash}),d=u>a.targetConfirmationCount,f=u>=a.targetRequiredConfirmationCount;if(d&&(a=E(a,{targetConfirmationCount:Number(u)},i)),!!f)return a=E(a,{completedAt:Date.now()},i),c(a)}};var Ct=e=>lodash.isObject(e)&&!!e.transactionHash,sr=({transferData:{target:e},targetClient:t})=>async({fromBlock:r,toBlock:n,metadata:i})=>{if(!r)return;let o=e.token.address,s={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:o,event:s,fromBlock:r,toBlock:n})).find(c=>Tt(c)&&c.args.originTxId===`0x${i?.transactionHash}`);if(!lodash.isNil(m))return m.transactionHash};var os=async(e,t)=>{let{targetChain:r}=e.bridgeTransfer,n=h({chain:r}),i=nr({targetClient:n,trackingParams:e,trackingConfig:x,checkMetadata:Ct,bitcoinFunctions:t});return D({promise:i,delay:1e3*60,startAfter:x.initialDelayMs})},ms=async(e,t)=>{let{bridgeTransfer:r}=e,n=h({chain:r.targetChain}),i=sr({transferData:t,targetClient:n}),o=ir({targetClient:n,getTargetTxHash:i,checkMetadata:Ct,trackingParams:e,trackingConfig:x});return D({promise:o,delay:2e3,startAfter:x.initialDelayMs})};function or(e,t,r){let n,i=()=>{n?.();};return {result:(async()=>{let{bridgeTransfer:s}=t,{targetChain:a,sourceChain:m,asset:c,amount:p}=s,u=U({sourceChain:m,targetChain:a,asset:c,amount:p},e),{result:d,cancel:f}=await os(t,r);n=f;let T=await d,{result:g,cancel:C}=await ms({...t,bridgeTransfer:T},u);return n=C,g})(),cancel:i}}var mr=async({config:e,amount:t,fromAddress:r,sign:n,onStepChange:i,bitcoinFunctions:o,gasSettings:s})=>{let a=s?Number(s.price):void 0,{low:m,high:c}=a?{low:a,high:a}:await o.getFeeRates(),p=e.environment==="production"?c:m,{utxos:u}=await o.getUtxoBalance(r,!1),d=e.walletAddresses.bitcoin,{inputs:f,outputs:T}=await Ye(d,r,t,p,u,o);if(!f||!T)throw new y("INVALID_PARAMS","Unable to create transaction");let g={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};return i?.(g),await n({inputs:f,outputs:T},o.issueRawTx,g)};async function cr(e,t,r,n){let{fromAddress:i,toAddress:o,sourceChain:s,targetChain:a,asset:m,amount:c,onStepChange:p,gasSettings:u}=t;be([i,o],e.addressBlocklist);let{target:d}=U({sourceChain:s,targetChain:a,asset:m,amount:c},e),f=Date.now(),g=(await ie(e,{asset:m,amount:c,sourceChain:s,targetChain:a}))[d.chainId]?.[d.token.address]??0n,C=e.minimumConfirmations.bitcoin,b=await mr({config:e,amount:c,sign:r.sign,onStepChange:p,fromAddress:i,bitcoinFunctions:n,gasSettings:u}),A=h({chain:a}),v;try{v=await A.getBlockNumber();}catch(M){console.error(M);}return {type:"avalanche-btc-ava",environment:e.environment,fromAddress:i,toAddress:o,amount:t.amount,asset:m,bridgeFee:g,sourceChain:s,sourceStartedAt:f,sourceTxHash:b,sourceConfirmationCount:0,sourceRequiredConfirmationCount:C,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:v}}var pr=({fromAddress:e,toAddress:t,sourceChain:r,...n})=>{if(!viem.isAddress(t))throw new y("INCORRECT_ADDRESS_PROVIDED","Invalid toAddress was provided");let i=ne(r);if(!we(e,i))throw new y("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided: Make sure it is Btc Address from correct environment");return {fromAddress:e,toAddress:t,sourceChain:r,...n}},ht=({fromAddress:e,sourceChain:t,...r})=>{let n=ne(t);if(!we(e,n))throw new y("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided: Make sure it is Btc Address from correct environment");return {fromAddress:e,sourceChain:t,...r}};var dr=async(e,t,r)=>{let n=await Qe(e);return {type:"avalanche-btc-ava",analyzeTx:i=>$n(n,i),estimateGas:i=>Qn(n,ht(i),r),estimateReceiveAmount:i=>Yn(n,ht(i)),getAssets:()=>er(n),getFees:i=>ie(n,i),transferAsset:i=>cr(n,pr(i),t,r),trackTransfer:i=>or(n,i,r),getMinimumTransferAmount:i=>tr(n,i)}};function fr(e,t){let{chainId:r,from:n,to:i,tokenTransfers:o}=t,s=Re(r),a=We(r);if(!s&&!a)return {isBridgeTx:!1};let m=je(r),c=m?"eip155:43113":"eip155:43114",p=m?"bip122:000000000933ea01ad0ee984209779ba":"bip122:000000000019d6689c085ae165831e93",u=s&&lodash.isEqual(i.toLowerCase(),e.nativeTokenConfig.avalancheToken.token.address.toLowerCase())&&o.some(f=>f.to?.toLowerCase()===_.toLowerCase()&&f.symbol==="BTC.b"),d=a&&lodash.isEqual(n.toLowerCase(),e.walletAddresses.bitcoin.toLowerCase())&&o.some(f=>f.symbol==="BTC");return u||d?{isBridgeTx:!0,sourceChainId:c,targetChainId:p,bridgeType:"avalanche-ava-btc"}:{isBridgeTx:!1}}var ds=(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),us=(e,t)=>lodash.isEqual(e,he(t)),G=(e,t)=>{let{sourceChain:r,targetChain:n,amount:i,asset:o}=e;if(!ds(r,n))throw new y("INVALID_PARAMS","SourceChain and TargetChain combination is not valid");if(i<=0n)throw new y("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let s=t.nativeTokenConfig.avalancheToken;if(!us(s.token,o))throw new y("ASSET_NOT_SUPPORTED","Incorrect Asset was provided");return {source:s,target:t.nativeTokenConfig.bitcoinToken,btcToAva:!1}};async function yr(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o,fromAddress:s}=t,{source:a}=G({sourceChain:r,targetChain:n,asset:i,amount:o},e);return await h({chain:r}).estimateContractGas({address:a.token.address,abi:Ae,functionName:"unwrap",account:s,args:[o,0]})}async function se(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:o}=t,{source:s}=G({sourceChain:r,targetChain:n,amount:i,asset:o},e);if(ae(s.bridgeFeeEstimate)){let{constAmount:a,numeratorPerSat:m,denominatorPerSat:c}=s.bridgeFeeEstimate.unwrapFeeEstimate.estimatedTxFee,p=a+m/c*Number(i),u=Ee(i,s.bridgeFeeEstimate.unwrapFeeEstimate.bridgeToll),d=BigInt(Math.ceil(p))+u;return {[n.chainId]:{NATIVE:BigInt(d)}}}else {let{constUnwrapFeeAmount:a,unwrapFeeNumerator:m,unwrapFeeDenominator:c}=s.bridgeFeeEstimate,p=a+m/c*Number(i),u=BigInt(Math.ceil(p));return {[n.chainId]:{NATIVE:BigInt(u)}}}}async function lr(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o}=t,{target:s}=G({sourceChain:r,targetChain:n,asset:i,amount:o},e),m=(await se(e,{sourceChain:r,targetChain:n,amount:o,asset:i}))[s.chainId]?.NATIVE??0n,c=t.amount-m;return {asset:s.token,amount:c>=0n?c:0n}}function Tr(e){let t=e.nativeTokenConfig.avalancheToken,r={...t.token,destinations:{[t.target.networkId]:["avalanche-ava-btc"]}};return {[t.chainId]:[r]}}async function gr(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:o}=t,s=G({sourceChain:r,targetChain:n,amount:i,asset:o},e),a=await fs(e,t,s),m=e.dustThreshold;return BigInt(Math.ceil((a+m)*2))}async function fs(e,t,{source:r}){if(ae(r.bridgeFeeEstimate)){let{constAmount:n,numeratorPerSat:i,denominatorPerSat:o}=r.bridgeFeeEstimate.unwrapFeeEstimate.estimatedTxFee,s=n+i/o*Number(t.amount);return Number(r.bridgeFeeEstimate.unwrapFeeEstimate.bridgeToll.minimumFeeAmount)+s}else {let n=await se(e,t);return Number(n[t.targetChain.chainId]?.NATIVE)}}var Cr=({sourceClient:e,getMetadata:t,checkMetadata:r,trackingParams:{bridgeTransfer:n,updateListener:i},trackingConfig:{trackingLimitMs:o},bitcoinFunctions:s})=>{let a=lodash.cloneDeep(n);return async c=>{if(a.completedAt||r(a.metadata))return c(a);if(a.sourceStartedAt+o<=Date.now())return a=E(a,{completedAt:Date.now(),errorCode:5004},i),c(a);if(!viem.isHash(a.sourceTxHash))return;let p=await e.getTransactionReceipt({hash:a.sourceTxHash});if(!a.sourceNetworkFee){let g=await e.getTransaction({hash:a.sourceTxHash}),C=te(g,p);C&&(a=E(a,{sourceNetworkFee:C},i));}if(p.status==="reverted")return a=E(a,{completedAt:Date.now(),errorCode:5005},i),c(a);if(!viem.isHash(a.sourceTxHash))return;let u=await e.getTransactionConfirmations({hash:a.sourceTxHash}),d=u>a.sourceConfirmationCount,f=u>=a.sourceRequiredConfirmationCount;if(d){let g={};g.sourceConfirmationCount=Number(u),f||(g.targetStartBlockNumber=BigInt(await s.getChainHeight())),a=E(a,g,i);}if(!f)return;a.targetStartBlockNumber||(a=E(a,{targetStartBlockNumber:BigInt(await s.getChainHeight())},i));let T=t(p);return a=E(a,{targetStartedAt:Date.now(),metadata:T},i),c(a)}};var hr=({trackingParams:{bridgeTransfer:e,updateListener:t},trackingConfig:{trackingLimitMs:r},config:n,bitcoinFunctions:i})=>{let{toAddress:o,targetStartBlockNumber:s,amount:a}=e;if(!e.targetStartBlockNumber)throw new y("INVALID_PARAMS","targetStartBlockNumber is missing");let m=lodash.cloneDeep(e);return async p=>{if(m.completedAt)return p(m);if(m.sourceStartedAt+r<=Date.now())return m=E(m,{completedAt:Date.now(),errorCode:5004},t),p(m);if(!m.targetStartBlockNumber)throw new Error("unreachable");let u;if(!m.targetTxHash){let{confirmed:f,unconfirmed:T}=await i.getUTXOs(o,!1),C=[...f.filter(b=>!s||b.blockHeight>=s).sort((b,A)=>b.blockHeight-A.blockHeight),...T];for(let b of C){if(u=await i.getTransaction(b.txHash),!u)return;if(u.addresses.includes(n.walletAddresses.bitcoin)){m=E(m,{targetTxHash:u.hash,targetNetworkFee:BigInt(u.fees),targetConfirmationCount:u.confirmations},t);let v=u.outputs.find(M=>M.addresses?.length===1&&M.addresses[0]===o),w=v&&BigInt(Math.ceil(Number(a)-v.value));w&&(m=E(m,{bridgeFee:w},t));break}}if(!m.targetTxHash)return}if(u||(u=await i.getTransaction(m.targetTxHash)),!u)return;if(u.confirmations>=m.targetRequiredConfirmationCount)return m=E(m,{completedAt:Date.now(),targetConfirmationCount:u.confirmations},t),p(m)}};var Ts=async(e,t)=>{let{sourceChain:r}=e.bridgeTransfer,n=h({chain:r}),i=Xe(),o=Cr({sourceClient:n,getMetadata:i,checkMetadata:_e,trackingParams:e,trackingConfig:x,bitcoinFunctions:t});return D({promise:o,delay:2e3,startAfter:x.initialDelayMs})},gs=async(e,t,r)=>{let n=hr({trackingParams:t,trackingConfig:x,config:e,bitcoinFunctions:r});return D({promise:n,delay:1e3*60,startAfter:x.initialDelayMs})};function Er(e,t,r){let n,i=()=>{n?.();};return {result:(async()=>{let{bridgeTransfer:s}=t,{targetChain:a,sourceChain:m,asset:c,amount:p}=s;G({sourceChain:m,targetChain:a,asset:c,amount:p},e);let{result:u,cancel:d}=await Ts(t,r);n=d;let f=await u,{result:T,cancel:g}=await gs(e,{...t,bridgeTransfer:f},r);return n=g,T})(),cancel:i}}async function br(e,t,r,n){let{sourceChain:i,targetChain:o,asset:s,amount:a,fromAddress:m,toAddress:c,onStepChange:p,gasSettings:u}=t;be([m,c],e.addressBlocklist);let{source:d}=G({sourceChain:i,targetChain:o,asset:s,amount:a},e),f=Date.now(),g=(await se(e,{asset:s,amount:a,sourceChain:i,targetChain:o}))[o.chainId]?.NATIVE??0n,C=e.minimumConfirmations.avalanche,b=await $e({amount:a,source:d,sourceChain:i,fromAddress:m,sign:r.sign,onStepChange:p,gasSettings:u}),A=BigInt(await n.getChainHeight());return {type:"avalanche-ava-btc",environment:e.environment,fromAddress:m,toAddress:c,amount:t.amount,asset:s,bridgeFee:g,sourceChain:i,sourceStartedAt:f,sourceTxHash:b,sourceConfirmationCount:0,sourceRequiredConfirmationCount:C,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:A}}var Ir=({fromAddress:e,toAddress:t,targetChain:r,...n})=>{if(!viem.isAddress(e))throw new y("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided");let i=ne(r);if(!we(t,i))throw new y("INCORRECT_ADDRESS_PROVIDED","Invalid toAddress was provided: Make sure it is Btc Address from correct environment");return {fromAddress:e,toAddress:t,targetChain:r,...n}},Et=({fromAddress:e,targetChain:t,...r})=>{if(!viem.isAddress(e))throw new y("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided");return {fromAddress:e,targetChain:t,...r}};var vr=async(e,t,r)=>{let n=await Qe(e);return {type:"avalanche-ava-btc",analyzeTx:i=>fr(n,i),estimateGas:i=>yr(n,Et(i)),estimateReceiveAmount:i=>lr(n,Et(i)),getAssets:()=>Tr(n),getFees:i=>se(n,i),transferAsset:i=>br(n,Ir(i),t,r),trackTransfer:i=>Er(n,i,r),getMinimumTransferAmount:i=>gr(n,i)}};var bt="core",kr=6,tt=1,nt={dev:sdk.Env.dev,test:sdk.Env.ibc,staging:sdk.Env.stage,production:sdk.Env.prod},xr=2e-4,As=6,wr=e=>{switch(e){case"lombard-btcb-to-btc":return As;default:return}};var Be={type:"native",name:"Bitcoin",symbol:"BTC",decimals:8},Cs={[sdk.Env.dev]:{43113:"0x7FbdC44BfEBDe80C970ba622B678daB36cee31f6"},[sdk.Env.ibc]:{43113:"0x71ba2b8dc58e7ca1b6d81a60729e31aefa37ae02"},[sdk.Env.stage]:{43113:"0x7FbdC44BfEBDe80C970ba622B678daB36cee31f6"},[sdk.Env.testnet]:{43113:"0xB14f240714Bd23Bda103A7189D512A90326E4D01"},[sdk.Env.prod]:{43114:"0x152b9d0FdC40C096757F570A51E494bd4b943E50"}},Sr={[sdk.Env.dev]:{43113:"0x0A65C37d07c32E5eA8ea40495b7f249cdE26935e"},[sdk.Env.ibc]:{43113:"0x1391f9AC408cf13214DDB71d359002658eaF9ebb"},[sdk.Env.stage]:{43113:"0x0A65C37d07c32E5eA8ea40495b7f249cdE26935e"},[sdk.Env.testnet]:{43113:"0x41BCd71e7C92b1c8dDe53037F9b2c4AA2058b1cB"},[sdk.Env.prod]:{43114:"0x85D1D52e11290F174444d21C2a167bEDBE36e4d2"}},rt=(e,t)=>{let r=Cs[t]?.[e];if(!r)throw new Error(`No BTCb address configured for env: ${t}, chainId: ${e}`);return {type:"erc20",name:"Bitcoin",symbol:"BTC.b",decimals:8,address:r}};async function at(e,t,r){let[n,i,o]=await Promise.all([sdk.getMintingFee({token:e,chainId:t,env:r}),sdk.getRedeemFee({token:e,chainId:t,env:r}),sdk.getMinRedeemAmount({token:e,chainId:t,env:r})]);return {mintingFee:BigInt(sdk.toBaseDenomination(n,8).toFixed()),redeemFee:BigInt(sdk.toBaseDenomination(i,8).toFixed()),minRedeemAmount:BigInt(sdk.toBaseDenomination(o,8).toFixed())}}function Ie(e){let{namespace:t,reference:r}=I.toJSON(e);if(t!=="eip155")throw new Error("Invalid namespace provided.");return Number(r)}function Nr(e,t){return {isBridgeTx:!1}}var Rr=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()}),Dr=zod.z.array(Rr);Rr.extend({script:zod.z.optional(zod.z.string())});var Bs=zod.z.object({address:zod.z.string(),value:zod.z.number()}),_r=zod.z.array(Bs);function vs(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 it(e,t,r,n,i,o){let s=vs(i),a=[{address:e,value:Number(r)}],{inputs:m,outputs:c,fee:p}=Zi__default.default(s,a,n);if(typeof p!="number")throw new y("UNKNOWN","Unable to choose utxo properly");if(!m||!c||!c.length)return {fee:p};let u=await o.getScriptsForUtxos(m),d=Dr.parse(u),f=[c[0]],T=c[1];T&&f.push({address:t,value:T.value});let g=_r.parse(f);return {inputs:d,outputs:g,fee:p}}var ks="bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq",xs="tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx";async function Pr(e,t,r){let{fromAddress:n,amount:i}=t,s=e.sourceChain==="bip122:000000000019d6689c085ae165831e93"?ks:xs,a=1,{utxos:m}=await r.getUtxoBalance(n,!1),{fee:c}=await it(s,n,i,a,m,r);return BigInt(c)}async function Fr(e,t){return {asset:e.targetAsset,amount:t.amount-e.mintingFee}}function Mr(e){return {[e.sourceChain]:[{...Be,destinations:{[e.targetChain]:["lombard-btc-to-btcb"]}}]}}async function Or(e,t){return {[e.targetChain]:{[e.targetAsset.address]:e.mintingFee}}}async function Hr(e,t){return BigInt(sdk.toBaseDenomination(xr,Be.decimals).toFixed())}var Vr=e=>e.notarizationStatus===sdk.ENotarizationStatus.NOTARIZATION_STATUS_FAILED||e.sessionState===sdk.ESessionState.SESSION_STATE_EXPIRED,Lr=(e,t,r)=>{let n=t!==void 0&&e?.notarizationStatus!==t,i=r!==void 0&&e?.sessionState!==r;return {needsNotarizationUpdate:n,needsSessionStateUpdate:i}};var Gr=(e,t,r)=>({bridgeTransfer:n,updateListener:i})=>{let o=()=>{},s=h({chain:n.targetChain}),a=lodash.cloneDeep(n);return {cancel:o,result:(async()=>{if(a.completedAt)return a;let{confirmations:c,fees:p}=await t.getTransaction(a.sourceTxHash);if(a.sourceNetworkFee||(a=E(a,{sourceNetworkFee:BigInt(Math.ceil(p))},i)),c>a.sourceConfirmationCount&&(a=E(a,{sourceConfirmationCount:c},i)),c>a.sourceRequiredConfirmationCount){let f=await s.getBlockNumber();a=E(a,{targetStartBlockNumber:f},i);}let d=(await sdk.getDepositsByAddress({address:a.toAddress,env:r})).find(f=>f.txHash.toLowerCase()===a.sourceTxHash.toLowerCase());if(d){let f=d.claimTxHash,T,g,C,{needsNotarizationUpdate:b,needsSessionStateUpdate:A}=Lr(a.metadata,d.notarizationStatus,d.sessionState);if(b||A){let v={...a.metadata};b&&(v.notarizationStatus=d.notarizationStatus),A&&(v.sessionState=d.sessionState),a=E(a,{metadata:v},i);}if(Vr(d)&&(a=E(a,{completedAt:Date.now(),errorCode:5006},i)),f){let v=await s.waitForTransactionReceipt({hash:f});T=BigInt(v.gasUsed??0n)*BigInt(v.effectiveGasPrice??0n),g=Number(await s.getTransactionConfirmations({transactionReceipt:v}));let{timestamp:w}=await s.getBlock({blockNumber:v.blockNumber});C=Number(w),a=E(a,{targetTxHash:f,targetNetworkFee:T,targetConfirmationCount:g,completedAt:C},i);}}return a})()}},zr=(e,t,r)=>({bridgeTransfer:n,updateListener:i})=>{let o=()=>{},s=h({chain:n.sourceChain}),a=lodash.cloneDeep(n);return {cancel:o,result:(async()=>{if(a.completedAt)return a;let c=await s.waitForTransactionReceipt({hash:a.sourceTxHash}),p=Number(await s.getTransactionConfirmations({transactionReceipt:c}));if(p>a.sourceConfirmationCount&&(a=E(a,{sourceConfirmationCount:p},i)),!a.sourceNetworkFee){let f=BigInt(c.gasUsed??0n)*BigInt(c.effectiveGasPrice??0n);a=E(a,{sourceNetworkFee:f},i);}let d=(await sdk.getUnstakesByAddress({address:a.fromAddress,env:r})).find(f=>f.txHash.toLowerCase()===a.sourceTxHash.toLowerCase());if(d&&d.payoutTxHash&&(a=E(a,{targetTxHash:d.payoutTxHash},i)),a.targetTxHash){let T=(await t.getTransaction(a.targetTxHash)).confirmations;T>a.targetConfirmationCount&&(a=E(a,{targetConfirmationCount:T},i)),T>=a.targetRequiredConfirmationCount&&(a=E(a,{completedAt:Date.now()},i));}return a})()}};var _s=1e3*30;function Wr(e,t,r){let n=Gr("lombard-btc-to-btcb",r,e.env);return D({promise:(o=>{let s=o.bridgeTransfer;return async a=>{let{result:m}=n({...o,bridgeTransfer:s});if(s=await m,s.completedAt)return a(s)}})(t),delay:_s,startAfter:x.initialDelayMs})}function Fs(e){return e.toLowerCase().startsWith("tb1")||e.toLowerCase().startsWith("bc1")}function Ms(e){if(!Fs(e))return !1;try{return base.bech32.decode(e),!0}catch{return !1}}function Pe(e,t){return Ms(e)?e.toLowerCase().startsWith(t?"bc":"tb"):!1}async function jr(e,t,{evmSigner:r,btcSigner:n,bitcoinFunctions:i}){let o=h({chain:t.targetChain});if(!Pe(t.fromAddress,e.environment==="production"))throw new y("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided: Make sure it is Btc Address from correct environment");let s=t.toAddress,a=Ie(t.targetChain.chainId),m;try{m=await sdk.getDepositBtcAddress({address:s,chainId:a,partnerId:bt,env:e.env,token:e.targetToken});}catch{}let c=m?1:2,p={currentSignature:1,currentSignatureReason:m?"tokens-transfer":"address-ownership",requiredSignatures:c};if(!m){let w=`destination chain id is ${a}`,M=await r.signMessage({message:w,address:s,chainId:a},me=>o.sendRawTransaction({serializedTransaction:me}),p);if(p.currentSignature=2,p.currentSignatureReason="tokens-transfer",m=await sdk.generateDepositBtcAddress({token:e.targetToken,address:s,chainId:a,signature:M,partnerId:bt,env:e.env}),m===sdk.SANCTIONED_ADDRESS)throw new y("ADDRESS_IS_BLOCKED",m)}if(!Pe(m,e.environment==="production"))throw new y("INCORRECT_ADDRESS_PROVIDED","Generated deposit address (toAddress) is invalid");let{low:u,high:d}=await i.getFeeRates(),f=e.environment==="production"?d:u,{utxos:T}=await i.getUtxoBalance(t.fromAddress,!1),{inputs:g,outputs:C}=await it(m,t.fromAddress,t.amount,f,T,i);if(!g||!C)throw new y("INVALID_PARAMS","Unable to create transaction");let b=Date.now();t?.onStepChange?.(p);let A=await n.sign({inputs:g,outputs:C},i.issueRawTx,p),v;try{v=await h({chain:t.targetChain}).getBlockNumber();}catch{}return {type:"lombard-btc-to-btcb",environment:e.environment,fromAddress:t.fromAddress,toAddress:t.toAddress,amount:t.amount,asset:t.asset,bridgeFee:0n,sourceChain:t.sourceChain,sourceStartedAt:b,sourceTxHash:A,sourceConfirmationCount:0,sourceRequiredConfirmationCount:kr,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:tt,targetStartBlockNumber:v}}var Xr=async(e,t,r,n)=>{let i=nt[e],o=i===sdk.Env.prod?"bip122:000000000019d6689c085ae165831e93":"bip122:000000000933ea01ad0ee984209779ba",s=i===sdk.Env.prod?"eip155:43114":"eip155:43113",a=Ie(s),m=sdk.Token.BTCb,c=rt(a,i),p=await at(m,a,i),u={environment:e,env:i,sourceChain:o,targetChain:s,targetChainId:a,targetAsset:c,targetToken:m,mintingFee:p.mintingFee};return {type:"lombard-btc-to-btcb",analyzeTx:d=>Nr(),estimateGas:d=>Pr(u,d,n),estimateReceiveAmount:d=>Fr(u,d),getAssets:()=>Mr(u),getFees:d=>Or(u),transferAsset:d=>jr(u,d,{evmSigner:t,btcSigner:r,bitcoinFunctions:n}),trackTransfer:d=>Wr(u,d,n),getMinimumTransferAmount:d=>Hr()}};function $r(e,t){let{chainId:r,tokenTransfers:n}=t;if(r!==e.sourceChain)return {isBridgeTx:!1};if(n.some(o=>o.symbol===e.sourceAsset.symbol&&o.to&&viem.isAddressEqual(o.to,_))){let o=r==="eip155:43113";return {isBridgeTx:!0,bridgeType:"lombard-btcb-to-btc",sourceChainId:r,targetChainId:o?"bip122:000000000933ea01ad0ee984209779ba":"bip122:000000000019d6689c085ae165831e93"}}return {isBridgeTx:!1}}var zs=60000n,Kr=300000n;async function Jr(e,t){let{fromAddress:r,amount:n}=t;if(!viem.isAddress(r))throw new y("INVALID_PARAMS",`Invalid fromAddress: ${r}`);return await h({chain:t.sourceChain}).readContract({address:e.sourceAsset.address,abi:S,functionName:"allowance",args:[r,e.adapterAddress]})>=n?Kr:zs+Kr}async function Zr(e,t){return {asset:e.targetAsset,amount:t.amount-e.redeemFee}}function Qr(e){return {[e.sourceChain]:[{...e.sourceAsset,destinations:{[e.targetChain]:["lombard-btcb-to-btc"]}}]}}async function Yr(e,t){return {[e.targetChain]:{NATIVE:e.redeemFee}}}async function ea(e,t){return e.minRedeemAmount+e.redeemFee}var Ws=1e3*60;function ta(e,t,r){let n=zr("lombard-btcb-to-btc",r,e.env);return D({promise:(o=>{let s=o.bridgeTransfer;return async a=>{let{result:m}=n({...o,bridgeTransfer:s});if(s=await m,s.completedAt)return a(s)}})(t),delay:Ws,startAfter:x.initialDelayMs})}function na(e){return {sign:async(t,r)=>{let n={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};return e.sign(t,r,n)}}}async function ra(e,t,{evmSigner:r,bitcoinFunctions:n}){if(!Pe(t.toAddress,e.environment==="production"))throw new y("INCORRECT_ADDRESS_PROVIDED","Invalid toAddress was provided: Make sure it is Btc Address from correct environment");let i=await sdk.redeemToken({account:t.fromAddress,btcAddress:t.toAddress,amount:sdk.fromBaseDenomination(Number(t.amount),e.sourceAsset.decimals),chainId:e.sourceChainId,signer:na(r),tokenIn:sdk.Token.BTCb,tokenOut:void 0,env:e.env}),o=Date.now(),s;try{s=BigInt(await n.getChainHeight());}catch{}return {type:"lombard-btcb-to-btc",environment:e.environment,fromAddress:t.fromAddress,toAddress:t.toAddress,amount:t.amount,asset:t.asset,bridgeFee:e.redeemFee,sourceChain:t.sourceChain,sourceStartedAt:o,sourceTxHash:i,sourceConfirmationCount:0,sourceRequiredConfirmationCount:tt,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:s}}var ia=async(e,t,r,n)=>{let i=nt[e],o=i===sdk.Env.prod?"eip155:43114":"eip155:43113",s=i===sdk.Env.prod?"bip122:000000000019d6689c085ae165831e93":"bip122:000000000933ea01ad0ee984209779ba",a=Ie(o),m=rt(a,i),c=Sr[i]?.[a];if(!c)throw new Error(`No BTCb adapter address configured for env: ${i}, chainId: ${a}`);let p=await at(sdk.Token.BTCb,a,i),u={environment:e,env:i,sourceChain:o,targetChain:s,sourceChainId:a,sourceAsset:m,adapterAddress:c,targetAsset:Be,redeemFee:p.redeemFee,minRedeemAmount:p.minRedeemAmount};return {type:"lombard-btcb-to-btc",analyzeTx:d=>$r(u,d),estimateGas:d=>Jr(u,d),estimateReceiveAmount:d=>Zr(u,d),getAssets:()=>Qr(u),getFees:d=>Yr(u),transferAsset:d=>ra(u,d,{evmSigner:t,bitcoinFunctions:n}),trackTransfer:d=>ta(u,d,n),getMinimumTransferAmount:d=>ea(u)}};var st={"avalanche-btc-ava":dr,"avalanche-ava-btc":vr,"avalanche-evm":jn,cctp:Zt,"ictt-erc20-erc20":bn,"lombard-btc-to-btcb":Xr,"lombard-btcb-to-btc":ia},Js=async(e,t)=>{let r=await Promise.allSettled(t.map(async n=>{if(It(n)){let o=st[n.type];return [n.type,await o(e,n.evmSigner,n.btcSigner,n.bitcoinFunctions)]}if(vt(n)){let o=st[n.type];return [n.type,await o(e,n.signer,n.bitcoinFunctions)]}if(kt(n)){let o=st[n.type];return [n.type,await o(e,n.signer,n.bitcoinFunctions)]}let i=st[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)))},oe=(e,t,r)=>{let n=t.destinations[r];for(let i of n??[]){let o=e.get(i);if(o)return {bridge:o,type:i}}throw new Me};var ZC=({environment:e,enabledBridgeServices:t})=>({canTransferAsset:(d,f)=>{try{return oe(t,d,f),!0}catch{return !1}},environment:e,estimateGas:async d=>{let{bridge:f}=oe(t,d.asset,d.targetChain.chainId);return f.estimateGas(d)},estimateReceiveAmount:async d=>{let{bridge:f}=oe(t,d.asset,d.targetChain.chainId);return f.estimateReceiveAmount(d)},getAssets:()=>Array.from(t.values()).map(f=>f.getAssets()).reduce((f,T)=>{for(let[g,C]of Object.entries(T)){let b=f[g];if(b)for(let A of C){let v=b.findIndex(({symbol:w})=>w===A.symbol);v===-1?b.push(A):lodash.mergeWith(b[v],A,(w,M)=>{if(lodash.isArray(w))return [...new Set(w.concat(M))]});}else f[g]=C;}return f},{}),getFees:async d=>{let{bridge:f}=oe(t,d.asset,d.targetChain.chainId);return f.getFees(d)},analyzeTx:d=>{let f=["avalanche-ava-btc","avalanche-btc-ava","avalanche-evm","ictt-erc20-erc20","cctp"].map(T=>t.get(T)).filter(T=>!!T);for(let T of f){let g=T.analyzeTx(d);if(g.isBridgeTx)return g}return {isBridgeTx:!1}},getMinimumTransferAmount:async d=>{let{bridge:f}=oe(t,d.asset,d.targetChain.chainId);return f.getMinimumTransferAmount(d)},trackTransfer:d=>{let{bridge:f}=oe(t,d.bridgeTransfer.asset,d.bridgeTransfer.targetChain.chainId);return f.trackTransfer(d)},transferAsset:async d=>{let{bridge:f}=oe(t,d.asset,d.targetChain.chainId);return f.transferAsset(d)}});
|
|
17
17
|
|
|
18
18
|
exports.AVALANCHE_FUJI_CHAIN = ao;
|
|
19
19
|
exports.AVALANCHE_MAINNET_CHAIN = io;
|