@avalabs/bridge-unified 2.1.2 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -16,7 +16,7 @@ The bridging ecosystem is complex. There are often multiple tools that can be us
16
16
 
17
17
  These are the bridges we currently support:
18
18
 
19
- - **CCTP** - preferred for brdiging USDC between Ethereum and Avalanche C-Chain. See the `bridges/cctp` folder.
19
+ - **CCTP** - preferred for bridging USDC between Ethereum and Avalanche C-Chain. See the `bridges/cctp` folder.
20
20
 
21
21
  Future bridges we plan to support:
22
22
 
@@ -40,8 +40,62 @@ Future bridges we plan to support:
40
40
  import { createUnifiedBridgeService, getEnabledBridgeServices, Environment, BridgeTransfer } from '@avalabs/bridge-unified';
41
41
 
42
42
  const environment = Environment.TEST;
43
+ const evmSigner: EvmSigner = {
44
+ sign: async ({ data, from, to, value }) => {
45
+ return await window.ethereum.request({
46
+ method: 'eth_sendTransaction,',
47
+ params:{
48
+ account: from,
49
+ data: data ?? undefined,
50
+ from,
51
+ to: to ?? null,
52
+ chain: undefined,
53
+ value
54
+ }
55
+ });
56
+ },
57
+ };
58
+
59
+ const btcSigner: BtcSigner = {
60
+ sign: async ({ inputs, outputs }) => {
61
+ return await window.ethereum.request({
62
+ method: 'bitcoin_signTransaction',
63
+ params: { inputs, outputs },
64
+ });
65
+ },
66
+ };
67
+
68
+ const cctpInitializer: EvmBridgeInitializer = {
69
+ type: BridgeType.CCTP,
70
+ signer: evmSigner,
71
+ };
72
+ const icttErc20Initializer: EvmBridgeInitializer = {
73
+ type: BridgeType.ICTT_ERC20_ERC20,
74
+ signer: evmSigner,
75
+ };
76
+ const avalancheEvmInitializer: EvmBridgeInitializer = {
77
+ type: BridgeType.AVALANCHE_EVM,
78
+ signer: evmSigner,
79
+ };
80
+ const avalancheBtcInitializer: AvaToBtcBridgeInitializer = {
81
+ type: BridgeType.AVALANCHE_AVA_BTC,
82
+ signer: evmSigner,
83
+ bitcoinFunctions: bitcoinProvider as BitcoinFunctions,
84
+ };
85
+ const bitcoinAvaInitializer: BtcToAvaBridgeInitializer = {
86
+ type: BridgeType.AVALANCHE_BTC_AVA,
87
+ signer: btcSigner,
88
+ bitcoinFunctions: bitcoinProvider as BitcoinFunctions,
89
+ };
90
+
43
91
  // use all available bridges
44
- const disabledBridgeTypes = []
92
+ const enabledBridgeInitializers: BridgeInitializer[] = [
93
+ cctpInitializer,
94
+ icttErc20Initializer,
95
+ avalancheEvmInitializer,
96
+ avalancheBtcInitializer,
97
+ bitcoinAvaInitializer,
98
+ ]
45
99
 
46
100
  // fetch all available bridge services
47
101
  const enabledBridgeServices = await getEnabledBridgeServices(environment, disabledBridgeTypes);
@@ -69,7 +123,7 @@ const updateListener = (transfer: BridgeTransfer) => {
69
123
  // start tracking the transfer's state. whenever the state changes, it will call the provided `updateListener`
70
124
  const { cancel, result } = await unifiedService.trackTransfer({bridgeTransfer, updateListener, ...})
71
125
 
72
- // immediatelly stops tracking and rejects the tracker's promise
126
+ // immediately stops tracking and rejects the tracker's promise
73
127
  // cancel()
74
128
 
75
129
  // wait for the transfer to finish and get its final state
@@ -78,9 +132,9 @@ const finalizedBridgeTransfer = await result
78
132
 
79
133
  ## API
80
134
 
81
- ### getEnabledBridgeServices(environment, disabledBridgeTypes);
135
+ ### getEnabledBridgeServices(environment, enabledBridgeInitializers);
82
136
 
83
- Type: `(environment: Environment, disabledBridgeTypes: BridgeType[]) => Promise<BridgeServicesMap>`
137
+ Type: `(environment: Environment, enabledBridgeInitializers: BridgeInitializer[]) => Promise<BridgeServicesMap>`
84
138
 
85
139
  Returns all available bridge services for a given environment (excluding disabledBridgeTypes). Any bridge service which fails to initialize will be absent from this returned value.
86
140
 
@@ -90,11 +144,11 @@ Type: `Environment`
90
144
 
91
145
  Defines if the bridge service should use `testnet` or `mainnet`.
92
146
 
93
- #### disabledBridgeTypes
147
+ #### enabledBridgeInitializers
94
148
 
95
- Type: `BridgeType[]`
149
+ Type: `BridgeInitializer[]`
96
150
 
97
- Disables the integration of the provided `BridgeType`s.
151
+ Enables the integration of the provided `BridgeType`s based on each `BridgeInitializer`.
98
152
 
99
153
  #### enabledBridgeServices
100
154
 
@@ -141,20 +195,34 @@ Type: `(params: TransferParams) => Promise<bigint>`
141
195
 
142
196
  Estimates the gas cost of a specific transfer.
143
197
 
144
- #### canTransferAsset
198
+ #### getMinimumTransferAmount
145
199
 
146
- Type: `(asset: BridgeAsset, targetChainId: string) => boolean`
200
+ Type: `(params: FeeParams) => Promise<bigint>`
147
201
 
148
- Indicates whether the unified bridge supports transferring a specific asset to a specific target chain.
202
+ Calculates and returns the minimum transfer amount for a given bridge transfer.
149
203
 
150
204
  #### transferAsset
151
205
 
152
206
  Type: `(params: TransferParams) => Promise<BridgeTransfer>`
153
207
 
154
208
  Starts a new bridge transfer, executing every required step in a single call.
155
- Transactions signing is done by either the provided `sourceProvider` or a custom `sign` callback. Clients using their custom `sign` implementation may use their own solution or the default `dispatch` callback to submit the transaction to the network.
209
+ Transactions signing is done by a custom `sign` callback. The custom `sign` implementation may use their own solution or the default `dispatch` callback to submit the transaction to the network.
156
210
  Returns a `BridgeTransfer` containing all the (known) initial values such as: environment, addresses, amount, fee, transaction hash, required and actual block confirmation counts, etc.
157
211
 
212
+ Notes about TransferParams:
213
+ fromAddress: The address where the bridge amount is from.
214
+
215
+ toAddress: The address where the bridge amount is going to end up.
216
+
217
+ For example, A user has an account with AddressC and AddressBtc.
218
+ The user wants to bridge some funds from Ethereum to Avalanche using the same address. FromAddress and toAddress will be both AddressC.
219
+
220
+ The user wants to bridge some funds from Bitcoin to Avalanche.
221
+ FromAddress is AddressBtc and toAddress is AddressC.
222
+
223
+ Some bridges allows you to bridge the tokens to a different address. (CCTP and ICTT ERC20).
224
+ In this case, fromAddress is the address of the token is getting bridged from. And toAddress is the address which is going to receive the bridged funds.
225
+
158
226
  #### trackTransfer
159
227
 
160
228
  Type: `(params: TrackingParams) => ({cancel, result})`
@@ -165,7 +233,7 @@ Tracks the given `BridgeTransfer`'s progress and invokes the provided listener c
165
233
 
166
234
  Type: `() => void`
167
235
 
168
- If it's still pending, rejects the tracker's promise (`result`) immediatelly and breaks its loop under the hood.
236
+ If it's still pending, rejects the tracker's promise (`result`) immediately and breaks its loop under the hood.
169
237
 
170
238
  ###### result
171
239
 
package/dist/index.cjs CHANGED
@@ -1,18 +1,43 @@
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 ni = require('coinselect');
10
+
11
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
+
13
+ var ni__default = /*#__PURE__*/_interopDefault(ni);
5
14
 
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)}});
15
+ var j=(r=>(r.NATIVE="native",r.ERC20="erc20",r))(j||{}),U=e=>e.type==="erc20",ce=e=>e.type==="native";var x=(s=>(s.AVALANCHE_EVM="avalanche-evm",s.AVALANCHE_BTC_AVA="avalanche-btc-ava",s.AVALANCHE_AVA_BTC="avalanche-ava-btc",s.CCTP="cctp",s.ICTT_ERC20_ERC20="ictt-erc20-erc20",s))(x||{}),wi=["avalanche-ava-btc","avalanche-btc-ava"],yr=["avalanche-evm","cctp","ictt-erc20-erc20"],Ni=e=>yr.includes(e.type),dt=e=>e.type==="avalanche-ava-btc",ut=e=>e.type==="avalanche-btc-ava",de=(n=>(n.AllowanceApproval="allowance-approval",n.TokensTransfer="tokens-transfer",n.WrapToken="wrap-token",n))(de||{});var ne=(r=>(r.FUJI="eip155:43113",r.MAINNET="eip155:43114",r))(ne||{}),Re=(r=>(r.MAINNET="eip155:1",r.SEPOLIA="eip155:11155111",r))(Re||{}),re=(r=>(r.MAINNET="bip122:000000000019d6689c085ae165831e93",r.TESTNET="bip122:000000000933ea01ad0ee984209779ba",r))(re||{}),Pi={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}},Di={chainId:"eip155:43114",chainName:"Avalanche Mainnet",rpcUrl:"https://api.avax.network/ext/bc/C/rpc",networkToken:{type:"native",name:"AVAX",symbol:"AVAX",decimals:18}},_i={chainId:"eip155:11155111",chainName:"Ethereum Sepolia",rpcUrl:"https://proxy-api.avax.network/proxy/infura/sepolia",networkToken:{type:"native",name:"ETH",symbol:"ETH",decimals:18}},Fi={chainId:"eip155:1",chainName:"Ethereum Mainnet",rpcUrl:"https://proxy-api.avax.network/proxy/infura/mainnet",networkToken:{type:"native",name:"ETH",symbol:"ETH",decimals:18}},Mi={chainId:"bip122:000000000933ea01ad0ee984209779ba",chainName:"Bitcoin Testnet",rpcUrl:"",networkToken:{type:"native",name:"Bitcoin",symbol:"BTC",decimals:8}},Oi={chainId:"bip122:000000000019d6689c085ae165831e93",chainName:"Bitcoin Mainnet",rpcUrl:"",networkToken:{type:"native",name:"Bitcoin",symbol:"BTC",decimals:8}};var ae=(i=>(i.DEV="dev",i.PROD="production",i.STAGING="staging",i.TEST="test",i))(ae||{});var z=(s=>(s[s.BRIDGE_NOT_AVAILABLE=5001]="BRIDGE_NOT_AVAILABLE",s[s.INITIALIZATION_FAILED=5002]="INITIALIZATION_FAILED",s[s.INVALID_PARAMS=5003]="INVALID_PARAMS",s[s.TIMEOUT=5004]="TIMEOUT",s[s.TRANSACTION_REVERTED=5005]="TRANSACTION_REVERTED",s))(z||{}),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 yt(e){let t=e.map(r=>r.chainId);return e.reduce((r,n)=>(r[n.chainId]=n.tokens.map(i=>({...i,type:"erc20",destinations:t.reduce((s,o)=>(n.chainId!==o&&(s[o]||(s[o]=[]),s[o]?.push("cctp")),s),{})})),r),{})}var lr="^[-a-z0-9]{3,8}$",fr="^[-_a-zA-Z0-9]{1,50}$",lt=":",Tr=e=>{let[t,r]=e.split(lt);if(!t||!r)throw new Error("Invalid identifier provided.");if(!new RegExp(lr).test(t))throw new Error("Invalid namespace provided.");if(!new RegExp(fr).test(r))throw new Error("Invalid reference provided.");return {namespace:t,reference:r}},gr=({namespace:e,reference:t})=>`${e}${lt}${t}`,P={toJSON:Tr,toString:gr};var Er=e=>{let{reference:t}=P.toJSON(e.chainId);return {id:Number(t),name:e.chainName,nativeCurrency:{decimals:e.networkToken.decimals,symbol:e.networkToken.symbol,name:e.networkToken.name},network:e.chainName,rpcUrls:{default:{http:[e.rpcUrl]},public:{http:[e.rpcUrl]}},...e.utilityAddresses?.multicall&&{contracts:{multicall3:{address:e.utilityAddresses.multicall}}}}},h=({chain:e})=>{let t=Er(e),r=viem.http(e.rpcUrl,{batch:!0,retryCount:0});return viem.createWalletClient({chain:t,transport:r}).extend(viem.publicActions)};var ie=[{inputs:[{internalType:"address",name:"circleTokenMessenger_",type:"address"},{internalType:"address",name:"burnToken_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"AlreadyAdmin",type:"error"},{inputs:[],name:"AlreadyFeeCollector",type:"error"},{inputs:[],name:"AlreadySupportedBurnToken",type:"error"},{inputs:[],name:"AmountLessThanFee",type:"error"},{inputs:[],name:"BalanceNotIncreased",type:"error"},{inputs:[],name:"CannotRemoveLastAdmin",type:"error"},{inputs:[],name:"FeePercentageGreaterThanMax",type:"error"},{inputs:[],name:"InvalidAdminAddress",type:"error"},{inputs:[],name:"InvalidFeeCollector",type:"error"},{inputs:[],name:"InvalidMintRecipientAddress",type:"error"},{inputs:[],name:"InvalidTokenAddress",type:"error"},{inputs:[],name:"InvalidTokenMessengerAddress",type:"error"},{inputs:[],name:"MaxFeeLessThanMinFee",type:"error"},{inputs:[],name:"NotAdmin",type:"error"},{inputs:[],name:"NotFeeCollector",type:"error"},{inputs:[],name:"UnSupportedBurnToken",type:"error"},{inputs:[],name:"UnsupportedDomain",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"admin",type:"address"}],name:"AdminAdded",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"admin",type:"address"}],name:"AdminRemoved",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"BurnTokenAdded",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"BurnTokenRemoved",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"feeCollector",type:"address"}],name:"FeeCollectorAdded",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"feeCollector",type:"address"}],name:"FeeCollectorRemoved",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint32",name:"domain",type:"uint32"},{components:[{internalType:"uint256",name:"maxFee",type:"uint256"},{internalType:"uint256",name:"minFee",type:"uint256"},{internalType:"uint32",name:"feePercentage",type:"uint32"},{internalType:"uint256",name:"txnFee",type:"uint256"},{internalType:"bool",name:"supported",type:"bool"}],indexed:!1,internalType:"struct FeeCalculator.FeeConfiguration",name:"feeConfiguration",type:"tuple"}],name:"FeeConfigurationUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Paused",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint64",name:"nonce",type:"uint64"},{indexed:!1,internalType:"address",name:"burnToken",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"depositor",type:"address"},{indexed:!1,internalType:"address",name:"mintRecipient",type:"address"},{indexed:!1,internalType:"uint32",name:"destinationDomain",type:"uint32"},{indexed:!1,internalType:"uint256",name:"totalFee",type:"uint256"}],name:"TransferTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Unpaused",type:"event"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"addAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"feeCollector",type:"address"}],name:"addFeeCollector",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"addSupportedBurnToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint32",name:"destinationDomain",type:"uint32"}],name:"calculateFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"circleTokenMessenger",outputs:[{internalType:"contract ICircleTokenMessenger",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"circleTokenMessengerAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"collectFees",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"getFeeAmounts",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getFeeConfiguration",outputs:[{components:[{internalType:"uint256",name:"maxFee",type:"uint256"},{internalType:"uint256",name:"minFee",type:"uint256"},{internalType:"uint32",name:"feePercentage",type:"uint32"},{internalType:"uint256",name:"txnFee",type:"uint256"},{internalType:"bool",name:"supported",type:"bool"}],internalType:"struct FeeCalculator.FeeConfiguration",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getFeePercentage",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getMaxFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getMinFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getTxnFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"isAdmin",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"isFeeCollector",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"isSupportedBurnToken",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"isSupportedDomain",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"paused",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"removeAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"feeCollector",type:"address"}],name:"removeFeeCollector",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"removeSupportedBurnToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"},{components:[{internalType:"uint256",name:"maxFee",type:"uint256"},{internalType:"uint256",name:"minFee",type:"uint256"},{internalType:"uint32",name:"feePercentage",type:"uint32"},{internalType:"uint256",name:"txnFee",type:"uint256"},{internalType:"bool",name:"supported",type:"bool"}],internalType:"struct FeeCalculator.FeeConfiguration",name:"feeConfiguration",type:"tuple"}],name:"setFeeConfiguration",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"supportedBurnTokens",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint32",name:"destinationDomain",type:"uint32"},{internalType:"address",name:"mintRecipient",type:"address"},{internalType:"address",name:"burnToken",type:"address"}],name:"transferTokens",outputs:[{internalType:"uint64",name:"nonce",type:"uint64"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"}];var q=class extends Error{constructor(r,n,i){super(r);this.code=n;this.details=i;}};var Se=class extends q{constructor(t="UNKNOWN",r){super(t,5001,r),this.name="BridgeUnavailableError";}};var B=class extends q{constructor(t="UNKNOWN",r){super(t,5002,r),this.name="BridgeInitializationError";}};var f=class extends q{constructor(t="INVALID_PARAMS",r){super(t,5003,r),this.name="InvalidParamsError";}};var M=({sourceChain:e,targetChain:t,amount:r,asset:n},i)=>{if(e.chainId===t.chainId)throw new f("IDENTICAL_CHAINS_PROVIDED");if(r<=0n)throw new f("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let s=i.find(p=>p.chainId===e.chainId);if(!s)throw new f("CHAIN_NOT_SUPPORTED",`Not supported on source chain "${e.chainId}"`);let o=i.find(p=>p.chainId===t.chainId);if(!o)throw new f("CHAIN_NOT_SUPPORTED",`Not supported on target chain "${t.chainId}"`);let a=s.tokens.find(p=>p.symbol===n.symbol),m=o.tokens.find(p=>p.symbol===n.symbol);if(!a||!m)throw new f("ASSET_NOT_SUPPORTED");return {sourceChainData:s,targetChainData:o,burnToken:a,mintToken:m}};async function $(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s}=t,{sourceChainData:o,targetChainData:a,burnToken:m}=M({sourceChain:r,targetChain:n,asset:i,amount:s},e),c=await h({chain:r}).readContract({address:o.tokenRouterAddress,abi:ie,functionName:"calculateFee",args:[s,a.domain]});return {[m.address]:c}}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"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"feeAddress",type:"address"},{indexed:!1,internalType:"uint256",name:"feeAmount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"originTxId",type:"bytes32"}],name:"Mint",type:"event"}];function Tt({amount:e,burnToken:t,targetChainData:r,toAddress:n}){return viem.encodeFunctionData({abi:ie,functionName:"transferTokens",args:[e,r.domain,n,t.address]})}function gt({amount:e,sourceChainData:t}){return viem.encodeFunctionData({abi:N,functionName:"approve",args:[t.tokenRouterAddress,e]})}var br=async(e,t,r)=>{let{sourceChain:n,targetChain:i,asset:s,amount:o,fromAddress:a,toAddress:m,onStepChange:p,gasSettings:c}=t,{sourceChainData:d,targetChainData:u,burnToken:y}=M({sourceChain:n,targetChain:i,asset:s,amount:o},e),T=h({chain:n}),C=await T.readContract({address:y.address,abi:N,functionName:"allowance",args:[a,d.tokenRouterAddress]})<o,b=C?2:1;if(C){let R={currentSignature:1,currentSignatureReason:"allowance-approval",requiredSignatures:b};p?.(R);let F=gt({amount:o,sourceChainData:d}),he=await r.sign({from:a,to:y.address,data:F,...c?{maxFeePerGas:c.price,maxPriorityFeePerGas:c.tip}:null},ur=>T.sendRawTransaction({serializedTransaction:ur}),R);await T.waitForTransactionReceipt({hash:he,pollingInterval:1e3});}let A={currentSignature:C?2:1,currentSignatureReason:"tokens-transfer",requiredSignatures:b};p?.(A);let I=Tt({amount:o,burnToken:y,targetChainData:u,toAddress:m});return r.sign({from:a,to:d.tokenRouterAddress,data:I,...c?{maxFeePerGas:c.price,maxPriorityFeePerGas:c.tip}:null},R=>T.sendRawTransaction({serializedTransaction:R}),A)},vr=async e=>{try{return await e.getBlockNumber()}catch{return}};async function At(e,t,r,n){let{minimumConfirmations:i}=e.find(u=>u.chainId===t.sourceChain.chainId)??{},{minimumConfirmations:s}=e.find(u=>u.chainId===t.targetChain.chainId)??{};if(!i||!s)throw new f("CONFIRMATION_COUNT_UNKNOWN");let o=await $(e,{asset:t.asset,amount:t.amount,sourceChain:t.sourceChain,targetChain:t.targetChain}),a=U(t.asset)?o[t.asset.address]??0n:0n,m=await br(e,t,n),p=Date.now(),c=h({chain:t.targetChain}),d=await vr(c);return {type:"cctp",environment:r,fromAddress:t.fromAddress,toAddress:t.toAddress??t.fromAddress,amount:t.amount,asset:t.asset,bridgeFee:a,sourceChain:t.sourceChain,sourceStartedAt:p,sourceTxHash:m,sourceConfirmationCount:0,sourceRequiredConfirmationCount:i,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:s,targetStartBlockNumber:d}}var Ke=async e=>new Promise(t=>{setTimeout(t,e);});var D=({promise:e,delay:t,startAfter:r})=>{let n=!1,i=!1,s=0,o,a,m=d=>{o&&n&&(n=!1,o(d));},p=()=>{i=!0,a&&n&&(n=!1,a("cancelled"));};return {result:new Promise((d,u)=>{n=!0,o=d,a=u;let y=async()=>{if(!(!n||i)){try{if(await e(m),!n||i)return;await Ke(t);}catch(T){console.error(T.message),s+=1,await Ke(2**s*t);}await y();}};r?setTimeout(y,r):y();}),cancel:p}};var Ee=(r=>(r[r.Ethereum=0]="Ethereum",r[r.Avalanche=1]="Avalanche",r))(Ee||{});var X=zod.z.string().refine(e=>viem.isAddress(e),e=>({message:`Invalid EVM address '${e}'`})).transform(e=>e);var xr=zod.z.object({address:X,name:zod.z.string(),symbol:zod.z.string(),decimals:zod.z.number().positive()}),Br=zod.z.coerce.string().transform((e,t)=>{let r=e.startsWith("eip155:")?e:`eip155:${e}`;try{let n=P.toJSON(r);return P.toString(n)}catch{return t.addIssue({code:zod.z.ZodIssueCode.custom,message:"Invalid chain id, neither numeric nor caip2 compliant"}),zod.z.NEVER}}),wr=zod.z.object({chainId:Br,domain:zod.z.nativeEnum(Ee),tokenRouterAddress:X,messageTransmitterAddress:X,tokens:zod.z.array(xr),minimumConfirmations:zod.z.number().positive()}),Ct=zod.z.array(wr);var Nr=e=>e==="production"||e==="test",Rr={test:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/cctp/cctp_config.test.json",production:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/cctp/cctp_config.json"},ht=async e=>{if(!Nr(e))throw new B("ENVIRONMENT_NOT_SUPPORTED",`CCTP does not support ${e} environment`);try{let r=await(await fetch(Rr[e])).json();return Ct.parse(r)}catch(t){throw new B("CONFIG_NOT_AVAILABLE",`Error while fetching CCTP config: ${t.message}`)}},Je=e=>{switch(e){case"eip155:43114":case"eip155:43113":return 1e3;default:return 2e4}};var E=(e,t,r)=>{let n=lodash.omitBy(t,lodash.isNil),i={...lodash.cloneDeep(e),...lodash.cloneDeep(n)};return r(i),i},Dr=1e3*60*60*3,_r=1024n,Fr=5e3,k={trackingLimitMs:Dr,maxBlocks:_r,initialDelayMs:Fr};var K=(e,t)=>e.gasPrice&&BigInt(e.gasPrice*t.gasUsed);var se=({targetClient:e,sourceClient:t,getMetadata:r,checkMetadata:n,trackingParams:{bridgeTransfer:i,updateListener:s},trackingConfig:{trackingLimitMs:o}})=>{let a=lodash.cloneDeep(i);return async p=>{if(a.completedAt||n(a.metadata))return p(a);if(a.sourceStartedAt+o<=Date.now())return a=E(a,{completedAt:Date.now(),errorCode:5004},s),p(a);if(!viem.isHash(a.sourceTxHash))return;let c=await t.getTransactionReceipt({hash:a.sourceTxHash});if(a.sourceNetworkFee===void 0){let g=await t.getTransaction({hash:a.sourceTxHash}),C=K(g,c);C&&(a=E(a,{sourceNetworkFee:C},s));}if(c.status==="reverted")return a=E(a,{completedAt:Date.now(),errorCode:5005},s),p(a);if(!viem.isHash(a.sourceTxHash))return;let d=await t.getTransactionConfirmations({hash:a.sourceTxHash}),u=d>a.sourceConfirmationCount,y=d>=a.sourceRequiredConfirmationCount;if(u){let g={};g.sourceConfirmationCount=Number(d),y||(g.targetStartBlockNumber=await e.getBlockNumber()),a=E(a,g,s);}if(!y)return;a.targetStartBlockNumber||(a=E(a,{targetStartBlockNumber:await e.getBlockNumber()},s));let T=r(c);return a=E(a,{targetStartedAt:Date.now(),metadata:T},s),p(a)}};var oe=({targetClient:e,getTargetTxHash:t,checkMetadata:r,trackingParams:{bridgeTransfer:n,updateListener:i},trackingConfig:{trackingLimitMs:s,maxBlocks:o}})=>{if(!n.completedAt&&!r(n.metadata))throw new f("INVALID_PARAMS","metadata is missing");if(!n.targetStartBlockNumber)throw new f("INVALID_PARAMS","targetStartBlockNumber is missing");let a=lodash.cloneDeep(n);return async p=>{if(a.completedAt)return p(a);if(a.sourceStartedAt+s<=Date.now())return a=E(a,{completedAt:Date.now(),errorCode:5004},i),p(a);if(!a.targetStartBlockNumber)throw new Error("unreachable");if(!a.targetTxHash){let g=await e.getBlockNumber(),C=a.targetStartBlockNumber-o,b=C>=0n?C:"earliest",A=a.targetStartBlockNumber+o,I=A<g?A:"latest",R=await t({fromBlock:b,toBlock:I,metadata:a.metadata});if(R)a=E(a,{targetTxHash:R},i);else {a=E(a,{targetStartBlockNumber:g},i);return}}if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let d=await e.getTransactionReceipt({hash:a.targetTxHash});if(!a.targetNetworkFee){let g=await e.getTransaction({hash:a.targetTxHash}),C=K(g,d);C&&(a=E(a,{targetNetworkFee:C},i));}if(d.status==="reverted")return a=E(a,{completedAt:Date.now(),errorCode:5005},i),p(a);if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let u=await e.getTransactionConfirmations({hash:a.targetTxHash}),y=u>a.targetConfirmationCount,T=u>=a.targetRequiredConfirmationCount;if(y&&(a=E(a,{targetConfirmationCount:Number(u)},i)),!!T)return a=E(a,{completedAt:Date.now()},i),p(a)}};var Ze=e=>lodash.isObject(e)&&typeof e.nonce=="bigint",xt=({sourceChainData:e})=>r=>{let n=r.logs.find(o=>o.address.toLowerCase()===e.tokenRouterAddress.toLowerCase()?viem.decodeEventLog({abi:ie,...o}).eventName==="TransferTokens":!1);if(!n)throw new f("INVALID_PARAMS",`unable to find a TransferTokens event in source transaction "${r.transactionHash}"`);return {nonce:viem.decodeEventLog({abi:ie,eventName:"TransferTokens",...n}).args.nonce}},Vr={name:"MessageReceived",type:"event",inputs:[{indexed:!0,internalType:"address",name:"caller",type:"address"},{indexed:!1,internalType:"uint32",name:"sourceDomain",type:"uint32"},{indexed:!0,internalType:"uint64",name:"nonce",type:"uint64"},{indexed:!1,internalType:"bytes32",name:"sender",type:"bytes32"},{indexed:!1,internalType:"bytes",name:"messageBody",type:"bytes"}]},Bt=({targetClient:e,transferData:{targetChainData:t}})=>async({fromBlock:n,toBlock:i,metadata:s})=>(await e.getLogs({address:t.messageTransmitterAddress,event:Vr,args:{nonce:s?.nonce},fromBlock:n,toBlock:i}))[0]?.transactionHash;var Lr=async(e,t)=>{let{bridgeTransfer:r}=t,{asset:n,amount:i,sourceChain:s,targetChain:o}=r,a=M({sourceChain:s,targetChain:o,asset:n,amount:i},e),{sourceChainData:m}=a,p=h({chain:s}),c=h({chain:o}),d=xt(a),u=se({sourceClient:p,targetClient:c,getMetadata:d,checkMetadata:Ze,trackingParams:t,trackingConfig:k});return D({promise:u,delay:Je(m.chainId),startAfter:k.initialDelayMs})},Gr=async(e,t)=>{let{bridgeTransfer:r}=t,{asset:n,amount:i,sourceChain:s,targetChain:o}=r,a=h({chain:o}),m=M({sourceChain:s,targetChain:o,asset:n,amount:i},e),p=Bt({targetClient:a,transferData:m}),c=oe({targetClient:a,getTargetTxHash:p,checkMetadata:Ze,trackingParams:t,trackingConfig:k});return D({promise:c,delay:Je(m.targetChainData.chainId),startAfter:k.initialDelayMs})};function Nt(e,t){if(!viem.isHash(t.bridgeTransfer.sourceTxHash)||t.bridgeTransfer.targetTxHash&&!viem.isHash(t.bridgeTransfer.targetTxHash))throw new f("INCORRECT_TXHASH_PROVIDED");let r,n=()=>{r?.();};return {result:(async()=>{let{updateListener:s,bridgeTransfer:o}=t,{result:a,cancel:m}=await Lr(e,{updateListener:s,bridgeTransfer:o});r=m;let p=await a,{result:c,cancel:d}=await Gr(e,{updateListener:s,bridgeTransfer:p});return r=d,c})(),cancel:n}}var Ur=60000n,Rt=175000n,zr=60000n,St=215000n;async function Pt(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s,fromAddress:o}=t,{sourceChainData:a,burnToken:m}=M({sourceChain:r,targetChain:n,asset:i,amount:s},e),c=await h({chain:r}).readContract({address:m.address,abi:N,functionName:"allowance",args:[o,a.tokenRouterAddress]}),d=a.domain===1;return c>=s?d?St:Rt:d?zr+St:Ur+Rt}async function Dt(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s}=t,{burnToken:o}=M({sourceChain:r,targetChain:n,asset:i,amount:s},e);return (await $(e,t))[o.address]??1n}async function _t(e,t){let{mintToken:r,burnToken:n}=M(t,e),i={...r,type:"erc20"},s=await $(e,t);return {asset:i,amount:t.amount-(s[n.address]??0n)}}var _="0x0000000000000000000000000000000000000000";function Ft(e,t){for(let r of e){if(r.chainId!==t.chainId)continue;let n=t.tokenTransfers.find(({symbol:d})=>r.tokens.some(({symbol:u})=>u===d));if(!n)continue;let i=r.domain===1,s=t.chainId==="eip155:43113"||t.chainId==="eip155:11155111",o=s?"eip155:11155111":"eip155:1",a=s?"eip155:43113":"eip155:43114";if(viem.isAddressEqual(t.to,r.tokenRouterAddress)||viem.isAddressEqual(n.to,r.tokenRouterAddress))return {isBridgeTx:!0,bridgeType:"cctp",sourceChainId:t.chainId,targetChainId:i?o:a};let p=viem.isAddressEqual(t.from,r.messageTransmitterAddress),c=viem.isAddressEqual(n.from,_);if(p||c)return {isBridgeTx:!0,bridgeType:"cctp",sourceChainId:i?o:a,targetChainId:t.chainId}}return {isBridgeTx:!1}}var Qe=e=>{let{fromAddress:t,toAddress:r}=e;if(!viem.isAddress(t)||!viem.isAddress(r))throw new f("INCORRECT_ADDRESS_PROVIDED");return {fromAddress:t,toAddress:r}};function ue(e){let{chainId:t,from:r,to:n,tokenTransfers:i}=e,{fromAddress:s,toAddress:o}=Qe({fromAddress:r,toAddress:n}),a=i.map(m=>{let{from:p,to:c,symbol:d}=m;if(!p||!viem.isAddress(p)||!c||!viem.isAddress(c))throw new f("INCORRECT_ADDRESS_PROVIDED");return {from:p,to:c,symbol:d}});return {chainId:t,from:s,to:o,tokenTransfers:a}}var W=({fromAddress:e,...t})=>{if(!viem.isAddress(e))throw new f("INCORRECT_ADDRESS_PROVIDED");return {fromAddress:e,...t}},ye=({fromAddress:e,toAddress:t,...r})=>{let{fromAddress:n,toAddress:i}=Qe({fromAddress:e,toAddress:t});return {fromAddress:n,toAddress:i,...r}};var Ot=async(e,t)=>{let r=await ht(e);return {type:"cctp",analyzeTx:n=>{try{return Ft(r,ue(n))}catch{return {isBridgeTx:!1}}},estimateGas:n=>Pt(r,W(n)),estimateReceiveAmount:n=>_t(r,W(n)),getAssets:()=>yt(r),getFees:n=>$(r,n),transferAsset:n=>At(r,ye(n),e,t),trackTransfer:n=>Nt(r,n),getMinimumTransferAmount:n=>Dt(r,n)}};var Wr=({sourceChain:e,targetChain:t,asset:r},n)=>{let i=n.find(a=>a.homeChain.chainId===e.chainId),s=i?.erc20Bridges.find(a=>a.baseToken.address===r.address&&a.remotes.some(({remoteChain:m})=>m.chainId===t.chainId)),o=s?.remotes.find(a=>a.remoteChain.chainId===t.chainId);return {chainBridgeConfig:i,tokenHomeConfig:s,tokenRemoteConfig:o}},jr=({sourceChain:e,targetChain:t,asset:r},n)=>{let i=n.find(a=>a.homeChain.chainId===t.chainId),s=i?.erc20Bridges.find(a=>a.remotes.find(m=>m.tokenRemoteAddress===r.address&&m.remoteChain.chainId===e.chainId)),o=s?.remotes.find(a=>a.tokenRemoteAddress===r.address&&a.remoteChain.chainId===e.chainId);return {chainBridgeConfig:i,tokenHomeConfig:s,tokenRemoteConfig:o}},O=({sourceChain:e,targetChain:t,amount:r,asset:n},i)=>{if(e.chainId===t.chainId)throw new f("IDENTICAL_CHAINS_PROVIDED");if(r<=0n)throw new f("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");if(!U(n))throw new f("ASSET_NOT_SUPPORTED","Only ERC20 assets supported");let s=Wr({sourceChain:e,targetChain:t,asset:n},i),o=jr({sourceChain:e,targetChain:t,asset:n},i);if(s.chainBridgeConfig&&s.tokenHomeConfig&&s.tokenRemoteConfig){let{chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:p}=s;return {homeToRemote:!0,chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:p}}if(o.chainBridgeConfig&&o.tokenHomeConfig&&o.tokenRemoteConfig){let{chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:p}=o;return {homeToRemote:!1,chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:p}}throw new f("ASSET_NOT_SUPPORTED","No Home->Remote or Remote->Home route exists for this asset")};var qr=60000n,Ht=215000n,Vt=async(e,t)=>{let{sourceChain:r,targetChain:n,asset:i,amount:s,fromAddress:o}=t,{tokenHomeConfig:a,homeToRemote:m,tokenRemoteConfig:p}=O({sourceChain:r,targetChain:n,asset:i,amount:s},e);return await h({chain:r}).readContract({address:m?a.baseToken.address:p.tokenRemoteAddress,abi:N,functionName:"allowance",args:[o,m?a.tokenHomeAddress:p.tokenRemoteAddress]})>=s?Ht:qr+Ht};var Lt=e=>{let t=e.reduce((n,i)=>(n[i.homeChain.chainId]=i.erc20Bridges.map(s=>({...s.baseToken,destinations:s.remotes.reduce((o,a)=>(o[a.remoteChain.chainId]=["ictt-erc20-erc20"],o),{})})),n),{}),r=e.reduce((n,i)=>{for(let s of i.erc20Bridges)for(let o of s.remotes){let a=n[o.remoteChain.chainId]??[];n[o.remoteChain.chainId]=[...a,{...s.baseToken,address:o.tokenRemoteAddress,destinations:{[i.homeChain.chainId]:["ictt-erc20-erc20"]}}];}return n},{});return {...t,...r}};async function le(e,t){return O(t,e),{}}var be=[{type:"constructor",inputs:[{name:"teleporterRegistryAddress",type:"address",internalType:"address"},{name:"teleporterManager",type:"address",internalType:"address"},{name:"tokenAddress_",type:"address",internalType:"address"},{name:"tokenDecimals_",type:"uint8",internalType:"uint8"}],stateMutability:"nonpayable"},{type:"function",name:"addCollateral",inputs:[{name:"remoteBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"remoteTokenTransferrerAddress",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"blockchainID",inputs:[],outputs:[{name:"",type:"bytes32",internalType:"bytes32"}],stateMutability:"view"},{type:"function",name:"getMinTeleporterVersion",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"isTeleporterAddressPaused",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"owner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"pauseTeleporterAddress",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"receiveTeleporterMessage",inputs:[{name:"sourceBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"originSenderAddress",type:"address",internalType:"address"},{name:"message",type:"bytes",internalType:"bytes"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"registeredRemotes",inputs:[{name:"remoteBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"remoteTokenTransferrerAddress",type:"address",internalType:"address"}],outputs:[{name:"registered",type:"bool",internalType:"bool"},{name:"collateralNeeded",type:"uint256",internalType:"uint256"},{name:"tokenMultiplier",type:"uint256",internalType:"uint256"},{name:"multiplyOnRemote",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"renounceOwnership",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"send",inputs:[{name:"input",type:"tuple",internalType:"struct SendTokensInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"}]},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"sendAndCall",inputs:[{name:"input",type:"tuple",internalType:"struct SendAndCallInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipientContract",type:"address",internalType:"address"},{name:"recipientPayload",type:"bytes",internalType:"bytes"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"recipientGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"},{name:"fallbackRecipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"}]},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"teleporterRegistry",inputs:[],outputs:[{name:"",type:"address",internalType:"contract TeleporterRegistry"}],stateMutability:"view"},{type:"function",name:"token",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IERC20"}],stateMutability:"view"},{type:"function",name:"tokenAddress",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"tokenDecimals",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"transferOwnership",inputs:[{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"transferredBalances",inputs:[{name:"remoteBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"remoteTokenTransferrerAddress",type:"address",internalType:"address"}],outputs:[{name:"balance",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"unpauseTeleporterAddress",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"updateMinTeleporterVersion",inputs:[{name:"version",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"event",name:"CallFailed",inputs:[{name:"recipientContract",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"CallSucceeded",inputs:[{name:"recipientContract",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"CollateralAdded",inputs:[{name:"remoteBlockchainID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"remoteTokenTransferrerAddress",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"},{name:"remaining",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"MinTeleporterVersionUpdated",inputs:[{name:"oldMinTeleporterVersion",type:"uint256",indexed:!0,internalType:"uint256"},{name:"newMinTeleporterVersion",type:"uint256",indexed:!0,internalType:"uint256"}],anonymous:!1},{type:"event",name:"OwnershipTransferred",inputs:[{name:"previousOwner",type:"address",indexed:!0,internalType:"address"},{name:"newOwner",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"RemoteRegistered",inputs:[{name:"remoteBlockchainID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"remoteTokenTransferrerAddress",type:"address",indexed:!0,internalType:"address"},{name:"initialCollateralNeeded",type:"uint256",indexed:!1,internalType:"uint256"},{name:"tokenDecimals",type:"uint8",indexed:!1,internalType:"uint8"}],anonymous:!1},{type:"event",name:"TeleporterAddressPaused",inputs:[{name:"teleporterAddress",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"TeleporterAddressUnpaused",inputs:[{name:"teleporterAddress",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"TokensAndCallRouted",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendAndCallInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipientContract",type:"address",internalType:"address"},{name:"recipientPayload",type:"bytes",internalType:"bytes"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"recipientGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"},{name:"fallbackRecipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensAndCallSent",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"sender",type:"address",indexed:!0,internalType:"address"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendAndCallInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipientContract",type:"address",internalType:"address"},{name:"recipientPayload",type:"bytes",internalType:"bytes"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"recipientGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"},{name:"fallbackRecipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensRouted",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendTokensInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensSent",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"sender",type:"address",indexed:!0,internalType:"address"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendTokensInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensWithdrawn",inputs:[{name:"recipient",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1}];var ve=[{type:"constructor",inputs:[{name:"settings",type:"tuple",internalType:"struct TokenRemoteSettings",components:[{name:"teleporterRegistryAddress",type:"address",internalType:"address"},{name:"teleporterManager",type:"address",internalType:"address"},{name:"tokenHomeBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"tokenHomeAddress",type:"address",internalType:"address"},{name:"tokenHomeDecimals",type:"uint8",internalType:"uint8"}]},{name:"tokenName",type:"string",internalType:"string"},{name:"tokenSymbol",type:"string",internalType:"string"},{name:"tokenDecimals_",type:"uint8",internalType:"uint8"}],stateMutability:"nonpayable"},{type:"function",name:"MULTI_HOP_CALL_GAS_PER_WORD",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MULTI_HOP_CALL_REQUIRED_GAS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MULTI_HOP_SEND_REQUIRED_GAS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"REGISTER_REMOTE_REQUIRED_GAS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"allowance",inputs:[{name:"owner",type:"address",internalType:"address"},{name:"spender",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"approve",inputs:[{name:"spender",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"nonpayable"},{type:"function",name:"balanceOf",inputs:[{name:"account",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"blockchainID",inputs:[],outputs:[{name:"",type:"bytes32",internalType:"bytes32"}],stateMutability:"view"},{type:"function",name:"calculateNumWords",inputs:[{name:"payloadSize",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"pure"},{type:"function",name:"decimals",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"decreaseAllowance",inputs:[{name:"spender",type:"address",internalType:"address"},{name:"subtractedValue",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"nonpayable"},{type:"function",name:"getMinTeleporterVersion",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"homeTokenDecimals",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"increaseAllowance",inputs:[{name:"spender",type:"address",internalType:"address"},{name:"addedValue",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"nonpayable"},{type:"function",name:"initialReserveImbalance",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"isCollateralized",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"isRegistered",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"isTeleporterAddressPaused",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"multiplyOnRemote",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"name",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"owner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"pauseTeleporterAddress",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"receiveTeleporterMessage",inputs:[{name:"sourceBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"originSenderAddress",type:"address",internalType:"address"},{name:"message",type:"bytes",internalType:"bytes"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"registerWithHome",inputs:[{name:"feeInfo",type:"tuple",internalType:"struct TeleporterFeeInfo",components:[{name:"feeTokenAddress",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}]}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"renounceOwnership",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"send",inputs:[{name:"input",type:"tuple",internalType:"struct SendTokensInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"}]},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"sendAndCall",inputs:[{name:"input",type:"tuple",internalType:"struct SendAndCallInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipientContract",type:"address",internalType:"address"},{name:"recipientPayload",type:"bytes",internalType:"bytes"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"recipientGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"},{name:"fallbackRecipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"}]},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"symbol",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"teleporterRegistry",inputs:[],outputs:[{name:"",type:"address",internalType:"contract TeleporterRegistry"}],stateMutability:"view"},{type:"function",name:"tokenDecimals",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"tokenHomeAddress",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"tokenHomeBlockchainID",inputs:[],outputs:[{name:"",type:"bytes32",internalType:"bytes32"}],stateMutability:"view"},{type:"function",name:"tokenMultiplier",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"totalSupply",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"transfer",inputs:[{name:"to",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"nonpayable"},{type:"function",name:"transferFrom",inputs:[{name:"from",type:"address",internalType:"address"},{name:"to",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"nonpayable"},{type:"function",name:"transferOwnership",inputs:[{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"unpauseTeleporterAddress",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"updateMinTeleporterVersion",inputs:[{name:"version",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"event",name:"Approval",inputs:[{name:"owner",type:"address",indexed:!0,internalType:"address"},{name:"spender",type:"address",indexed:!0,internalType:"address"},{name:"value",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"CallFailed",inputs:[{name:"recipientContract",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"CallSucceeded",inputs:[{name:"recipientContract",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"MinTeleporterVersionUpdated",inputs:[{name:"oldMinTeleporterVersion",type:"uint256",indexed:!0,internalType:"uint256"},{name:"newMinTeleporterVersion",type:"uint256",indexed:!0,internalType:"uint256"}],anonymous:!1},{type:"event",name:"OwnershipTransferred",inputs:[{name:"previousOwner",type:"address",indexed:!0,internalType:"address"},{name:"newOwner",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"TeleporterAddressPaused",inputs:[{name:"teleporterAddress",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"TeleporterAddressUnpaused",inputs:[{name:"teleporterAddress",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"TokensAndCallSent",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"sender",type:"address",indexed:!0,internalType:"address"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendAndCallInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipientContract",type:"address",internalType:"address"},{name:"recipientPayload",type:"bytes",internalType:"bytes"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"recipientGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"},{name:"fallbackRecipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensSent",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"sender",type:"address",indexed:!0,internalType:"address"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendTokensInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensWithdrawn",inputs:[{name:"recipient",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"Transfer",inputs:[{name:"from",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"},{name:"value",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1}];var $r=85000n,Ut=({homeToRemote:e,amount:t,destinationBlockchainID:r,destinationTokenTransferrerAddress:n,recipient:i})=>viem.encodeFunctionData({abi:e?be:ve,functionName:"send",args:[{destinationBlockchainID:r,destinationTokenTransferrerAddress:n,recipient:i,primaryFeeTokenAddress:_,primaryFee:0n,secondaryFee:0n,requiredGasLimit:$r,multiHopFallback:_},t]});function zt({amount:e,address:t}){return viem.encodeFunctionData({abi:N,functionName:"approve",args:[t,e]})}var Xr=async({params:{onStepChange:e,amount:t,fromAddress:r,sourceChain:n,toAddress:i,gasSettings:s},transferData:o,isAllowanceApprovalRequired:a,requiredSignatures:m,signer:p})=>{let{tokenRemoteConfig:c,tokenHomeConfig:d,homeToRemote:u,chainBridgeConfig:y}=o,T=h({chain:n});if(a){let I={currentSignature:1,currentSignatureReason:"allowance-approval",requiredSignatures:m};e?.(I);let R=zt({amount:t,address:u?d.tokenHomeAddress:c.tokenRemoteAddress}),F=await p.sign({from:r,to:u?o.tokenHomeConfig.baseToken.address:c.tokenRemoteAddress,data:R,...s?{maxFeePerGas:s.price,maxPriorityFeePerGas:s.tip}:null},he=>T.sendRawTransaction({serializedTransaction:he}),I);await T.waitForTransactionReceipt({hash:F,pollingInterval:1e3});}let g={currentSignature:a?2:1,currentSignatureReason:"tokens-transfer",requiredSignatures:m};e?.(g);let C=u?c.remoteChain.blockchainId:y.homeChain.blockchainId,b=u?c.tokenRemoteAddress:d.tokenHomeAddress,A=Ut({amount:t,recipient:i,destinationBlockchainID:C,destinationTokenTransferrerAddress:b,homeToRemote:u});return p.sign({from:r,to:u?d.tokenHomeAddress:c.tokenRemoteAddress,data:A,...s?{maxFeePerGas:s.price,maxPriorityFeePerGas:s.tip}:null},I=>T.sendRawTransaction({serializedTransaction:I}),g)},Kr=async({params:e,transferData:t,signer:r})=>{let{sourceChain:n,fromAddress:i,amount:s}=e,o=h({chain:n}),{homeToRemote:a,tokenHomeConfig:m,tokenRemoteConfig:p}=t,d=await o.readContract({address:a?m.baseToken.address:p.tokenRemoteAddress,abi:N,functionName:"allowance",args:[i,a?m.tokenHomeAddress:p.tokenRemoteAddress]})<s;return Xr({params:e,transferData:t,isAllowanceApprovalRequired:d,requiredSignatures:d?2:1,signer:r})},Jr=async(e,t,r)=>{let{sourceChain:n,targetChain:i,asset:s,amount:o}=t,a=O({sourceChain:n,targetChain:i,asset:s,amount:o},e);return Kr({params:t,transferData:a,signer:r})},Zr=async e=>{try{return await e.getBlockNumber()}catch{return}};async function Wt(e,t,r,n){let i=await le(e,{asset:t.asset,amount:t.amount,sourceChain:t.sourceChain,targetChain:t.targetChain}),s=U(t.asset)?i[t.asset.address]??0n:0n,o=await Jr(e,t,n),a=Date.now(),m=h({chain:t.targetChain}),p=await Zr(m);return {type:"ictt-erc20-erc20",environment:r,fromAddress:t.fromAddress,toAddress:t.toAddress,amount:t.amount,asset:t.asset,bridgeFee:s,sourceChain:t.sourceChain,sourceStartedAt:a,sourceTxHash:o,sourceConfirmationCount:0,sourceRequiredConfirmationCount:1,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:p}}var qt=({transferData:{homeToRemote:e,tokenHomeConfig:t,tokenRemoteConfig:r}})=>n=>{let i=e?t.tokenHomeAddress:r.tokenRemoteAddress,s=e?be:ve,o="TokensSent",a=n.logs.find(c=>c.address.toLowerCase()===i.toLowerCase()?viem.decodeEventLog({abi:s,...c}).eventName===o:!1);if(!a)throw new f("INVALID_PARAMS",`unable to find a TokensSent event in source transaction "${n.transactionHash}"`);return {teleporterMessageID:viem.decodeEventLog({abi:s,eventName:o,...a}).args.teleporterMessageID}},ea={name:"ReceiveCrossChainMessage",type:"event",inputs:[{name:"messageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"sourceBlockchainID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"deliverer",type:"address",indexed:!0,internalType:"address"},{name:"rewardRedeemer",type:"address",indexed:!1,internalType:"address"},{name:"message",type:"tuple",indexed:!1,internalType:"struct TeleporterMessage",components:[{name:"messageNonce",type:"uint256",internalType:"uint256"},{name:"originSenderAddress",type:"address",internalType:"address"},{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationAddress",type:"address",internalType:"address"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"allowedRelayerAddresses",type:"address[]",internalType:"address[]"},{name:"receipts",type:"tuple[]",internalType:"struct TeleporterMessageReceipt[]",components:[{name:"receivedMessageNonce",type:"uint256",internalType:"uint256"},{name:"relayerRewardAddress",type:"address",internalType:"address"}]},{name:"message",type:"bytes",internalType:"bytes"}]}]},$t=({toAddress:e,transferData:{tokenHomeConfig:t,homeToRemote:r,tokenRemoteConfig:n},targetClient:i})=>async({fromBlock:s,toBlock:o,metadata:a})=>{if(!_e(a))throw new f("INVALID_PARAMS");let p=(await i.getLogs({address:t.teleporterAddress,event:ea,args:{messageID:a.teleporterMessageID},fromBlock:s,toBlock:o})).at(-1);if(lodash.isNil(p))return;let c=p.transactionHash,d=await i.getTransactionReceipt({hash:c}),u=r?ve:be,y=r?n.tokenRemoteAddress:t.tokenHomeAddress,T=d.logs.find(C=>C.address.toLowerCase()===y.toLowerCase()?viem.decodeEventLog({abi:u,...C}).eventName==="TokensWithdrawn":!1);if(lodash.isNil(T))return;if(viem.decodeEventLog({abi:u,eventName:"TokensWithdrawn",...T}).args.recipient.toLowerCase()===e.toLowerCase())return c},_e=e=>lodash.isObject(e)&&viem.isHex(e.teleporterMessageID);var ta=async(e,t)=>{let{bridgeTransfer:r}=t,{asset:n,amount:i,sourceChain:s,targetChain:o}=r,a=O({sourceChain:s,targetChain:o,asset:n,amount:i},e),m=h({chain:r.sourceChain}),p=h({chain:r.targetChain}),c=qt({transferData:a}),d=se({sourceClient:m,targetClient:p,getMetadata:c,checkMetadata:_e,trackingParams:t,trackingConfig:k});return D({promise:d,delay:2e3,startAfter:k.initialDelayMs})},na=async(e,t)=>{let{bridgeTransfer:r}=t,{targetChain:n,sourceChain:i,asset:s,amount:o,toAddress:a}=r,m=O({sourceChain:i,targetChain:n,asset:s,amount:o},e),p=h({chain:r.targetChain}),c=$t({transferData:m,targetClient:p,toAddress:a}),d=oe({targetClient:p,getTargetTxHash:c,checkMetadata:_e,trackingParams:t,trackingConfig:k});return D({promise:d,delay:2e3,startAfter:k.initialDelayMs})};function Xt(e,t){let r,n=()=>{r?.();};return {result:(async()=>{let{updateListener:s}=t,{result:o,cancel:a}=await ta(e,t);r=a;let m=await o,{result:p,cancel:c}=await na(e,{updateListener:s,bridgeTransfer:m});return r=c,p})(),cancel:n}}async function Kt(e,t){return O(t,e),1n}var et={encode(e){return base.base58.encode(utils.concatBytes(e,sha256.sha256(e).subarray(-4)))},decode(e){return base.base58.decode(e).subarray(0,-4)}};var ia=zod.z.object({subnetName:zod.z.string(),subnetID:zod.z.string(),blockchainID:zod.z.string(),chainID:zod.z.number(),network:zod.z.string()}),Zt=zod.z.array(ia),sa=zod.z.object({PKey:zod.z.string(),SKey:zod.z.string(),orgID:zod.z.string(),bridgeID:zod.z.string(),tokenAddress:X,tokenSymbol:zod.z.string(),tokenName:zod.z.string(),tokenDecimals:zod.z.number(),tokenHomeAddress:X,tokenHomeChainID:zod.z.number(),tokenRemoteAddress:X,tokenRemoteChainID:zod.z.number(),network:zod.z.string(),isRegisteredInBridgeApp:zod.z.enum(["Y","N"]),createdAt:zod.z.number(),updatedAt:zod.z.number()}),Qt=zod.z.array(sa);var Yt="0x253b2784c75e510dD0fF1da844684a1aC0aa5fcf",en={test:"https://ac-gateway-staging-us-east-1.avacloud-test.io/v1/bridge-app",production:"https://ac-gateway-production-us-east-1.avacloud.io/v1/bridge-app"},tn={chainID:43114,blockchainID:"2q9e4r6Mu3U68nU1fYjgbR6JvwrRx36CohpAX5UQxse55x1Q5"},nn={chainID:43113,blockchainID:"yH8D7ThNJkxmtkuv2jgBa4P1Rn3Qpr4pPr7QYNfcdoS6k6HWp"};var tt=async e=>await(await fetch(e)).json();var oa=e=>e==="production"||e==="test",ma=e=>e.status==="fulfilled",pa=async(e,t)=>{let r=await tt(`${e}/chains`);return [t==="production"?tn:nn,...Zt.parse(r)]},ca=async(e,t)=>(await Promise.allSettled(t.map(async n=>{let i=await tt(`${e}/chains/${n.chainID}/bridges`);return Qt.parse(i)}))).filter(ma).flatMap(n=>n.value),an=async e=>{if(!oa(e))throw new B("ENVIRONMENT_NOT_SUPPORTED",`ICTT does not support ${e} environment`);try{let t=en[e],r=await pa(t,e),n=await ca(t,r),i=[];return n.forEach(s=>{let o=r.find(({chainID:y})=>y===s.tokenHomeChainID);if(!o)return;let a=i.find(({homeChain:y})=>y.chainId===P.toString({namespace:"eip155",reference:String(o.chainID)}));a||(a={homeChain:{chainId:P.toString({namespace:"eip155",reference:String(o.chainID)}),blockchainId:viem.toHex(et.decode(o.blockchainID))},erc20Bridges:[]},i.push(a));let m=a.erc20Bridges.find(({tokenHomeAddress:y})=>y===s.tokenHomeAddress);m||(m={baseToken:{address:s.tokenAddress,decimals:s.tokenDecimals,name:s.tokenName||s.tokenSymbol,symbol:s.tokenSymbol,type:"erc20"},remotes:[],teleporterAddress:Yt,tokenHomeAddress:s.tokenHomeAddress,tokenHomeDecimals:s.tokenDecimals},a.erc20Bridges.push(m));let p=r.find(({chainID:y})=>y===s.tokenRemoteChainID);if(!p)return;let c=viem.toHex(et.decode(p.blockchainID)),d=P.toString({namespace:"eip155",reference:String(s.tokenRemoteChainID)});m.remotes.find(({tokenRemoteAddress:y,remoteChain:{chainId:T}})=>y===s.tokenRemoteAddress&&T===d)||m.remotes.push({remoteChain:{chainId:d,blockchainId:c},tokenRemoteAddress:s.tokenRemoteAddress});}),i.map(s=>({...s,erc20Bridges:s.erc20Bridges.filter(o=>o.remotes.length>0)})).filter(s=>s.erc20Bridges.length>0)}catch(t){throw new B("CONFIG_NOT_AVAILABLE",`Error while fetching ICTT-ERC20-ERC20 config: ${t.message}`)}};var sn=async(e,t)=>{let{homeToRemote:r,tokenHomeConfig:{baseToken:n},tokenRemoteConfig:{tokenRemoteAddress:i}}=O(t,e),s={...n,address:r?i:n.address},o=await le(e,t);return {amount:t.amount-(o[n.address]??0n),asset:s}};function on(e,t){for(let r of e)for(let n of r.erc20Bridges){let i=t.tokenTransfers.find(({symbol:p})=>p===n.baseToken.symbol);if(!i)continue;let s=viem.isAddressEqual(n.teleporterAddress,t.to),o=viem.isAddressEqual(t.from,n.tokenHomeAddress)||viem.isAddressEqual(i.from,n.tokenHomeAddress),a=viem.isAddressEqual(t.from,_)||viem.isAddressEqual(i.from,_);if(s&&(o||a))return {isBridgeTx:!0,sourceChainId:n.remotes.length===1?n.remotes[0].remoteChain.chainId:void 0,targetChainId:t.chainId,bridgeType:"ictt-erc20-erc20"};if(viem.isAddressEqual(t.to,n.tokenHomeAddress)||viem.isAddressEqual(i.to,n.tokenHomeAddress))return {isBridgeTx:!0,sourceChainId:t.chainId,targetChainId:n.remotes.length===1?n.remotes[0].remoteChain.chainId:void 0,bridgeType:"ictt-erc20-erc20"}}return {isBridgeTx:!1}}var mn=async(e,t)=>{let r=await an(e);return {type:"ictt-erc20-erc20",analyzeTx:n=>{try{return on(r,ue(n))}catch{return {isBridgeTx:!1}}},estimateGas:n=>Vt(r,W(n)),estimateReceiveAmount:n=>sn(r,W(n)),getAssets:()=>Lt(r),getFees:n=>le(r,n),getMinimumTransferAmount:n=>Kt(r,n),transferAsset:n=>Wt(r,ye(n),e,t),trackTransfer:n=>Xt(r,n)}};var fe=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"src",type:"address"},{indexed:!0,internalType:"address",name:"guy",type:"address"},{indexed:!1,internalType:"uint256",name:"wad",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"dst",type:"address"},{indexed:!1,internalType:"uint256",name:"wad",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"src",type:"address"},{indexed:!0,internalType:"address",name:"dst",type:"address"},{indexed:!1,internalType:"uint256",name:"wad",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"src",type:"address"},{indexed:!1,internalType:"uint256",name:"wad",type:"uint256"}],name:"Withdrawal",type:"event"},{payable:!0,stateMutability:"payable",type:"fallback"},{constant:!0,inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"guy",type:"address"},{internalType:"uint256",name:"wad",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{internalType:"address",name:"",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[],name:"deposit",outputs:[],payable:!0,stateMutability:"payable",type:"function"},{constant:!0,inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"dst",type:"address"},{internalType:"uint256",name:"wad",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"src",type:"address"},{internalType:"address",name:"dst",type:"address"},{internalType:"uint256",name:"wad",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{internalType:"uint256",name:"wad",type:"uint256"}],name:"withdraw",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"chain_id",type:"uint256"}],name:"unwrap",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"swap",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{internalType:"address",name:"",type:"address"}],name:"swapSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"}];var Fe=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"guy",type:"address"},{name:"wad",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"src",type:"address"},{name:"dst",type:"address"},{name:"wad",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{name:"wad",type:"uint256"}],name:"withdraw",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"",type:"address"}],name:"balanceOf",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"dst",type:"address"},{name:"wad",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[],name:"deposit",outputs:[],payable:!0,stateMutability:"payable",type:"function"},{constant:!0,inputs:[{name:"",type:"address"},{name:"",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"src",type:"address"},{indexed:!0,name:"guy",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"src",type:"address"},{indexed:!0,name:"dst",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"dst",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"src",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Withdrawal",type:"event"}];function ua(e){return e.toLowerCase().startsWith("tb1")||e.toLowerCase().startsWith("bc1")}function nt(e){if(!ua(e))return !1;try{return base.bech32.decode(e),!0}catch{return !1}}function ke(e,t){return nt(e)?e.toLowerCase().startsWith(t?"bc":"tb"):!1}var Ie=zod.z.string().refine(e=>viem.isAddress(e),e=>({message:`Invalid EVM address '${e}'`})).transform(e=>e),la=zod.z.string().refine(e=>nt(e),e=>({message:`Invalid BTC address '${e}'`})),xe=(i=>(i.AVALANCHE="avalanche",i.ETHEREUM="ethereum",i.BITCOIN="bitcoin",i.UNKNOWN="",i))(xe||{}),Te=zod.z.nativeEnum(xe),fa=zod.z.object({tokenName:zod.z.string(),nativeNetwork:Te,denomination:zod.z.number()}),Ta=fa.extend({nativeContractAddress:Ie,wrappedContractAddress:Ie,wrappedNetwork:Te}),pn=zod.z.object({disableFrontend:zod.z.boolean(),addressBlocklist:zod.z.array(zod.z.string())}),cn=pn.extend({assets:zod.z.record(zod.z.string(),Ta),networks:zod.z.record(Te,zod.z.union([zod.z.number(),zod.z.undefined()])),walletAddresses:zod.z.record(Te,Ie)}),dn=zod.z.object({minimumConfirmations:zod.z.record(Te,zod.z.optional(zod.z.number()))}),ga=dn.extend({unwrapFeeApproximation:zod.z.record(zod.z.string(),zod.z.string()),wrapFeeApproximation:zod.z.record(zod.z.string(),zod.z.string())}),Me=zod.z.object({minimumFeeAmount:zod.z.string(),maximumFeeAmount:zod.z.string(),feePercentage:zod.z.number(),feePercentageDecimals:zod.z.number()}),Aa=dn.extend({unwrapFeeApproximation:zod.z.record(zod.z.string(),Me),wrapFeeApproximation:zod.z.record(zod.z.string(),Me)}),Ca=zod.z.object({critical:cn,nonCritical:ga}),ha=zod.z.object({critical:cn,nonCritical:Aa}),Ea=zod.z.object({tokenName:zod.z.string(),bech32AddressPrefix:zod.z.union([zod.z.literal("tb"),zod.z.literal("bc")]),wrappedContractAddress:Ie,wrappedNetwork:Te}),ba=pn.extend({addressBlocklist:zod.z.array(zod.z.string()),avalancheChainId:zod.z.number(),bitcoinAssets:zod.z.record(zod.z.string(),Ea),walletAddresses:zod.z.object({btc:la,avalanche:Ie})}),va=zod.z.object({dustThreshold:zod.z.number(),wrapFeeEstimate:zod.z.object({minimumFeeAmount:zod.z.string(),maximumFeeAmount:zod.z.string(),feePercentage:zod.z.number(),feePercentageDecimals:zod.z.number()}),unwrapFeeEstimate:zod.z.object({bridgeToll:zod.z.object({minimumFeeAmount:zod.z.string(),maximumFeeAmount:zod.z.string(),feePercentage:zod.z.number(),feePercentageDecimals:zod.z.number()}),estimatedTxFee:zod.z.object({constAmount:zod.z.number(),numeratorPerSat:zod.z.number(),denominatorPerSat:zod.z.number()})})}),ka=zod.z.object({wrapFeeAmount:zod.z.number(),constUnwrapFeeAmount:zod.z.number(),unwrapFeeNumerator:zod.z.number(),unwrapFeeDenominator:zod.z.number(),dustThreshold:zod.z.number()}),Ia=zod.z.object({minimumConfirmations:zod.z.number(),minimumOnboardSize:zod.z.number(),currentBridgeFeeEstimate:zod.z.union([va,ka])}),xa=zod.z.object({networkInfo:zod.z.record(zod.z.string(),Ia)}),un=zod.z.object({criticalBitcoin:ba,nonCriticalBitcoin:xa}),Ba=zod.z.intersection(ha,un),wa=zod.z.intersection(Ca,un),yn=zod.z.union([Ba,wa]);var Na=e=>"eip155:1"===e||"eip155:11155111"===e,rt=e=>Na(e.chainId);var Be=e=>"eip155:43113"===e||"eip155:43114"===e,He=e=>Be(e.chainId);var Ve=e=>e==="bip122:000000000019d6689c085ae165831e93"||e==="bip122:000000000933ea01ad0ee984209779ba";var ln=e=>e==="eip155:1"||e==="eip155:43114"||e==="bip122:000000000019d6689c085ae165831e93",Le=e=>!ln(e),J=e=>ln(e.chainId);var we={type:"native",name:"Ether",symbol:"ETH",decimals:18};var ge=({destinations:e,...t})=>t;var Sa=e=>({source:e.nativeTokenConfig.ethereumToken,target:e.nativeTokenConfig.avalancheToken,ethToAva:!0}),fn=(e,t)=>{if(!U(t))throw new f("ASSET_NOT_SUPPORTED",`Wrong token type: ${t.type}`);return lodash.isEqual(e,ge(t))},Pa=(e,t)=>{if(!U(t))throw new f("ASSET_NOT_SUPPORTED",`Wrong token type: ${t.type}`);let r=e.ethereumTokens[t.address];if(!r||!fn(r.token,t))throw new f("ASSET_NOT_SUPPORTED",`Unable to find matching ethereum token in config: ${t.symbol}`);let n=e.avalancheTokens[r.target.tokenAddress];if(!n)throw new f("ASSET_NOT_SUPPORTED",`Unable to get avalanche token in config: ${t.symbol}`);return {source:r,target:n,ethToAva:!0}},Da=(e,t)=>{if(!U(t))throw new f("ASSET_NOT_SUPPORTED",`Wrong token type: ${t.type}`);let r=e.avalancheTokens[t.address];if(!r||!fn(r.token,t))throw new f("ASSET_NOT_SUPPORTED",`Unable to find matching avalanche token in config: ${t.symbol}`);let n=e.ethereumTokens[r.target.tokenAddress];if(!n)throw new f("ASSET_NOT_SUPPORTED",`Unable to get ethereum token in config: ${t.symbol}`);return {source:r,target:n,ethToAva:!1}},_a=(e,t)=>{let{reference:r}=P.toJSON(e.chainId),{reference:n}=P.toJSON(t.chainId);return [{source:1,target:43114},{source:43114,target:1},{source:11155111,target:43113},{source:43113,target:11155111}].some(({source:s,target:o})=>s.toString()===r&&o.toString()===n)},V=({sourceChain:e,targetChain:t,amount:r,asset:n},i)=>{if(e.chainId===t.chainId)throw new f("IDENTICAL_CHAINS_PROVIDED",`SourceChain and TargetChain need to be different network. But found the same chainId: ${e.chainId}`);if(!_a(e,t))throw new f("INVALID_PARAMS","SourceChain and TargetChain combination is not correct or the chains provided are not supported");if(r<=0n)throw new f("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");return ce(n)&&n.symbol===we.symbol&&rt(e)?Sa(i):rt(e)?Pa(i,n):Da(i,n)};async function Tn(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s,fromAddress:o}=t;if(!viem.isAddress(o))throw new f("INVALID_PARAMS",`Invalid fromAddress: ${o}`);let a=e.walletAddresses.ethereum,{source:m,ethToAva:p}=V({sourceChain:r,targetChain:n,asset:i,amount:s},e),c=h({chain:r}),d=0n;if(ce(i)&&p){d+=await c.estimateContractGas({address:m.token.address,abi:Fe,functionName:"deposit",account:o});try{d+=await c.estimateContractGas({address:m.token.address,abi:N,functionName:"transfer",account:o,args:[a,s]});}catch{let u=viem.encodeFunctionData({abi:N,functionName:"transfer",args:[a,s]});d+=await c.estimateGas({data:u,account:o,to:a,value:s});}}else d=await c.estimateContractGas({address:m.token.address,abi:p?N:fe,functionName:p?"transfer":"unwrap",account:o,args:p?[a,s]:[s,0]});return d}var pe=e=>{try{return Me.parse(e),!0}catch{return !1}};var Oa=(e,{max:t,min:r})=>e>t?t:e<r?r:e,Ae=(e,t)=>{let{minimumFeeAmount:r,maximumFeeAmount:n,feePercentage:i,feePercentageDecimals:s}=t,o=BigInt(r),a=BigInt(n),m=i/10**s/100,p=Number(e)*m,c=BigInt(Math.ceil(p));return Oa(c,{min:o,max:a})};async function Z(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s}=t,{source:o,target:a,ethToAva:m}=V({sourceChain:r,targetChain:n,asset:i,amount:s},e),p=m?o.wrapFeeApproximation:o.unwrapFeeApproximation;if(pe(p)){let d=Ae(s,p);return {[a.token.address]:d}}let c=p??0n;return {[a.token.address]:c}}async function gn(e,t){let{target:r}=V(t,e),n=await Z(e,t);return {asset:r.token,amount:t.amount-(n[r.token.address]??0n)}}function An(e){let t=Object.values(e.ethereumTokens).reduce((s,o)=>{if(o.token.symbol==="USDC")return s;let a=o.chainId,m=o.target.chainId,p={...o.token,destinations:{[m]:["avalanche-evm"]}},c=s[a]??[];return c.push(p),s[a]=c,s},{}),r=Object.values(e.avalancheTokens).reduce((s,o)=>{let a=o.chainId,m=o.target.chainId,p={...o.token,destinations:{[m]:["avalanche-evm"]}},c=s[a]??[];return c.push(p),s[a]=c,s},t),n="eip155:1";r[n]&&r[n].push({...we,destinations:{["eip155:43114"]:["avalanche-evm"]}});let i="eip155:11155111";return r[i]&&r[i].push({...we,destinations:{["eip155:43113"]:["avalanche-evm"]}}),r}var Cn=3n;async function Ge(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s}=t,{source:o,target:a,ethToAva:m}=V({sourceChain:r,targetChain:n,asset:i,amount:s},e),p=m?o.wrapFeeApproximation:o.unwrapFeeApproximation;if(pe(p)){let u=p.minimumFeeAmount;return BigInt(u)*Cn}let d=(await Z(e,t))[a.token.address];if(d===void 0)throw new f("INVALID_PARAMS",`Unable to get static fee for ${i.symbol}`);return d*Cn}var Ue=()=>e=>({transactionHash:e.transactionHash}),hn=({params:{bridgeTransfer:{fromAddress:e}},transferData:{target:t,ethToAva:r},targetClient:n,config:i})=>async({fromBlock:s,toBlock:o,metadata:a})=>{if(!s)return;let m=t.token.address,p=r?_:i.walletAddresses.ethereum,c=r?void 0:{src:p,dst:e},d=r?{inputs:[{indexed:!1,name:"to",type:"address"},{indexed:!1,name:"amount",type:"uint256"},{indexed:!1,name:"feeAddress",type:"address"},{indexed:!1,name:"feeAmount",type:"uint256"},{indexed:!1,name:"originTxId",type:"bytes32"}],name:"Mint",type:"event"}:{inputs:[{indexed:!0,name:"src",type:"address"},{indexed:!0,name:"dst",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Transfer",type:"event"},u=await n.getLogs({address:m,event:d,args:c,fromBlock:s,toBlock:o}),y=r?u.find(T=>at(T)&&T.args.originTxId===a?.transactionHash):u.at(-1);if(!lodash.isNil(y))return y.transactionHash},at=e=>Ga(e)?Object.keys(e.args).includes("originTxId"):!1,Ga=e=>Object.keys(e).includes("args"),Ne=e=>lodash.isObject(e)&&viem.isHex(e.transactionHash);var Ua=async(e,t)=>{let{bridgeTransfer:r}=t,{targetChain:n,sourceChain:i,asset:s,amount:o}=r,a=V({sourceChain:i,targetChain:n,asset:s,amount:o},e),m=h({chain:r.targetChain}),p=hn({params:t,transferData:a,targetClient:m,config:e}),c=oe({targetClient:m,getTargetTxHash:p,checkMetadata:Ne,trackingParams:t,trackingConfig:k});return D({promise:c,delay:1e3*30,startAfter:k.initialDelayMs})},za=async e=>{let{sourceChain:t,targetChain:r}=e.bridgeTransfer,n=h({chain:t}),i=h({chain:r}),s=Ue(),o=se({sourceClient:n,targetClient:i,getMetadata:s,checkMetadata:Ne,trackingParams:e,trackingConfig:k});return D({promise:o,delay:1e3*30,startAfter:k.initialDelayMs})};function En(e,t){let r,n=()=>{r?.();};return {result:(async()=>{let{bridgeTransfer:s,updateListener:o}=t,{result:a,cancel:m}=await za({bridgeTransfer:s,updateListener:o});r=m;let p=await a,{result:c,cancel:d}=await Ua(e,{updateListener:o,bridgeTransfer:p});return r=d,c})(),cancel:n}}var ze=async({amount:e,source:t,sourceChain:r,fromAddress:n,sign:i,onStepChange:s,gasSettings:o})=>{let a=h({chain:r}),m={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};s?.(m);let p=viem.encodeFunctionData({abi:fe,functionName:"unwrap",args:[e,0n]}),c=await i({from:n,to:t.token.address,data:p,...o?{maxFeePerGas:o.price,maxPriorityFeePerGas:o.tip}:null},d=>a.sendRawTransaction({serializedTransaction:d}),m);return await a.waitForTransactionReceipt({hash:c,pollingInterval:1e3}),c};var bn={ethereum:"0x6b7a87899490EcE95443e979cA9485CBE7E71522",avalanche:"0x9b17bAADf0f21F03e35249e0e59723F34994F806"},ja=async({amount:e,config:t,source:r,sourceChain:n,fromAddress:i,sign:s,onStepChange:o,gasSettings:a})=>{let m=t.walletAddresses.ethereum,p=h({chain:n}),c={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};o?.(c);let d=viem.encodeFunctionData({abi:N,functionName:"transfer",args:[m,e]}),u=await s({from:i,to:r.token.address,data:d,...a?{maxFeePerGas:a.price,maxPriorityFeePerGas:a.tip}:null},y=>p.sendRawTransaction({serializedTransaction:y}),c);return await p.waitForTransactionReceipt({hash:u,pollingInterval:1e3}),u},qa=async({config:e,fromAddress:t,sourceChain:r,targetChain:n})=>{if(e.environment!=="production"&&!J(r)&&!J(n))return !1;let i=e.nativeTokenConfig.ethereumToken,s=e.nativeTokenConfig.avalancheToken;try{return await h({chain:r}).readContract({address:i.token.address,abi:N,functionName:"allowance",args:[t,bn.ethereum]})!==0n?!0:await h({chain:n}).readContract({address:s.token.address,abi:N,functionName:"allowance",args:[t,bn.avalanche]})!==0n}catch{return !1}},$a=async({amount:e,config:t,fromAddress:r,source:n,sourceChain:i,targetChain:s,sign:o,onStepChange:a,gasSettings:m})=>{let p=t.walletAddresses.ethereum,c=h({chain:i});if(!He(s))throw new f("INVALID_PARAMS","Invalid chain combinations");if(await qa({config:t,fromAddress:r,sourceChain:i,targetChain:s}))throw new f("VULNERABLE_TOKEN_APPROVAL_ADDRESS","Address has vulnerable token approvals");let u={currentSignature:1,currentSignatureReason:"wrap-token",requiredSignatures:2};a?.(u);let y=viem.encodeFunctionData({abi:Fe,functionName:"deposit"}),T=await o({from:r,to:n.token.address,value:e,data:y,...m?{maxFeePerGas:m.price,maxPriorityFeePerGas:m.tip}:null},A=>c.sendRawTransaction({serializedTransaction:A}),u);await c.waitForTransactionReceipt({hash:T,pollingInterval:1e3});let g={currentSignature:2,currentSignatureReason:"tokens-transfer",requiredSignatures:2};a?.(g);let C=viem.encodeFunctionData({abi:N,functionName:"transfer",args:[p,e]}),b=await o({from:r,to:n.token.address,data:C,...m?{maxFeePerGas:m.price,maxPriorityFeePerGas:m.tip}:null},A=>c.sendRawTransaction({serializedTransaction:A}),g);return await c.waitForTransactionReceipt({hash:b,pollingInterval:1e3}),b},vn=async({amount:e,asset:t,config:r,fromAddress:n,source:i,sourceChain:s,targetChain:o,sign:a,onStepChange:m,gasSettings:p})=>ce(t)?$a({amount:e,config:r,fromAddress:n,source:i,sourceChain:s,targetChain:o,sign:a,onStepChange:m,gasSettings:p}):ja({amount:e,config:r,source:i,sourceChain:s,fromAddress:n,sign:a,onStepChange:m,gasSettings:p});var Ce=(e,t)=>{let r=t.map(i=>i.toLowerCase()),n=e.find(i=>r.includes(i.toLowerCase()));if(n)throw new f("ADDRESS_IS_BLOCKED",n)};async function kn(e,t,r){let{sourceChain:n,targetChain:i,asset:s,amount:o,fromAddress:a,toAddress:m,onStepChange:p,gasSettings:c}=t;if(a!==m)throw new f("INVALID_PARAMS","fromAddress and toAddress do not match");Ce([a,m],e.addressBlocklist);let d=await Z(e,{asset:s,amount:o,sourceChain:n,targetChain:i}),{source:u,target:y,ethToAva:T}=V({sourceChain:n,targetChain:i,asset:s,amount:o},e),g=await Ge(e,{asset:s,amount:o,sourceChain:n,targetChain:i});if(o<g)throw new f("INVALID_PARAMS",`Minimum transfer amount is ${g.toString()}`);let C=He(n)?e.minimumConfirmations.avalanche:e.minimumConfirmations.ethereum,b=d[y.token.address]??0n,A;T?A=await vn({amount:o,asset:s,config:e,fromAddress:a,source:u,sourceChain:n,targetChain:i,sign:r.sign,onStepChange:p,gasSettings:c}):A=await ze({amount:o,fromAddress:a,source:u,sourceChain:n,sign:r.sign,onStepChange:p,gasSettings:c});let I=Date.now(),R=h({chain:t.targetChain}),F;try{F=await R.getBlockNumber();}catch(he){console.error(he);}return {type:"avalanche-evm",environment:e.environment,fromAddress:t.fromAddress,toAddress:t.toAddress,amount:t.amount,asset:s,bridgeFee:b,sourceChain:t.sourceChain,sourceStartedAt:I,sourceTxHash:A,sourceConfirmationCount:0,sourceRequiredConfirmationCount:C,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:F}}var In=(e,t)=>{let r=e.critical.assets,{ethereum:n,avalanche:i}=e.critical.networks;if(n===void 0||i===void 0)throw new B("WARDEN_CONFIG_MISSING_NETWORK","Critical networks info is missing from wardenConfig");let s=e.critical.walletAddresses.avalanche,o=e.critical.walletAddresses.ethereum;if(!s||!o)throw new B("CONFIG_NOT_AVAILABLE","Wallet address is missing from the critical config.");let a=Object.entries(r).reduce((T,[g,C])=>{let b={type:"erc20",address:C.nativeContractAddress,name:C.tokenName,symbol:g,decimals:C.denomination},A=e.nonCritical.wrapFeeApproximation[g];return T[C.nativeContractAddress]={chainId:`eip155:${n}`,token:b,target:{chainId:`eip155:${i}`,tokenAddress:C.wrappedContractAddress},wrapFeeApproximation:pe(A)?A:A?BigInt(A):void 0},T},{}),m=Object.values(a).find(T=>T.token.symbol==="WETH");if(!m)throw new B("CONFIG_NOT_AVAILABLE","WETH info is missing from config");let p=Object.entries(r).reduce((T,[g,C])=>{let b={type:"erc20",address:C.wrappedContractAddress,name:C.tokenName,symbol:`${g}.e`,decimals:C.denomination},A=e.nonCritical.unwrapFeeApproximation[g];return T[C.wrappedContractAddress]={chainId:`eip155:${i}`,token:b,target:{chainId:`eip155:${n}`,tokenAddress:C.nativeContractAddress},unwrapFeeApproximation:pe(A)?A:A?BigInt(A):void 0},T},{}),c=p[m.target.tokenAddress];if(!c)throw new B("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 B("CONFIG_NOT_AVAILABLE","Minimum confirmation info is missing");return {addressBlocklist:e.critical.addressBlocklist,ethereumTokens:a,avalancheTokens:p,minimumConfirmations:{avalanche:d,ethereum:u},environment:t,walletAddresses:{avalanche:s,ethereum:o},nativeTokenConfig:{ethereumToken:m,avalancheToken:c}}};var xn={environment:"dev",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.test.json",configMismatchThreshold:1,wardenConfigURLs:["https://warden1-avax-dev-storage.s3.amazonaws.com/bridge_settings.json","https://warden2-avax-dev-storage.s3.amazonaws.com/bridge_settings.json","https://warden3-avax-dev-storage.s3.amazonaws.com/bridge_settings.json"],disabledTokensOnNetwork:{avalanche:[],ethereum:["FAU"]}},Bn={...xn,environment:"staging"},wn={...Bn,environment:"test",configMismatchThreshold:2,wardenConfigURLs:["https://ava-warden-bucket.s3.eu-central-1.amazonaws.com/bridge_settings.json","https://ava-warden-testnet.s3.us-west-1.amazonaws.com/bridge_settings.json","https://avalabs-testnet-cce1-testnet-warden-bucket.s3.ca-central-1.amazonaws.com/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://s3.amazonaws.com/warden-mgmt-prod-testnet.blockdaemon.com/bridge_settings.json"]},Xa={...wn,environment:"production",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.json",wardenConfigURLs:["https://ava-warden-bucket-prod.s3.eu-central-1.amazonaws.com/bridge_settings.json","https://ava-warden-mainnet.s3.us-west-1.amazonaws.com/bridge_settings.json","https://avalabs-mainnet-cce1-mainnet-warden-bucket.s3.ca-central-1.amazonaws.com/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://s3.amazonaws.com/warden-mgmt-prod-mainnet.blockdaemon.com/bridge_settings.json","https://warden-avax-storage.s3.amazonaws.com/bridge_settings.json"],disabledTokensOnNetwork:{avalanche:[],ethereum:["CRV"]}},Ka={production:Xa,staging:Bn,test:wn,dev:xn},We=e=>Ka[e];var Ya=async e=>{let t=[];e.forEach(i=>t.push(fetch(i)));let r=await Promise.allSettled(t),n=[];for(let i of r)if(!(i.status==="rejected"||!i.value||!i.value.ok))try{let s=await i.value.json(),o=yn.parse(s);n.push(o);}catch(s){console.error(s);}return n},ei=e=>e.map(t=>{if(t.critical.disableFrontend)throw new B("CONFIG_NOT_AVAILABLE","Disable frontend");let r=e.reduce((n,i)=>n+(lodash.isEqual(t.critical,i.critical)?1:0),0);return {config:t,count:r}}),je=lodash.memoize(async e=>{let t=e.wardenConfigURLs,r=await Ya(t),n=ei(r),i=lodash.maxBy(n,s=>s.count);if(!i||i.count<e.wardenConfigURLs.length-e.configMismatchThreshold)throw new B("WARDEN_CONFIG_MISMATCH","Warden config mismatch");return i.config});var Nn=async e=>{let t=We(e),r=await je(t);return In(r,e)};function Rn(e,t){let r="eip155:43113"===t.chainId||"eip155:11155111"===t.chainId,n=r?"eip155:43113":"eip155:43114",i=r?"eip155:11155111":"eip155:1";return viem.isAddressEqual(t.from,e.walletAddresses.ethereum)||viem.isAddressEqual(t.to,e.walletAddresses.avalanche)?{isBridgeTx:!0,sourceChainId:n,targetChainId:i,bridgeType:"avalanche-evm"}:viem.isAddressEqual(t.from,e.walletAddresses.avalanche)||viem.isAddressEqual(t.to,e.walletAddresses.ethereum)?{isBridgeTx:!0,sourceChainId:i,targetChainId:n,bridgeType:"avalanche-evm"}:{isBridgeTx:!1}}var Sn=async(e,t)=>{let r=await Nn(e);return {type:"avalanche-evm",analyzeTx:n=>{try{return Rn(r,ue(n))}catch{return {isBridgeTx:!1}}},estimateGas:n=>Tn(r,W(n)),estimateReceiveAmount:n=>gn(r,W(n)),getAssets:()=>An(r),getFees:n=>Z(r,n),transferAsset:n=>kn(r,ye(n),t),trackTransfer:n=>En(r,n),getMinimumTransferAmount:n=>Ge(r,n)}};var st=e=>"wrapFeeEstimate"in e,Q=e=>"wrapFeeEstimate"in e||"unwrapFeeEstimate"in e;var Pn=(e,t)=>{let r=e.criticalBitcoin,n=r.bitcoinAssets.btc;if(!n)throw new B("CONFIG_NOT_AVAILABLE","Bitcoin asset info is missing from config");let i=e.nonCriticalBitcoin.networkInfo.btc;if(!i)throw new B("CONFIG_NOT_AVAILABLE","Bitcoin network info was not found.");let s=i.currentBridgeFeeEstimate,o=st(s)?{wrapFeeEstimate:s.wrapFeeEstimate}:{wrapFeeAmount:s.wrapFeeAmount},a=n.bech32AddressPrefix==="bc"?"bip122:000000000019d6689c085ae165831e93":"bip122:000000000933ea01ad0ee984209779ba",m={chainId:a,token:{name:n.tokenName,symbol:"BTC",decimals:8,type:"native"},target:{networkId:`eip155:${r.avalancheChainId}`,tokenAddress:n.wrappedContractAddress},bridgeFeeEstimate:o},p=st(s)?{unwrapFeeEstimate:s.unwrapFeeEstimate}:{constUnwrapFeeAmount:s.constUnwrapFeeAmount,unwrapFeeNumerator:s.unwrapFeeNumerator,unwrapFeeDenominator:s.unwrapFeeDenominator},c={chainId:`eip155:${r.avalancheChainId}`,token:{name:n.tokenName,symbol:"BTC.b",decimals:8,type:"erc20",address:n.wrappedContractAddress},target:{networkId:a},bridgeFeeEstimate:p};return {addressBlocklist:e.criticalBitcoin.addressBlocklist,environment:t,dustThreshold:s.dustThreshold,minimumOnboardSize:i.minimumOnboardSize,minimumConfirmations:{bitcoin:i.minimumConfirmations,avalanche:e.nonCritical.minimumConfirmations.avalanche??1},nativeTokenConfig:{bitcoinToken:m,avalancheToken:c},walletAddresses:{bitcoin:r.walletAddresses.btc,avalanche:r.walletAddresses.avalanche}}};var $e=async e=>{try{let t=We(e),r=await je(t);return Pn(r,e)}catch{throw new B("CONFIG_NOT_AVAILABLE")}};function _n(e,t){let{chainId:r,from:n,to:i,tokenTransfers:s}=t,o=Be(r),a=Ve(r);if(!o&&!a)return {isBridgeTx:!1};let m=Le(r),p=m?"eip155:43113":"eip155:43114",c=m?"bip122:000000000933ea01ad0ee984209779ba":"bip122:000000000019d6689c085ae165831e93",d=a&&lodash.isEqual(i.toLowerCase(),e.walletAddresses.bitcoin.toLowerCase())&&s.some(y=>y.symbol==="BTC");return o&&lodash.isEqual(n,e.walletAddresses.avalanche)&&s.some(y=>y.symbol==="BTC.b"&&y.from===_)||d?{isBridgeTx:!0,sourceChainId:c,targetChainId:p,bridgeType:"avalanche-btc-ava"}:{isBridgeTx:!1}}var Fn=zod.z.object({txHash:zod.z.string(),txHex:zod.z.optional(zod.z.string()),index:zod.z.number(),value:zod.z.number(),script:zod.z.string(),blockHeight:zod.z.number(),confirmations:zod.z.number()}),Mn=zod.z.array(Fn);Fn.extend({script:zod.z.optional(zod.z.string())});var ti=zod.z.object({address:zod.z.string(),value:zod.z.number()}),On=zod.z.array(ti);function ri(e){let t=[];return e.filter(r=>{let n=r.txHash+r.index.toString();return t.includes(n)?!1:(t.push(n),!0)})}function Xe(e,t,r,n,i){let s=ri(i),o=[{address:e,value:Number(r)}],{inputs:a,outputs:m,fee:p}=ni__default.default(s,o,n);if(typeof p!="number")throw new f("UNKNOWN","Unable to choose utxo properly");if(!a||!m||!m.length)return {fee:p};let c=Mn.parse(a),d=[m[0]],u=m[1];u&&d.push({address:t,value:u.value});let y=On.parse(d);return {inputs:c,outputs:y,fee:p}}var ii=(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),si=(e,t)=>lodash.isEqual(e,ge(t)),L=(e,t)=>{let{sourceChain:r,targetChain:n,amount:i,asset:s}=e;if(!ii(r,n))throw new f("INVALID_PARAMS","SourceChain and TargetChain combination is not valid");if(i<=0n)throw new f("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let o=t.nativeTokenConfig.bitcoinToken;if(!si(o.token,s))throw new f("ASSET_NOT_SUPPORTED","Incorrect Asset was provided");return {source:o,target:t.nativeTokenConfig.avalancheToken,btcToAva:!0}};async function Hn(e,t,r){let{fromAddress:n,sourceChain:i,targetChain:s,asset:o,amount:a}=t;L({sourceChain:i,targetChain:s,asset:o,amount:a},e);let m=e.walletAddresses.bitcoin,p=1,{utxos:c}=await r.getUtxoBalance(n,!1),d=await r.getScriptsForUtxos(c),{fee:u}=Xe(m,n,a,p,d);return BigInt(u)}async function Y(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:s}=t,{source:o,target:a}=L({sourceChain:r,targetChain:n,amount:i,asset:s},e);if(Q(o.bridgeFeeEstimate)){let m=Ae(i,o.bridgeFeeEstimate.wrapFeeEstimate);return {[a.token.address]:m}}return {[a.token.address]:BigInt(o.bridgeFeeEstimate.wrapFeeAmount)}}async function Vn(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s}=t,{target:o}=L({sourceChain:r,targetChain:n,asset:i,amount:s},e),a=await Y(e,t);return {asset:o.token,amount:t.amount-(a[o.token.address]??0n)}}function Ln(e){let t=e.nativeTokenConfig.bitcoinToken,r={...t.token,destinations:{[t.target.networkId]:["avalanche-btc-ava"]}};return {[t.chainId]:[r]}}async function Gn(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:s}=t,o=L({sourceChain:r,targetChain:n,amount:i,asset:s},e),a=await oi(e,t,o),m=e.minimumOnboardSize;return BigInt(Math.max(a*4,m))}async function oi(e,t,{source:r,target:n}){if(Q(r.bridgeFeeEstimate))return Number(r.bridgeFeeEstimate.wrapFeeEstimate.minimumFeeAmount);{let i=await Y(e,t);return Number(i[n.token.address])}}var Un=({targetClient:e,checkMetadata:t,trackingParams:{bridgeTransfer:r,updateListener:n},trackingConfig:{trackingLimitMs:i},bitcoinFunctions:s})=>{let o=lodash.cloneDeep(r);return async m=>{let{sourceTxHash:p}=r;if(o.completedAt||t(o.metadata))return m(o);if(o.sourceStartedAt+i<=Date.now())return o=E(o,{completedAt:Date.now(),errorCode:5004},n),m(o);let{confirmations:c,fees:d}=await s.getTransaction(p);if(!o.sourceNetworkFee){let T=BigInt(Math.ceil(d));o=E(o,{sourceNetworkFee:T},n);}let u=c>o.sourceConfirmationCount,y=c>=o.sourceRequiredConfirmationCount;if(u){let T={};T.sourceConfirmationCount=Number(c),y||(T.targetStartBlockNumber=await e.getBlockNumber()),o=E(o,T,n);}if(y)return o.targetStartBlockNumber||(o=E(o,{targetStartBlockNumber:await e.getBlockNumber()},n)),o=E(o,{targetStartedAt:Date.now(),metadata:{transactionHash:p}},n),m(o)}};var jn=({targetClient:e,getTargetTxHash:t,checkMetadata:r,trackingParams:{bridgeTransfer:n,updateListener:i},trackingConfig:{trackingLimitMs:s,maxBlocks:o}})=>{if(!n.completedAt&&!r(n.metadata))throw new f("INVALID_PARAMS","metadata is missing");if(!n.targetStartBlockNumber)throw new f("INVALID_PARAMS","targetStartBlockNumber is missing");let a=lodash.cloneDeep(n);return async p=>{if(a.completedAt)return p(a);if(a.sourceStartedAt+s<=Date.now())return a=E(a,{completedAt:Date.now(),errorCode:5004},i),p(a);if(!a.targetStartBlockNumber)throw new Error("unreachable");if(!a.targetTxHash){let T=await e.getBlockNumber(),g=a.targetStartBlockNumber-o,C=g>=0n?g:"earliest",b=a.targetStartBlockNumber+o,A=b<T?b:"latest",I=await t({fromBlock:C,toBlock:A,metadata:a.metadata});if(I)a=E(a,{targetTxHash:I},i);else {a=E(a,{targetStartBlockNumber:T},i);return}}if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let c=await e.getTransactionReceipt({hash:a.targetTxHash});if(!a.targetNetworkFee){let T=await e.getTransaction({hash:a.targetTxHash}),g=K(T,c);g&&(a=E(a,{targetNetworkFee:g},i));}if(c.status==="reverted")return a=E(a,{completedAt:Date.now(),errorCode:5005},i),p(a);if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let d=await e.getTransactionConfirmations({hash:a.targetTxHash}),u=d>a.targetConfirmationCount,y=d>=a.targetRequiredConfirmationCount;if(u&&(a=E(a,{targetConfirmationCount:Number(d)},i)),!!y)return a=E(a,{completedAt:Date.now()},i),p(a)}};var ot=e=>lodash.isObject(e)&&!!e.transactionHash,qn=({transferData:{target:e},targetClient:t})=>async({fromBlock:r,toBlock:n,metadata:i})=>{if(!r)return;let s=e.token.address,o={inputs:[{indexed:!1,name:"to",type:"address"},{indexed:!1,name:"amount",type:"uint256"},{indexed:!1,name:"feeAddress",type:"address"},{indexed:!1,name:"feeAmount",type:"uint256"},{indexed:!1,name:"originTxId",type:"bytes32"},{indexed:!1,name:"originOutputIndex",type:"uint256"}],name:"Mint",type:"event"},m=(await t.getLogs({address:s,event:o,fromBlock:r,toBlock:n})).find(p=>at(p)&&p.args.originTxId===`0x${i?.transactionHash}`);if(!lodash.isNil(m))return m.transactionHash};var ui=async(e,t)=>{let{targetChain:r}=e.bridgeTransfer,n=h({chain:r}),i=Un({targetClient:n,trackingParams:e,trackingConfig:k,checkMetadata:ot,bitcoinFunctions:t});return D({promise:i,delay:1e3*60,startAfter:k.initialDelayMs})},yi=async(e,t)=>{let{bridgeTransfer:r}=e,n=h({chain:r.targetChain}),i=qn({transferData:t,targetClient:n}),s=jn({targetClient:n,getTargetTxHash:i,checkMetadata:ot,trackingParams:e,trackingConfig:k});return D({promise:s,delay:2e3,startAfter:k.initialDelayMs})};function $n(e,t,r){let n,i=()=>{n?.();};return {result:(async()=>{let{bridgeTransfer:o}=t,{targetChain:a,sourceChain:m,asset:p,amount:c}=o,d=L({sourceChain:m,targetChain:a,asset:p,amount:c},e),{result:u,cancel:y}=await ui(t,r);n=y;let T=await u,{result:g,cancel:C}=await yi({...t,bridgeTransfer:T},d);return n=C,g})(),cancel:i}}var Xn=async({config:e,amount:t,fromAddress:r,sign:n,onStepChange:i,bitcoinFunctions:s,gasSettings:o})=>{let a=o?Number(o.price):void 0,{low:m,high:p}=a?{low:a,high:a}:await s.getFeeRates(),c=e.environment==="production"?p:m,{utxos:d}=await s.getUtxoBalance(r,!1),u=await s.getScriptsForUtxos(d),y=e.walletAddresses.bitcoin,{inputs:T,outputs:g}=Xe(y,r,t,c,u);if(!T||!g)throw new f("INVALID_PARAMS","Unable to create transaction");let C={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};return i?.(C),await n({inputs:T,outputs:g},s.issueRawTx,C)};async function Kn(e,t,r,n){let{fromAddress:i,toAddress:s,sourceChain:o,targetChain:a,asset:m,amount:p,onStepChange:c,gasSettings:d}=t;Ce([i,s],e.addressBlocklist);let{target:u}=L({sourceChain:o,targetChain:a,asset:m,amount:p},e),y=Date.now(),g=(await Y(e,{asset:m,amount:p,sourceChain:o,targetChain:a}))[u.token.address]??0n,C=e.minimumConfirmations.bitcoin,b=await Xn({config:e,amount:p,sign:r.sign,onStepChange:c,fromAddress:i,bitcoinFunctions:n,gasSettings:d}),A=h({chain:a}),I;try{I=await A.getBlockNumber();}catch(F){console.error(F);}return {type:"avalanche-btc-ava",environment:e.environment,fromAddress:i,toAddress:s,amount:t.amount,asset:m,bridgeFee:g,sourceChain:o,sourceStartedAt:y,sourceTxHash:b,sourceConfirmationCount:0,sourceRequiredConfirmationCount:C,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:I}}var Jn=({fromAddress:e,toAddress:t,sourceChain:r,...n})=>{if(!viem.isAddress(t))throw new f("INCORRECT_ADDRESS_PROVIDED","Invalid toAddress was provided");let i=J(r);if(!ke(e,i))throw new f("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided: Make sure it is Btc Address from correct environment");return {fromAddress:e,toAddress:t,sourceChain:r,...n}},mt=({fromAddress:e,sourceChain:t,...r})=>{let n=J(t);if(!ke(e,n))throw new f("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided: Make sure it is Btc Address from correct environment");return {fromAddress:e,sourceChain:t,...r}};var Zn=async(e,t,r)=>{let n=await $e(e);return {type:"avalanche-btc-ava",analyzeTx:i=>_n(n,i),estimateGas:i=>Hn(n,mt(i),r),estimateReceiveAmount:i=>Vn(n,mt(i)),getAssets:()=>Ln(n),getFees:i=>Y(n,i),transferAsset:i=>Kn(n,Jn(i),t,r),trackTransfer:i=>$n(n,i,r),getMinimumTransferAmount:i=>Gn(n,i)}};function Yn(e,t){let{chainId:r,from:n,to:i,tokenTransfers:s}=t,o=Be(r),a=Ve(r);if(!o&&!a)return {isBridgeTx:!1};let m=Le(r),p=m?"eip155:43113":"eip155:43114",c=m?"bip122:000000000933ea01ad0ee984209779ba":"bip122:000000000019d6689c085ae165831e93",d=o&&lodash.isEqual(i.toLowerCase(),e.nativeTokenConfig.avalancheToken.token.address.toLowerCase())&&s.some(y=>y.to?.toLowerCase()===_.toLowerCase()&&y.symbol==="BTC.b"),u=a&&lodash.isEqual(n.toLowerCase(),e.walletAddresses.bitcoin.toLowerCase())&&s.some(y=>y.symbol==="BTC");return d||u?{isBridgeTx:!0,sourceChainId:p,targetChainId:c,bridgeType:"avalanche-ava-btc"}:{isBridgeTx:!1}}var Ti=(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),gi=(e,t)=>lodash.isEqual(e,ge(t)),G=(e,t)=>{let{sourceChain:r,targetChain:n,amount:i,asset:s}=e;if(!Ti(r,n))throw new f("INVALID_PARAMS","SourceChain and TargetChain combination is not valid");if(i<=0n)throw new f("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let o=t.nativeTokenConfig.avalancheToken;if(!gi(o.token,s))throw new f("ASSET_NOT_SUPPORTED","Incorrect Asset was provided");return {source:o,target:t.nativeTokenConfig.bitcoinToken,btcToAva:!1}};async function er(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s,fromAddress:o}=t,{source:a}=G({sourceChain:r,targetChain:n,asset:i,amount:s},e);return await h({chain:r}).estimateContractGas({address:a.token.address,abi:fe,functionName:"unwrap",account:o,args:[s,0]})}async function ee(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:s}=t,{source:o}=G({sourceChain:r,targetChain:n,amount:i,asset:s},e);if(Q(o.bridgeFeeEstimate)){let{constAmount:a,numeratorPerSat:m,denominatorPerSat:p}=o.bridgeFeeEstimate.unwrapFeeEstimate.estimatedTxFee,c=a+m/p*Number(i),d=Ae(i,o.bridgeFeeEstimate.unwrapFeeEstimate.bridgeToll),u=BigInt(Math.ceil(c))+d;return {NATIVE:BigInt(u)}}else {let{constUnwrapFeeAmount:a,unwrapFeeNumerator:m,unwrapFeeDenominator:p}=o.bridgeFeeEstimate,c=a+m/p*Number(i),d=BigInt(Math.ceil(c));return {NATIVE:BigInt(d)}}}async function tr(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:s}=t,{target:o}=G({sourceChain:r,targetChain:n,asset:i,amount:s},e),a=await ee(e,{sourceChain:r,targetChain:n,amount:s,asset:i});return {asset:o.token,amount:t.amount-(a.NATIVE??0n)}}function nr(e){let t=e.nativeTokenConfig.avalancheToken,r={...t.token,destinations:{[t.target.networkId]:["avalanche-ava-btc"]}};return {[t.chainId]:[r]}}async function rr(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:s}=t,o=G({sourceChain:r,targetChain:n,amount:i,asset:s},e),a=await Ai(e,t,o),m=e.dustThreshold;return BigInt(Math.ceil((a+m)*2))}async function Ai(e,t,{source:r}){if(Q(r.bridgeFeeEstimate)){let{constAmount:n,numeratorPerSat:i,denominatorPerSat:s}=r.bridgeFeeEstimate.unwrapFeeEstimate.estimatedTxFee,o=n+i/s*Number(t.amount);return Number(r.bridgeFeeEstimate.unwrapFeeEstimate.bridgeToll.minimumFeeAmount)+o}else {let n=await ee(e,t);return Number(n.NATIVE)}}var ir=({sourceClient:e,getMetadata:t,checkMetadata:r,trackingParams:{bridgeTransfer:n,updateListener:i},trackingConfig:{trackingLimitMs:s},bitcoinFunctions:o})=>{let a=lodash.cloneDeep(n);return async p=>{if(a.completedAt||r(a.metadata))return p(a);if(a.sourceStartedAt+s<=Date.now())return a=E(a,{completedAt:Date.now(),errorCode:5004},i),p(a);if(!viem.isHash(a.sourceTxHash))return;let c=await e.getTransactionReceipt({hash:a.sourceTxHash});if(!a.sourceNetworkFee){let g=await e.getTransaction({hash:a.sourceTxHash}),C=K(g,c);C&&(a=E(a,{sourceNetworkFee:C},i));}if(c.status==="reverted")return a=E(a,{completedAt:Date.now(),errorCode:5005},i),p(a);if(!viem.isHash(a.sourceTxHash))return;let d=await e.getTransactionConfirmations({hash:a.sourceTxHash}),u=d>a.sourceConfirmationCount,y=d>=a.sourceRequiredConfirmationCount;if(u){let g={};g.sourceConfirmationCount=Number(d),y||(g.targetStartBlockNumber=BigInt(await o.getChainHeight())),a=E(a,g,i);}if(!y)return;a.targetStartBlockNumber||(a=E(a,{targetStartBlockNumber:BigInt(await o.getChainHeight())},i));let T=t(c);return a=E(a,{targetStartedAt:Date.now(),metadata:T},i),p(a)}};var sr=({trackingParams:{bridgeTransfer:e,updateListener:t},trackingConfig:{trackingLimitMs:r},config:n,bitcoinFunctions:i})=>{let{toAddress:s,targetStartBlockNumber:o,amount:a}=e;if(!e.targetStartBlockNumber)throw new f("INVALID_PARAMS","targetStartBlockNumber is missing");let m=lodash.cloneDeep(e);return async c=>{if(m.completedAt)return c(m);if(m.sourceStartedAt+r<=Date.now())return m=E(m,{completedAt:Date.now(),errorCode:5004},t),c(m);if(!m.targetStartBlockNumber)throw new Error("unreachable");let d;if(!m.targetTxHash){let{confirmed:y,unconfirmed:T}=await i.getUTXOs(s,!1),C=[...y.filter(b=>!o||b.blockHeight>=o).sort((b,A)=>b.blockHeight-A.blockHeight),...T];for(let b of C){if(d=await i.getTransaction(b.txHash),!d)return;if(d.addresses.includes(n.walletAddresses.bitcoin)){m=E(m,{targetTxHash:d.hash,targetNetworkFee:BigInt(d.fees),targetConfirmationCount:d.confirmations},t);let I=d.outputs.find(F=>F.addresses?.length===1&&F.addresses[0]===s),R=I&&BigInt(Math.ceil(Number(a)-I.value));R&&(m=E(m,{bridgeFee:R},t));break}}if(!m.targetTxHash)return}if(d||(d=await i.getTransaction(m.targetTxHash)),!d)return;if(d.confirmations>=m.targetRequiredConfirmationCount)return m=E(m,{completedAt:Date.now(),targetConfirmationCount:d.confirmations},t),c(m)}};var Ei=async(e,t)=>{let{sourceChain:r}=e.bridgeTransfer,n=h({chain:r}),i=Ue(),s=ir({sourceClient:n,getMetadata:i,checkMetadata:Ne,trackingParams:e,trackingConfig:k,bitcoinFunctions:t});return D({promise:s,delay:2e3,startAfter:k.initialDelayMs})},bi=async(e,t,r)=>{let n=sr({trackingParams:t,trackingConfig:k,config:e,bitcoinFunctions:r});return D({promise:n,delay:1e3*60,startAfter:k.initialDelayMs})};function or(e,t,r){let n,i=()=>{n?.();};return {result:(async()=>{let{bridgeTransfer:o}=t,{targetChain:a,sourceChain:m,asset:p,amount:c}=o;G({sourceChain:m,targetChain:a,asset:p,amount:c},e);let{result:d,cancel:u}=await Ei(t,r);n=u;let y=await d,{result:T,cancel:g}=await bi(e,{...t,bridgeTransfer:y},r);return n=g,T})(),cancel:i}}async function mr(e,t,r,n){let{sourceChain:i,targetChain:s,asset:o,amount:a,fromAddress:m,toAddress:p,onStepChange:c,gasSettings:d}=t;Ce([m,p],e.addressBlocklist);let{source:u}=G({sourceChain:i,targetChain:s,asset:o,amount:a},e),y=Date.now(),g=(await ee(e,{asset:o,amount:a,sourceChain:i,targetChain:s})).NATIVE??0n,C=e.minimumConfirmations.avalanche,b=await ze({amount:a,source:u,sourceChain:i,fromAddress:m,sign:r.sign,onStepChange:c,gasSettings:d}),A=BigInt(await n.getChainHeight());return {type:"avalanche-ava-btc",environment:e.environment,fromAddress:m,toAddress:p,amount:t.amount,asset:o,bridgeFee:g,sourceChain:i,sourceStartedAt:y,sourceTxHash:b,sourceConfirmationCount:0,sourceRequiredConfirmationCount:C,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:A}}var cr=({fromAddress:e,toAddress:t,targetChain:r,...n})=>{if(!viem.isAddress(e))throw new f("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided");let i=J(r);if(!ke(t,i))throw new f("INCORRECT_ADDRESS_PROVIDED","Invalid toAddress was provided: Make sure it is Btc Address from correct environment");return {fromAddress:e,toAddress:t,targetChain:r,...n}},pt=({fromAddress:e,targetChain:t,...r})=>{if(!viem.isAddress(e))throw new f("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided");return {fromAddress:e,targetChain:t,...r}};var dr=async(e,t,r)=>{let n=await $e(e);return {type:"avalanche-ava-btc",analyzeTx:i=>Yn(n,i),estimateGas:i=>er(n,pt(i)),estimateReceiveAmount:i=>tr(n,pt(i)),getAssets:()=>nr(n),getFees:i=>ee(n,i),transferAsset:i=>mr(n,cr(i),t,r),trackTransfer:i=>or(n,i,r),getMinimumTransferAmount:i=>rr(n,i)}};var ct={"avalanche-btc-ava":Zn,"avalanche-ava-btc":dr,"avalanche-evm":Sn,cctp:Ot,"ictt-erc20-erc20":mn},ki=async(e,t)=>{let r=await Promise.allSettled(t.map(async n=>{if(dt(n)){let s=ct[n.type];return [n.type,await s(e,n.signer,n.bitcoinFunctions)]}if(ut(n)){let s=ct[n.type];return [n.type,await s(e,n.signer,n.bitcoinFunctions)]}let i=ct[n.type];return [n.type,await i(e,n.signer)]}));return new Map(lodash.compact(r.map(n=>n.status==="fulfilled"?n.value:void 0)))},te=(e,t,r)=>{let n=t.destinations[r];for(let i of n??[]){let s=e.get(i);if(s)return {bridge:s,type:i}}throw new Se};var nT=({environment:e,enabledBridgeServices:t})=>({canTransferAsset:(u,y)=>{try{return te(t,u,y),!0}catch{return !1}},environment:e,estimateGas:async u=>{let{bridge:y}=te(t,u.asset,u.targetChain.chainId);return y.estimateGas(u)},estimateReceiveAmount:async u=>{let{bridge:y}=te(t,u.asset,u.targetChain.chainId);return y.estimateReceiveAmount(u)},getAssets:()=>Array.from(t.values()).map(y=>y.getAssets()).reduce((y,T)=>{for(let[g,C]of Object.entries(T)){let b=y[g];if(b)for(let A of C){let I=b.findIndex(({symbol:R})=>R===A.symbol);I===-1?b.push(A):lodash.mergeWith(b[I],A,(R,F)=>{if(lodash.isArray(R))return [...new Set(R.concat(F))]});}else y[g]=C;}return y},{}),getFees:async u=>{let{bridge:y}=te(t,u.asset,u.targetChain.chainId);return y.getFees(u)},analyzeTx:u=>{let y=["avalanche-evm","ictt-erc20-erc20","cctp"].map(T=>t.get(T)).filter(T=>!!T);for(let T of y){let g=T.analyzeTx(u);if(g.isBridgeTx)return g}return {isBridgeTx:!1}},getMinimumTransferAmount:async u=>{let{bridge:y}=te(t,u.asset,u.targetChain.chainId);return y.getMinimumTransferAmount(u)},trackTransfer:u=>{let{bridge:y}=te(t,u.bridgeTransfer.asset,u.bridgeTransfer.targetChain.chainId);return y.trackTransfer(u)},transferAsset:async u=>{let{bridge:y}=te(t,u.asset,u.targetChain.chainId);return y.transferAsset(u)}});
7
16
 
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;
17
+ exports.AVALANCHE_FUJI_CHAIN = Pi;
18
+ exports.AVALANCHE_MAINNET_CHAIN = Di;
19
+ exports.AvalancheChainIds = ne;
20
+ exports.BITCOIN_MAINNET_CHAIN = Oi;
21
+ exports.BITCOIN_TESTNET_CHAIN = Mi;
22
+ exports.BTC_BRIDGE_TYPES = wi;
23
+ exports.BitcoinChainIds = re;
24
+ exports.BridgeSignatureReason = de;
25
+ exports.BridgeType = x;
26
+ exports.ETHEREUM_MAINNET_CHAIN = Fi;
27
+ exports.ETHEREUM_SEPOLIA_CHAIN = _i;
28
+ exports.EVM_BRIDGE_TYPES = yr;
29
+ exports.Environment = ae;
30
+ exports.ErrorCode = z;
31
+ exports.ErrorReason = v;
32
+ exports.EthereumChainIds = Re;
33
+ exports.TokenType = j;
34
+ exports.caip2 = P;
35
+ exports.createUnifiedBridgeService = nT;
36
+ exports.getEnabledBridgeServices = ki;
37
+ exports.isAvaToBtcBridgeInitializer = dt;
38
+ exports.isBtcToAvaBridgeInitializer = ut;
39
+ exports.isErc20Asset = U;
40
+ exports.isEvmBridgeInitializer = Ni;
41
+ exports.isNativeAsset = ce;
17
42
  //# sourceMappingURL=out.js.map
18
43
  //# sourceMappingURL=index.cjs.map