@avalabs/bridge-unified 0.0.0-license-20240801163452 → 0.0.0-tmp-lombard-sdk-integration-20251210211743

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 CHANGED
@@ -1,18 +1,46 @@
1
1
  'use strict';
2
2
 
3
- var viem = require('viem');
4
3
  var lodash = require('lodash');
4
+ var viem = require('viem');
5
+ var zod = require('zod');
6
+ var base = require('@scure/base');
7
+ var sha256 = require('@noble/hashes/sha256');
8
+ var utils = require('@noble/hashes/utils');
9
+ var Ji = require('coinselect');
10
+ var sdk = require('@lombard.experimental/sdk');
11
+
12
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
+
14
+ var Ji__default = /*#__PURE__*/_interopDefault(Ji);
5
15
 
6
- var H=(r=>(r.NATIVE="native",r.ERC20="erc20",r))(H||{});var E=(e=>(e.CCTP="cctp",e))(E||{}),G=(r=>(r.AllowanceApproval="allowance-approval",r.TokensTransfer="tokens-transfer",r))(G||{});var K=(r=>(r.PROD="production",r.TEST="test",r))(K||{});var B=(t=>(t[t.BRIDGE_NOT_AVAILABLE=5001]="BRIDGE_NOT_AVAILABLE",t[t.INITIALIZATION_FAILED=5002]="INITIALIZATION_FAILED",t[t.INVALID_PARAMS=5003]="INVALID_PARAMS",t[t.TIMEOUT=5004]="TIMEOUT",t[t.TRANSACTION_REVERTED=5005]="TRANSACTION_REVERTED",t))(B||{}),w=(a=>(a.UNKNOWN="UNKNOWN",a.CONFIG_NOT_AVAILABLE="CONFIG_NOT_AVAILABLE",a.INVALID_PARAMS="INVALID_PARAMS",a.IDENTICAL_CHAINS_PROVIDED="IDENTICAL_CHAINS_PROVIDED",a.INCORRECT_AMOUNT_PROVIDED="INCORRECT_AMOUNT_PROVIDED",a.INCORRECT_ADDRESS_PROVIDED="INCORRECT_ADDRESS_PROVIDED",a.CHAIN_NOT_SUPPORTED="CHAIN_NOT_SUPPORTED",a.ASSET_NOT_SUPPORTED="ASSET_NOT_SUPPORTED",a.CONFIRMATION_COUNT_UNKNOWN="CONFIRMATION_COUNT_UNKNOWN",a))(w||{});async function $(n){let e=n.map(r=>r.chainId);return n.reduce((r,s)=>(r[s.chainId]=s.tokens.map(i=>({...i,type:"erc20",destinations:e.reduce((t,o)=>(s.chainId!==o&&(t[o]||(t[o]=[]),t[o]?.push("cctp")),t),{})})),r),{})}var ue="^[-a-z0-9]{3,8}$",de="^[-_a-zA-Z0-9]{1,50}$",q=":",me=n=>{let[e,r]=n.split(q);if(!e||!r)throw new Error("Invalid identifier provided.");if(!new RegExp(ue).test(e))throw new Error("Invalid namespace provided.");if(!new RegExp(de).test(r))throw new Error("Invalid reference provided.");return {namespace:e,reference:r}},ce=({namespace:n,reference:e})=>`${n}${q}${e}`,M={toJSON:me,toString:ce};var ge=n=>{let{reference:e}=M.toJSON(n.chainId);return {id:Number(e),name:n.chainName,nativeCurrency:{decimals:n.networkToken.decimals,symbol:n.networkToken.symbol,name:n.networkToken.name},network:n.chainName,rpcUrls:{default:{http:[n.rpcUrl]},public:{http:[n.rpcUrl]}},...n.utilityAddresses?.multicall&&{contracts:{multicall3:{address:n.utilityAddresses.multicall}}}}},b=({chain:n,provider:e})=>{let r=ge(n),s=e?viem.custom(e):viem.http(n.rpcUrl,{batch:!0,retryCount:0});return viem.createWalletClient({chain:r,transport:s}).extend(viem.publicActions)};var v=[{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 x=class extends Error{constructor(r,s,i){super(r);this.code=s;this.details=i;}};var k=class extends x{constructor(e="UNKNOWN",r){super(e,5001,r),this.name="BridgeUnavailableError";}};var S=class extends x{constructor(e="UNKNOWN",r){super(e,5002,r),this.name="BridgeInitializationError";}};var T=class extends x{constructor(e="INVALID_PARAMS",r){super(e,5003,r),this.name="InvalidParamsError";}};var R=({sourceChain:n,targetChain:e,amount:r,asset:s},i)=>{if(n.chainId===e.chainId)throw new T("IDENTICAL_CHAINS_PROVIDED");if(r<=0n)throw new T("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let t=i.find(a=>a.chainId===n.chainId);if(!t)throw new T("CHAIN_NOT_SUPPORTED",`Not supported on source chain "${n.chainId}"`);let o=i.find(a=>a.chainId===e.chainId);if(!o)throw new T("CHAIN_NOT_SUPPORTED",`Not supported on target chain "${e.chainId}"`);let d=t.tokens.find(a=>a.symbol===s.symbol),u=o.tokens.find(a=>a.symbol===s.symbol);if(!d||!u)throw new T("ASSET_NOT_SUPPORTED");return {sourceChainData:t,targetChainData:o,burnToken:d,mintToken:u}};async function F(n,e){let{sourceChain:r,targetChain:s,asset:i,amount:t,provider:o}=e,{sourceChainData:d,targetChainData:u,burnToken:a}=R({sourceChain:r,targetChain:s,asset:i,amount:t},n),m=await b({chain:r,provider:o}).readContract({address:d.tokenRouterAddress,abi:v,functionName:"calculateFee",args:[t,u.domain]});return {[a.address]:m}}var N=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];function j({amount:n,burnToken:e,targetChainData:r,toAddress:s}){return viem.encodeFunctionData({abi:v,functionName:"transferTokens",args:[n,r.domain,s,e.address]})}function X({amount:n,sourceChainData:e}){return viem.encodeFunctionData({abi:N,functionName:"approve",args:[e.tokenRouterAddress,n]})}var Ae=async(n,e)=>{let{sourceChain:r,targetChain:s,asset:i,amount:t,fromAddress:o,toAddress:d,sourceProvider:u,onStepChange:a,sign:p}=e,m=d??o;if(!viem.isAddress(o)||!viem.isAddress(m))throw new T("INCORRECT_ADDRESS_PROVIDED");let{sourceChainData:c,targetChainData:y,burnToken:l}=R({sourceChain:r,targetChain:s,asset:i,amount:t},n),f=b({chain:r,provider:u}),C=await f.readContract({address:l.address,abi:N,functionName:"allowance",args:[o,c.tokenRouterAddress]})<t,_=C?2:1;if(C)if(a?.({currentSignature:1,currentSignatureReason:"allowance-approval",requiredSignatures:_}),p){let g=X({amount:t,sourceChainData:c}),I=await p({from:o,to:l.address,data:g},pe=>f.sendRawTransaction({serializedTransaction:pe}));await f.waitForTransactionReceipt({hash:I,pollingInterval:1e3});}else {let{request:g}=await f.simulateContract({account:o,address:l.address,abi:N,functionName:"approve",args:[c.tokenRouterAddress,t]}),I=await f.writeContract(g);await f.waitForTransactionReceipt({hash:I,pollingInterval:1e3});}if(a?.({currentSignature:C?2:1,currentSignatureReason:"tokens-transfer",requiredSignatures:_}),p){let g=j({amount:t,burnToken:l,targetChainData:y,toAddress:m});return p({from:o,to:c.tokenRouterAddress,data:g},I=>f.sendRawTransaction({serializedTransaction:I}))}let{request:P}=await f.simulateContract({account:o,address:c.tokenRouterAddress,abi:v,functionName:"transferTokens",args:[t,y.domain,m,l.address]});return f.writeContract(P)},Ce=async n=>{try{return await n.getBlockNumber()}catch{return}};async function J(n,e,r){let{minimumConfirmations:s}=n.find(m=>m.chainId===e.sourceChain.chainId)??{},{minimumConfirmations:i}=n.find(m=>m.chainId===e.targetChain.chainId)??{};if(!s||!i)throw new T("CONFIRMATION_COUNT_UNKNOWN");let t=await F(n,{...e,provider:e.sourceProvider}),o=(e.asset.address&&t[e.asset.address])??0n,d=await Ae(n,e),u=Date.now(),a=b({chain:e.targetChain,provider:e.targetProvider}),p=await Ce(a);return {type:"cctp",environment:r,fromAddress:e.fromAddress,toAddress:e.toAddress??e.fromAddress,amount:e.amount,amountDecimals:e.asset.decimals,symbol:e.asset.symbol,bridgeFee:o,sourceChain:e.sourceChain,sourceStartedAt:u,sourceTxHash:d,sourceConfirmationCount:0,requiredSourceConfirmationCount:s,targetChain:e.targetChain,targetConfirmationCount:0,requiredTargetConfirmationCount:i,startBlockNumber:p}}var O=(n,e)=>n.gasPrice&&BigInt(n.gasPrice*e.gasUsed);var L=async n=>new Promise(e=>{setTimeout(e,n);});var U=({promise:n,delay:e,startAfter:r})=>{let s=!1,i=!1,t=0,o,d,u=m=>{o&&s&&(s=!1,o(m));},a=()=>{i=!0,d&&s&&(s=!1,d("cancelled"));};return {result:new Promise((m,c)=>{s=!0,o=m,d=c;let y=async()=>{if(!(!s||i)){try{if(await n(u),!s||i)return;await L(e);}catch(l){console.error(l.message),t+=1,await L(2**t*e);}await y();}};r?setTimeout(y,r):y();}),cancel:a}};var be={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"},Z=async n=>{try{return (await(await fetch(be[n])).json()).map(s=>({...s,chainId:`eip155:${s.chainId}`}))}catch(e){throw new S("CONFIG_NOT_AVAILABLE",`Error while fetching CCTP config: ${e.message}`)}},V=n=>{switch(n){case"eip155:43114":case"eip155:43113":return 1e3;default:return 2e4}};var ee=1e3*60*60*3,Q=1024n,te=5e3,A=(n,e,r)=>{Object.assign(n,Object.fromEntries(Object.entries(e).filter(([,s])=>s!==void 0))),r({...n});},he=async(n,e)=>{let{sourceProvider:r,targetProvider:s,updateListener:i,bridgeTransfer:t}=e,o=b({chain:t.sourceChain,provider:r}),d=n.find(c=>c.chainId===t.sourceChain.chainId),u=b({chain:t.targetChain,provider:s}),a=n.find(c=>c.chainId===t.targetChain.chainId),p={...t};if(!d||!a)throw new T("CHAIN_NOT_SUPPORTED");return U({promise:async c=>{if(p.completedAt||p.metadata?.nonce)return c(p);if(p.sourceStartedAt+ee<=Date.now())return A(p,{completedAt:Date.now(),errorCode:5004},i),c(p);let y=await o.getTransactionReceipt({hash:p.sourceTxHash});if(!p.sourceNetworkFee){let g=await o.getTransaction({hash:p.sourceTxHash}),I=O(g,y);I&&A(p,{sourceNetworkFee:I},i);}if(y.status==="reverted")return A(p,{completedAt:Date.now(),errorCode:5005},i),c(p);let l=await o.getTransactionConfirmations({hash:p.sourceTxHash}),f=l>p.sourceConfirmationCount,h=l>=p.requiredSourceConfirmationCount;if(f){let g={};g.sourceConfirmationCount=Number(l),h||(g.startBlockNumber=await u.getBlockNumber()),A(p,g,i);}if(!h)return;p.startBlockNumber||A(p,{startBlockNumber:await u.getBlockNumber()},i);let C=y.logs.find(g=>g.address.toLowerCase()===d.tokenRouterAddress.toLowerCase()?viem.decodeEventLog({abi:v,...g}).eventName==="TransferTokens":!1);if(!C)throw new T("INVALID_PARAMS",`unable to find a TransferTokens event in source transaction "${p.sourceTxHash}"`);let P=viem.decodeEventLog({abi:v,eventName:"TransferTokens",...C}).args.nonce;return A(p,{targetStartedAt:Date.now(),metadata:{nonce:P}},i),c(p)},delay:V(d.chainId),startAfter:te})},Ie=async(n,e)=>{let{targetProvider:r,updateListener:s,bridgeTransfer:i}=e,t={...i};if(!i.completedAt&&!i.metadata?.nonce)throw new T("INVALID_PARAMS","nonce is missing");if(!i.startBlockNumber)throw new T("INVALID_PARAMS","startBlockNumber is missing");let o=b({chain:i.targetChain,provider:r}),d=n.find(a=>a.chainId===i.targetChain.chainId);if(!d)throw new T("INVALID_PARAMS",`unknown target chain "${i.targetChain.chainId}"`);return U({promise:async a=>{if(t.completedAt)return a(t);if(!t.startBlockNumber)return A(t,{completedAt:Date.now(),errorCode:5003},s),a(t);if(t.sourceStartedAt+ee<=Date.now())return A(t,{completedAt:Date.now(),errorCode:5004},s),a(t);if(!t.targetTxHash){let l=await o.getBlockNumber(),f=t.startBlockNumber-Q,h=f>=0n?f:"earliest",C=t.startBlockNumber+Q,_=C<l?C:"latest",P=await o.getLogs({address:d.messageTransmitterAddress,event:{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"}]},args:{nonce:t.metadata?.nonce},fromBlock:h,toBlock:_});if(P[0]?.transactionHash)A(t,{targetTxHash:P[0].transactionHash},s);else {A(t,{startBlockNumber:l},s);return}}let p=await o.getTransactionReceipt({hash:t.targetTxHash});if(!t.targetNetworkFee){let l=await o.getTransaction({hash:t.targetTxHash}),f=O(l,p);f&&A(t,{targetNetworkFee:f},s);}if(p.status==="reverted")return A(t,{completedAt:Date.now(),errorCode:5005},s),a(t);let m=await o.getTransactionConfirmations({hash:t.targetTxHash}),c=m>t.targetConfirmationCount,y=m>=t.requiredTargetConfirmationCount;if(c&&A(t,{targetConfirmationCount:Number(m)},s),!!y)return A(t,{completedAt:Date.now()},s),a(t)},delay:V(d.chainId),startAfter:te})};function ne(n,e){let r,s=()=>{r?.();};return {result:(async()=>{let{sourceProvider:t,targetProvider:o,updateListener:d,bridgeTransfer:u}=e,{result:a,cancel:p}=await he(n,{sourceProvider:t,targetProvider:o,updateListener:d,bridgeTransfer:u});r=p;let m=await a,{result:c,cancel:y}=await Ie(n,{sourceProvider:t,targetProvider:o,updateListener:d,bridgeTransfer:m});return r=y,c})(),cancel:s}}var we=60000n,ae=175000n,ve=60000n,se=215000n;async function ie(n,e){let{sourceChain:r,targetChain:s,asset:i,amount:t,fromAddress:o,toAddress:d,sourceProvider:u}=e,a=d??o;if(!viem.isAddress(o)||!viem.isAddress(a))throw new T("INCORRECT_ADDRESS_PROVIDED");let{sourceChainData:p,burnToken:m}=R({sourceChain:r,targetChain:s,asset:i,amount:t},n),y=await b({chain:r,provider:u}).readContract({address:m.address,abi:N,functionName:"allowance",args:[o,p.tokenRouterAddress]}),l=p.domain===1;return y>=t?l?se:ae:l?ve+se:we+ae}var oe=async n=>{let e=await Z(n);return {type:"cctp",estimateGas:r=>ie(e,r),getAssets:()=>$(e),getFees:r=>F(e,r),transferAsset:r=>J(e,r,n),trackTransfer:r=>ne(e,r)}};var Ne=new Map([["cctp",oe]]),Pe=async(n,e)=>{let r=[...Ne].filter(([i])=>!e.includes(i)),s=await Promise.allSettled(r.map(async([i,t])=>[i,await t(n)]));return new Map(lodash.compact(s.map(i=>i.status==="fulfilled"?i.value:void 0)))},D=(n,e,r)=>{let s=e.destinations[r];for(let i of s??[]){let t=n.get(i);if(t)return {bridge:t,type:i}}throw new k};var _n=({environment:n,enabledBridgeServices:e})=>({environment:n,getAssets:async()=>(await Promise.all(Array.from(e).map(([,a])=>a.getAssets()))).reduce((a,p)=>{for(let[m,c]of Object.entries(p)){let y=a[m];if(y)for(let l of c){let f=y.findIndex(({symbol:h})=>h===l.symbol);f===-1?y.push(l):lodash.mergeWith(y[f],l,(h,C)=>{if(lodash.isArray(h))return [...new Set(h.concat(C))]});}else a[m]=c;}return a},{}),getFees:async u=>{let{bridge:a}=D(e,u.asset,u.targetChain.chainId);return a.getFees(u)},estimateGas:async u=>{let{bridge:a}=D(e,u.asset,u.targetChain.chainId);return a.estimateGas(u)},canTransferAsset:(u,a)=>{try{return D(e,u,a),!0}catch{return !1}},transferAsset:async u=>{let{bridge:a}=D(e,u.asset,u.targetChain.chainId);return a.transferAsset(u)},trackTransfer:u=>{let a=e.get(u.bridgeTransfer.type);if(!a)throw new k;return a.trackTransfer(u)}});
16
+ var j=(r=>(r.NATIVE="native",r.ERC20="erc20",r))(j||{}),W=e=>e.type==="erc20",le=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||{}),Ko=["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",Jo=e=>oa.includes(e.type),kt=e=>e.type==="avalanche-ava-btc",xt=e=>e.type==="avalanche-btc-ava",Z=(n=>(n.AllowanceApproval="allowance-approval",n.TokensTransfer="tokens-transfer",n.WrapToken="wrap-token",n))(Z||{});var X=(r=>(r.FUJI="eip155:43113",r.MAINNET="eip155:43114",r))(X||{}),Oe=(r=>(r.MAINNET="eip155:1",r.SEPOLIA="eip155:11155111",r))(Oe||{}),q=(r=>(r.MAINNET="bip122:000000000019d6689c085ae165831e93",r.TESTNET="bip122:000000000933ea01ad0ee984209779ba",r))(q||{}),Yo={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}},es={chainId:"eip155:43114",chainName:"Avalanche Mainnet",rpcUrl:"https://api.avax.network/ext/bc/C/rpc",networkToken:{type:"native",name:"AVAX",symbol:"AVAX",decimals:18}},ts={chainId:"eip155:11155111",chainName:"Ethereum Sepolia",rpcUrl:"https://proxy-api.avax.network/proxy/infura/sepolia",networkToken:{type:"native",name:"ETH",symbol:"ETH",decimals:18}},ns={chainId:"eip155:1",chainName:"Ethereum Mainnet",rpcUrl:"https://proxy-api.avax.network/proxy/infura/mainnet",networkToken:{type:"native",name:"ETH",symbol:"ETH",decimals:18}},rs={chainId:"bip122:000000000933ea01ad0ee984209779ba",chainName:"Bitcoin Testnet",rpcUrl:"",networkToken:{type:"native",name:"Bitcoin",symbol:"BTC",decimals:8}},as={chainId:"bip122:000000000019d6689c085ae165831e93",chainName:"Bitcoin Mainnet",rpcUrl:"",networkToken:{type:"native",name:"Bitcoin",symbol:"BTC",decimals:8}};var $=(i=>(i.DEV="dev",i.PROD="production",i.STAGING="staging",i.TEST="test",i))($||{});var z=(s=>(s[s.BRIDGE_NOT_AVAILABLE=5001]="BRIDGE_NOT_AVAILABLE",s[s.INITIALIZATION_FAILED=5002]="INITIALIZATION_FAILED",s[s.INVALID_PARAMS=5003]="INVALID_PARAMS",s[s.TIMEOUT=5004]="TIMEOUT",s[s.TRANSACTION_REVERTED=5005]="TRANSACTION_REVERTED",s[s.NOTARIZATION_FAILED=5006]="NOTARIZATION_FAILED",s))(z||{}),v=(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))(v||{});function wt(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 sa="^[-a-z0-9]{3,8}$",ma="^[-_a-zA-Z0-9]{1,50}$",Nt=":",pa=e=>{let[t,r]=e.split(Nt);if(!t||!r)throw new Error("Invalid identifier provided.");if(!new RegExp(sa).test(t))throw new Error("Invalid namespace provided.");if(!new RegExp(ma).test(r))throw new Error("Invalid reference provided.");return {namespace:t,reference:r}},ca=({namespace:e,reference:t})=>`${e}${Nt}${t}`,da=({namespace:e,reference:t})=>{if(e!=="eip155")throw new Error("Invalid namespace provided.");let r=Number(t);if(isNaN(r))throw new Error("Invalid reference provided.");return `0x${r.toString(16)}`},B={toJSON:pa,toString:ca,toEip155HexChainId:da};var la=e=>{let{reference:t}=B.toJSON(e.chainId);return {id:Number(t),name:e.chainName,nativeCurrency:{decimals:e.networkToken.decimals,symbol:e.networkToken.symbol,name:e.networkToken.name},network:e.chainName,rpcUrls:{default:{http:[e.rpcUrl]},public:{http:[e.rpcUrl]}},...e.utilityAddresses?.multicall&&{contracts:{multicall3:{address:e.utilityAddresses.multicall}}}}},E=({chain:e})=>{let t=la(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 me=[{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 He=class extends Q{constructor(t="UNKNOWN",r){super(t,5001,r),this.name="BridgeUnavailableError";}};var S=class extends Q{constructor(t="UNKNOWN",r){super(t,5002,r),this.name="BridgeInitializationError";}};var l=class extends Q{constructor(t="INVALID_PARAMS",r){super(t,5003,r),this.name="InvalidParamsError";}};var O=({sourceChain:e,targetChain:t,amount:r,asset:n},i)=>{if(e.chainId===t.chainId)throw new l("IDENTICAL_CHAINS_PROVIDED");if(r<=0n)throw new l("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let o=i.find(p=>p.chainId===e.chainId);if(!o)throw new l("CHAIN_NOT_SUPPORTED",`Not supported on source chain "${e.chainId}"`);let s=i.find(p=>p.chainId===t.chainId);if(!s)throw new l("CHAIN_NOT_SUPPORTED",`Not supported on target chain "${t.chainId}"`);let a=o.tokens.find(p=>p.symbol===n.symbol),m=s.tokens.find(p=>p.symbol===n.symbol);if(!a||!m)throw new l("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),c=await E({chain:r}).readContract({address:s.tokenRouterAddress,abi:me,functionName:"calculateFee",args:[o,a.domain]});return {[s.chainId]:{[m.address]:c}}}var D=[{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 Rt({amount:e,burnToken:t,targetChainData:r,toAddress:n}){return viem.encodeFunctionData({abi:me,functionName:"transferTokens",args:[e,r.domain,n,t.address]})}function Dt({amount:e,sourceChainData:t}){return viem.encodeFunctionData({abi:D,functionName:"approve",args:[t.tokenRouterAddress,e]})}var Ta=async(e,t,r)=>{let{sourceChain:n,targetChain:i,asset:o,amount:s,fromAddress:a,toAddress:m,onStepChange:p,gasSettings:c}=t,{sourceChainData:d,targetChainData:u,burnToken:f}=O({sourceChain:n,targetChain:i,asset:o,amount:s},e),y=E({chain:n}),C=await y.readContract({address:f.address,abi:D,functionName:"allowance",args:[a,d.tokenRouterAddress]})<s,b=C?2:1;if(C){let I={currentSignature:1,currentSignatureReason:"allowance-approval",requiredSignatures:b};p?.(I);let N=Dt({amount:s,sourceChainData:d}),J=await r.sign({from:a,to:f.address,data:N,...c?{maxFeePerGas:c.price,maxPriorityFeePerGas:c.tip}:null,chainId:B.toEip155HexChainId(B.toJSON(n.chainId))},ye=>y.sendRawTransaction({serializedTransaction:ye}),I);await y.waitForTransactionReceipt({hash:J});}let A={currentSignature:C?2:1,currentSignatureReason:"tokens-transfer",requiredSignatures:b};p?.(A);let w=Rt({amount:s,burnToken:f,targetChainData:u,toAddress:m});return r.sign({from:a,to:d.tokenRouterAddress,data:w,...c?{maxFeePerGas:c.price,maxPriorityFeePerGas:c.tip}:null,chainId:B.toEip155HexChainId(B.toJSON(n.chainId))},I=>y.sendRawTransaction({serializedTransaction:I}),A)},ga=async e=>{try{return await e.getBlockNumber()}catch{return}};async function _t(e,t,r,n){let{minimumConfirmations:i}=e.find(u=>u.chainId===t.sourceChain.chainId)??{},{minimumConfirmations:o}=e.find(u=>u.chainId===t.targetChain.chainId)??{};if(!i||!o)throw new l("CONFIRMATION_COUNT_UNKNOWN");let s=await Y(e,{asset:t.asset,amount:t.amount,sourceChain:t.sourceChain,targetChain:t.targetChain}),a=W(t.asset)?s[t.sourceChain.chainId]?.[t.asset.address]??0n:0n,m=await Ta(e,t,n),p=Date.now(),c=E({chain:t.targetChain}),d=await ga(c);return {type:"cctp",environment:r,fromAddress:t.fromAddress,toAddress:t.toAddress??t.fromAddress,amount:t.amount,asset:t.asset,bridgeFee:a,sourceChain:t.sourceChain,sourceStartedAt:p,sourceTxHash:m,sourceConfirmationCount:0,sourceRequiredConfirmationCount:i,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:o,targetStartBlockNumber:d}}var mt=async e=>new Promise(t=>{setTimeout(t,e);});var _=({promise:e,delay:t,startAfter:r})=>{let n=!1,i=!1,o=0,s,a,m=d=>{s&&n&&(n=!1,s(d));},p=()=>{i=!0,a&&n&&(n=!1,a("cancelled"));};return {result:new Promise((d,u)=>{n=!0,s=d,a=u;let f=async()=>{if(!(!n||i)){try{if(await e(m),!n||i)return;await mt(t);}catch(y){console.error(y.message),o+=1,await mt(2**o*t);}await f();}};r?setTimeout(f,r):f();}),cancel:p}};var ke=(r=>(r[r.Ethereum=0]="Ethereum",r[r.Avalanche=1]="Avalanche",r))(ke||{});var ee=zod.z.string().refine(e=>viem.isAddress(e),e=>({message:`Invalid EVM address '${e}'`})).transform(e=>e);var ha=zod.z.object({address:ee,name:zod.z.string(),symbol:zod.z.string(),decimals:zod.z.number().positive()}),Ea=zod.z.coerce.string().transform((e,t)=>{let r=e.startsWith("eip155:")?e:`eip155:${e}`;try{let n=B.toJSON(r);return B.toString(n)}catch{return t.addIssue({code:zod.z.ZodIssueCode.custom,message:"Invalid chain id, neither numeric nor caip2 compliant"}),zod.z.NEVER}}),ba=zod.z.object({chainId:Ea,domain:zod.z.nativeEnum(ke),tokenRouterAddress:ee,messageTransmitterAddress:ee,tokens:zod.z.array(ha),minimumConfirmations:zod.z.number().positive()}),Pt=zod.z.array(ba);var Ba=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"},Ft=async e=>{if(!Ba(e))throw new S("ENVIRONMENT_NOT_SUPPORTED",`CCTP does not support ${e} environment`);try{let r=await(await fetch(va[e])).json();return Pt.parse(r)}catch(t){throw new S("CONFIG_NOT_AVAILABLE",`Error while fetching CCTP config: ${t.message}`)}},pt=e=>{switch(e){case"eip155:43114":case"eip155:43113":return 1e3;default:return 2e4}};var h=(e,t,r)=>{let n=lodash.omitBy(t,lodash.isNil),i={...lodash.cloneDeep(e),...lodash.cloneDeep(n)};return r(i),i},xa=1e3*60*60*3,wa=1024n,Na=5e3,x={trackingLimitMs:xa,maxBlocks:wa,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 p=>{if(a.completedAt||n(a.metadata))return p(a);if(a.sourceStartedAt+s<=Date.now())return a=h(a,{completedAt:Date.now(),errorCode:5004},o),p(a);if(!viem.isHash(a.sourceTxHash))return;let c=await t.getTransactionReceipt({hash:a.sourceTxHash});if(a.sourceNetworkFee===void 0){let g=await t.getTransaction({hash:a.sourceTxHash}),C=te(g,c);C&&(a=h(a,{sourceNetworkFee:C},o));}if(c.status==="reverted")return a=h(a,{completedAt:Date.now(),errorCode:5005},o),p(a);if(!viem.isHash(a.sourceTxHash))return;let d=await t.getTransactionConfirmations({hash:a.sourceTxHash}),u=d>a.sourceConfirmationCount,f=d>=a.sourceRequiredConfirmationCount;if(u){let g={};g.sourceConfirmationCount=Number(d),f||(g.targetStartBlockNumber=await e.getBlockNumber()),a=h(a,g,o);}if(!f)return;a.targetStartBlockNumber||(a=h(a,{targetStartBlockNumber:await e.getBlockNumber()},o));let y=r(c);return a=h(a,{targetStartedAt:Date.now(),metadata:y},o),p(a)}};var ce=({targetClient:e,getTargetTxHash:t,checkMetadata:r,trackingParams:{bridgeTransfer:n,updateListener:i},trackingConfig:{trackingLimitMs:o,maxBlocks:s}})=>{if(!n.completedAt&&!r(n.metadata))throw new l("INVALID_PARAMS","metadata is missing");if(!n.targetStartBlockNumber)throw new l("INVALID_PARAMS","targetStartBlockNumber is missing");let a=lodash.cloneDeep(n);return async p=>{if(a.completedAt)return p(a);if(a.sourceStartedAt+o<=Date.now())return a=h(a,{completedAt:Date.now(),errorCode:5004},i),p(a);if(!a.targetStartBlockNumber)throw new Error("unreachable");if(!a.targetTxHash){let g=await e.getBlockNumber(),C=a.targetStartBlockNumber-s,b=C>=0n?C:"earliest",A=a.targetStartBlockNumber+s,w=A<g?A:"latest",I=await t({fromBlock:b,toBlock:w,metadata:a.metadata});if(I)a=h(a,{targetTxHash:I},i);else {a=h(a,{targetStartBlockNumber:g},i);return}}if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let d=await e.getTransactionReceipt({hash:a.targetTxHash});if(!a.targetNetworkFee){let g=await e.getTransaction({hash:a.targetTxHash}),C=te(g,d);C&&(a=h(a,{targetNetworkFee:C},i));}if(d.status==="reverted")return a=h(a,{completedAt:Date.now(),errorCode:5005},i),p(a);if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let u=await e.getTransactionConfirmations({hash:a.targetTxHash}),f=u>a.targetConfirmationCount,y=u>=a.targetRequiredConfirmationCount;if(f&&(a=h(a,{targetConfirmationCount:Number(u)},i)),!!y)return a=h(a,{completedAt:Date.now()},i),p(a)}};var ct=e=>lodash.isObject(e)&&typeof e.nonce=="bigint",Ut=({sourceChainData:e})=>r=>{let n=r.logs.find(s=>s.address.toLowerCase()===e.tokenRouterAddress.toLowerCase()?viem.decodeEventLog({abi:me,...s}).eventName==="TransferTokens":!1);if(!n)throw new l("INVALID_PARAMS",`unable to find a TransferTokens event in source transaction "${r.transactionHash}"`);return {nonce:viem.decodeEventLog({abi:me,eventName:"TransferTokens",...n}).args.nonce}},_a={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"}]},Gt=({targetClient:e,transferData:{targetChainData:t}})=>async({fromBlock:n,toBlock:i,metadata:o})=>(await e.getLogs({address:t.messageTransmitterAddress,event:_a,args:{nonce:o?.nonce},fromBlock:n,toBlock:i}))[0]?.transactionHash;var Pa=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,p=E({chain:o}),c=E({chain:s}),d=Ut(a),u=pe({sourceClient:p,targetClient:c,getMetadata:d,checkMetadata:ct,trackingParams:t,trackingConfig:x});return _({promise:u,delay:pt(m.chainId),startAfter:x.initialDelayMs})},Fa=async(e,t)=>{let{bridgeTransfer:r}=t,{asset:n,amount:i,sourceChain:o,targetChain:s}=r,a=E({chain:s}),m=O({sourceChain:o,targetChain:s,asset:n,amount:i},e),p=Gt({targetClient:a,transferData:m}),c=ce({targetClient:a,getTargetTxHash:p,checkMetadata:ct,trackingParams:t,trackingConfig:x});return _({promise:c,delay:pt(m.targetChainData.chainId),startAfter:x.initialDelayMs})};function Wt(e,t){if(!viem.isHash(t.bridgeTransfer.sourceTxHash)||t.bridgeTransfer.targetTxHash&&!viem.isHash(t.bridgeTransfer.targetTxHash))throw new l("INCORRECT_TXHASH_PROVIDED");let r,n=()=>{r?.();};return {result:(async()=>{let{updateListener:o,bridgeTransfer:s}=t,{result:a,cancel:m}=await Pa(e,{updateListener:o,bridgeTransfer:s});r=m;let p=await a,{result:c,cancel:d}=await Fa(e,{updateListener:o,bridgeTransfer:p});return r=d,c})(),cancel:n}}var Ma=60000n,$t=175000n,Oa=60000n,jt=215000n;async function Xt(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),c=await E({chain:r}).readContract({address:m.address,abi:D,functionName:"allowance",args:[s,a.tokenRouterAddress]}),d=a.domain===1;return c>=o?d?jt:$t:d?Oa+jt:Ma+$t}async function qt(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 Kt(e,t){let{mintToken:r,burnToken:n}=O(t,e),i={...r,type:"erc20"},o=await Y(e,t);return {asset:i,amount:t.amount-(o[t.sourceChain.chainId]?.[n.address]??0n)}}var M="0x0000000000000000000000000000000000000000";function Jt(e,t){for(let r of e){if(r.chainId!==t.chainId)continue;let n=t.tokenTransfers.find(({symbol:d})=>r.tokens.some(({symbol:u})=>u===d));if(!n)continue;let i=r.domain===1,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 p=viem.isAddressEqual(t.from,r.messageTransmitterAddress),c=viem.isAddressEqual(n.from,M);if(p||c)return {isBridgeTx:!0,bridgeType:"cctp",sourceChainId:i?s:a,targetChainId:t.chainId}}return {isBridgeTx:!1}}var dt=e=>{let{fromAddress:t,toAddress:r}=e;if(!viem.isAddress(t)||!viem.isAddress(r))throw new l("INCORRECT_ADDRESS_PROVIDED");return {fromAddress:t,toAddress:r}};function Te(e){let{chainId:t,from:r,to:n,tokenTransfers:i}=e,{fromAddress:o,toAddress:s}=dt({fromAddress:r,toAddress:n}),a=i.map(m=>{let{from:p,to:c,symbol:d}=m;if(!p||!viem.isAddress(p)||!c||!viem.isAddress(c))throw new l("INCORRECT_ADDRESS_PROVIDED");return {from:p,to:c,symbol:d}});return {chainId:t,from:o,to:s,tokenTransfers:a}}var K=({fromAddress:e,...t})=>{if(!viem.isAddress(e))throw new l("INCORRECT_ADDRESS_PROVIDED");return {fromAddress:e,...t}},ge=({fromAddress:e,toAddress:t,...r})=>{let{fromAddress:n,toAddress:i}=dt({fromAddress:e,toAddress:t});return {fromAddress:n,toAddress:i,...r}};var Qt=async(e,t)=>{let r=await Ft(e);return {type:"cctp",analyzeTx:n=>{try{return Jt(r,Te(n))}catch{return {isBridgeTx:!1}}},estimateGas:n=>Xt(r,K(n)),estimateReceiveAmount:n=>Kt(r,K(n)),getAssets:()=>wt(r),getFees:n=>Y(r,n),transferAsset:n=>_t(r,ge(n),e,t),trackTransfer:n=>Wt(r,n),getMinimumTransferAmount:n=>qt(r,n)}};var Ha=({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}},Va=({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 l("IDENTICAL_CHAINS_PROVIDED");if(r<=0n)throw new l("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");if(!W(n))throw new l("ASSET_NOT_SUPPORTED","Only ERC20 assets supported");let o=Ha({sourceChain:e,targetChain:t,asset:n},i),s=Va({sourceChain:e,targetChain:t,asset:n},i);if(o.chainBridgeConfig&&o.tokenHomeConfig&&o.tokenRemoteConfig){let{chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:p}=o;return {homeToRemote:!0,chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:p}}if(s.chainBridgeConfig&&s.tokenHomeConfig&&s.tokenRemoteConfig){let{chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:p}=s;return {homeToRemote:!1,chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:p}}throw new l("ASSET_NOT_SUPPORTED","No Home->Remote or Remote->Home route exists for this asset")};var La=60000n,Yt=215000n,en=async(e,t)=>{let{sourceChain:r,targetChain:n,asset:i,amount:o,fromAddress:s}=t,{tokenHomeConfig:a,homeToRemote:m,tokenRemoteConfig:p}=H({sourceChain:r,targetChain:n,asset:i,amount:o},e);return await E({chain:r}).readContract({address:m?a.baseToken.address:p.tokenRemoteAddress,abi:D,functionName:"allowance",args:[s,m?a.tokenHomeAddress:p.tokenRemoteAddress]})>=o?Yt:La+Yt};var tn=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 Ae(e,t){return H(t,e),{}}var xe=[{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 we=[{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 Ua=85000n,rn=({homeToRemote:e,amount:t,destinationBlockchainID:r,destinationTokenTransferrerAddress:n,recipient:i})=>viem.encodeFunctionData({abi:e?xe:we,functionName:"send",args:[{destinationBlockchainID:r,destinationTokenTransferrerAddress:n,recipient:i,primaryFeeTokenAddress:M,primaryFee:0n,secondaryFee:0n,requiredGasLimit:Ua,multiHopFallback:M},t]});function an({amount:e,address:t}){return viem.encodeFunctionData({abi:D,functionName:"approve",args:[t,e]})}var Ga=async({params:{onStepChange:e,amount:t,fromAddress:r,sourceChain:n,toAddress:i,gasSettings:o},transferData:s,isAllowanceApprovalRequired:a,requiredSignatures:m,signer:p})=>{let{tokenRemoteConfig:c,tokenHomeConfig:d,homeToRemote:u,chainBridgeConfig:f}=s,y=E({chain:n});if(a){let w={currentSignature:1,currentSignatureReason:"allowance-approval",requiredSignatures:m};e?.(w);let I=an({amount:t,address:u?d.tokenHomeAddress:c.tokenRemoteAddress}),N=await p.sign({from:r,to:u?s.tokenHomeConfig.baseToken.address:c.tokenRemoteAddress,data:I,...o?{maxFeePerGas:o.price,maxPriorityFeePerGas:o.tip}:null,chainId:B.toEip155HexChainId(B.toJSON(n.chainId))},J=>y.sendRawTransaction({serializedTransaction:J}),w);await y.waitForTransactionReceipt({hash:N});}let g={currentSignature:a?2:1,currentSignatureReason:"tokens-transfer",requiredSignatures:m};e?.(g);let C=u?c.remoteChain.blockchainId:f.homeChain.blockchainId,b=u?c.tokenRemoteAddress:d.tokenHomeAddress,A=rn({amount:t,recipient:i,destinationBlockchainID:C,destinationTokenTransferrerAddress:b,homeToRemote:u});return p.sign({from:r,to:u?d.tokenHomeAddress:c.tokenRemoteAddress,data:A,...o?{maxFeePerGas:o.price,maxPriorityFeePerGas:o.tip}:null,chainId:B.toEip155HexChainId(B.toJSON(n.chainId))},w=>y.sendRawTransaction({serializedTransaction:w}),g)},za=async({params:e,transferData:t,signer:r})=>{let{sourceChain:n,fromAddress:i,amount:o}=e,s=E({chain:n}),{homeToRemote:a,tokenHomeConfig:m,tokenRemoteConfig:p}=t,d=await s.readContract({address:a?m.baseToken.address:p.tokenRemoteAddress,abi:D,functionName:"allowance",args:[i,a?m.tokenHomeAddress:p.tokenRemoteAddress]})<o;return Ga({params:e,transferData:t,isAllowanceApprovalRequired:d,requiredSignatures:d?2:1,signer:r})},Wa=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 za({params:t,transferData:a,signer:r})},$a=async e=>{try{return await e.getBlockNumber()}catch{return}};async function on(e,t,r,n){let i=await Ae(e,{asset:t.asset,amount:t.amount,sourceChain:t.sourceChain,targetChain:t.targetChain}),o=W(t.asset)?i[t.targetChain.chainId]?.[t.asset.address]??0n:0n,s=await Wa(e,t,n),a=Date.now(),m=E({chain:t.targetChain}),p=await $a(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:p}}var mn=({transferData:{homeToRemote:e,tokenHomeConfig:t,tokenRemoteConfig:r}})=>n=>{let i=e?t.tokenHomeAddress:r.tokenRemoteAddress,o=e?xe:we,s="TokensSent",a=n.logs.find(c=>c.address.toLowerCase()===i.toLowerCase()?viem.decodeEventLog({abi:o,...c}).eventName===s:!1);if(!a)throw new l("INVALID_PARAMS",`unable to find a TokensSent event in source transaction "${n.transactionHash}"`);return {teleporterMessageID:viem.decodeEventLog({abi:o,eventName:s,...a}).args.teleporterMessageID}},qa={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"}]}]},pn=({toAddress:e,transferData:{tokenHomeConfig:t,homeToRemote:r,tokenRemoteConfig:n},targetClient:i})=>async({fromBlock:o,toBlock:s,metadata:a})=>{if(!Ue(a))throw new l("INVALID_PARAMS");let p=(await i.getLogs({address:t.teleporterAddress,event:qa,args:{messageID:a.teleporterMessageID},fromBlock:o,toBlock:s})).at(-1);if(lodash.isNil(p))return;let c=p.transactionHash,d=await i.getTransactionReceipt({hash:c}),u=r?we:xe,f=r?n.tokenRemoteAddress:t.tokenHomeAddress,y=d.logs.find(C=>C.address.toLowerCase()===f.toLowerCase()?viem.decodeEventLog({abi:u,...C}).eventName==="TokensWithdrawn":!1);if(lodash.isNil(y))return;if(viem.decodeEventLog({abi:u,eventName:"TokensWithdrawn",...y}).args.recipient.toLowerCase()===e.toLowerCase())return c},Ue=e=>lodash.isObject(e)&&viem.isHex(e.teleporterMessageID);var Ka=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=E({chain:r.sourceChain}),p=E({chain:r.targetChain}),c=mn({transferData:a}),d=pe({sourceClient:m,targetClient:p,getMetadata:c,checkMetadata:Ue,trackingParams:t,trackingConfig:x});return _({promise:d,delay:2e3,startAfter:x.initialDelayMs})},Ja=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),p=E({chain:r.targetChain}),c=pn({transferData:m,targetClient:p,toAddress:a}),d=ce({targetClient:p,getTargetTxHash:c,checkMetadata:Ue,trackingParams:t,trackingConfig:x});return _({promise:d,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 Ka(e,t);r=a;let m=await s,{result:p,cancel:c}=await Ja(e,{updateListener:o,bridgeTransfer:m});return r=c,p})(),cancel:n}}async function dn(e,t){return H(t,e),1n}var ft={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 Ya=zod.z.object({subnetName:zod.z.string(),subnetID:zod.z.string(),blockchainID:zod.z.string(),chainID:zod.z.number(),network:zod.z.string()}),fn=zod.z.array(Ya),ei=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()}),yn=zod.z.array(ei);var ln="0x253b2784c75e510dD0fF1da844684a1aC0aa5fcf",Tn={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"},gn={chainID:43114,blockchainID:"2q9e4r6Mu3U68nU1fYjgbR6JvwrRx36CohpAX5UQxse55x1Q5"},An={chainID:43113,blockchainID:"yH8D7ThNJkxmtkuv2jgBa4P1Rn3Qpr4pPr7QYNfcdoS6k6HWp"};var yt=async e=>await(await fetch(e)).json();var ti=e=>e==="production"||e==="test",ni=e=>e.status==="fulfilled",ri=async(e,t)=>{let r=await yt(`${e}/chains`);return [t==="production"?gn:An,...fn.parse(r)]},ai=async(e,t)=>(await Promise.allSettled(t.map(async n=>{let i=await yt(`${e}/chains/${n.chainID}/bridges`);return yn.parse(i)}))).filter(ni).flatMap(n=>n.value),hn=async e=>{if(!ti(e))throw new S("ENVIRONMENT_NOT_SUPPORTED",`ICTT does not support ${e} environment`);try{let t=Tn[e],r=await ri(t,e),n=await ai(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===B.toString({namespace:"eip155",reference:String(s.chainID)}));a||(a={homeChain:{chainId:B.toString({namespace:"eip155",reference:String(s.chainID)}),blockchainId:viem.toHex(ft.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:ln,tokenHomeAddress:o.tokenHomeAddress,tokenHomeDecimals:o.tokenDecimals},a.erc20Bridges.push(m));let p=r.find(({chainID:f})=>f===o.tokenRemoteChainID);if(!p)return;let c=viem.toHex(ft.decode(p.blockchainID)),d=B.toString({namespace:"eip155",reference:String(o.tokenRemoteChainID)});m.remotes.find(({tokenRemoteAddress:f,remoteChain:{chainId:y}})=>f===o.tokenRemoteAddress&&y===d)||m.remotes.push({remoteChain:{chainId:d,blockchainId:c},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 S("CONFIG_NOT_AVAILABLE",`Error while fetching ICTT-ERC20-ERC20 config: ${t.message}`)}};var En=async(e,t)=>{let{homeToRemote:r,tokenHomeConfig:{baseToken:n},tokenRemoteConfig:{tokenRemoteAddress:i}}=H(t,e),o={...n,address:r?i:n.address},s=await Ae(e,t);return {amount:t.amount-(s[t.targetChain.chainId]?.[n.address]??0n),asset:o}};function bn(e,t){for(let r of e)for(let n of r.erc20Bridges){let i=t.tokenTransfers.find(({symbol:p})=>p===n.baseToken.symbol);if(!i)continue;let 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,M)||viem.isAddressEqual(i.from,M);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 hn(e);return {type:"ictt-erc20-erc20",analyzeTx:n=>{try{return bn(r,Te(n))}catch{return {isBridgeTx:!1}}},estimateGas:n=>en(r,K(n)),estimateReceiveAmount:n=>En(r,K(n)),getAssets:()=>tn(r),getFees:n=>Ae(r,n),getMinimumTransferAmount:n=>dn(r,n),transferAsset:n=>on(r,ge(n),e,t),trackTransfer:n=>cn(r,n)}};var Ce=[{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 Ge=[{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 lt(e){if(!oi(e))return !1;try{return base.bech32.decode(e),!0}catch{return !1}}function Ne(e,t){return lt(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),mi=zod.z.string().refine(e=>lt(e),e=>({message:`Invalid BTC address '${e}'`})),Re=(i=>(i.AVALANCHE="avalanche",i.ETHEREUM="ethereum",i.BITCOIN="bitcoin",i.UNKNOWN="",i))(Re||{}),he=zod.z.nativeEnum(Re),pi=zod.z.object({tokenName:zod.z.string(),nativeNetwork:he,denomination:zod.z.number()}),ci=pi.extend({nativeContractAddress:Se,wrappedContractAddress:Se,wrappedNetwork:he}),vn=zod.z.object({disableFrontend:zod.z.boolean(),addressBlocklist:zod.z.array(zod.z.string())}),In=vn.extend({assets:zod.z.record(zod.z.string(),ci),networks:zod.z.record(he,zod.z.union([zod.z.number(),zod.z.undefined()])),walletAddresses:zod.z.record(he,Se)}),kn=zod.z.object({minimumConfirmations:zod.z.record(he,zod.z.optional(zod.z.number()))}),di=kn.extend({unwrapFeeApproximation:zod.z.record(zod.z.string(),zod.z.string()),wrapFeeApproximation:zod.z.record(zod.z.string(),zod.z.string())}),ze=zod.z.object({minimumFeeAmount:zod.z.string(),maximumFeeAmount:zod.z.string(),feePercentage:zod.z.number(),feePercentageDecimals:zod.z.number()}),ui=kn.extend({unwrapFeeApproximation:zod.z.record(zod.z.string(),ze),wrapFeeApproximation:zod.z.record(zod.z.string(),ze)}),fi=zod.z.object({critical:In,nonCritical:di}),yi=zod.z.object({critical:In,nonCritical:ui}),li=zod.z.object({tokenName:zod.z.string(),bech32AddressPrefix:zod.z.union([zod.z.literal("tb"),zod.z.literal("bc")]),wrappedContractAddress:Se,wrappedNetwork:he}),Ti=vn.extend({addressBlocklist:zod.z.array(zod.z.string()),avalancheChainId:zod.z.number(),bitcoinAssets:zod.z.record(zod.z.string(),li),walletAddresses:zod.z.object({btc:mi,avalanche:Se})}),gi=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()})})}),Ai=zod.z.object({wrapFeeAmount:zod.z.number(),constUnwrapFeeAmount:zod.z.number(),unwrapFeeNumerator:zod.z.number(),unwrapFeeDenominator:zod.z.number(),dustThreshold:zod.z.number()}),Ci=zod.z.object({minimumConfirmations:zod.z.number(),minimumOnboardSize:zod.z.number(),currentBridgeFeeEstimate:zod.z.union([gi,Ai])}),hi=zod.z.object({networkInfo:zod.z.record(zod.z.string(),Ci)}),xn=zod.z.object({criticalBitcoin:Ti,nonCriticalBitcoin:hi}),Ei=zod.z.intersection(yi,xn),bi=zod.z.intersection(fi,xn),wn=zod.z.union([Ei,bi]);var Bi=e=>"eip155:1"===e||"eip155:11155111"===e,Tt=e=>Bi(e.chainId);var De=e=>"eip155:43113"===e||"eip155:43114"===e,$e=e=>De(e.chainId);var je=e=>e==="bip122:000000000019d6689c085ae165831e93"||e==="bip122:000000000933ea01ad0ee984209779ba";var Nn=e=>e==="eip155:1"||e==="eip155:43114"||e==="bip122:000000000019d6689c085ae165831e93",Xe=e=>!Nn(e),ne=e=>Nn(e.chainId);var _e={type:"native",name:"Ether",symbol:"ETH",decimals:18};var Ee=({destinations:e,...t})=>t;var Ii=e=>({source:e.nativeTokenConfig.ethereumToken,target:e.nativeTokenConfig.avalancheToken,ethToAva:!0}),Sn=(e,t)=>{if(!W(t))throw new l("ASSET_NOT_SUPPORTED",`Wrong token type: ${t.type}`);return lodash.isEqual(e,Ee(t))},ki=(e,t)=>{if(!W(t))throw new l("ASSET_NOT_SUPPORTED",`Wrong token type: ${t.type}`);let r=e.ethereumTokens[t.address];if(!r||!Sn(r.token,t))throw new l("ASSET_NOT_SUPPORTED",`Unable to find matching ethereum token in config: ${t.symbol}`);let n=e.avalancheTokens[r.target.tokenAddress];if(!n)throw new l("ASSET_NOT_SUPPORTED",`Unable to get avalanche token in config: ${t.symbol}`);return {source:r,target:n,ethToAva:!0}},xi=(e,t)=>{if(!W(t))throw new l("ASSET_NOT_SUPPORTED",`Wrong token type: ${t.type}`);let r=e.avalancheTokens[t.address];if(!r||!Sn(r.token,t))throw new l("ASSET_NOT_SUPPORTED",`Unable to find matching avalanche token in config: ${t.symbol}`);let n=e.ethereumTokens[r.target.tokenAddress];if(!n)throw new l("ASSET_NOT_SUPPORTED",`Unable to get ethereum token in config: ${t.symbol}`);return {source:r,target:n,ethToAva:!1}},wi=(e,t)=>{let{reference:r}=B.toJSON(e.chainId),{reference:n}=B.toJSON(t.chainId);return [{source:1,target:43114},{source:43114,target:1},{source:11155111,target:43113},{source:43113,target:11155111}].some(({source: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 l("IDENTICAL_CHAINS_PROVIDED",`SourceChain and TargetChain need to be different network. But found the same chainId: ${e.chainId}`);if(!wi(e,t))throw new l("INVALID_PARAMS","SourceChain and TargetChain combination is not correct or the chains provided are not supported");if(r<=0n)throw new l("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");return le(n)&&n.symbol===_e.symbol&&Tt(e)?Ii(i):Tt(e)?ki(i,n):xi(i,n)};async function Rn(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o,fromAddress:s}=t;if(!viem.isAddress(s))throw new l("INVALID_PARAMS",`Invalid fromAddress: ${s}`);let a=e.walletAddresses.ethereum,{source:m,ethToAva:p}=L({sourceChain:r,targetChain:n,asset:i,amount:o},e),c=E({chain:r}),d=0n;if(le(i)&&p){d+=await c.estimateContractGas({address:m.token.address,abi:Ge,functionName:"deposit",account:s});try{d+=await c.estimateContractGas({address:m.token.address,abi:D,functionName:"transfer",account:s,args:[a,o]});}catch{let u=viem.encodeFunctionData({abi:D,functionName:"transfer",args:[a,o]});d+=await c.estimateGas({data:u,account:s,to:a,value:o});}}else d=await c.estimateContractGas({address:m.token.address,abi:p?D:Ce,functionName:p?"transfer":"unwrap",account:s,args:p?[a,o]:[o,0]});return d}var ue=e=>{try{return ze.parse(e),!0}catch{return !1}};var Ri=(e,{max:t,min:r})=>e>t?t:e<r?r:e,be=(e,t)=>{let{minimumFeeAmount:r,maximumFeeAmount:n,feePercentage:i,feePercentageDecimals:o}=t,s=BigInt(r),a=BigInt(n),m=i/10**o/100,p=Number(e)*m,c=BigInt(Math.ceil(p));return Ri(c,{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),p=m?s.wrapFeeApproximation:s.unwrapFeeApproximation;if(ue(p)){let d=be(o,p);return {[a.chainId]:{[a.token.address]:d}}}let c=p??0n;return {[a.chainId]:{[a.token.address]:c}}}async function Dn(e,t){let{target:r}=L(t,e),n=await re(e,t);return {asset:r.token,amount:t.amount-(n[r.chainId]?.[r.token.address]??0n)}}function _n(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,p={...s.token,destinations:{[m]:["avalanche-evm"]}},c=o[a]??[];return c.push(p),o[a]=c,o},{}),r=Object.values(e.avalancheTokens).reduce((o,s)=>{let a=s.chainId,m=s.target.chainId,p={...s.token,destinations:{[m]:["avalanche-evm"]}},c=o[a]??[];return c.push(p),o[a]=c,o},t),n="eip155:1";r[n]&&r[n].push({..._e,destinations:{["eip155:43114"]:["avalanche-evm"]}});let i="eip155:11155111";return r[i]&&r[i].push({..._e,destinations:{["eip155:43113"]:["avalanche-evm"]}}),r}var Pn=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),p=m?s.wrapFeeApproximation:s.unwrapFeeApproximation;if(ue(p)){let u=p.minimumFeeAmount;return BigInt(u)*Pn}let d=(await re(e,t))[a.chainId]?.[a.token.address];if(d===void 0)throw new l("INVALID_PARAMS",`Unable to get static fee for ${i.symbol}`);return d*Pn}var Ke=()=>e=>({transactionHash:e.transactionHash}),Fn=({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,p=r?M:i.walletAddresses.ethereum,c=r?void 0:{src:p,dst:e},d=r?{inputs:[{indexed:!1,name:"to",type:"address"},{indexed:!1,name:"amount",type:"uint256"},{indexed:!1,name:"feeAddress",type:"address"},{indexed:!1,name:"feeAmount",type:"uint256"},{indexed:!1,name:"originTxId",type:"bytes32"}],name:"Mint",type:"event"}:{inputs:[{indexed:!0,name:"src",type:"address"},{indexed:!0,name:"dst",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Transfer",type:"event"},u=await n.getLogs({address:m,event:d,args:c,fromBlock:o,toBlock:s}),f=r?u.find(y=>gt(y)&&y.args.originTxId===a?.transactionHash):u.at(-1);if(!lodash.isNil(f))return f.transactionHash},gt=e=>Fi(e)?Object.keys(e.args).includes("originTxId"):!1,Fi=e=>Object.keys(e).includes("args"),Pe=e=>lodash.isObject(e)&&viem.isHex(e.transactionHash);var Mi=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=E({chain:r.targetChain}),p=Fn({params:t,transferData:a,targetClient:m,config:e}),c=ce({targetClient:m,getTargetTxHash:p,checkMetadata:Pe,trackingParams:t,trackingConfig:x});return _({promise:c,delay:1e3*30,startAfter:x.initialDelayMs})},Oi=async e=>{let{sourceChain:t,targetChain:r}=e.bridgeTransfer,n=E({chain:t}),i=E({chain:r}),o=Ke(),s=pe({sourceClient:n,targetClient:i,getMetadata:o,checkMetadata:Pe,trackingParams:e,trackingConfig:x});return _({promise:s,delay:1e3*30,startAfter:x.initialDelayMs})};function Mn(e,t){let r,n=()=>{r?.();};return {result:(async()=>{let{bridgeTransfer:o,updateListener:s}=t,{result:a,cancel:m}=await Oi({bridgeTransfer:o,updateListener:s});r=m;let p=await a,{result:c,cancel:d}=await Mi(e,{updateListener:s,bridgeTransfer:p});return r=d,c})(),cancel:n}}var Je=async({amount:e,source:t,sourceChain:r,fromAddress:n,sign:i,onStepChange:o,gasSettings:s})=>{let a=E({chain:r}),m={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};o?.(m);let p=viem.encodeFunctionData({abi:Ce,functionName:"unwrap",args:[e,0n]}),c=await i({from:n,to:t.token.address,data:p,...s?{maxFeePerGas:s.price,maxPriorityFeePerGas:s.tip}:null,chainId:B.toEip155HexChainId(B.toJSON(r.chainId))},d=>a.sendRawTransaction({serializedTransaction:d}),m);return await a.waitForTransactionReceipt({hash:c}),c};var On={ethereum:"0x6b7a87899490EcE95443e979cA9485CBE7E71522",avalanche:"0x9b17bAADf0f21F03e35249e0e59723F34994F806"},Vi=async({amount:e,config:t,source:r,sourceChain:n,fromAddress:i,sign:o,onStepChange:s,gasSettings:a})=>{let m=t.walletAddresses.ethereum,p=E({chain:n}),c={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};s?.(c);let d=viem.encodeFunctionData({abi:D,functionName:"transfer",args:[m,e]}),u=await o({from:i,to:r.token.address,data:d,...a?{maxFeePerGas:a.price,maxPriorityFeePerGas:a.tip}:null,chainId:B.toEip155HexChainId(B.toJSON(n.chainId))},f=>p.sendRawTransaction({serializedTransaction:f}),c);return await p.waitForTransactionReceipt({hash:u}),u},Li=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 E({chain:r}).readContract({address:i.token.address,abi:D,functionName:"allowance",args:[t,On.ethereum]})!==0n?!0:await E({chain:n}).readContract({address:o.token.address,abi:D,functionName:"allowance",args:[t,On.avalanche]})!==0n}catch{return !1}},Ui=async({amount:e,config:t,fromAddress:r,source:n,sourceChain:i,targetChain:o,sign:s,onStepChange:a,gasSettings:m})=>{let p=t.walletAddresses.ethereum,c=E({chain:i});if(!$e(o))throw new l("INVALID_PARAMS","Invalid chain combinations");if(await Li({config:t,fromAddress:r,sourceChain:i,targetChain:o}))throw new l("VULNERABLE_TOKEN_APPROVAL_ADDRESS","Address has vulnerable token approvals");let u={currentSignature:1,currentSignatureReason:"wrap-token",requiredSignatures:2};a?.(u);let f=viem.encodeFunctionData({abi:Ge,functionName:"deposit"}),y=await s({from:r,to:n.token.address,value:e,data:f,...m?{maxFeePerGas:m.price,maxPriorityFeePerGas:m.tip}:null,chainId:B.toEip155HexChainId(B.toJSON(i.chainId))},A=>c.sendRawTransaction({serializedTransaction:A}),u);await c.waitForTransactionReceipt({hash:y});let g={currentSignature:2,currentSignatureReason:"tokens-transfer",requiredSignatures:2};a?.(g);let C=viem.encodeFunctionData({abi:D,functionName:"transfer",args:[p,e]}),b=await s({from:r,to:n.token.address,data:C,...m?{maxFeePerGas:m.price,maxPriorityFeePerGas:m.tip}:null,chainId:B.toEip155HexChainId(B.toJSON(i.chainId))},A=>c.sendRawTransaction({serializedTransaction:A}),g);return await c.waitForTransactionReceipt({hash:b}),b},Hn=async({amount:e,asset:t,config:r,fromAddress:n,source:i,sourceChain:o,targetChain:s,sign:a,onStepChange:m,gasSettings:p})=>le(t)?Ui({amount:e,config:r,fromAddress:n,source:i,sourceChain:o,targetChain:s,sign:a,onStepChange:m,gasSettings:p}):Vi({amount:e,config:r,source:i,sourceChain:o,fromAddress:n,sign:a,onStepChange:m,gasSettings:p});var Be=(e,t)=>{let r=t.map(i=>i.toLowerCase()),n=e.find(i=>r.includes(i.toLowerCase()));if(n)throw new l("ADDRESS_IS_BLOCKED",n)};async function Vn(e,t,r){let{sourceChain:n,targetChain:i,asset:o,amount:s,fromAddress:a,toAddress:m,onStepChange:p,gasSettings:c}=t;if(a!==m)throw new l("INVALID_PARAMS","fromAddress and toAddress do not match");Be([a,m],e.addressBlocklist);let d=await re(e,{asset:o,amount:s,sourceChain:n,targetChain:i}),{source:u,target:f,ethToAva:y}=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 l("INVALID_PARAMS",`Minimum transfer amount is ${g.toString()}`);let C=$e(n)?e.minimumConfirmations.avalanche:e.minimumConfirmations.ethereum,b=d[f.chainId]?.[f.token.address]??0n,A;y?A=await Hn({amount:s,asset:o,config:e,fromAddress:a,source:u,sourceChain:n,targetChain:i,sign:r.sign,onStepChange:p,gasSettings:c}):A=await Je({amount:s,fromAddress:a,source:u,sourceChain:n,sign:r.sign,onStepChange:p,gasSettings:c});let w=Date.now(),I=E({chain:t.targetChain}),N;try{N=await I.getBlockNumber();}catch(J){console.error(J);}return {type:"avalanche-evm",environment:e.environment,fromAddress:t.fromAddress,toAddress:t.toAddress,amount:t.amount,asset:o,bridgeFee:b,sourceChain:t.sourceChain,sourceStartedAt:w,sourceTxHash:A,sourceConfirmationCount:0,sourceRequiredConfirmationCount:C,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:N}}var Ln=(e,t)=>{let r=e.critical.assets,{ethereum:n,avalanche:i}=e.critical.networks;if(n===void 0||i===void 0)throw new S("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 S("CONFIG_NOT_AVAILABLE","Wallet address is missing from the critical config.");let a=Object.entries(r).reduce((y,[g,C])=>{let b={type:"erc20",address:C.nativeContractAddress,name:C.tokenName,symbol:g,decimals:C.denomination},A=e.nonCritical.wrapFeeApproximation[g];return y[C.nativeContractAddress]={chainId:`eip155:${n}`,token:b,target:{chainId:`eip155:${i}`,tokenAddress:C.wrappedContractAddress},wrapFeeApproximation:ue(A)?A:A?BigInt(A):void 0},y},{}),m=Object.values(a).find(y=>y.token.symbol==="WETH");if(!m)throw new S("CONFIG_NOT_AVAILABLE","WETH info is missing from config");let p=Object.entries(r).reduce((y,[g,C])=>{let b={type:"erc20",address:C.wrappedContractAddress,name:C.tokenName,symbol:`${g}.e`,decimals:C.denomination},A=e.nonCritical.unwrapFeeApproximation[g];return y[C.wrappedContractAddress]={chainId:`eip155:${i}`,token:b,target:{chainId:`eip155:${n}`,tokenAddress:C.nativeContractAddress},unwrapFeeApproximation:ue(A)?A:A?BigInt(A):void 0},y},{}),c=p[m.target.tokenAddress];if(!c)throw new S("CONFIG_NOT_AVAILABLE","WETH.e info is missing from config");let d=e.nonCritical.minimumConfirmations.avalanche,u=e.nonCritical.minimumConfirmations.ethereum;if(!d||!u)throw new S("CONFIG_NOT_AVAILABLE","Minimum confirmation info is missing");return {addressBlocklist:e.critical.addressBlocklist,ethereumTokens:a,avalancheTokens:p,minimumConfirmations:{avalanche:d,ethereum:u},environment:t,walletAddresses:{avalanche:o,ethereum:s},nativeTokenConfig:{ethereumToken:m,avalancheToken:c}}};var Un={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"]}},Gn={...Un,environment:"staging"},zn={...Gn,environment:"test",configMismatchThreshold:2,wardenConfigURLs:["https://ava-warden-bucket.s3.eu-central-1.amazonaws.com/bridge_settings.json","https://ava-warden-testnet.s3.us-west-1.amazonaws.com/bridge_settings.json","https://assets.warden-testnet.avalanche.protofire.io/bridge_settings.json","https://avalabs-warden-test-blob.s3.amazonaws.com/bridge_settings.json","https://avawarden.s3.amazonaws.com/bridge_settings.json","https://blob-storage-testnet.warden-avascan.info/bridge_settings.json","https://chainstack-ava-warden-testnet.s3.us-west-2.amazonaws.com/bridge_settings.json","https://em-warden-testnet.enclave-warden.com/bridge_settings.json"]},Gi={...zn,environment:"production",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.json",wardenConfigURLs:["https://ava-warden-bucket-prod.s3.eu-central-1.amazonaws.com/bridge_settings.json","https://ava-warden-mainnet.s3.us-west-1.amazonaws.com/bridge_settings.json","https://assets.warden-mainnet.avalanche.protofire.io/bridge_settings.json","https://avawarden-prod.s3.amazonaws.com/bridge_settings.json","https://blob-storage-mainnet.warden-avascan.info/bridge_settings.json","https://chainstack-ava-warden-mainnet.s3.us-west-2.amazonaws.com/bridge_settings.json","https://em-warden-mainnet.enclave-warden.com/bridge_settings.json","https://warden-avax-storage.s3.amazonaws.com/bridge_settings.json"],disabledTokensOnNetwork:{avalanche:[],ethereum:["CRV"]}},zi={production:Gi,staging:Gn,test:zn,dev:Un},Ze=e=>zi[e];var Xi=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=wn.parse(o);n.push(s);}catch(o){console.error(o);}return n},qi=e=>e.map(t=>{if(t.critical.disableFrontend)throw new S("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}}),Qe=lodash.memoize(async e=>{let t=e.wardenConfigURLs,r=await Xi(t),n=qi(r),i=lodash.maxBy(n,o=>o.count);if(!i||i.count<e.wardenConfigURLs.length-e.configMismatchThreshold)throw new S("WARDEN_CONFIG_MISMATCH","Warden config mismatch");return i.config});var Wn=async e=>{let t=Ze(e),r=await Qe(t);return Ln(r,e)};function $n(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 Wn(e);return {type:"avalanche-evm",analyzeTx:n=>{try{return $n(r,Te(n))}catch{return {isBridgeTx:!1}}},estimateGas:n=>Rn(r,K(n)),estimateReceiveAmount:n=>Dn(r,K(n)),getAssets:()=>_n(r),getFees:n=>re(r,n),transferAsset:n=>Vn(r,ge(n),t),trackTransfer:n=>Mn(r,n),getMinimumTransferAmount:n=>qe(r,n)}};var Ct=e=>"wrapFeeEstimate"in e,ae=e=>"wrapFeeEstimate"in e||"unwrapFeeEstimate"in e;var Xn=(e,t)=>{let r=e.criticalBitcoin,n=r.bitcoinAssets.btc;if(!n)throw new S("CONFIG_NOT_AVAILABLE","Bitcoin asset info is missing from config");let i=e.nonCriticalBitcoin.networkInfo.btc;if(!i)throw new S("CONFIG_NOT_AVAILABLE","Bitcoin network info was not found.");let o=i.currentBridgeFeeEstimate,s=Ct(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},p=Ct(o)?{unwrapFeeEstimate:o.unwrapFeeEstimate}:{constUnwrapFeeAmount:o.constUnwrapFeeAmount,unwrapFeeNumerator:o.unwrapFeeNumerator,unwrapFeeDenominator:o.unwrapFeeDenominator},c={chainId:`eip155:${r.avalancheChainId}`,token:{name:n.tokenName,symbol:"BTC.b",decimals:8,type:"erc20",address:n.wrappedContractAddress},target:{networkId:a},bridgeFeeEstimate:p};return {addressBlocklist:e.criticalBitcoin.addressBlocklist,environment:t,dustThreshold:o.dustThreshold,minimumOnboardSize:i.minimumOnboardSize,minimumConfirmations:{bitcoin:i.minimumConfirmations,avalanche:e.nonCritical.minimumConfirmations.avalanche??1},nativeTokenConfig:{bitcoinToken:m,avalancheToken:c},walletAddresses:{bitcoin:r.walletAddresses.btc,avalanche:r.walletAddresses.avalanche}}};var et=async e=>{try{let t=Ze(e),r=await Qe(t);return Xn(r,e)}catch{throw new S("CONFIG_NOT_AVAILABLE")}};function Kn(e,t){let{chainId:r,from:n,to:i,tokenTransfers:o}=t,s=De(r),a=je(r);if(!s&&!a)return {isBridgeTx:!1};let m=Xe(r),p=m?"eip155:43113":"eip155:43114",c=m?"bip122:000000000933ea01ad0ee984209779ba":"bip122:000000000019d6689c085ae165831e93",d=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===M)||d?{isBridgeTx:!0,sourceChainId:c,targetChainId:p,bridgeType:"avalanche-btc-ava"}:{isBridgeTx:!1}}var Jn=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()}),Zn=zod.z.array(Jn);Jn.extend({script:zod.z.optional(zod.z.string())});var Ki=zod.z.object({address:zod.z.string(),value:zod.z.number()}),Qn=zod.z.array(Ki);function Zi(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 tt(e,t,r,n,i,o){let s=Zi(i),a=[{address:e,value:Number(r)}],{inputs:m,outputs:p,fee:c}=Ji__default.default(s,a,n);if(typeof c!="number")throw new l("UNKNOWN","Unable to choose utxo properly");if(!m||!p||!p.length)return {fee:c};let d=await o.getScriptsForUtxos(m),u=Zn.parse(d),f=[p[0]],y=p[1];y&&f.push({address:t,value:y.value});let g=Qn.parse(f);return {inputs:u,outputs:g,fee:c}}var Yi=(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),eo=(e,t)=>lodash.isEqual(e,Ee(t)),U=(e,t)=>{let{sourceChain:r,targetChain:n,amount:i,asset:o}=e;if(!Yi(r,n))throw new l("INVALID_PARAMS","SourceChain and TargetChain combination is not valid");if(i<=0n)throw new l("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let s=t.nativeTokenConfig.bitcoinToken;if(!eo(s.token,o))throw new l("ASSET_NOT_SUPPORTED","Incorrect Asset was provided");return {source:s,target:t.nativeTokenConfig.avalancheToken,btcToAva:!0}};async function Yn(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,p=1,{utxos:c}=await r.getUtxoBalance(n,!1),{fee:d}=await tt(m,n,a,p,c,r);return BigInt(d)}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=be(i,s.bridgeFeeEstimate.wrapFeeEstimate);return {[a.chainId]:{[a.token.address]:m}}}return {[a.chainId]:{[a.token.address]:BigInt(s.bridgeFeeEstimate.wrapFeeAmount)}}}async function er(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o}=t,{target:s}=U({sourceChain:r,targetChain:n,asset:i,amount:o},e),a=await ie(e,t);return {asset:s.token,amount:t.amount-(a[s.chainId]?.[s.token.address]??0n)}}function tr(e){let t=e.nativeTokenConfig.bitcoinToken,r={...t.token,destinations:{[t.target.networkId]:["avalanche-btc-ava"]}};return {[t.chainId]:[r]}}async function nr(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 to(e,t,s),m=e.minimumOnboardSize;return BigInt(Math.max(a*4,m))}async function to(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 rr=({targetClient:e,checkMetadata:t,trackingParams:{bridgeTransfer:r,updateListener:n},trackingConfig:{trackingLimitMs:i},bitcoinFunctions:o})=>{let s=lodash.cloneDeep(r);return async m=>{let{sourceTxHash:p}=r;if(s.completedAt||t(s.metadata))return m(s);if(s.sourceStartedAt+i<=Date.now())return s=h(s,{completedAt:Date.now(),errorCode:5004},n),m(s);let{confirmations:c,fees:d}=await o.getTransaction(p);if(!s.sourceNetworkFee){let y=BigInt(Math.ceil(d));s=h(s,{sourceNetworkFee:y},n);}let u=c>s.sourceConfirmationCount,f=c>=s.sourceRequiredConfirmationCount;if(u){let y={};y.sourceConfirmationCount=Number(c),f||(y.targetStartBlockNumber=await e.getBlockNumber()),s=h(s,y,n);}if(f)return s.targetStartBlockNumber||(s=h(s,{targetStartBlockNumber:await e.getBlockNumber()},n)),s=h(s,{targetStartedAt:Date.now(),metadata:{transactionHash:p}},n),m(s)}};var or=({targetClient:e,getTargetTxHash:t,checkMetadata:r,trackingParams:{bridgeTransfer:n,updateListener:i},trackingConfig:{trackingLimitMs:o,maxBlocks:s}})=>{if(!n.completedAt&&!r(n.metadata))throw new l("INVALID_PARAMS","metadata is missing");if(!n.targetStartBlockNumber)throw new l("INVALID_PARAMS","targetStartBlockNumber is missing");let a=lodash.cloneDeep(n);return async p=>{if(a.completedAt)return p(a);if(a.sourceStartedAt+o<=Date.now())return a=h(a,{completedAt:Date.now(),errorCode:5004},i),p(a);if(!a.targetStartBlockNumber)throw new Error("unreachable");if(!a.targetTxHash){let y=await e.getBlockNumber(),g=a.targetStartBlockNumber-s,C=g>=0n?g:"earliest",b=a.targetStartBlockNumber+s,A=b<y?b:"latest",w=await t({fromBlock:C,toBlock:A,metadata:a.metadata});if(w)a=h(a,{targetTxHash:w},i);else {a=h(a,{targetStartBlockNumber:y},i);return}}if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let c=await e.getTransactionReceipt({hash:a.targetTxHash});if(!a.targetNetworkFee){let y=await e.getTransaction({hash:a.targetTxHash}),g=te(y,c);g&&(a=h(a,{targetNetworkFee:g},i));}if(c.status==="reverted")return a=h(a,{completedAt:Date.now(),errorCode:5005},i),p(a);if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let d=await e.getTransactionConfirmations({hash:a.targetTxHash}),u=d>a.targetConfirmationCount,f=d>=a.targetRequiredConfirmationCount;if(u&&(a=h(a,{targetConfirmationCount:Number(d)},i)),!!f)return a=h(a,{completedAt:Date.now()},i),p(a)}};var ht=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(p=>gt(p)&&p.args.originTxId===`0x${i?.transactionHash}`);if(!lodash.isNil(m))return m.transactionHash};var oo=async(e,t)=>{let{targetChain:r}=e.bridgeTransfer,n=E({chain:r}),i=rr({targetClient:n,trackingParams:e,trackingConfig:x,checkMetadata:ht,bitcoinFunctions:t});return _({promise:i,delay:1e3*60,startAfter:x.initialDelayMs})},so=async(e,t)=>{let{bridgeTransfer:r}=e,n=E({chain:r.targetChain}),i=sr({transferData:t,targetClient:n}),o=or({targetClient:n,getTargetTxHash:i,checkMetadata:ht,trackingParams:e,trackingConfig:x});return _({promise:o,delay:2e3,startAfter:x.initialDelayMs})};function mr(e,t,r){let n,i=()=>{n?.();};return {result:(async()=>{let{bridgeTransfer:s}=t,{targetChain:a,sourceChain:m,asset:p,amount:c}=s,d=U({sourceChain:m,targetChain:a,asset:p,amount:c},e),{result:u,cancel:f}=await oo(t,r);n=f;let y=await u,{result:g,cancel:C}=await so({...t,bridgeTransfer:y},d);return n=C,g})(),cancel:i}}var pr=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:p}=a?{low:a,high:a}:await o.getFeeRates(),c=e.environment==="production"?p:m,{utxos:d}=await o.getUtxoBalance(r,!1),u=e.walletAddresses.bitcoin,{inputs:f,outputs:y}=await tt(u,r,t,c,d,o);if(!f||!y)throw new l("INVALID_PARAMS","Unable to create transaction");let g={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};return i?.(g),await n({inputs:f,outputs:y},o.issueRawTx,g)};async function cr(e,t,r,n){let{fromAddress:i,toAddress:o,sourceChain:s,targetChain:a,asset:m,amount:p,onStepChange:c,gasSettings:d}=t;Be([i,o],e.addressBlocklist);let{target:u}=U({sourceChain:s,targetChain:a,asset:m,amount:p},e),f=Date.now(),g=(await ie(e,{asset:m,amount:p,sourceChain:s,targetChain:a}))[u.chainId]?.[u.token.address]??0n,C=e.minimumConfirmations.bitcoin,b=await pr({config:e,amount:p,sign:r.sign,onStepChange:c,fromAddress:i,bitcoinFunctions:n,gasSettings:d}),A=E({chain:a}),w;try{w=await A.getBlockNumber();}catch(N){console.error(N);}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:w}}var dr=({fromAddress:e,toAddress:t,sourceChain:r,...n})=>{if(!viem.isAddress(t))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid toAddress was provided");let i=ne(r);if(!Ne(e,i))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided: Make sure it is Btc Address from correct environment");return {fromAddress:e,toAddress:t,sourceChain:r,...n}},Et=({fromAddress:e,sourceChain:t,...r})=>{let n=ne(t);if(!Ne(e,n))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided: Make sure it is Btc Address from correct environment");return {fromAddress:e,sourceChain:t,...r}};var ur=async(e,t,r)=>{let n=await et(e);return {type:"avalanche-btc-ava",analyzeTx:i=>Kn(n,i),estimateGas:i=>Yn(n,Et(i),r),estimateReceiveAmount:i=>er(n,Et(i)),getAssets:()=>tr(n),getFees:i=>ie(n,i),transferAsset:i=>cr(n,dr(i),t,r),trackTransfer:i=>mr(n,i,r),getMinimumTransferAmount:i=>nr(n,i)}};function yr(e,t){let{chainId:r,from:n,to:i,tokenTransfers:o}=t,s=De(r),a=je(r);if(!s&&!a)return {isBridgeTx:!1};let m=Xe(r),p=m?"eip155:43113":"eip155:43114",c=m?"bip122:000000000933ea01ad0ee984209779ba":"bip122:000000000019d6689c085ae165831e93",d=s&&lodash.isEqual(i.toLowerCase(),e.nativeTokenConfig.avalancheToken.token.address.toLowerCase())&&o.some(f=>f.to?.toLowerCase()===M.toLowerCase()&&f.symbol==="BTC.b"),u=a&&lodash.isEqual(n.toLowerCase(),e.walletAddresses.bitcoin.toLowerCase())&&o.some(f=>f.symbol==="BTC");return d||u?{isBridgeTx:!0,sourceChainId:p,targetChainId:c,bridgeType:"avalanche-ava-btc"}:{isBridgeTx:!1}}var co=(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),uo=(e,t)=>lodash.isEqual(e,Ee(t)),G=(e,t)=>{let{sourceChain:r,targetChain:n,amount:i,asset:o}=e;if(!co(r,n))throw new l("INVALID_PARAMS","SourceChain and TargetChain combination is not valid");if(i<=0n)throw new l("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let s=t.nativeTokenConfig.avalancheToken;if(!uo(s.token,o))throw new l("ASSET_NOT_SUPPORTED","Incorrect Asset was provided");return {source:s,target:t.nativeTokenConfig.bitcoinToken,btcToAva:!1}};async function lr(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 E({chain:r}).estimateContractGas({address:a.token.address,abi:Ce,functionName:"unwrap",account:s,args:[o,0]})}async function oe(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:p}=s.bridgeFeeEstimate.unwrapFeeEstimate.estimatedTxFee,c=a+m/p*Number(i),d=be(i,s.bridgeFeeEstimate.unwrapFeeEstimate.bridgeToll),u=BigInt(Math.ceil(c))+d;return {[n.chainId]:{NATIVE:BigInt(u)}}}else {let{constUnwrapFeeAmount:a,unwrapFeeNumerator:m,unwrapFeeDenominator:p}=s.bridgeFeeEstimate,c=a+m/p*Number(i),d=BigInt(Math.ceil(c));return {[n.chainId]:{NATIVE:BigInt(d)}}}}async function Tr(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o}=t,{target:s}=G({sourceChain:r,targetChain:n,asset:i,amount:o},e),a=await oe(e,{sourceChain:r,targetChain:n,amount:o,asset:i});return {asset:s.token,amount:t.amount-(a[s.chainId]?.NATIVE??0n)}}function gr(e){let t=e.nativeTokenConfig.avalancheToken,r={...t.token,destinations:{[t.target.networkId]:["avalanche-ava-btc"]}};return {[t.chainId]:[r]}}async function Ar(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 fo(e,t,s),m=e.dustThreshold;return BigInt(Math.ceil((a+m)*2))}async function fo(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 oe(e,t);return Number(n[t.targetChain.chainId]?.NATIVE)}}var hr=({sourceClient:e,getMetadata:t,checkMetadata:r,trackingParams:{bridgeTransfer:n,updateListener:i},trackingConfig:{trackingLimitMs:o},bitcoinFunctions:s})=>{let a=lodash.cloneDeep(n);return async p=>{if(a.completedAt||r(a.metadata))return p(a);if(a.sourceStartedAt+o<=Date.now())return a=h(a,{completedAt:Date.now(),errorCode:5004},i),p(a);if(!viem.isHash(a.sourceTxHash))return;let c=await e.getTransactionReceipt({hash:a.sourceTxHash});if(!a.sourceNetworkFee){let g=await e.getTransaction({hash:a.sourceTxHash}),C=te(g,c);C&&(a=h(a,{sourceNetworkFee:C},i));}if(c.status==="reverted")return a=h(a,{completedAt:Date.now(),errorCode:5005},i),p(a);if(!viem.isHash(a.sourceTxHash))return;let d=await e.getTransactionConfirmations({hash:a.sourceTxHash}),u=d>a.sourceConfirmationCount,f=d>=a.sourceRequiredConfirmationCount;if(u){let g={};g.sourceConfirmationCount=Number(d),f||(g.targetStartBlockNumber=BigInt(await s.getChainHeight())),a=h(a,g,i);}if(!f)return;a.targetStartBlockNumber||(a=h(a,{targetStartBlockNumber:BigInt(await s.getChainHeight())},i));let y=t(c);return a=h(a,{targetStartedAt:Date.now(),metadata:y},i),p(a)}};var Er=({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 l("INVALID_PARAMS","targetStartBlockNumber is missing");let m=lodash.cloneDeep(e);return async c=>{if(m.completedAt)return c(m);if(m.sourceStartedAt+r<=Date.now())return m=h(m,{completedAt:Date.now(),errorCode:5004},t),c(m);if(!m.targetStartBlockNumber)throw new Error("unreachable");let d;if(!m.targetTxHash){let{confirmed:f,unconfirmed:y}=await i.getUTXOs(o,!1),C=[...f.filter(b=>!s||b.blockHeight>=s).sort((b,A)=>b.blockHeight-A.blockHeight),...y];for(let b of C){if(d=await i.getTransaction(b.txHash),!d)return;if(d.addresses.includes(n.walletAddresses.bitcoin)){m=h(m,{targetTxHash:d.hash,targetNetworkFee:BigInt(d.fees),targetConfirmationCount:d.confirmations},t);let w=d.outputs.find(N=>N.addresses?.length===1&&N.addresses[0]===o),I=w&&BigInt(Math.ceil(Number(a)-w.value));I&&(m=h(m,{bridgeFee:I},t));break}}if(!m.targetTxHash)return}if(d||(d=await i.getTransaction(m.targetTxHash)),!d)return;if(d.confirmations>=m.targetRequiredConfirmationCount)return m=h(m,{completedAt:Date.now(),targetConfirmationCount:d.confirmations},t),c(m)}};var To=async(e,t)=>{let{sourceChain:r}=e.bridgeTransfer,n=E({chain:r}),i=Ke(),o=hr({sourceClient:n,getMetadata:i,checkMetadata:Pe,trackingParams:e,trackingConfig:x,bitcoinFunctions:t});return _({promise:o,delay:2e3,startAfter:x.initialDelayMs})},go=async(e,t,r)=>{let n=Er({trackingParams:t,trackingConfig:x,config:e,bitcoinFunctions:r});return _({promise:n,delay:1e3*60,startAfter:x.initialDelayMs})};function br(e,t,r){let n,i=()=>{n?.();};return {result:(async()=>{let{bridgeTransfer:s}=t,{targetChain:a,sourceChain:m,asset:p,amount:c}=s;G({sourceChain:m,targetChain:a,asset:p,amount:c},e);let{result:d,cancel:u}=await To(t,r);n=u;let f=await d,{result:y,cancel:g}=await go(e,{...t,bridgeTransfer:f},r);return n=g,y})(),cancel:i}}async function Br(e,t,r,n){let{sourceChain:i,targetChain:o,asset:s,amount:a,fromAddress:m,toAddress:p,onStepChange:c,gasSettings:d}=t;Be([m,p],e.addressBlocklist);let{source:u}=G({sourceChain:i,targetChain:o,asset:s,amount:a},e),f=Date.now(),g=(await oe(e,{asset:s,amount:a,sourceChain:i,targetChain:o}))[o.chainId]?.NATIVE??0n,C=e.minimumConfirmations.avalanche,b=await Je({amount:a,source:u,sourceChain:i,fromAddress:m,sign:r.sign,onStepChange:c,gasSettings:d}),A=BigInt(await n.getChainHeight());return {type:"avalanche-ava-btc",environment:e.environment,fromAddress:m,toAddress:p,amount:t.amount,asset: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 l("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided");let i=ne(r);if(!Ne(t,i))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid toAddress was provided: Make sure it is Btc Address from correct environment");return {fromAddress:e,toAddress:t,targetChain:r,...n}},bt=({fromAddress:e,targetChain:t,...r})=>{if(!viem.isAddress(e))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided");return {fromAddress:e,targetChain:t,...r}};var kr=async(e,t,r)=>{let n=await et(e);return {type:"avalanche-ava-btc",analyzeTx:i=>yr(n,i),estimateGas:i=>lr(n,bt(i)),estimateReceiveAmount:i=>Tr(n,bt(i)),getAssets:()=>gr(n),getFees:i=>oe(n,i),transferAsset:i=>Br(n,Ir(i),t,r),trackTransfer:i=>br(n,i,r),getMinimumTransferAmount:i=>Ar(n,i)}};var fe=e=>{let t=n=>(...i)=>{console[n](`[${e}]`,...i);};return {log:t("log"),info:t("info"),error:t("error"),warn:t("warn")}};var Bt="test",xr=6,rt=1,at={dev:sdk.Env.dev,test:sdk.Env.ibc,staging:sdk.Env.stage,production:sdk.Env.prod},wr=2e-4,Ao=6,Nr=e=>{switch(e){case"lombard-btcb-to-btc":return Ao;default:return}};var ve={type:"native",name:"Bitcoin",symbol:"BTC",decimals:8},Co={[sdk.Env.dev]:{43113:"0x7FbdC44BfEBDe80C970ba622B678daB36cee31f6"},[sdk.Env.ibc]:{43113:"0x71ba2b8dc58e7ca1b6d81a60729e31aefa37ae02"},[sdk.Env.testnet]:{43113:"0xB14f240714Bd23Bda103A7189D512A90326E4D01"},[sdk.Env.stage]:{43113:"0x0000000000000000000000000000000000000000"},[sdk.Env.prod]:{43114:"0x152b9d0FdC40C096757F570A51E494bd4b943E50"}},it=(e,t)=>{let r=Co[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 ot(e,t,r,n){let i=0n,o=0n,s=0n;try{let a=await sdk.getMintingFee({token:e,chainId:t,env:r});i=BigInt(sdk.toBaseDenomination(a,8).toFixed());}catch(a){n?.error("unable to fetch the minting fee:",a);}try{let a=await sdk.getRedeemFee({token:e,chainId:t,env:r});o=BigInt(sdk.toBaseDenomination(a,8).toFixed());}catch(a){n?.error("unable to fetch the redeem fee:",a);}try{let a=await sdk.getMinRedeemAmount({token:e,chainId:t,env:r});s=BigInt(sdk.toBaseDenomination(a,8).toFixed());}catch(a){n?.error("unable to fetch the min redeem amount:",a);}return {mintingFee:i,redeemFee:o,minRedeemAmount:s}}function Ie(e){let{namespace:t,reference:r}=B.toJSON(e);if(t!=="eip155")throw new Error("Invalid namespace provided.");return Number(r)}function Sr(e,t){return {isBridgeTx:!1}}async function Rr(e,t){return 0n}async function Dr(e,t){return {asset:e.targetAsset,amount:t.amount-e.mintingFee}}function _r(e){return {[e.sourceChain]:[{...ve,destinations:{[e.targetChain]:["lombard-btc-to-btcb"]}}]}}async function Pr(e,t){return {[e.targetChain]:{[e.targetAsset.address]:e.mintingFee}}}async function Fr(e,t){return BigInt(sdk.toBaseDenomination(wr,ve.decimals).toFixed())}var Mr=e=>e.notarizationStatus===sdk.ENotarizationStatus.NOTARIZATION_STATUS_FAILED||e.sessionState===sdk.ESessionState.SESSION_STATE_EXPIRED,Or=(e,t,r)=>{let n=t!==void 0&&e?.notarizationStatus!==t,i=r!==void 0&&e?.sessionState!==r;return {needsNotarizationUpdate:n,needsSessionStateUpdate:i}};var Vr=(e,t,r)=>({bridgeTransfer:n,updateListener:i})=>{let o=fe(e),s=()=>{},a=E({chain:n.targetChain}),m=lodash.cloneDeep(n);return {cancel:s,result:(async()=>{if(m.completedAt)return m;let{confirmations:c,fees:d}=await t.getTransaction(m.sourceTxHash);if(m.sourceNetworkFee||(m=h(m,{sourceNetworkFee:BigInt(Math.ceil(d))},i)),c>m.sourceConfirmationCount&&(m=h(m,{sourceConfirmationCount:c},i)),c>m.sourceRequiredConfirmationCount){let y=await a.getBlockNumber();m=h(m,{targetStartBlockNumber:y},i);}let f=(await sdk.getDepositsByAddress({address:m.toAddress,env:r})).find(y=>y.txHash.toLowerCase()===m.sourceTxHash.toLowerCase());if(f){let y=f.claimTxHash,g,C,b,{needsNotarizationUpdate:A,needsSessionStateUpdate:w}=Or(m.metadata,f.notarizationStatus,f.sessionState);if(A||w){let I={...m.metadata};A&&(I.notarizationStatus=f.notarizationStatus),w&&(I.sessionState=f.sessionState),m=h(m,{metadata:I},i);}if(Mr(f)&&(o.warn(`The deposit ${n.sourceTxHash} for ${n.toAddress} could not be completed, try to mint manually or contact support.`),m=h(m,{completedAt:Date.now(),errorCode:5006},i)),y){let I=await a.waitForTransactionReceipt({hash:y});g=BigInt(I.gasUsed??0n)*BigInt(I.effectiveGasPrice??0n),C=Number(await a.getTransactionConfirmations({transactionReceipt:I}));let{timestamp:N}=await a.getBlock({blockNumber:I.blockNumber});b=Number(N),m=h(m,{targetTxHash:y,targetNetworkFee:g,targetConfirmationCount:C,completedAt:b},i);}}return m})()}},Lr=(e,t,r)=>({bridgeTransfer:n,updateListener:i})=>{let o=fe(e),s=()=>{},a=E({chain:n.sourceChain}),m=lodash.cloneDeep(n);return {cancel:s,result:(async()=>{if(m.completedAt)return m;let c=await a.waitForTransactionReceipt({hash:m.sourceTxHash}),d=Number(await a.getTransactionConfirmations({transactionReceipt:c}));if(d>m.sourceConfirmationCount&&(m=h(m,{sourceConfirmationCount:d},i)),!m.sourceNetworkFee){let y=BigInt(c.gasUsed??0n)*BigInt(c.effectiveGasPrice??0n);m=h(m,{sourceNetworkFee:y},i);}let f=(await sdk.getUnstakesByAddress({address:m.fromAddress,env:r})).find(y=>y.txHash.toLowerCase()===m.sourceTxHash.toLowerCase());if(f&&f.payoutTxHash&&(o.info(`found payout tx hash: ${f.payoutTxHash}`),m=h(m,{targetTxHash:f.payoutTxHash},i)),m.targetTxHash){let g=(await t.getTransaction(m.targetTxHash)).confirmations;g>m.targetConfirmationCount&&(m=h(m,{targetConfirmationCount:g},i)),g>=m.targetRequiredConfirmationCount&&(m=h(m,{completedAt:Date.now()},i));}return m})()}};var wo=1e3*30;function Ur(e,t,r){let n=Vr("lombard-btc-to-btcb",r,e.env);return _({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:wo,startAfter:x.initialDelayMs})}function So(e){return e.toLowerCase().startsWith("tb1")||e.toLowerCase().startsWith("bc1")}function Ro(e){if(!So(e))return !1;try{return base.bech32.decode(e),!0}catch{return !1}}function Me(e,t){return Ro(e)?e.toLowerCase().startsWith(t?"bc":"tb"):!1}var Gr=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()}),zr=zod.z.array(Gr);Gr.extend({script:zod.z.optional(zod.z.string())});var Do=zod.z.object({address:zod.z.string(),value:zod.z.number()}),Wr=zod.z.array(Do);function Po(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 $r(e,t,r,n,i,o){let s=Po(i),a=[{address:e,value:Number(r)}],{inputs:m,outputs:p,fee:c}=Ji__default.default(s,a,n);if(typeof c!="number")throw new l("UNKNOWN","Unable to choose utxo properly");if(!m||!p||!p.length)return {fee:c};let d=await o.getScriptsForUtxos(m),u=zr.parse(d),f=[p[0]],y=p[1];y&&f.push({address:t,value:y.value});let g=Wr.parse(f);return {inputs:u,outputs:g,fee:c}}async function jr(e,t,{evmSigner:r,btcSigner:n,bitcoinFunctions:i,logger:o}){let s=E({chain:t.targetChain});if(o.log("transferAsset",t),!Me(t.fromAddress,e.environment==="production"))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided: Make sure it is Btc Address from correct environment");let a=t.toAddress,m=Ie(t.targetChain.chainId),p;try{o.info("trying to retrieve deposit address"),p=await sdk.getDepositBtcAddress({address:a,chainId:m,partnerId:Bt,env:e.env,token:e.targetToken}),o.info(`found BTC deposit address for ${a} on ${m}: ${p}`);}catch(N){o.info(`could not find deposit address for ${a} on ${m}.`),o.error(`error: ${N}`);}let c=p?1:2,d={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:c};if(!p){let N=`destination chain id is ${m}`,J=await r.signMessage({message:N,address:a,chainId:m},ye=>s.sendRawTransaction({serializedTransaction:ye}),d);o.info(`trying to generate BTC deposit address with destination address signature: ${J}`);try{if(p=await sdk.generateDepositBtcAddress({token:e.targetToken,address:a,chainId:m,signature:J,partnerId:Bt,env:e.env}),p===sdk.SANCTIONED_ADDRESS)throw new Error("Could not obtain BTC deposit address, the connected wallet is sanctioned.")}catch(ye){throw o.error(ye),ye}}if(o.info("btc deposit address",p),!Me(p,e.environment==="production"))throw new l("INCORRECT_ADDRESS_PROVIDED","Generated deposit address (toAddress) is invalid");let{low:u,high:f}=await i.getFeeRates(),y=e.environment==="production"?f:u,{utxos:g}=await i.getUtxoBalance(t.fromAddress,!1),{inputs:C,outputs:b}=await $r(p,t.fromAddress,t.amount,y,g,i);if(o.log("BTC tx data",{inputs:C,outputs:b}),!C||!b)throw new l("INVALID_PARAMS","Unable to create transaction");let A=Date.now();t?.onStepChange?.(d);let w=await n.sign({inputs:C,outputs:b},i.issueRawTx,d);o.log("sent BTC, tx hash:",w);let I;try{I=await E({chain:t.targetChain}).getBlockNumber();}catch(N){o.log(N);}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:A,sourceTxHash:w,sourceConfirmationCount:0,sourceRequiredConfirmationCount:xr,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:rt,targetStartBlockNumber:I}}var qr=async(e,t,r,n)=>{let i=fe("lombard-btc-to-btcb"),o=at[e],s=o===sdk.Env.prod?"bip122:000000000019d6689c085ae165831e93":"bip122:000000000933ea01ad0ee984209779ba",a=o===sdk.Env.prod?"eip155:43114":"eip155:43113",m=Ie(a),p=sdk.Token.BTCb,c=it(m,o),d=await ot(p,m,o,i),u={environment:e,env:o,sourceChain:s,targetChain:a,targetChainId:m,targetAsset:c,targetToken:p,mintingFee:d.mintingFee};return {type:"lombard-btc-to-btcb",analyzeTx:f=>Sr(),estimateGas:f=>Rr(),estimateReceiveAmount:f=>Dr(u,f),getAssets:()=>_r(u),getFees:f=>Pr(u),transferAsset:f=>jr(u,f,{evmSigner:t,btcSigner:r,bitcoinFunctions:n,logger:i}),trackTransfer:f=>Ur(u,f,n),getMinimumTransferAmount:f=>Fr()}};function Kr(e,t){return {isBridgeTx:!1}}async function Jr(e,t){return 0n}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 Vo=1e3*60;function ta(e,t,r){let n=Lr("lombard-btcb-to-btc",r,e.env);return _({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:Vo,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,logger:i}){if(i.log("transferAsset",t),!Me(t.toAddress,e.environment==="production"))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid toAddress was provided: Make sure it is Btc Address from correct environment");let o=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}),s=Date.now(),a;try{a=BigInt(await n.getChainHeight());}catch(m){i.log(m);}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:s,sourceTxHash:o,sourceConfirmationCount:0,sourceRequiredConfirmationCount:rt,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:a}}var ia=async(e,t,r,n)=>{let i=fe("lombard-btcb-to-btc");i.info("trying to initialise bridge");let o=at[e],s=o===sdk.Env.prod?"eip155:43114":"eip155:43113",a=o===sdk.Env.prod?"bip122:000000000019d6689c085ae165831e93":"bip122:000000000933ea01ad0ee984209779ba",m=Ie(s),p=it(m,o);i.info("initialising bridge with",{environment:e,env:o,evmSigner:t,bitcoinFunctions:n,tokenContractAddress:p.address});let c=await ot(sdk.Token.BTCb,m,o,i),d={environment:e,env:o,sourceChain:s,targetChain:a,sourceChainId:m,sourceAsset:p,targetAsset:ve,redeemFee:c.redeemFee,minRedeemAmount:c.minRedeemAmount};return {type:"lombard-btcb-to-btc",analyzeTx:u=>Kr(),estimateGas:u=>Jr(),estimateReceiveAmount:u=>Zr(d,u),getAssets:()=>Qr(d),getFees:u=>Yr(d),transferAsset:u=>ra(d,u,{evmSigner:t,bitcoinFunctions:n,logger:i}),trackTransfer:u=>ta(d,u,n),getMinimumTransferAmount:u=>ea(d)}};var st={"avalanche-btc-ava":ur,"avalanche-ava-btc":kr,"avalanche-evm":jn,cctp:Qt,"ictt-erc20-erc20":Bn,"lombard-btc-to-btcb":qr,"lombard-btcb-to-btc":ia},$o=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(kt(n)){let o=st[n.type];return [n.type,await o(e,n.signer,n.bitcoinFunctions)]}if(xt(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)))},se=(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 He};var VC=({environment:e,enabledBridgeServices:t})=>({canTransferAsset:(u,f)=>{try{return se(t,u,f),!0}catch{return !1}},environment:e,estimateGas:async u=>{let{bridge:f}=se(t,u.asset,u.targetChain.chainId);return f.estimateGas(u)},estimateReceiveAmount:async u=>{let{bridge:f}=se(t,u.asset,u.targetChain.chainId);return f.estimateReceiveAmount(u)},getAssets:()=>Array.from(t.values()).map(f=>f.getAssets()).reduce((f,y)=>{for(let[g,C]of Object.entries(y)){let b=f[g];if(b)for(let A of C){let w=b.findIndex(({symbol:I})=>I===A.symbol);w===-1?b.push(A):lodash.mergeWith(b[w],A,(I,N)=>{if(lodash.isArray(I))return [...new Set(I.concat(N))]});}else f[g]=C;}return f},{}),getFees:async u=>{let{bridge:f}=se(t,u.asset,u.targetChain.chainId);return f.getFees(u)},analyzeTx:u=>{let f=["avalanche-ava-btc","avalanche-btc-ava","avalanche-evm","ictt-erc20-erc20","cctp"].map(y=>t.get(y)).filter(y=>!!y);for(let y of f){let g=y.analyzeTx(u);if(g.isBridgeTx)return g}return {isBridgeTx:!1}},getMinimumTransferAmount:async u=>{let{bridge:f}=se(t,u.asset,u.targetChain.chainId);return f.getMinimumTransferAmount(u)},trackTransfer:u=>{let{bridge:f}=se(t,u.bridgeTransfer.asset,u.bridgeTransfer.targetChain.chainId);return f.trackTransfer(u)},transferAsset:async u=>{let{bridge:f}=se(t,u.asset,u.targetChain.chainId);return f.transferAsset(u)}});
7
17
 
8
- exports.BridgeSignatureReason = G;
9
- exports.BridgeType = E;
10
- exports.Environment = K;
11
- exports.ErrorCode = B;
12
- exports.ErrorReason = w;
13
- exports.TokenType = H;
14
- exports.caip2 = M;
15
- exports.createUnifiedBridgeService = _n;
16
- exports.getEnabledBridgeServices = Pe;
18
+ exports.AVALANCHE_FUJI_CHAIN = Yo;
19
+ exports.AVALANCHE_MAINNET_CHAIN = es;
20
+ exports.AvalancheChainIds = X;
21
+ exports.BITCOIN_MAINNET_CHAIN = as;
22
+ exports.BITCOIN_TESTNET_CHAIN = rs;
23
+ exports.BTC_BRIDGE_TYPES = Ko;
24
+ exports.BitcoinChainIds = q;
25
+ exports.BridgeSignatureReason = Z;
26
+ exports.BridgeType = k;
27
+ exports.ETHEREUM_MAINNET_CHAIN = ns;
28
+ exports.ETHEREUM_SEPOLIA_CHAIN = ts;
29
+ exports.EVM_BRIDGE_TYPES = oa;
30
+ exports.Environment = $;
31
+ exports.ErrorCode = z;
32
+ exports.ErrorReason = v;
33
+ exports.EthereumChainIds = Oe;
34
+ exports.TokenType = j;
35
+ exports.caip2 = B;
36
+ exports.createUnifiedBridgeService = VC;
37
+ exports.getEnabledBridgeServices = $o;
38
+ exports.getEstimatedBridgingTime = Nr;
39
+ exports.isAvaToBtcBridgeInitializer = kt;
40
+ exports.isBtcToAvaBridgeInitializer = xt;
41
+ exports.isErc20Asset = W;
42
+ exports.isEvmBridgeInitializer = Jo;
43
+ exports.isLombardBridgeInitializer = It;
44
+ exports.isNativeAsset = le;
17
45
  //# sourceMappingURL=out.js.map
18
46
  //# sourceMappingURL=index.cjs.map