@avalabs/bridge-unified 0.0.0-hello-world-20230824162438 → 0.0.0-tmp-lombard-sdk-integration-20251210211743

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,9 @@
1
+ Copyright (C) 2021, Ava Labs, Inc. All rights reserved.
2
+
3
+ Subject to the limited license below (**”License””), you may not, and you may not permit anyone else to, copy, reproduce, aggregate, republish, download, post, distribute, license, sublicense, reverse engineer, modify, or create derivative works based on this software (collectively, **“Software”**).
4
+
5
+ You are hereby granted a limited, non-exclusive, non-sublicensable and non-transferable license to download and use the Software as-is solely (i) for use in connection with the Avalanche Public Blockchain platform, having a NetworkID of 1 (Mainnet) or 5 (Fuji), and associated blockchains, comprised exclusively of the Avalanche X-Chain, C-Chain, P-Chain and any subnets linked to the P-Chain (**“Avalanche Authorized Platform”**) or (ii) for non-production, testing or research purposes without any commercial application within the Avalanche ecosystem (**“Non-Commercial Use”**); provided that, in each case, you may not use or allow use of the Software (a) in connection with any forks of the Avalanche Authorized Platform, (b) in any manner not operationally connected to the Avalanche Authorized Platform other than for Non-Commercial Use, or (c) to the extent the number of monthly active users or the number of total installs of any software that uses the Software across all versions thereof exceeds 10,000 at any time. You may not modify or alter the Software in any way.
6
+
7
+ You hereby acknowledge and agree to the terms set forth at www.avalabs.org/important-notice.
8
+
9
+ **TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED ON AN “AS IS” BASIS, AND AVA LABS EXPRESSLY DISCLAIMS AND EXCLUDES ALL REPRESENTATIONS, WARRANTIES AND OTHER TERMS AND CONDITIONS, WHETHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION BY OPERATION OF LAW OR BY CUSTOM, STATUTE OR OTHERWISE, AND INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTY, TERM, OR CONDITION OF NON-INFRINGEMENT, MERCHANTABILITY, TITLE, OR FITNESS FOR PARTICULAR PURPOSE. YOU USE THE SOFTWARE AT YOUR OWN RISK. AVA LABS EXPRESSLY DISCLAIMS ALL LIABILITY (INCLUDING FOR ALL DIRECT, CONSEQUENTIAL OR OTHER DAMAGES OR LOSSES) RELATED TO ANY USE OF THE SOFTWARE.**
package/README.md CHANGED
@@ -16,11 +16,11 @@ 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
- - **Avalanche Bridge** - is capable of transferring a fixed list of tokens between Ethereum and Avalanche C-Chain. See the `@avalabs/bridge-avalanche` package.
20
- - **CCTP** - preferred for brdiging USDC between Ethereum and Avalanche C-Chain. See the `@avalabs/bridge-cctp` package.
19
+ - **CCTP** - preferred for bridging USDC between Ethereum and Avalanche C-Chain. See the `bridges/cctp` folder.
21
20
 
22
21
  Future bridges we plan to support:
23
22
 
23
+ - **Avalanche Bridge** - is capable of transferring a fixed list of tokens between Ethereum and Avalanche C-Chain.
24
24
  - **Teleporter** - for moving tokens between subnets.
25
25
  - **Cross-Chain Transfer** - for moving tokens between the three Avalanche Primary Network chains (X-Chain, C-Chain, and P-Chain).
26
26
 
@@ -34,6 +34,209 @@ Future bridges we plan to support:
34
34
  pnpm add @avalabs/bridge-unified
35
35
  ```
36
36
 
37
- ## How it works
37
+ ## Usage
38
38
 
39
- TODO: Explain details of this api.
39
+ ```js
40
+ import { createUnifiedBridgeService, getEnabledBridgeServices, Environment, BridgeTransfer } from '@avalabs/bridge-unified';
41
+
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
+
91
+ // use all available bridges
92
+ const enabledBridgeInitializers: BridgeInitializer[] = [
93
+ cctpInitializer,
94
+ icttErc20Initializer,
95
+ avalancheEvmInitializer,
96
+ avalancheBtcInitializer,
97
+ bitcoinAvaInitializer,
98
+ ]
99
+
100
+ // fetch all available bridge services
101
+ const enabledBridgeServices = await getEnabledBridgeServices(environment, disabledBridgeTypes);
102
+
103
+ // create a new service for a given environment and list of bridge services
104
+ const unifiedService = createUnifiedBridgeService({
105
+ environment,
106
+ enabledBridgeServices
107
+ });
108
+
109
+ // get the list of supported assets, grouped by caip2 (https://chainagnostic.org/CAIPs/caip-2) chain IDs
110
+ const assets = await unifiedService.getAssets()
111
+
112
+ // get the bridge fee(s) of the provided transfer
113
+ const fees = await unifiedService.getFees({...})
114
+
115
+ // start a new bridge transfer and store its state
116
+ const bridgeTransfer = await unifiedService.transferAsset({...})
117
+
118
+ // create an update listener for tracking
119
+ const updateListener = (transfer: BridgeTransfer) => {
120
+ console.log(transfer)
121
+ }
122
+
123
+ // start tracking the transfer's state. whenever the state changes, it will call the provided `updateListener`
124
+ const { cancel, result } = await unifiedService.trackTransfer({bridgeTransfer, updateListener, ...})
125
+
126
+ // immediately stops tracking and rejects the tracker's promise
127
+ // cancel()
128
+
129
+ // wait for the transfer to finish and get its final state
130
+ const finalizedBridgeTransfer = await result
131
+ ```
132
+
133
+ ## API
134
+
135
+ ### getEnabledBridgeServices(environment, enabledBridgeInitializers);
136
+
137
+ Type: `(environment: Environment, enabledBridgeInitializers: BridgeInitializer[]) => Promise<BridgeServicesMap>`
138
+
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.
140
+
141
+ #### environment
142
+
143
+ Type: `Environment`
144
+
145
+ Defines if the bridge service should use `testnet` or `mainnet`.
146
+
147
+ #### enabledBridgeInitializers
148
+
149
+ Type: `BridgeInitializer[]`
150
+
151
+ Enables the integration of the provided `BridgeType`s based on each `BridgeInitializer`.
152
+
153
+ #### enabledBridgeServices
154
+
155
+ Type: `BridgeServicesMap` => `Map<BridgeType, BridgeService>`
156
+
157
+ This includes all the bridge services which were initialized successfully, to pass to `createUnifiedBridgeService`.
158
+
159
+ ### createUnifiedBridgeService({ environment, enabledBridgeServices })
160
+
161
+ Returns a new `unifiedBridgeService` for the given `environment` and `enabledBridgeServices` map.
162
+
163
+ ### unifiedBridgeService
164
+
165
+ Contains all the required properties and methods to prepare, initiate or track a bridge transfer.
166
+ Automatically picks the right (enabled) bridge integration to use based on the provided params.
167
+
168
+ ```js
169
+ {
170
+ environment, // the provided Environment during initialization
171
+ getAssets,
172
+ getFees,
173
+ estimateGas,
174
+ canTransferAsset,
175
+ transferAsset,
176
+ trackTransfer,
177
+ }
178
+ ```
179
+
180
+ #### getAssets
181
+
182
+ Type: `() => Promise<ChainAssetMap>`
183
+
184
+ Returns the aggregated list of assets supported by the enabled bridges grouped by [caip2](https://chainagnostic.org/CAIPs/caip-2) chain IDs.
185
+
186
+ #### getFees
187
+
188
+ Type: `(params: FeeParams) => Promise<AssetFeeMap>`
189
+
190
+ Calculates and returns the bridge fees in `tokenAddress` - `amount` pairs for a given bridge transfer.
191
+
192
+ #### estimateGas
193
+
194
+ Type: `(params: TransferParams) => Promise<bigint>`
195
+
196
+ Estimates the gas cost of a specific transfer.
197
+
198
+ #### getMinimumTransferAmount
199
+
200
+ Type: `(params: FeeParams) => Promise<bigint>`
201
+
202
+ Calculates and returns the minimum transfer amount for a given bridge transfer.
203
+
204
+ #### transferAsset
205
+
206
+ Type: `(params: TransferParams) => Promise<BridgeTransfer>`
207
+
208
+ Starts a new bridge transfer, executing every required step in a single call.
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.
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.
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
+
226
+ #### trackTransfer
227
+
228
+ Type: `(params: TrackingParams) => ({cancel, result})`
229
+
230
+ Tracks the given `BridgeTransfer`'s progress and invokes the provided listener callback whenever a change happens.
231
+
232
+ ###### cancel
233
+
234
+ Type: `() => void`
235
+
236
+ If it's still pending, rejects the tracker's promise (`result`) immediately and breaks its loop under the hood.
237
+
238
+ ###### result
239
+
240
+ Type: `Promise<BridgeTransfer>`
241
+
242
+ Resolves with the finalized `BridgeTransfer` (if not canceled before).
package/dist/index.cjs CHANGED
@@ -1,7 +1,46 @@
1
1
  'use strict';
2
2
 
3
- var o=class extends Error{constructor(s,a){super(s);this.code=a;this.code=a;}},e=class extends o{constructor(t="Not implemented"){super(t,5001),this.name="NotImplementedError";}};var n=async r=>{throw new e};var i=r=>{throw new e};var m=async({address:r,chainIds:t})=>{throw new e};var O=r=>({planBridgeJourney:i,executeBridgeJourneyStep:n,checkForPendingBridgeJourney:m});
3
+ var lodash = require('lodash');
4
+ var viem = require('viem');
5
+ var zod = require('zod');
6
+ var base = require('@scure/base');
7
+ var sha256 = require('@noble/hashes/sha256');
8
+ var utils = require('@noble/hashes/utils');
9
+ var Ji = require('coinselect');
10
+ var sdk = require('@lombard.experimental/sdk');
4
11
 
5
- exports.createUnifiedBridgeService = O;
12
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
+
14
+ var Ji__default = /*#__PURE__*/_interopDefault(Ji);
15
+
16
+ var j=(r=>(r.NATIVE="native",r.ERC20="erc20",r))(j||{}),W=e=>e.type==="erc20",le=e=>e.type==="native";var k=(a=>(a.AVALANCHE_EVM="avalanche-evm",a.AVALANCHE_BTC_AVA="avalanche-btc-ava",a.AVALANCHE_AVA_BTC="avalanche-ava-btc",a.CCTP="cctp",a.ICTT_ERC20_ERC20="ictt-erc20-erc20",a.LOMBARD_BTC_TO_BTCB="lombard-btc-to-btcb",a.LOMBARD_BTCB_TO_BTC="lombard-btcb-to-btc",a))(k||{}),Ko=["avalanche-ava-btc","avalanche-btc-ava","lombard-btc-to-btcb","lombard-btcb-to-btc"],oa=["avalanche-evm","cctp","ictt-erc20-erc20"],It=e=>e.type==="lombard-btc-to-btcb"||e.type==="lombard-btcb-to-btc",Jo=e=>oa.includes(e.type),kt=e=>e.type==="avalanche-ava-btc",xt=e=>e.type==="avalanche-btc-ava",Z=(n=>(n.AllowanceApproval="allowance-approval",n.TokensTransfer="tokens-transfer",n.WrapToken="wrap-token",n))(Z||{});var X=(r=>(r.FUJI="eip155:43113",r.MAINNET="eip155:43114",r))(X||{}),Oe=(r=>(r.MAINNET="eip155:1",r.SEPOLIA="eip155:11155111",r))(Oe||{}),q=(r=>(r.MAINNET="bip122:000000000019d6689c085ae165831e93",r.TESTNET="bip122:000000000933ea01ad0ee984209779ba",r))(q||{}),Yo={chainId:"eip155:43113",chainName:"Avalanche Fuji",rpcUrl:"https://api.avax-test.network/ext/bc/C/rpc",networkToken:{type:"native",name:"AVAX",symbol:"AVAX",decimals:18}},es={chainId:"eip155:43114",chainName:"Avalanche Mainnet",rpcUrl:"https://api.avax.network/ext/bc/C/rpc",networkToken:{type:"native",name:"AVAX",symbol:"AVAX",decimals:18}},ts={chainId:"eip155:11155111",chainName:"Ethereum Sepolia",rpcUrl:"https://proxy-api.avax.network/proxy/infura/sepolia",networkToken:{type:"native",name:"ETH",symbol:"ETH",decimals:18}},ns={chainId:"eip155:1",chainName:"Ethereum Mainnet",rpcUrl:"https://proxy-api.avax.network/proxy/infura/mainnet",networkToken:{type:"native",name:"ETH",symbol:"ETH",decimals:18}},rs={chainId:"bip122:000000000933ea01ad0ee984209779ba",chainName:"Bitcoin Testnet",rpcUrl:"",networkToken:{type:"native",name:"Bitcoin",symbol:"BTC",decimals:8}},as={chainId:"bip122:000000000019d6689c085ae165831e93",chainName:"Bitcoin Mainnet",rpcUrl:"",networkToken:{type:"native",name:"Bitcoin",symbol:"BTC",decimals:8}};var $=(i=>(i.DEV="dev",i.PROD="production",i.STAGING="staging",i.TEST="test",i))($||{});var z=(s=>(s[s.BRIDGE_NOT_AVAILABLE=5001]="BRIDGE_NOT_AVAILABLE",s[s.INITIALIZATION_FAILED=5002]="INITIALIZATION_FAILED",s[s.INVALID_PARAMS=5003]="INVALID_PARAMS",s[s.TIMEOUT=5004]="TIMEOUT",s[s.TRANSACTION_REVERTED=5005]="TRANSACTION_REVERTED",s[s.NOTARIZATION_FAILED=5006]="NOTARIZATION_FAILED",s))(z||{}),v=(A=>(A.ASSET_NOT_SUPPORTED="ASSET_NOT_SUPPORTED",A.CHAIN_NOT_SUPPORTED="CHAIN_NOT_SUPPORTED",A.CONFIG_NOT_AVAILABLE="CONFIG_NOT_AVAILABLE",A.CONFIRMATION_COUNT_UNKNOWN="CONFIRMATION_COUNT_UNKNOWN",A.ENVIRONMENT_NOT_SUPPORTED="ENVIRONMENT_NOT_SUPPORTED",A.IDENTICAL_CHAINS_PROVIDED="IDENTICAL_CHAINS_PROVIDED",A.INCORRECT_ADDRESS_PROVIDED="INCORRECT_ADDRESS_PROVIDED",A.INCORRECT_AMOUNT_PROVIDED="INCORRECT_AMOUNT_PROVIDED",A.INCORRECT_HASH_PROVIDED="INCORRECT_HASH_PROVIDED",A.INCORRECT_PROVIDER_PROVIDED="INCORRECT_PROVIDER_PROVIDED",A.INCORRECT_SIGNER_PROVIDED="INCORRECT_SIGNER_PROVIDED",A.INCORRECT_TXHASH_PROVIDED="INCORRECT_TXHASH_PROVIDED",A.INVALID_PARAMS="INVALID_PARAMS",A.UNKNOWN="UNKNOWN",A.VULNERABLE_TOKEN_APPROVAL_ADDRESS="VULNERABLE_TOKEN_APPROVAL_ADDRESS",A.WARDEN_CONFIG_MISMATCH="WARDEN_CONFIG_MISMATCH",A.WARDEN_CONFIG_MISSING_NETWORK="WARDEN_CONFIG_MISSING_NETWORK",A.ADDRESS_IS_BLOCKED="ADDRESS_IS_BLOCKED",A))(v||{});function wt(e){let t=e.map(r=>r.chainId);return e.reduce((r,n)=>(r[n.chainId]=n.tokens.map(i=>({...i,type:"erc20",destinations:t.reduce((o,s)=>(n.chainId!==s&&(o[s]||(o[s]=[]),o[s]?.push("cctp")),o),{})})),r),{})}var sa="^[-a-z0-9]{3,8}$",ma="^[-_a-zA-Z0-9]{1,50}$",Nt=":",pa=e=>{let[t,r]=e.split(Nt);if(!t||!r)throw new Error("Invalid identifier provided.");if(!new RegExp(sa).test(t))throw new Error("Invalid namespace provided.");if(!new RegExp(ma).test(r))throw new Error("Invalid reference provided.");return {namespace:t,reference:r}},ca=({namespace:e,reference:t})=>`${e}${Nt}${t}`,da=({namespace:e,reference:t})=>{if(e!=="eip155")throw new Error("Invalid namespace provided.");let r=Number(t);if(isNaN(r))throw new Error("Invalid reference provided.");return `0x${r.toString(16)}`},B={toJSON:pa,toString:ca,toEip155HexChainId:da};var la=e=>{let{reference:t}=B.toJSON(e.chainId);return {id:Number(t),name:e.chainName,nativeCurrency:{decimals:e.networkToken.decimals,symbol:e.networkToken.symbol,name:e.networkToken.name},network:e.chainName,rpcUrls:{default:{http:[e.rpcUrl]},public:{http:[e.rpcUrl]}},...e.utilityAddresses?.multicall&&{contracts:{multicall3:{address:e.utilityAddresses.multicall}}}}},E=({chain:e})=>{let t=la(e),r=viem.http(e.rpcUrl,{batch:!0,retryCount:6,retryDelay:200,timeout:15e3});return viem.createWalletClient({chain:t,transport:r}).extend(viem.publicActions)};var me=[{inputs:[{internalType:"address",name:"circleTokenMessenger_",type:"address"},{internalType:"address",name:"burnToken_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"AlreadyAdmin",type:"error"},{inputs:[],name:"AlreadyFeeCollector",type:"error"},{inputs:[],name:"AlreadySupportedBurnToken",type:"error"},{inputs:[],name:"AmountLessThanFee",type:"error"},{inputs:[],name:"BalanceNotIncreased",type:"error"},{inputs:[],name:"CannotRemoveLastAdmin",type:"error"},{inputs:[],name:"FeePercentageGreaterThanMax",type:"error"},{inputs:[],name:"InvalidAdminAddress",type:"error"},{inputs:[],name:"InvalidFeeCollector",type:"error"},{inputs:[],name:"InvalidMintRecipientAddress",type:"error"},{inputs:[],name:"InvalidTokenAddress",type:"error"},{inputs:[],name:"InvalidTokenMessengerAddress",type:"error"},{inputs:[],name:"MaxFeeLessThanMinFee",type:"error"},{inputs:[],name:"NotAdmin",type:"error"},{inputs:[],name:"NotFeeCollector",type:"error"},{inputs:[],name:"UnSupportedBurnToken",type:"error"},{inputs:[],name:"UnsupportedDomain",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"admin",type:"address"}],name:"AdminAdded",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"admin",type:"address"}],name:"AdminRemoved",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"BurnTokenAdded",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"BurnTokenRemoved",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"feeCollector",type:"address"}],name:"FeeCollectorAdded",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"feeCollector",type:"address"}],name:"FeeCollectorRemoved",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint32",name:"domain",type:"uint32"},{components:[{internalType:"uint256",name:"maxFee",type:"uint256"},{internalType:"uint256",name:"minFee",type:"uint256"},{internalType:"uint32",name:"feePercentage",type:"uint32"},{internalType:"uint256",name:"txnFee",type:"uint256"},{internalType:"bool",name:"supported",type:"bool"}],indexed:!1,internalType:"struct FeeCalculator.FeeConfiguration",name:"feeConfiguration",type:"tuple"}],name:"FeeConfigurationUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Paused",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint64",name:"nonce",type:"uint64"},{indexed:!1,internalType:"address",name:"burnToken",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"depositor",type:"address"},{indexed:!1,internalType:"address",name:"mintRecipient",type:"address"},{indexed:!1,internalType:"uint32",name:"destinationDomain",type:"uint32"},{indexed:!1,internalType:"uint256",name:"totalFee",type:"uint256"}],name:"TransferTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Unpaused",type:"event"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"addAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"feeCollector",type:"address"}],name:"addFeeCollector",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"addSupportedBurnToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint32",name:"destinationDomain",type:"uint32"}],name:"calculateFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"circleTokenMessenger",outputs:[{internalType:"contract ICircleTokenMessenger",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"circleTokenMessengerAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"collectFees",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"getFeeAmounts",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getFeeConfiguration",outputs:[{components:[{internalType:"uint256",name:"maxFee",type:"uint256"},{internalType:"uint256",name:"minFee",type:"uint256"},{internalType:"uint32",name:"feePercentage",type:"uint32"},{internalType:"uint256",name:"txnFee",type:"uint256"},{internalType:"bool",name:"supported",type:"bool"}],internalType:"struct FeeCalculator.FeeConfiguration",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getFeePercentage",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getMaxFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getMinFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getTxnFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"isAdmin",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"isFeeCollector",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"isSupportedBurnToken",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"isSupportedDomain",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"paused",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"removeAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"feeCollector",type:"address"}],name:"removeFeeCollector",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"removeSupportedBurnToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"},{components:[{internalType:"uint256",name:"maxFee",type:"uint256"},{internalType:"uint256",name:"minFee",type:"uint256"},{internalType:"uint32",name:"feePercentage",type:"uint32"},{internalType:"uint256",name:"txnFee",type:"uint256"},{internalType:"bool",name:"supported",type:"bool"}],internalType:"struct FeeCalculator.FeeConfiguration",name:"feeConfiguration",type:"tuple"}],name:"setFeeConfiguration",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"supportedBurnTokens",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint32",name:"destinationDomain",type:"uint32"},{internalType:"address",name:"mintRecipient",type:"address"},{internalType:"address",name:"burnToken",type:"address"}],name:"transferTokens",outputs:[{internalType:"uint64",name:"nonce",type:"uint64"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"}];var Q=class extends Error{constructor(r,n,i){super(r);this.code=n;this.details=i;}};var He=class extends Q{constructor(t="UNKNOWN",r){super(t,5001,r),this.name="BridgeUnavailableError";}};var S=class extends Q{constructor(t="UNKNOWN",r){super(t,5002,r),this.name="BridgeInitializationError";}};var l=class extends Q{constructor(t="INVALID_PARAMS",r){super(t,5003,r),this.name="InvalidParamsError";}};var O=({sourceChain:e,targetChain:t,amount:r,asset:n},i)=>{if(e.chainId===t.chainId)throw new l("IDENTICAL_CHAINS_PROVIDED");if(r<=0n)throw new l("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let o=i.find(p=>p.chainId===e.chainId);if(!o)throw new l("CHAIN_NOT_SUPPORTED",`Not supported on source chain "${e.chainId}"`);let s=i.find(p=>p.chainId===t.chainId);if(!s)throw new l("CHAIN_NOT_SUPPORTED",`Not supported on target chain "${t.chainId}"`);let a=o.tokens.find(p=>p.symbol===n.symbol),m=s.tokens.find(p=>p.symbol===n.symbol);if(!a||!m)throw new l("ASSET_NOT_SUPPORTED");return {sourceChainData:o,targetChainData:s,burnToken:a,mintToken:m}};async function Y(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o}=t,{sourceChainData:s,targetChainData:a,burnToken:m}=O({sourceChain:r,targetChain:n,asset:i,amount:o},e),c=await E({chain:r}).readContract({address:s.tokenRouterAddress,abi:me,functionName:"calculateFee",args:[o,a.domain]});return {[s.chainId]:{[m.address]:c}}}var D=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"feeAddress",type:"address"},{indexed:!1,internalType:"uint256",name:"feeAmount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"originTxId",type:"bytes32"}],name:"Mint",type:"event"}];function Rt({amount:e,burnToken:t,targetChainData:r,toAddress:n}){return viem.encodeFunctionData({abi:me,functionName:"transferTokens",args:[e,r.domain,n,t.address]})}function Dt({amount:e,sourceChainData:t}){return viem.encodeFunctionData({abi:D,functionName:"approve",args:[t.tokenRouterAddress,e]})}var Ta=async(e,t,r)=>{let{sourceChain:n,targetChain:i,asset:o,amount:s,fromAddress:a,toAddress:m,onStepChange:p,gasSettings:c}=t,{sourceChainData:d,targetChainData:u,burnToken:f}=O({sourceChain:n,targetChain:i,asset:o,amount:s},e),y=E({chain:n}),C=await y.readContract({address:f.address,abi:D,functionName:"allowance",args:[a,d.tokenRouterAddress]})<s,b=C?2:1;if(C){let I={currentSignature:1,currentSignatureReason:"allowance-approval",requiredSignatures:b};p?.(I);let N=Dt({amount:s,sourceChainData:d}),J=await r.sign({from:a,to:f.address,data:N,...c?{maxFeePerGas:c.price,maxPriorityFeePerGas:c.tip}:null,chainId:B.toEip155HexChainId(B.toJSON(n.chainId))},ye=>y.sendRawTransaction({serializedTransaction:ye}),I);await y.waitForTransactionReceipt({hash:J});}let A={currentSignature:C?2:1,currentSignatureReason:"tokens-transfer",requiredSignatures:b};p?.(A);let w=Rt({amount:s,burnToken:f,targetChainData:u,toAddress:m});return r.sign({from:a,to:d.tokenRouterAddress,data:w,...c?{maxFeePerGas:c.price,maxPriorityFeePerGas:c.tip}:null,chainId:B.toEip155HexChainId(B.toJSON(n.chainId))},I=>y.sendRawTransaction({serializedTransaction:I}),A)},ga=async e=>{try{return await e.getBlockNumber()}catch{return}};async function _t(e,t,r,n){let{minimumConfirmations:i}=e.find(u=>u.chainId===t.sourceChain.chainId)??{},{minimumConfirmations:o}=e.find(u=>u.chainId===t.targetChain.chainId)??{};if(!i||!o)throw new l("CONFIRMATION_COUNT_UNKNOWN");let s=await Y(e,{asset:t.asset,amount:t.amount,sourceChain:t.sourceChain,targetChain:t.targetChain}),a=W(t.asset)?s[t.sourceChain.chainId]?.[t.asset.address]??0n:0n,m=await Ta(e,t,n),p=Date.now(),c=E({chain:t.targetChain}),d=await ga(c);return {type:"cctp",environment:r,fromAddress:t.fromAddress,toAddress:t.toAddress??t.fromAddress,amount:t.amount,asset:t.asset,bridgeFee:a,sourceChain:t.sourceChain,sourceStartedAt:p,sourceTxHash:m,sourceConfirmationCount:0,sourceRequiredConfirmationCount:i,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:o,targetStartBlockNumber:d}}var mt=async e=>new Promise(t=>{setTimeout(t,e);});var _=({promise:e,delay:t,startAfter:r})=>{let n=!1,i=!1,o=0,s,a,m=d=>{s&&n&&(n=!1,s(d));},p=()=>{i=!0,a&&n&&(n=!1,a("cancelled"));};return {result:new Promise((d,u)=>{n=!0,s=d,a=u;let f=async()=>{if(!(!n||i)){try{if(await e(m),!n||i)return;await mt(t);}catch(y){console.error(y.message),o+=1,await mt(2**o*t);}await f();}};r?setTimeout(f,r):f();}),cancel:p}};var ke=(r=>(r[r.Ethereum=0]="Ethereum",r[r.Avalanche=1]="Avalanche",r))(ke||{});var ee=zod.z.string().refine(e=>viem.isAddress(e),e=>({message:`Invalid EVM address '${e}'`})).transform(e=>e);var ha=zod.z.object({address:ee,name:zod.z.string(),symbol:zod.z.string(),decimals:zod.z.number().positive()}),Ea=zod.z.coerce.string().transform((e,t)=>{let r=e.startsWith("eip155:")?e:`eip155:${e}`;try{let n=B.toJSON(r);return B.toString(n)}catch{return t.addIssue({code:zod.z.ZodIssueCode.custom,message:"Invalid chain id, neither numeric nor caip2 compliant"}),zod.z.NEVER}}),ba=zod.z.object({chainId:Ea,domain:zod.z.nativeEnum(ke),tokenRouterAddress:ee,messageTransmitterAddress:ee,tokens:zod.z.array(ha),minimumConfirmations:zod.z.number().positive()}),Pt=zod.z.array(ba);var Ba=e=>e==="production"||e==="test",va={test:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/cctp/cctp_config.test.json",production:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/cctp/cctp_config.json"},Ft=async e=>{if(!Ba(e))throw new S("ENVIRONMENT_NOT_SUPPORTED",`CCTP does not support ${e} environment`);try{let r=await(await fetch(va[e])).json();return Pt.parse(r)}catch(t){throw new S("CONFIG_NOT_AVAILABLE",`Error while fetching CCTP config: ${t.message}`)}},pt=e=>{switch(e){case"eip155:43114":case"eip155:43113":return 1e3;default:return 2e4}};var h=(e,t,r)=>{let n=lodash.omitBy(t,lodash.isNil),i={...lodash.cloneDeep(e),...lodash.cloneDeep(n)};return r(i),i},xa=1e3*60*60*3,wa=1024n,Na=5e3,x={trackingLimitMs:xa,maxBlocks:wa,initialDelayMs:Na};var te=(e,t)=>e.gasPrice&&BigInt(e.gasPrice*t.gasUsed);var pe=({targetClient:e,sourceClient:t,getMetadata:r,checkMetadata:n,trackingParams:{bridgeTransfer:i,updateListener:o},trackingConfig:{trackingLimitMs:s}})=>{let a=lodash.cloneDeep(i);return async p=>{if(a.completedAt||n(a.metadata))return p(a);if(a.sourceStartedAt+s<=Date.now())return a=h(a,{completedAt:Date.now(),errorCode:5004},o),p(a);if(!viem.isHash(a.sourceTxHash))return;let c=await t.getTransactionReceipt({hash:a.sourceTxHash});if(a.sourceNetworkFee===void 0){let g=await t.getTransaction({hash:a.sourceTxHash}),C=te(g,c);C&&(a=h(a,{sourceNetworkFee:C},o));}if(c.status==="reverted")return a=h(a,{completedAt:Date.now(),errorCode:5005},o),p(a);if(!viem.isHash(a.sourceTxHash))return;let d=await t.getTransactionConfirmations({hash:a.sourceTxHash}),u=d>a.sourceConfirmationCount,f=d>=a.sourceRequiredConfirmationCount;if(u){let g={};g.sourceConfirmationCount=Number(d),f||(g.targetStartBlockNumber=await e.getBlockNumber()),a=h(a,g,o);}if(!f)return;a.targetStartBlockNumber||(a=h(a,{targetStartBlockNumber:await e.getBlockNumber()},o));let y=r(c);return a=h(a,{targetStartedAt:Date.now(),metadata:y},o),p(a)}};var ce=({targetClient:e,getTargetTxHash:t,checkMetadata:r,trackingParams:{bridgeTransfer:n,updateListener:i},trackingConfig:{trackingLimitMs:o,maxBlocks:s}})=>{if(!n.completedAt&&!r(n.metadata))throw new l("INVALID_PARAMS","metadata is missing");if(!n.targetStartBlockNumber)throw new l("INVALID_PARAMS","targetStartBlockNumber is missing");let a=lodash.cloneDeep(n);return async p=>{if(a.completedAt)return p(a);if(a.sourceStartedAt+o<=Date.now())return a=h(a,{completedAt:Date.now(),errorCode:5004},i),p(a);if(!a.targetStartBlockNumber)throw new Error("unreachable");if(!a.targetTxHash){let g=await e.getBlockNumber(),C=a.targetStartBlockNumber-s,b=C>=0n?C:"earliest",A=a.targetStartBlockNumber+s,w=A<g?A:"latest",I=await t({fromBlock:b,toBlock:w,metadata:a.metadata});if(I)a=h(a,{targetTxHash:I},i);else {a=h(a,{targetStartBlockNumber:g},i);return}}if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let d=await e.getTransactionReceipt({hash:a.targetTxHash});if(!a.targetNetworkFee){let g=await e.getTransaction({hash:a.targetTxHash}),C=te(g,d);C&&(a=h(a,{targetNetworkFee:C},i));}if(d.status==="reverted")return a=h(a,{completedAt:Date.now(),errorCode:5005},i),p(a);if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let u=await e.getTransactionConfirmations({hash:a.targetTxHash}),f=u>a.targetConfirmationCount,y=u>=a.targetRequiredConfirmationCount;if(f&&(a=h(a,{targetConfirmationCount:Number(u)},i)),!!y)return a=h(a,{completedAt:Date.now()},i),p(a)}};var ct=e=>lodash.isObject(e)&&typeof e.nonce=="bigint",Ut=({sourceChainData:e})=>r=>{let n=r.logs.find(s=>s.address.toLowerCase()===e.tokenRouterAddress.toLowerCase()?viem.decodeEventLog({abi:me,...s}).eventName==="TransferTokens":!1);if(!n)throw new l("INVALID_PARAMS",`unable to find a TransferTokens event in source transaction "${r.transactionHash}"`);return {nonce:viem.decodeEventLog({abi:me,eventName:"TransferTokens",...n}).args.nonce}},_a={name:"MessageReceived",type:"event",inputs:[{indexed:!0,internalType:"address",name:"caller",type:"address"},{indexed:!1,internalType:"uint32",name:"sourceDomain",type:"uint32"},{indexed:!0,internalType:"uint64",name:"nonce",type:"uint64"},{indexed:!1,internalType:"bytes32",name:"sender",type:"bytes32"},{indexed:!1,internalType:"bytes",name:"messageBody",type:"bytes"}]},Gt=({targetClient:e,transferData:{targetChainData:t}})=>async({fromBlock:n,toBlock:i,metadata:o})=>(await e.getLogs({address:t.messageTransmitterAddress,event:_a,args:{nonce:o?.nonce},fromBlock:n,toBlock:i}))[0]?.transactionHash;var Pa=async(e,t)=>{let{bridgeTransfer:r}=t,{asset:n,amount:i,sourceChain:o,targetChain:s}=r,a=O({sourceChain:o,targetChain:s,asset:n,amount:i},e),{sourceChainData:m}=a,p=E({chain:o}),c=E({chain:s}),d=Ut(a),u=pe({sourceClient:p,targetClient:c,getMetadata:d,checkMetadata:ct,trackingParams:t,trackingConfig:x});return _({promise:u,delay:pt(m.chainId),startAfter:x.initialDelayMs})},Fa=async(e,t)=>{let{bridgeTransfer:r}=t,{asset:n,amount:i,sourceChain:o,targetChain:s}=r,a=E({chain:s}),m=O({sourceChain:o,targetChain:s,asset:n,amount:i},e),p=Gt({targetClient:a,transferData:m}),c=ce({targetClient:a,getTargetTxHash:p,checkMetadata:ct,trackingParams:t,trackingConfig:x});return _({promise:c,delay:pt(m.targetChainData.chainId),startAfter:x.initialDelayMs})};function Wt(e,t){if(!viem.isHash(t.bridgeTransfer.sourceTxHash)||t.bridgeTransfer.targetTxHash&&!viem.isHash(t.bridgeTransfer.targetTxHash))throw new l("INCORRECT_TXHASH_PROVIDED");let r,n=()=>{r?.();};return {result:(async()=>{let{updateListener:o,bridgeTransfer:s}=t,{result:a,cancel:m}=await Pa(e,{updateListener:o,bridgeTransfer:s});r=m;let p=await a,{result:c,cancel:d}=await Fa(e,{updateListener:o,bridgeTransfer:p});return r=d,c})(),cancel:n}}var Ma=60000n,$t=175000n,Oa=60000n,jt=215000n;async function Xt(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o,fromAddress:s}=t,{sourceChainData:a,burnToken:m}=O({sourceChain:r,targetChain:n,asset:i,amount:o},e),c=await E({chain:r}).readContract({address:m.address,abi:D,functionName:"allowance",args:[s,a.tokenRouterAddress]}),d=a.domain===1;return c>=o?d?jt:$t:d?Oa+jt:Ma+$t}async function qt(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o}=t,{burnToken:s}=O({sourceChain:r,targetChain:n,asset:i,amount:o},e);return (await Y(e,t))[r.chainId]?.[s.address]??1n}async function Kt(e,t){let{mintToken:r,burnToken:n}=O(t,e),i={...r,type:"erc20"},o=await Y(e,t);return {asset:i,amount:t.amount-(o[t.sourceChain.chainId]?.[n.address]??0n)}}var M="0x0000000000000000000000000000000000000000";function Jt(e,t){for(let r of e){if(r.chainId!==t.chainId)continue;let n=t.tokenTransfers.find(({symbol:d})=>r.tokens.some(({symbol:u})=>u===d));if(!n)continue;let i=r.domain===1,o=t.chainId==="eip155:43113"||t.chainId==="eip155:11155111",s=o?"eip155:11155111":"eip155:1",a=o?"eip155:43113":"eip155:43114";if(viem.isAddressEqual(t.to,r.tokenRouterAddress)||viem.isAddressEqual(n.to,r.tokenRouterAddress))return {isBridgeTx:!0,bridgeType:"cctp",sourceChainId:t.chainId,targetChainId:i?s:a};let p=viem.isAddressEqual(t.from,r.messageTransmitterAddress),c=viem.isAddressEqual(n.from,M);if(p||c)return {isBridgeTx:!0,bridgeType:"cctp",sourceChainId:i?s:a,targetChainId:t.chainId}}return {isBridgeTx:!1}}var dt=e=>{let{fromAddress:t,toAddress:r}=e;if(!viem.isAddress(t)||!viem.isAddress(r))throw new l("INCORRECT_ADDRESS_PROVIDED");return {fromAddress:t,toAddress:r}};function Te(e){let{chainId:t,from:r,to:n,tokenTransfers:i}=e,{fromAddress:o,toAddress:s}=dt({fromAddress:r,toAddress:n}),a=i.map(m=>{let{from:p,to:c,symbol:d}=m;if(!p||!viem.isAddress(p)||!c||!viem.isAddress(c))throw new l("INCORRECT_ADDRESS_PROVIDED");return {from:p,to:c,symbol:d}});return {chainId:t,from:o,to:s,tokenTransfers:a}}var K=({fromAddress:e,...t})=>{if(!viem.isAddress(e))throw new l("INCORRECT_ADDRESS_PROVIDED");return {fromAddress:e,...t}},ge=({fromAddress:e,toAddress:t,...r})=>{let{fromAddress:n,toAddress:i}=dt({fromAddress:e,toAddress:t});return {fromAddress:n,toAddress:i,...r}};var Qt=async(e,t)=>{let r=await Ft(e);return {type:"cctp",analyzeTx:n=>{try{return Jt(r,Te(n))}catch{return {isBridgeTx:!1}}},estimateGas:n=>Xt(r,K(n)),estimateReceiveAmount:n=>Kt(r,K(n)),getAssets:()=>wt(r),getFees:n=>Y(r,n),transferAsset:n=>_t(r,ge(n),e,t),trackTransfer:n=>Wt(r,n),getMinimumTransferAmount:n=>qt(r,n)}};var Ha=({sourceChain:e,targetChain:t,asset:r},n)=>{let i=n.find(a=>a.homeChain.chainId===e.chainId),o=i?.erc20Bridges.find(a=>a.baseToken.address===r.address&&a.remotes.some(({remoteChain:m})=>m.chainId===t.chainId)),s=o?.remotes.find(a=>a.remoteChain.chainId===t.chainId);return {chainBridgeConfig:i,tokenHomeConfig:o,tokenRemoteConfig:s}},Va=({sourceChain:e,targetChain:t,asset:r},n)=>{let i=n.find(a=>a.homeChain.chainId===t.chainId),o=i?.erc20Bridges.find(a=>a.remotes.find(m=>m.tokenRemoteAddress===r.address&&m.remoteChain.chainId===e.chainId)),s=o?.remotes.find(a=>a.tokenRemoteAddress===r.address&&a.remoteChain.chainId===e.chainId);return {chainBridgeConfig:i,tokenHomeConfig:o,tokenRemoteConfig:s}},H=({sourceChain:e,targetChain:t,amount:r,asset:n},i)=>{if(e.chainId===t.chainId)throw new l("IDENTICAL_CHAINS_PROVIDED");if(r<=0n)throw new l("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");if(!W(n))throw new l("ASSET_NOT_SUPPORTED","Only ERC20 assets supported");let o=Ha({sourceChain:e,targetChain:t,asset:n},i),s=Va({sourceChain:e,targetChain:t,asset:n},i);if(o.chainBridgeConfig&&o.tokenHomeConfig&&o.tokenRemoteConfig){let{chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:p}=o;return {homeToRemote:!0,chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:p}}if(s.chainBridgeConfig&&s.tokenHomeConfig&&s.tokenRemoteConfig){let{chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:p}=s;return {homeToRemote:!1,chainBridgeConfig:a,tokenHomeConfig:m,tokenRemoteConfig:p}}throw new l("ASSET_NOT_SUPPORTED","No Home->Remote or Remote->Home route exists for this asset")};var La=60000n,Yt=215000n,en=async(e,t)=>{let{sourceChain:r,targetChain:n,asset:i,amount:o,fromAddress:s}=t,{tokenHomeConfig:a,homeToRemote:m,tokenRemoteConfig:p}=H({sourceChain:r,targetChain:n,asset:i,amount:o},e);return await E({chain:r}).readContract({address:m?a.baseToken.address:p.tokenRemoteAddress,abi:D,functionName:"allowance",args:[s,m?a.tokenHomeAddress:p.tokenRemoteAddress]})>=o?Yt:La+Yt};var tn=e=>{let t=e.reduce((n,i)=>(n[i.homeChain.chainId]=i.erc20Bridges.map(o=>({...o.baseToken,destinations:o.remotes.reduce((s,a)=>(s[a.remoteChain.chainId]=["ictt-erc20-erc20"],s),{})})),n),{}),r=e.reduce((n,i)=>{for(let o of i.erc20Bridges)for(let s of o.remotes){let a=n[s.remoteChain.chainId]??[];n[s.remoteChain.chainId]=[...a,{...o.baseToken,address:s.tokenRemoteAddress,destinations:{[i.homeChain.chainId]:["ictt-erc20-erc20"]}}];}return n},{});return {...t,...r}};async function Ae(e,t){return H(t,e),{}}var xe=[{type:"constructor",inputs:[{name:"teleporterRegistryAddress",type:"address",internalType:"address"},{name:"teleporterManager",type:"address",internalType:"address"},{name:"tokenAddress_",type:"address",internalType:"address"},{name:"tokenDecimals_",type:"uint8",internalType:"uint8"}],stateMutability:"nonpayable"},{type:"function",name:"addCollateral",inputs:[{name:"remoteBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"remoteTokenTransferrerAddress",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"blockchainID",inputs:[],outputs:[{name:"",type:"bytes32",internalType:"bytes32"}],stateMutability:"view"},{type:"function",name:"getMinTeleporterVersion",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"isTeleporterAddressPaused",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"owner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"pauseTeleporterAddress",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"receiveTeleporterMessage",inputs:[{name:"sourceBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"originSenderAddress",type:"address",internalType:"address"},{name:"message",type:"bytes",internalType:"bytes"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"registeredRemotes",inputs:[{name:"remoteBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"remoteTokenTransferrerAddress",type:"address",internalType:"address"}],outputs:[{name:"registered",type:"bool",internalType:"bool"},{name:"collateralNeeded",type:"uint256",internalType:"uint256"},{name:"tokenMultiplier",type:"uint256",internalType:"uint256"},{name:"multiplyOnRemote",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"renounceOwnership",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"send",inputs:[{name:"input",type:"tuple",internalType:"struct SendTokensInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"}]},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"sendAndCall",inputs:[{name:"input",type:"tuple",internalType:"struct SendAndCallInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipientContract",type:"address",internalType:"address"},{name:"recipientPayload",type:"bytes",internalType:"bytes"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"recipientGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"},{name:"fallbackRecipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"}]},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"teleporterRegistry",inputs:[],outputs:[{name:"",type:"address",internalType:"contract TeleporterRegistry"}],stateMutability:"view"},{type:"function",name:"token",inputs:[],outputs:[{name:"",type:"address",internalType:"contract IERC20"}],stateMutability:"view"},{type:"function",name:"tokenAddress",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"tokenDecimals",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"transferOwnership",inputs:[{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"transferredBalances",inputs:[{name:"remoteBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"remoteTokenTransferrerAddress",type:"address",internalType:"address"}],outputs:[{name:"balance",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"unpauseTeleporterAddress",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"updateMinTeleporterVersion",inputs:[{name:"version",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"event",name:"CallFailed",inputs:[{name:"recipientContract",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"CallSucceeded",inputs:[{name:"recipientContract",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"CollateralAdded",inputs:[{name:"remoteBlockchainID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"remoteTokenTransferrerAddress",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"},{name:"remaining",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"MinTeleporterVersionUpdated",inputs:[{name:"oldMinTeleporterVersion",type:"uint256",indexed:!0,internalType:"uint256"},{name:"newMinTeleporterVersion",type:"uint256",indexed:!0,internalType:"uint256"}],anonymous:!1},{type:"event",name:"OwnershipTransferred",inputs:[{name:"previousOwner",type:"address",indexed:!0,internalType:"address"},{name:"newOwner",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"RemoteRegistered",inputs:[{name:"remoteBlockchainID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"remoteTokenTransferrerAddress",type:"address",indexed:!0,internalType:"address"},{name:"initialCollateralNeeded",type:"uint256",indexed:!1,internalType:"uint256"},{name:"tokenDecimals",type:"uint8",indexed:!1,internalType:"uint8"}],anonymous:!1},{type:"event",name:"TeleporterAddressPaused",inputs:[{name:"teleporterAddress",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"TeleporterAddressUnpaused",inputs:[{name:"teleporterAddress",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"TokensAndCallRouted",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendAndCallInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipientContract",type:"address",internalType:"address"},{name:"recipientPayload",type:"bytes",internalType:"bytes"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"recipientGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"},{name:"fallbackRecipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensAndCallSent",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"sender",type:"address",indexed:!0,internalType:"address"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendAndCallInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipientContract",type:"address",internalType:"address"},{name:"recipientPayload",type:"bytes",internalType:"bytes"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"recipientGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"},{name:"fallbackRecipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensRouted",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendTokensInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensSent",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"sender",type:"address",indexed:!0,internalType:"address"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendTokensInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensWithdrawn",inputs:[{name:"recipient",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1}];var we=[{type:"constructor",inputs:[{name:"settings",type:"tuple",internalType:"struct TokenRemoteSettings",components:[{name:"teleporterRegistryAddress",type:"address",internalType:"address"},{name:"teleporterManager",type:"address",internalType:"address"},{name:"tokenHomeBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"tokenHomeAddress",type:"address",internalType:"address"},{name:"tokenHomeDecimals",type:"uint8",internalType:"uint8"}]},{name:"tokenName",type:"string",internalType:"string"},{name:"tokenSymbol",type:"string",internalType:"string"},{name:"tokenDecimals_",type:"uint8",internalType:"uint8"}],stateMutability:"nonpayable"},{type:"function",name:"MULTI_HOP_CALL_GAS_PER_WORD",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MULTI_HOP_CALL_REQUIRED_GAS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"MULTI_HOP_SEND_REQUIRED_GAS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"REGISTER_REMOTE_REQUIRED_GAS",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"allowance",inputs:[{name:"owner",type:"address",internalType:"address"},{name:"spender",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"approve",inputs:[{name:"spender",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"nonpayable"},{type:"function",name:"balanceOf",inputs:[{name:"account",type:"address",internalType:"address"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"blockchainID",inputs:[],outputs:[{name:"",type:"bytes32",internalType:"bytes32"}],stateMutability:"view"},{type:"function",name:"calculateNumWords",inputs:[{name:"payloadSize",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"pure"},{type:"function",name:"decimals",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"decreaseAllowance",inputs:[{name:"spender",type:"address",internalType:"address"},{name:"subtractedValue",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"nonpayable"},{type:"function",name:"getMinTeleporterVersion",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"homeTokenDecimals",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"increaseAllowance",inputs:[{name:"spender",type:"address",internalType:"address"},{name:"addedValue",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"nonpayable"},{type:"function",name:"initialReserveImbalance",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"isCollateralized",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"isRegistered",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"isTeleporterAddressPaused",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"multiplyOnRemote",inputs:[],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"view"},{type:"function",name:"name",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"owner",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"pauseTeleporterAddress",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"receiveTeleporterMessage",inputs:[{name:"sourceBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"originSenderAddress",type:"address",internalType:"address"},{name:"message",type:"bytes",internalType:"bytes"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"registerWithHome",inputs:[{name:"feeInfo",type:"tuple",internalType:"struct TeleporterFeeInfo",components:[{name:"feeTokenAddress",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}]}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"renounceOwnership",inputs:[],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"send",inputs:[{name:"input",type:"tuple",internalType:"struct SendTokensInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"}]},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"sendAndCall",inputs:[{name:"input",type:"tuple",internalType:"struct SendAndCallInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipientContract",type:"address",internalType:"address"},{name:"recipientPayload",type:"bytes",internalType:"bytes"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"recipientGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"},{name:"fallbackRecipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"}]},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"symbol",inputs:[],outputs:[{name:"",type:"string",internalType:"string"}],stateMutability:"view"},{type:"function",name:"teleporterRegistry",inputs:[],outputs:[{name:"",type:"address",internalType:"contract TeleporterRegistry"}],stateMutability:"view"},{type:"function",name:"tokenDecimals",inputs:[],outputs:[{name:"",type:"uint8",internalType:"uint8"}],stateMutability:"view"},{type:"function",name:"tokenHomeAddress",inputs:[],outputs:[{name:"",type:"address",internalType:"address"}],stateMutability:"view"},{type:"function",name:"tokenHomeBlockchainID",inputs:[],outputs:[{name:"",type:"bytes32",internalType:"bytes32"}],stateMutability:"view"},{type:"function",name:"tokenMultiplier",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"totalSupply",inputs:[],outputs:[{name:"",type:"uint256",internalType:"uint256"}],stateMutability:"view"},{type:"function",name:"transfer",inputs:[{name:"to",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"nonpayable"},{type:"function",name:"transferFrom",inputs:[{name:"from",type:"address",internalType:"address"},{name:"to",type:"address",internalType:"address"},{name:"amount",type:"uint256",internalType:"uint256"}],outputs:[{name:"",type:"bool",internalType:"bool"}],stateMutability:"nonpayable"},{type:"function",name:"transferOwnership",inputs:[{name:"newOwner",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"unpauseTeleporterAddress",inputs:[{name:"teleporterAddress",type:"address",internalType:"address"}],outputs:[],stateMutability:"nonpayable"},{type:"function",name:"updateMinTeleporterVersion",inputs:[{name:"version",type:"uint256",internalType:"uint256"}],outputs:[],stateMutability:"nonpayable"},{type:"event",name:"Approval",inputs:[{name:"owner",type:"address",indexed:!0,internalType:"address"},{name:"spender",type:"address",indexed:!0,internalType:"address"},{name:"value",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"CallFailed",inputs:[{name:"recipientContract",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"CallSucceeded",inputs:[{name:"recipientContract",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"MinTeleporterVersionUpdated",inputs:[{name:"oldMinTeleporterVersion",type:"uint256",indexed:!0,internalType:"uint256"},{name:"newMinTeleporterVersion",type:"uint256",indexed:!0,internalType:"uint256"}],anonymous:!1},{type:"event",name:"OwnershipTransferred",inputs:[{name:"previousOwner",type:"address",indexed:!0,internalType:"address"},{name:"newOwner",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"TeleporterAddressPaused",inputs:[{name:"teleporterAddress",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"TeleporterAddressUnpaused",inputs:[{name:"teleporterAddress",type:"address",indexed:!0,internalType:"address"}],anonymous:!1},{type:"event",name:"TokensAndCallSent",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"sender",type:"address",indexed:!0,internalType:"address"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendAndCallInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipientContract",type:"address",internalType:"address"},{name:"recipientPayload",type:"bytes",internalType:"bytes"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"recipientGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"},{name:"fallbackRecipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensSent",inputs:[{name:"teleporterMessageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"sender",type:"address",indexed:!0,internalType:"address"},{name:"input",type:"tuple",indexed:!1,internalType:"struct SendTokensInput",components:[{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationTokenTransferrerAddress",type:"address",internalType:"address"},{name:"recipient",type:"address",internalType:"address"},{name:"primaryFeeTokenAddress",type:"address",internalType:"address"},{name:"primaryFee",type:"uint256",internalType:"uint256"},{name:"secondaryFee",type:"uint256",internalType:"uint256"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"multiHopFallback",type:"address",internalType:"address"}]},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"TokensWithdrawn",inputs:[{name:"recipient",type:"address",indexed:!0,internalType:"address"},{name:"amount",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1},{type:"event",name:"Transfer",inputs:[{name:"from",type:"address",indexed:!0,internalType:"address"},{name:"to",type:"address",indexed:!0,internalType:"address"},{name:"value",type:"uint256",indexed:!1,internalType:"uint256"}],anonymous:!1}];var Ua=85000n,rn=({homeToRemote:e,amount:t,destinationBlockchainID:r,destinationTokenTransferrerAddress:n,recipient:i})=>viem.encodeFunctionData({abi:e?xe:we,functionName:"send",args:[{destinationBlockchainID:r,destinationTokenTransferrerAddress:n,recipient:i,primaryFeeTokenAddress:M,primaryFee:0n,secondaryFee:0n,requiredGasLimit:Ua,multiHopFallback:M},t]});function an({amount:e,address:t}){return viem.encodeFunctionData({abi:D,functionName:"approve",args:[t,e]})}var Ga=async({params:{onStepChange:e,amount:t,fromAddress:r,sourceChain:n,toAddress:i,gasSettings:o},transferData:s,isAllowanceApprovalRequired:a,requiredSignatures:m,signer:p})=>{let{tokenRemoteConfig:c,tokenHomeConfig:d,homeToRemote:u,chainBridgeConfig:f}=s,y=E({chain:n});if(a){let w={currentSignature:1,currentSignatureReason:"allowance-approval",requiredSignatures:m};e?.(w);let I=an({amount:t,address:u?d.tokenHomeAddress:c.tokenRemoteAddress}),N=await p.sign({from:r,to:u?s.tokenHomeConfig.baseToken.address:c.tokenRemoteAddress,data:I,...o?{maxFeePerGas:o.price,maxPriorityFeePerGas:o.tip}:null,chainId:B.toEip155HexChainId(B.toJSON(n.chainId))},J=>y.sendRawTransaction({serializedTransaction:J}),w);await y.waitForTransactionReceipt({hash:N});}let g={currentSignature:a?2:1,currentSignatureReason:"tokens-transfer",requiredSignatures:m};e?.(g);let C=u?c.remoteChain.blockchainId:f.homeChain.blockchainId,b=u?c.tokenRemoteAddress:d.tokenHomeAddress,A=rn({amount:t,recipient:i,destinationBlockchainID:C,destinationTokenTransferrerAddress:b,homeToRemote:u});return p.sign({from:r,to:u?d.tokenHomeAddress:c.tokenRemoteAddress,data:A,...o?{maxFeePerGas:o.price,maxPriorityFeePerGas:o.tip}:null,chainId:B.toEip155HexChainId(B.toJSON(n.chainId))},w=>y.sendRawTransaction({serializedTransaction:w}),g)},za=async({params:e,transferData:t,signer:r})=>{let{sourceChain:n,fromAddress:i,amount:o}=e,s=E({chain:n}),{homeToRemote:a,tokenHomeConfig:m,tokenRemoteConfig:p}=t,d=await s.readContract({address:a?m.baseToken.address:p.tokenRemoteAddress,abi:D,functionName:"allowance",args:[i,a?m.tokenHomeAddress:p.tokenRemoteAddress]})<o;return Ga({params:e,transferData:t,isAllowanceApprovalRequired:d,requiredSignatures:d?2:1,signer:r})},Wa=async(e,t,r)=>{let{sourceChain:n,targetChain:i,asset:o,amount:s}=t,a=H({sourceChain:n,targetChain:i,asset:o,amount:s},e);return za({params:t,transferData:a,signer:r})},$a=async e=>{try{return await e.getBlockNumber()}catch{return}};async function on(e,t,r,n){let i=await Ae(e,{asset:t.asset,amount:t.amount,sourceChain:t.sourceChain,targetChain:t.targetChain}),o=W(t.asset)?i[t.targetChain.chainId]?.[t.asset.address]??0n:0n,s=await Wa(e,t,n),a=Date.now(),m=E({chain:t.targetChain}),p=await $a(m);return {type:"ictt-erc20-erc20",environment:r,fromAddress:t.fromAddress,toAddress:t.toAddress,amount:t.amount,asset:t.asset,bridgeFee:o,sourceChain:t.sourceChain,sourceStartedAt:a,sourceTxHash:s,sourceConfirmationCount:0,sourceRequiredConfirmationCount:1,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:p}}var mn=({transferData:{homeToRemote:e,tokenHomeConfig:t,tokenRemoteConfig:r}})=>n=>{let i=e?t.tokenHomeAddress:r.tokenRemoteAddress,o=e?xe:we,s="TokensSent",a=n.logs.find(c=>c.address.toLowerCase()===i.toLowerCase()?viem.decodeEventLog({abi:o,...c}).eventName===s:!1);if(!a)throw new l("INVALID_PARAMS",`unable to find a TokensSent event in source transaction "${n.transactionHash}"`);return {teleporterMessageID:viem.decodeEventLog({abi:o,eventName:s,...a}).args.teleporterMessageID}},qa={name:"ReceiveCrossChainMessage",type:"event",inputs:[{name:"messageID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"sourceBlockchainID",type:"bytes32",indexed:!0,internalType:"bytes32"},{name:"deliverer",type:"address",indexed:!0,internalType:"address"},{name:"rewardRedeemer",type:"address",indexed:!1,internalType:"address"},{name:"message",type:"tuple",indexed:!1,internalType:"struct TeleporterMessage",components:[{name:"messageNonce",type:"uint256",internalType:"uint256"},{name:"originSenderAddress",type:"address",internalType:"address"},{name:"destinationBlockchainID",type:"bytes32",internalType:"bytes32"},{name:"destinationAddress",type:"address",internalType:"address"},{name:"requiredGasLimit",type:"uint256",internalType:"uint256"},{name:"allowedRelayerAddresses",type:"address[]",internalType:"address[]"},{name:"receipts",type:"tuple[]",internalType:"struct TeleporterMessageReceipt[]",components:[{name:"receivedMessageNonce",type:"uint256",internalType:"uint256"},{name:"relayerRewardAddress",type:"address",internalType:"address"}]},{name:"message",type:"bytes",internalType:"bytes"}]}]},pn=({toAddress:e,transferData:{tokenHomeConfig:t,homeToRemote:r,tokenRemoteConfig:n},targetClient:i})=>async({fromBlock:o,toBlock:s,metadata:a})=>{if(!Ue(a))throw new l("INVALID_PARAMS");let p=(await i.getLogs({address:t.teleporterAddress,event:qa,args:{messageID:a.teleporterMessageID},fromBlock:o,toBlock:s})).at(-1);if(lodash.isNil(p))return;let c=p.transactionHash,d=await i.getTransactionReceipt({hash:c}),u=r?we:xe,f=r?n.tokenRemoteAddress:t.tokenHomeAddress,y=d.logs.find(C=>C.address.toLowerCase()===f.toLowerCase()?viem.decodeEventLog({abi:u,...C}).eventName==="TokensWithdrawn":!1);if(lodash.isNil(y))return;if(viem.decodeEventLog({abi:u,eventName:"TokensWithdrawn",...y}).args.recipient.toLowerCase()===e.toLowerCase())return c},Ue=e=>lodash.isObject(e)&&viem.isHex(e.teleporterMessageID);var Ka=async(e,t)=>{let{bridgeTransfer:r}=t,{asset:n,amount:i,sourceChain:o,targetChain:s}=r,a=H({sourceChain:o,targetChain:s,asset:n,amount:i},e),m=E({chain:r.sourceChain}),p=E({chain:r.targetChain}),c=mn({transferData:a}),d=pe({sourceClient:m,targetClient:p,getMetadata:c,checkMetadata:Ue,trackingParams:t,trackingConfig:x});return _({promise:d,delay:2e3,startAfter:x.initialDelayMs})},Ja=async(e,t)=>{let{bridgeTransfer:r}=t,{targetChain:n,sourceChain:i,asset:o,amount:s,toAddress:a}=r,m=H({sourceChain:i,targetChain:n,asset:o,amount:s},e),p=E({chain:r.targetChain}),c=pn({transferData:m,targetClient:p,toAddress:a}),d=ce({targetClient:p,getTargetTxHash:c,checkMetadata:Ue,trackingParams:t,trackingConfig:x});return _({promise:d,delay:2e3,startAfter:x.initialDelayMs})};function cn(e,t){let r,n=()=>{r?.();};return {result:(async()=>{let{updateListener:o}=t,{result:s,cancel:a}=await Ka(e,t);r=a;let m=await s,{result:p,cancel:c}=await Ja(e,{updateListener:o,bridgeTransfer:m});return r=c,p})(),cancel:n}}async function dn(e,t){return H(t,e),1n}var ft={encode(e){return base.base58.encode(utils.concatBytes(e,sha256.sha256(e).subarray(-4)))},decode(e){return base.base58.decode(e).subarray(0,-4)}};var Ya=zod.z.object({subnetName:zod.z.string(),subnetID:zod.z.string(),blockchainID:zod.z.string(),chainID:zod.z.number(),network:zod.z.string()}),fn=zod.z.array(Ya),ei=zod.z.object({PKey:zod.z.string(),SKey:zod.z.string(),orgID:zod.z.string(),bridgeID:zod.z.string(),tokenAddress:ee,tokenSymbol:zod.z.string(),tokenName:zod.z.string(),tokenDecimals:zod.z.number(),tokenHomeAddress:ee,tokenHomeChainID:zod.z.number(),tokenRemoteAddress:ee,tokenRemoteChainID:zod.z.number(),network:zod.z.string(),isRegisteredInBridgeApp:zod.z.enum(["Y","N"]),createdAt:zod.z.number(),updatedAt:zod.z.number()}),yn=zod.z.array(ei);var ln="0x253b2784c75e510dD0fF1da844684a1aC0aa5fcf",Tn={test:"https://ac-gateway-staging-us-east-1.avacloud-test.io/v1/bridge-app",production:"https://ac-gateway-production-us-east-1.avacloud.io/v1/bridge-app"},gn={chainID:43114,blockchainID:"2q9e4r6Mu3U68nU1fYjgbR6JvwrRx36CohpAX5UQxse55x1Q5"},An={chainID:43113,blockchainID:"yH8D7ThNJkxmtkuv2jgBa4P1Rn3Qpr4pPr7QYNfcdoS6k6HWp"};var yt=async e=>await(await fetch(e)).json();var ti=e=>e==="production"||e==="test",ni=e=>e.status==="fulfilled",ri=async(e,t)=>{let r=await yt(`${e}/chains`);return [t==="production"?gn:An,...fn.parse(r)]},ai=async(e,t)=>(await Promise.allSettled(t.map(async n=>{let i=await yt(`${e}/chains/${n.chainID}/bridges`);return yn.parse(i)}))).filter(ni).flatMap(n=>n.value),hn=async e=>{if(!ti(e))throw new S("ENVIRONMENT_NOT_SUPPORTED",`ICTT does not support ${e} environment`);try{let t=Tn[e],r=await ri(t,e),n=await ai(t,r),i=[];return n.forEach(o=>{let s=r.find(({chainID:f})=>f===o.tokenHomeChainID);if(!s)return;let a=i.find(({homeChain:f})=>f.chainId===B.toString({namespace:"eip155",reference:String(s.chainID)}));a||(a={homeChain:{chainId:B.toString({namespace:"eip155",reference:String(s.chainID)}),blockchainId:viem.toHex(ft.decode(s.blockchainID))},erc20Bridges:[]},i.push(a));let m=a.erc20Bridges.find(({tokenHomeAddress:f})=>f===o.tokenHomeAddress);m||(m={baseToken:{address:o.tokenAddress,decimals:o.tokenDecimals,name:o.tokenName||o.tokenSymbol,symbol:o.tokenSymbol,type:"erc20"},remotes:[],teleporterAddress:ln,tokenHomeAddress:o.tokenHomeAddress,tokenHomeDecimals:o.tokenDecimals},a.erc20Bridges.push(m));let p=r.find(({chainID:f})=>f===o.tokenRemoteChainID);if(!p)return;let c=viem.toHex(ft.decode(p.blockchainID)),d=B.toString({namespace:"eip155",reference:String(o.tokenRemoteChainID)});m.remotes.find(({tokenRemoteAddress:f,remoteChain:{chainId:y}})=>f===o.tokenRemoteAddress&&y===d)||m.remotes.push({remoteChain:{chainId:d,blockchainId:c},tokenRemoteAddress:o.tokenRemoteAddress});}),i.map(o=>({...o,erc20Bridges:o.erc20Bridges.filter(s=>s.remotes.length>0)})).filter(o=>o.erc20Bridges.length>0)}catch(t){throw new S("CONFIG_NOT_AVAILABLE",`Error while fetching ICTT-ERC20-ERC20 config: ${t.message}`)}};var En=async(e,t)=>{let{homeToRemote:r,tokenHomeConfig:{baseToken:n},tokenRemoteConfig:{tokenRemoteAddress:i}}=H(t,e),o={...n,address:r?i:n.address},s=await Ae(e,t);return {amount:t.amount-(s[t.targetChain.chainId]?.[n.address]??0n),asset:o}};function bn(e,t){for(let r of e)for(let n of r.erc20Bridges){let i=t.tokenTransfers.find(({symbol:p})=>p===n.baseToken.symbol);if(!i)continue;let o=viem.isAddressEqual(n.teleporterAddress,t.to),s=viem.isAddressEqual(t.from,n.tokenHomeAddress)||viem.isAddressEqual(i.from,n.tokenHomeAddress),a=viem.isAddressEqual(t.from,M)||viem.isAddressEqual(i.from,M);if(o&&(s||a))return {isBridgeTx:!0,sourceChainId:n.remotes.length===1?n.remotes[0].remoteChain.chainId:void 0,targetChainId:t.chainId,bridgeType:"ictt-erc20-erc20"};if(viem.isAddressEqual(t.to,n.tokenHomeAddress)||viem.isAddressEqual(i.to,n.tokenHomeAddress))return {isBridgeTx:!0,sourceChainId:t.chainId,targetChainId:n.remotes.length===1?n.remotes[0].remoteChain.chainId:void 0,bridgeType:"ictt-erc20-erc20"}}return {isBridgeTx:!1}}var Bn=async(e,t)=>{let r=await hn(e);return {type:"ictt-erc20-erc20",analyzeTx:n=>{try{return bn(r,Te(n))}catch{return {isBridgeTx:!1}}},estimateGas:n=>en(r,K(n)),estimateReceiveAmount:n=>En(r,K(n)),getAssets:()=>tn(r),getFees:n=>Ae(r,n),getMinimumTransferAmount:n=>dn(r,n),transferAsset:n=>on(r,ge(n),e,t),trackTransfer:n=>cn(r,n)}};var Ce=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"src",type:"address"},{indexed:!0,internalType:"address",name:"guy",type:"address"},{indexed:!1,internalType:"uint256",name:"wad",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"dst",type:"address"},{indexed:!1,internalType:"uint256",name:"wad",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"src",type:"address"},{indexed:!0,internalType:"address",name:"dst",type:"address"},{indexed:!1,internalType:"uint256",name:"wad",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"src",type:"address"},{indexed:!1,internalType:"uint256",name:"wad",type:"uint256"}],name:"Withdrawal",type:"event"},{payable:!0,stateMutability:"payable",type:"fallback"},{constant:!0,inputs:[{internalType:"address",name:"",type:"address"},{internalType:"address",name:"",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"guy",type:"address"},{internalType:"uint256",name:"wad",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{internalType:"address",name:"",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[],name:"deposit",outputs:[],payable:!0,stateMutability:"payable",type:"function"},{constant:!0,inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"dst",type:"address"},{internalType:"uint256",name:"wad",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"src",type:"address"},{internalType:"address",name:"dst",type:"address"},{internalType:"uint256",name:"wad",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{internalType:"uint256",name:"wad",type:"uint256"}],name:"withdraw",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{internalType:"uint256",name:"value",type:"uint256"},{internalType:"uint256",name:"chain_id",type:"uint256"}],name:"unwrap",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"swap",outputs:[{internalType:"bool",name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{internalType:"address",name:"",type:"address"}],name:"swapSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"}];var Ge=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"guy",type:"address"},{name:"wad",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"src",type:"address"},{name:"dst",type:"address"},{name:"wad",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[{name:"wad",type:"uint256"}],name:"withdraw",outputs:[],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"",type:"address"}],name:"balanceOf",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"dst",type:"address"},{name:"wad",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!1,inputs:[],name:"deposit",outputs:[],payable:!0,stateMutability:"payable",type:"function"},{constant:!0,inputs:[{name:"",type:"address"},{name:"",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"src",type:"address"},{indexed:!0,name:"guy",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"src",type:"address"},{indexed:!0,name:"dst",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"dst",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"src",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Withdrawal",type:"event"}];function oi(e){return e.toLowerCase().startsWith("tb1")||e.toLowerCase().startsWith("bc1")}function lt(e){if(!oi(e))return !1;try{return base.bech32.decode(e),!0}catch{return !1}}function Ne(e,t){return lt(e)?e.toLowerCase().startsWith(t?"bc":"tb"):!1}var Se=zod.z.string().refine(e=>viem.isAddress(e),e=>({message:`Invalid EVM address '${e}'`})).transform(e=>e),mi=zod.z.string().refine(e=>lt(e),e=>({message:`Invalid BTC address '${e}'`})),Re=(i=>(i.AVALANCHE="avalanche",i.ETHEREUM="ethereum",i.BITCOIN="bitcoin",i.UNKNOWN="",i))(Re||{}),he=zod.z.nativeEnum(Re),pi=zod.z.object({tokenName:zod.z.string(),nativeNetwork:he,denomination:zod.z.number()}),ci=pi.extend({nativeContractAddress:Se,wrappedContractAddress:Se,wrappedNetwork:he}),vn=zod.z.object({disableFrontend:zod.z.boolean(),addressBlocklist:zod.z.array(zod.z.string())}),In=vn.extend({assets:zod.z.record(zod.z.string(),ci),networks:zod.z.record(he,zod.z.union([zod.z.number(),zod.z.undefined()])),walletAddresses:zod.z.record(he,Se)}),kn=zod.z.object({minimumConfirmations:zod.z.record(he,zod.z.optional(zod.z.number()))}),di=kn.extend({unwrapFeeApproximation:zod.z.record(zod.z.string(),zod.z.string()),wrapFeeApproximation:zod.z.record(zod.z.string(),zod.z.string())}),ze=zod.z.object({minimumFeeAmount:zod.z.string(),maximumFeeAmount:zod.z.string(),feePercentage:zod.z.number(),feePercentageDecimals:zod.z.number()}),ui=kn.extend({unwrapFeeApproximation:zod.z.record(zod.z.string(),ze),wrapFeeApproximation:zod.z.record(zod.z.string(),ze)}),fi=zod.z.object({critical:In,nonCritical:di}),yi=zod.z.object({critical:In,nonCritical:ui}),li=zod.z.object({tokenName:zod.z.string(),bech32AddressPrefix:zod.z.union([zod.z.literal("tb"),zod.z.literal("bc")]),wrappedContractAddress:Se,wrappedNetwork:he}),Ti=vn.extend({addressBlocklist:zod.z.array(zod.z.string()),avalancheChainId:zod.z.number(),bitcoinAssets:zod.z.record(zod.z.string(),li),walletAddresses:zod.z.object({btc:mi,avalanche:Se})}),gi=zod.z.object({dustThreshold:zod.z.number(),wrapFeeEstimate:zod.z.object({minimumFeeAmount:zod.z.string(),maximumFeeAmount:zod.z.string(),feePercentage:zod.z.number(),feePercentageDecimals:zod.z.number()}),unwrapFeeEstimate:zod.z.object({bridgeToll:zod.z.object({minimumFeeAmount:zod.z.string(),maximumFeeAmount:zod.z.string(),feePercentage:zod.z.number(),feePercentageDecimals:zod.z.number()}),estimatedTxFee:zod.z.object({constAmount:zod.z.number(),numeratorPerSat:zod.z.number(),denominatorPerSat:zod.z.number()})})}),Ai=zod.z.object({wrapFeeAmount:zod.z.number(),constUnwrapFeeAmount:zod.z.number(),unwrapFeeNumerator:zod.z.number(),unwrapFeeDenominator:zod.z.number(),dustThreshold:zod.z.number()}),Ci=zod.z.object({minimumConfirmations:zod.z.number(),minimumOnboardSize:zod.z.number(),currentBridgeFeeEstimate:zod.z.union([gi,Ai])}),hi=zod.z.object({networkInfo:zod.z.record(zod.z.string(),Ci)}),xn=zod.z.object({criticalBitcoin:Ti,nonCriticalBitcoin:hi}),Ei=zod.z.intersection(yi,xn),bi=zod.z.intersection(fi,xn),wn=zod.z.union([Ei,bi]);var Bi=e=>"eip155:1"===e||"eip155:11155111"===e,Tt=e=>Bi(e.chainId);var De=e=>"eip155:43113"===e||"eip155:43114"===e,$e=e=>De(e.chainId);var je=e=>e==="bip122:000000000019d6689c085ae165831e93"||e==="bip122:000000000933ea01ad0ee984209779ba";var Nn=e=>e==="eip155:1"||e==="eip155:43114"||e==="bip122:000000000019d6689c085ae165831e93",Xe=e=>!Nn(e),ne=e=>Nn(e.chainId);var _e={type:"native",name:"Ether",symbol:"ETH",decimals:18};var Ee=({destinations:e,...t})=>t;var Ii=e=>({source:e.nativeTokenConfig.ethereumToken,target:e.nativeTokenConfig.avalancheToken,ethToAva:!0}),Sn=(e,t)=>{if(!W(t))throw new l("ASSET_NOT_SUPPORTED",`Wrong token type: ${t.type}`);return lodash.isEqual(e,Ee(t))},ki=(e,t)=>{if(!W(t))throw new l("ASSET_NOT_SUPPORTED",`Wrong token type: ${t.type}`);let r=e.ethereumTokens[t.address];if(!r||!Sn(r.token,t))throw new l("ASSET_NOT_SUPPORTED",`Unable to find matching ethereum token in config: ${t.symbol}`);let n=e.avalancheTokens[r.target.tokenAddress];if(!n)throw new l("ASSET_NOT_SUPPORTED",`Unable to get avalanche token in config: ${t.symbol}`);return {source:r,target:n,ethToAva:!0}},xi=(e,t)=>{if(!W(t))throw new l("ASSET_NOT_SUPPORTED",`Wrong token type: ${t.type}`);let r=e.avalancheTokens[t.address];if(!r||!Sn(r.token,t))throw new l("ASSET_NOT_SUPPORTED",`Unable to find matching avalanche token in config: ${t.symbol}`);let n=e.ethereumTokens[r.target.tokenAddress];if(!n)throw new l("ASSET_NOT_SUPPORTED",`Unable to get ethereum token in config: ${t.symbol}`);return {source:r,target:n,ethToAva:!1}},wi=(e,t)=>{let{reference:r}=B.toJSON(e.chainId),{reference:n}=B.toJSON(t.chainId);return [{source:1,target:43114},{source:43114,target:1},{source:11155111,target:43113},{source:43113,target:11155111}].some(({source:o,target:s})=>o.toString()===r&&s.toString()===n)},L=({sourceChain:e,targetChain:t,amount:r,asset:n},i)=>{if(e.chainId===t.chainId)throw new l("IDENTICAL_CHAINS_PROVIDED",`SourceChain and TargetChain need to be different network. But found the same chainId: ${e.chainId}`);if(!wi(e,t))throw new l("INVALID_PARAMS","SourceChain and TargetChain combination is not correct or the chains provided are not supported");if(r<=0n)throw new l("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");return le(n)&&n.symbol===_e.symbol&&Tt(e)?Ii(i):Tt(e)?ki(i,n):xi(i,n)};async function Rn(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o,fromAddress:s}=t;if(!viem.isAddress(s))throw new l("INVALID_PARAMS",`Invalid fromAddress: ${s}`);let a=e.walletAddresses.ethereum,{source:m,ethToAva:p}=L({sourceChain:r,targetChain:n,asset:i,amount:o},e),c=E({chain:r}),d=0n;if(le(i)&&p){d+=await c.estimateContractGas({address:m.token.address,abi:Ge,functionName:"deposit",account:s});try{d+=await c.estimateContractGas({address:m.token.address,abi:D,functionName:"transfer",account:s,args:[a,o]});}catch{let u=viem.encodeFunctionData({abi:D,functionName:"transfer",args:[a,o]});d+=await c.estimateGas({data:u,account:s,to:a,value:o});}}else d=await c.estimateContractGas({address:m.token.address,abi:p?D:Ce,functionName:p?"transfer":"unwrap",account:s,args:p?[a,o]:[o,0]});return d}var ue=e=>{try{return ze.parse(e),!0}catch{return !1}};var Ri=(e,{max:t,min:r})=>e>t?t:e<r?r:e,be=(e,t)=>{let{minimumFeeAmount:r,maximumFeeAmount:n,feePercentage:i,feePercentageDecimals:o}=t,s=BigInt(r),a=BigInt(n),m=i/10**o/100,p=Number(e)*m,c=BigInt(Math.ceil(p));return Ri(c,{min:s,max:a})};async function re(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o}=t,{source:s,target:a,ethToAva:m}=L({sourceChain:r,targetChain:n,asset:i,amount:o},e),p=m?s.wrapFeeApproximation:s.unwrapFeeApproximation;if(ue(p)){let d=be(o,p);return {[a.chainId]:{[a.token.address]:d}}}let c=p??0n;return {[a.chainId]:{[a.token.address]:c}}}async function Dn(e,t){let{target:r}=L(t,e),n=await re(e,t);return {asset:r.token,amount:t.amount-(n[r.chainId]?.[r.token.address]??0n)}}function _n(e){let t=Object.values(e.ethereumTokens).reduce((o,s)=>{if(s.token.symbol==="USDC")return o;let a=s.chainId,m=s.target.chainId,p={...s.token,destinations:{[m]:["avalanche-evm"]}},c=o[a]??[];return c.push(p),o[a]=c,o},{}),r=Object.values(e.avalancheTokens).reduce((o,s)=>{let a=s.chainId,m=s.target.chainId,p={...s.token,destinations:{[m]:["avalanche-evm"]}},c=o[a]??[];return c.push(p),o[a]=c,o},t),n="eip155:1";r[n]&&r[n].push({..._e,destinations:{["eip155:43114"]:["avalanche-evm"]}});let i="eip155:11155111";return r[i]&&r[i].push({..._e,destinations:{["eip155:43113"]:["avalanche-evm"]}}),r}var Pn=3n;async function qe(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o}=t,{source:s,target:a,ethToAva:m}=L({sourceChain:r,targetChain:n,asset:i,amount:o},e),p=m?s.wrapFeeApproximation:s.unwrapFeeApproximation;if(ue(p)){let u=p.minimumFeeAmount;return BigInt(u)*Pn}let d=(await re(e,t))[a.chainId]?.[a.token.address];if(d===void 0)throw new l("INVALID_PARAMS",`Unable to get static fee for ${i.symbol}`);return d*Pn}var Ke=()=>e=>({transactionHash:e.transactionHash}),Fn=({params:{bridgeTransfer:{fromAddress:e}},transferData:{target:t,ethToAva:r},targetClient:n,config:i})=>async({fromBlock:o,toBlock:s,metadata:a})=>{if(!o)return;let m=t.token.address,p=r?M:i.walletAddresses.ethereum,c=r?void 0:{src:p,dst:e},d=r?{inputs:[{indexed:!1,name:"to",type:"address"},{indexed:!1,name:"amount",type:"uint256"},{indexed:!1,name:"feeAddress",type:"address"},{indexed:!1,name:"feeAmount",type:"uint256"},{indexed:!1,name:"originTxId",type:"bytes32"}],name:"Mint",type:"event"}:{inputs:[{indexed:!0,name:"src",type:"address"},{indexed:!0,name:"dst",type:"address"},{indexed:!1,name:"wad",type:"uint256"}],name:"Transfer",type:"event"},u=await n.getLogs({address:m,event:d,args:c,fromBlock:o,toBlock:s}),f=r?u.find(y=>gt(y)&&y.args.originTxId===a?.transactionHash):u.at(-1);if(!lodash.isNil(f))return f.transactionHash},gt=e=>Fi(e)?Object.keys(e.args).includes("originTxId"):!1,Fi=e=>Object.keys(e).includes("args"),Pe=e=>lodash.isObject(e)&&viem.isHex(e.transactionHash);var Mi=async(e,t)=>{let{bridgeTransfer:r}=t,{targetChain:n,sourceChain:i,asset:o,amount:s}=r,a=L({sourceChain:i,targetChain:n,asset:o,amount:s},e),m=E({chain:r.targetChain}),p=Fn({params:t,transferData:a,targetClient:m,config:e}),c=ce({targetClient:m,getTargetTxHash:p,checkMetadata:Pe,trackingParams:t,trackingConfig:x});return _({promise:c,delay:1e3*30,startAfter:x.initialDelayMs})},Oi=async e=>{let{sourceChain:t,targetChain:r}=e.bridgeTransfer,n=E({chain:t}),i=E({chain:r}),o=Ke(),s=pe({sourceClient:n,targetClient:i,getMetadata:o,checkMetadata:Pe,trackingParams:e,trackingConfig:x});return _({promise:s,delay:1e3*30,startAfter:x.initialDelayMs})};function Mn(e,t){let r,n=()=>{r?.();};return {result:(async()=>{let{bridgeTransfer:o,updateListener:s}=t,{result:a,cancel:m}=await Oi({bridgeTransfer:o,updateListener:s});r=m;let p=await a,{result:c,cancel:d}=await Mi(e,{updateListener:s,bridgeTransfer:p});return r=d,c})(),cancel:n}}var Je=async({amount:e,source:t,sourceChain:r,fromAddress:n,sign:i,onStepChange:o,gasSettings:s})=>{let a=E({chain:r}),m={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};o?.(m);let p=viem.encodeFunctionData({abi:Ce,functionName:"unwrap",args:[e,0n]}),c=await i({from:n,to:t.token.address,data:p,...s?{maxFeePerGas:s.price,maxPriorityFeePerGas:s.tip}:null,chainId:B.toEip155HexChainId(B.toJSON(r.chainId))},d=>a.sendRawTransaction({serializedTransaction:d}),m);return await a.waitForTransactionReceipt({hash:c}),c};var On={ethereum:"0x6b7a87899490EcE95443e979cA9485CBE7E71522",avalanche:"0x9b17bAADf0f21F03e35249e0e59723F34994F806"},Vi=async({amount:e,config:t,source:r,sourceChain:n,fromAddress:i,sign:o,onStepChange:s,gasSettings:a})=>{let m=t.walletAddresses.ethereum,p=E({chain:n}),c={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};s?.(c);let d=viem.encodeFunctionData({abi:D,functionName:"transfer",args:[m,e]}),u=await o({from:i,to:r.token.address,data:d,...a?{maxFeePerGas:a.price,maxPriorityFeePerGas:a.tip}:null,chainId:B.toEip155HexChainId(B.toJSON(n.chainId))},f=>p.sendRawTransaction({serializedTransaction:f}),c);return await p.waitForTransactionReceipt({hash:u}),u},Li=async({config:e,fromAddress:t,sourceChain:r,targetChain:n})=>{if(e.environment!=="production"&&!ne(r)&&!ne(n))return !1;let i=e.nativeTokenConfig.ethereumToken,o=e.nativeTokenConfig.avalancheToken;try{return await E({chain:r}).readContract({address:i.token.address,abi:D,functionName:"allowance",args:[t,On.ethereum]})!==0n?!0:await E({chain:n}).readContract({address:o.token.address,abi:D,functionName:"allowance",args:[t,On.avalanche]})!==0n}catch{return !1}},Ui=async({amount:e,config:t,fromAddress:r,source:n,sourceChain:i,targetChain:o,sign:s,onStepChange:a,gasSettings:m})=>{let p=t.walletAddresses.ethereum,c=E({chain:i});if(!$e(o))throw new l("INVALID_PARAMS","Invalid chain combinations");if(await Li({config:t,fromAddress:r,sourceChain:i,targetChain:o}))throw new l("VULNERABLE_TOKEN_APPROVAL_ADDRESS","Address has vulnerable token approvals");let u={currentSignature:1,currentSignatureReason:"wrap-token",requiredSignatures:2};a?.(u);let f=viem.encodeFunctionData({abi:Ge,functionName:"deposit"}),y=await s({from:r,to:n.token.address,value:e,data:f,...m?{maxFeePerGas:m.price,maxPriorityFeePerGas:m.tip}:null,chainId:B.toEip155HexChainId(B.toJSON(i.chainId))},A=>c.sendRawTransaction({serializedTransaction:A}),u);await c.waitForTransactionReceipt({hash:y});let g={currentSignature:2,currentSignatureReason:"tokens-transfer",requiredSignatures:2};a?.(g);let C=viem.encodeFunctionData({abi:D,functionName:"transfer",args:[p,e]}),b=await s({from:r,to:n.token.address,data:C,...m?{maxFeePerGas:m.price,maxPriorityFeePerGas:m.tip}:null,chainId:B.toEip155HexChainId(B.toJSON(i.chainId))},A=>c.sendRawTransaction({serializedTransaction:A}),g);return await c.waitForTransactionReceipt({hash:b}),b},Hn=async({amount:e,asset:t,config:r,fromAddress:n,source:i,sourceChain:o,targetChain:s,sign:a,onStepChange:m,gasSettings:p})=>le(t)?Ui({amount:e,config:r,fromAddress:n,source:i,sourceChain:o,targetChain:s,sign:a,onStepChange:m,gasSettings:p}):Vi({amount:e,config:r,source:i,sourceChain:o,fromAddress:n,sign:a,onStepChange:m,gasSettings:p});var Be=(e,t)=>{let r=t.map(i=>i.toLowerCase()),n=e.find(i=>r.includes(i.toLowerCase()));if(n)throw new l("ADDRESS_IS_BLOCKED",n)};async function Vn(e,t,r){let{sourceChain:n,targetChain:i,asset:o,amount:s,fromAddress:a,toAddress:m,onStepChange:p,gasSettings:c}=t;if(a!==m)throw new l("INVALID_PARAMS","fromAddress and toAddress do not match");Be([a,m],e.addressBlocklist);let d=await re(e,{asset:o,amount:s,sourceChain:n,targetChain:i}),{source:u,target:f,ethToAva:y}=L({sourceChain:n,targetChain:i,asset:o,amount:s},e),g=await qe(e,{asset:o,amount:s,sourceChain:n,targetChain:i});if(s<g)throw new l("INVALID_PARAMS",`Minimum transfer amount is ${g.toString()}`);let C=$e(n)?e.minimumConfirmations.avalanche:e.minimumConfirmations.ethereum,b=d[f.chainId]?.[f.token.address]??0n,A;y?A=await Hn({amount:s,asset:o,config:e,fromAddress:a,source:u,sourceChain:n,targetChain:i,sign:r.sign,onStepChange:p,gasSettings:c}):A=await Je({amount:s,fromAddress:a,source:u,sourceChain:n,sign:r.sign,onStepChange:p,gasSettings:c});let w=Date.now(),I=E({chain:t.targetChain}),N;try{N=await I.getBlockNumber();}catch(J){console.error(J);}return {type:"avalanche-evm",environment:e.environment,fromAddress:t.fromAddress,toAddress:t.toAddress,amount:t.amount,asset:o,bridgeFee:b,sourceChain:t.sourceChain,sourceStartedAt:w,sourceTxHash:A,sourceConfirmationCount:0,sourceRequiredConfirmationCount:C,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:N}}var Ln=(e,t)=>{let r=e.critical.assets,{ethereum:n,avalanche:i}=e.critical.networks;if(n===void 0||i===void 0)throw new S("WARDEN_CONFIG_MISSING_NETWORK","Critical networks info is missing from wardenConfig");let o=e.critical.walletAddresses.avalanche,s=e.critical.walletAddresses.ethereum;if(!o||!s)throw new S("CONFIG_NOT_AVAILABLE","Wallet address is missing from the critical config.");let a=Object.entries(r).reduce((y,[g,C])=>{let b={type:"erc20",address:C.nativeContractAddress,name:C.tokenName,symbol:g,decimals:C.denomination},A=e.nonCritical.wrapFeeApproximation[g];return y[C.nativeContractAddress]={chainId:`eip155:${n}`,token:b,target:{chainId:`eip155:${i}`,tokenAddress:C.wrappedContractAddress},wrapFeeApproximation:ue(A)?A:A?BigInt(A):void 0},y},{}),m=Object.values(a).find(y=>y.token.symbol==="WETH");if(!m)throw new S("CONFIG_NOT_AVAILABLE","WETH info is missing from config");let p=Object.entries(r).reduce((y,[g,C])=>{let b={type:"erc20",address:C.wrappedContractAddress,name:C.tokenName,symbol:`${g}.e`,decimals:C.denomination},A=e.nonCritical.unwrapFeeApproximation[g];return y[C.wrappedContractAddress]={chainId:`eip155:${i}`,token:b,target:{chainId:`eip155:${n}`,tokenAddress:C.nativeContractAddress},unwrapFeeApproximation:ue(A)?A:A?BigInt(A):void 0},y},{}),c=p[m.target.tokenAddress];if(!c)throw new S("CONFIG_NOT_AVAILABLE","WETH.e info is missing from config");let d=e.nonCritical.minimumConfirmations.avalanche,u=e.nonCritical.minimumConfirmations.ethereum;if(!d||!u)throw new S("CONFIG_NOT_AVAILABLE","Minimum confirmation info is missing");return {addressBlocklist:e.critical.addressBlocklist,ethereumTokens:a,avalancheTokens:p,minimumConfirmations:{avalanche:d,ethereum:u},environment:t,walletAddresses:{avalanche:o,ethereum:s},nativeTokenConfig:{ethereumToken:m,avalancheToken:c}}};var Un={environment:"dev",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.test.json",configMismatchThreshold:1,wardenConfigURLs:["https://warden1-avax-dev-storage.s3.amazonaws.com/bridge_settings.json","https://warden2-avax-dev-storage.s3.amazonaws.com/bridge_settings.json","https://warden3-avax-dev-storage.s3.amazonaws.com/bridge_settings.json"],disabledTokensOnNetwork:{avalanche:[],ethereum:["FAU"]}},Gn={...Un,environment:"staging"},zn={...Gn,environment:"test",configMismatchThreshold:2,wardenConfigURLs:["https://ava-warden-bucket.s3.eu-central-1.amazonaws.com/bridge_settings.json","https://ava-warden-testnet.s3.us-west-1.amazonaws.com/bridge_settings.json","https://assets.warden-testnet.avalanche.protofire.io/bridge_settings.json","https://avalabs-warden-test-blob.s3.amazonaws.com/bridge_settings.json","https://avawarden.s3.amazonaws.com/bridge_settings.json","https://blob-storage-testnet.warden-avascan.info/bridge_settings.json","https://chainstack-ava-warden-testnet.s3.us-west-2.amazonaws.com/bridge_settings.json","https://em-warden-testnet.enclave-warden.com/bridge_settings.json"]},Gi={...zn,environment:"production",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.json",wardenConfigURLs:["https://ava-warden-bucket-prod.s3.eu-central-1.amazonaws.com/bridge_settings.json","https://ava-warden-mainnet.s3.us-west-1.amazonaws.com/bridge_settings.json","https://assets.warden-mainnet.avalanche.protofire.io/bridge_settings.json","https://avawarden-prod.s3.amazonaws.com/bridge_settings.json","https://blob-storage-mainnet.warden-avascan.info/bridge_settings.json","https://chainstack-ava-warden-mainnet.s3.us-west-2.amazonaws.com/bridge_settings.json","https://em-warden-mainnet.enclave-warden.com/bridge_settings.json","https://warden-avax-storage.s3.amazonaws.com/bridge_settings.json"],disabledTokensOnNetwork:{avalanche:[],ethereum:["CRV"]}},zi={production:Gi,staging:Gn,test:zn,dev:Un},Ze=e=>zi[e];var Xi=async e=>{let t=[];e.forEach(i=>t.push(fetch(i)));let r=await Promise.allSettled(t),n=[];for(let i of r)if(!(i.status==="rejected"||!i.value||!i.value.ok))try{let o=await i.value.json(),s=wn.parse(o);n.push(s);}catch(o){console.error(o);}return n},qi=e=>e.map(t=>{if(t.critical.disableFrontend)throw new S("CONFIG_NOT_AVAILABLE","Disable frontend");let r=e.reduce((n,i)=>n+(lodash.isEqual(t.critical,i.critical)?1:0),0);return {config:t,count:r}}),Qe=lodash.memoize(async e=>{let t=e.wardenConfigURLs,r=await Xi(t),n=qi(r),i=lodash.maxBy(n,o=>o.count);if(!i||i.count<e.wardenConfigURLs.length-e.configMismatchThreshold)throw new S("WARDEN_CONFIG_MISMATCH","Warden config mismatch");return i.config});var Wn=async e=>{let t=Ze(e),r=await Qe(t);return Ln(r,e)};function $n(e,t){let r="eip155:43113"===t.chainId||"eip155:11155111"===t.chainId,n=r?"eip155:43113":"eip155:43114",i=r?"eip155:11155111":"eip155:1";return viem.isAddressEqual(t.from,e.walletAddresses.ethereum)||viem.isAddressEqual(t.to,e.walletAddresses.avalanche)?{isBridgeTx:!0,sourceChainId:n,targetChainId:i,bridgeType:"avalanche-evm"}:viem.isAddressEqual(t.from,e.walletAddresses.avalanche)||viem.isAddressEqual(t.to,e.walletAddresses.ethereum)?{isBridgeTx:!0,sourceChainId:i,targetChainId:n,bridgeType:"avalanche-evm"}:{isBridgeTx:!1}}var jn=async(e,t)=>{let r=await Wn(e);return {type:"avalanche-evm",analyzeTx:n=>{try{return $n(r,Te(n))}catch{return {isBridgeTx:!1}}},estimateGas:n=>Rn(r,K(n)),estimateReceiveAmount:n=>Dn(r,K(n)),getAssets:()=>_n(r),getFees:n=>re(r,n),transferAsset:n=>Vn(r,ge(n),t),trackTransfer:n=>Mn(r,n),getMinimumTransferAmount:n=>qe(r,n)}};var Ct=e=>"wrapFeeEstimate"in e,ae=e=>"wrapFeeEstimate"in e||"unwrapFeeEstimate"in e;var Xn=(e,t)=>{let r=e.criticalBitcoin,n=r.bitcoinAssets.btc;if(!n)throw new S("CONFIG_NOT_AVAILABLE","Bitcoin asset info is missing from config");let i=e.nonCriticalBitcoin.networkInfo.btc;if(!i)throw new S("CONFIG_NOT_AVAILABLE","Bitcoin network info was not found.");let o=i.currentBridgeFeeEstimate,s=Ct(o)?{wrapFeeEstimate:o.wrapFeeEstimate}:{wrapFeeAmount:o.wrapFeeAmount},a=n.bech32AddressPrefix==="bc"?"bip122:000000000019d6689c085ae165831e93":"bip122:000000000933ea01ad0ee984209779ba",m={chainId:a,token:{name:n.tokenName,symbol:"BTC",decimals:8,type:"native"},target:{networkId:`eip155:${r.avalancheChainId}`,tokenAddress:n.wrappedContractAddress},bridgeFeeEstimate:s},p=Ct(o)?{unwrapFeeEstimate:o.unwrapFeeEstimate}:{constUnwrapFeeAmount:o.constUnwrapFeeAmount,unwrapFeeNumerator:o.unwrapFeeNumerator,unwrapFeeDenominator:o.unwrapFeeDenominator},c={chainId:`eip155:${r.avalancheChainId}`,token:{name:n.tokenName,symbol:"BTC.b",decimals:8,type:"erc20",address:n.wrappedContractAddress},target:{networkId:a},bridgeFeeEstimate:p};return {addressBlocklist:e.criticalBitcoin.addressBlocklist,environment:t,dustThreshold:o.dustThreshold,minimumOnboardSize:i.minimumOnboardSize,minimumConfirmations:{bitcoin:i.minimumConfirmations,avalanche:e.nonCritical.minimumConfirmations.avalanche??1},nativeTokenConfig:{bitcoinToken:m,avalancheToken:c},walletAddresses:{bitcoin:r.walletAddresses.btc,avalanche:r.walletAddresses.avalanche}}};var et=async e=>{try{let t=Ze(e),r=await Qe(t);return Xn(r,e)}catch{throw new S("CONFIG_NOT_AVAILABLE")}};function Kn(e,t){let{chainId:r,from:n,to:i,tokenTransfers:o}=t,s=De(r),a=je(r);if(!s&&!a)return {isBridgeTx:!1};let m=Xe(r),p=m?"eip155:43113":"eip155:43114",c=m?"bip122:000000000933ea01ad0ee984209779ba":"bip122:000000000019d6689c085ae165831e93",d=a&&lodash.isEqual(i.toLowerCase(),e.walletAddresses.bitcoin.toLowerCase())&&o.some(f=>f.symbol==="BTC");return s&&lodash.isEqual(n,e.walletAddresses.avalanche)&&o.some(f=>f.symbol==="BTC.b"&&f.from===M)||d?{isBridgeTx:!0,sourceChainId:c,targetChainId:p,bridgeType:"avalanche-btc-ava"}:{isBridgeTx:!1}}var Jn=zod.z.object({txHash:zod.z.string(),txHex:zod.z.optional(zod.z.string()),index:zod.z.number(),value:zod.z.number(),script:zod.z.string(),blockHeight:zod.z.number(),confirmations:zod.z.number()}),Zn=zod.z.array(Jn);Jn.extend({script:zod.z.optional(zod.z.string())});var Ki=zod.z.object({address:zod.z.string(),value:zod.z.number()}),Qn=zod.z.array(Ki);function Zi(e){let t=[];return e.filter(r=>{let n=r.txHash+r.index.toString();return t.includes(n)?!1:(t.push(n),!0)})}async function tt(e,t,r,n,i,o){let s=Zi(i),a=[{address:e,value:Number(r)}],{inputs:m,outputs:p,fee:c}=Ji__default.default(s,a,n);if(typeof c!="number")throw new l("UNKNOWN","Unable to choose utxo properly");if(!m||!p||!p.length)return {fee:c};let d=await o.getScriptsForUtxos(m),u=Zn.parse(d),f=[p[0]],y=p[1];y&&f.push({address:t,value:y.value});let g=Qn.parse(f);return {inputs:u,outputs:g,fee:c}}var Yi=(e,t)=>[{source:"bip122:000000000019d6689c085ae165831e93",target:"eip155:43114"},{source:"bip122:000000000933ea01ad0ee984209779ba",target:"eip155:43113"}].some(({source:n,target:i})=>n===e.chainId&&i===t.chainId),eo=(e,t)=>lodash.isEqual(e,Ee(t)),U=(e,t)=>{let{sourceChain:r,targetChain:n,amount:i,asset:o}=e;if(!Yi(r,n))throw new l("INVALID_PARAMS","SourceChain and TargetChain combination is not valid");if(i<=0n)throw new l("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let s=t.nativeTokenConfig.bitcoinToken;if(!eo(s.token,o))throw new l("ASSET_NOT_SUPPORTED","Incorrect Asset was provided");return {source:s,target:t.nativeTokenConfig.avalancheToken,btcToAva:!0}};async function Yn(e,t,r){let{fromAddress:n,sourceChain:i,targetChain:o,asset:s,amount:a}=t;U({sourceChain:i,targetChain:o,asset:s,amount:a},e);let m=e.walletAddresses.bitcoin,p=1,{utxos:c}=await r.getUtxoBalance(n,!1),{fee:d}=await tt(m,n,a,p,c,r);return BigInt(d)}async function ie(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:o}=t,{source:s,target:a}=U({sourceChain:r,targetChain:n,amount:i,asset:o},e);if(ae(s.bridgeFeeEstimate)){let m=be(i,s.bridgeFeeEstimate.wrapFeeEstimate);return {[a.chainId]:{[a.token.address]:m}}}return {[a.chainId]:{[a.token.address]:BigInt(s.bridgeFeeEstimate.wrapFeeAmount)}}}async function er(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o}=t,{target:s}=U({sourceChain:r,targetChain:n,asset:i,amount:o},e),a=await ie(e,t);return {asset:s.token,amount:t.amount-(a[s.chainId]?.[s.token.address]??0n)}}function tr(e){let t=e.nativeTokenConfig.bitcoinToken,r={...t.token,destinations:{[t.target.networkId]:["avalanche-btc-ava"]}};return {[t.chainId]:[r]}}async function nr(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:o}=t,s=U({sourceChain:r,targetChain:n,amount:i,asset:o},e),a=await to(e,t,s),m=e.minimumOnboardSize;return BigInt(Math.max(a*4,m))}async function to(e,t,{source:r,target:n}){if(ae(r.bridgeFeeEstimate))return Number(r.bridgeFeeEstimate.wrapFeeEstimate.minimumFeeAmount);{let i=await ie(e,t);return Number(i[n.chainId]?.[n.token.address])}}var rr=({targetClient:e,checkMetadata:t,trackingParams:{bridgeTransfer:r,updateListener:n},trackingConfig:{trackingLimitMs:i},bitcoinFunctions:o})=>{let s=lodash.cloneDeep(r);return async m=>{let{sourceTxHash:p}=r;if(s.completedAt||t(s.metadata))return m(s);if(s.sourceStartedAt+i<=Date.now())return s=h(s,{completedAt:Date.now(),errorCode:5004},n),m(s);let{confirmations:c,fees:d}=await o.getTransaction(p);if(!s.sourceNetworkFee){let y=BigInt(Math.ceil(d));s=h(s,{sourceNetworkFee:y},n);}let u=c>s.sourceConfirmationCount,f=c>=s.sourceRequiredConfirmationCount;if(u){let y={};y.sourceConfirmationCount=Number(c),f||(y.targetStartBlockNumber=await e.getBlockNumber()),s=h(s,y,n);}if(f)return s.targetStartBlockNumber||(s=h(s,{targetStartBlockNumber:await e.getBlockNumber()},n)),s=h(s,{targetStartedAt:Date.now(),metadata:{transactionHash:p}},n),m(s)}};var or=({targetClient:e,getTargetTxHash:t,checkMetadata:r,trackingParams:{bridgeTransfer:n,updateListener:i},trackingConfig:{trackingLimitMs:o,maxBlocks:s}})=>{if(!n.completedAt&&!r(n.metadata))throw new l("INVALID_PARAMS","metadata is missing");if(!n.targetStartBlockNumber)throw new l("INVALID_PARAMS","targetStartBlockNumber is missing");let a=lodash.cloneDeep(n);return async p=>{if(a.completedAt)return p(a);if(a.sourceStartedAt+o<=Date.now())return a=h(a,{completedAt:Date.now(),errorCode:5004},i),p(a);if(!a.targetStartBlockNumber)throw new Error("unreachable");if(!a.targetTxHash){let y=await e.getBlockNumber(),g=a.targetStartBlockNumber-s,C=g>=0n?g:"earliest",b=a.targetStartBlockNumber+s,A=b<y?b:"latest",w=await t({fromBlock:C,toBlock:A,metadata:a.metadata});if(w)a=h(a,{targetTxHash:w},i);else {a=h(a,{targetStartBlockNumber:y},i);return}}if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let c=await e.getTransactionReceipt({hash:a.targetTxHash});if(!a.targetNetworkFee){let y=await e.getTransaction({hash:a.targetTxHash}),g=te(y,c);g&&(a=h(a,{targetNetworkFee:g},i));}if(c.status==="reverted")return a=h(a,{completedAt:Date.now(),errorCode:5005},i),p(a);if(lodash.isNil(a.targetTxHash)||!viem.isHash(a.targetTxHash))return;let d=await e.getTransactionConfirmations({hash:a.targetTxHash}),u=d>a.targetConfirmationCount,f=d>=a.targetRequiredConfirmationCount;if(u&&(a=h(a,{targetConfirmationCount:Number(d)},i)),!!f)return a=h(a,{completedAt:Date.now()},i),p(a)}};var ht=e=>lodash.isObject(e)&&!!e.transactionHash,sr=({transferData:{target:e},targetClient:t})=>async({fromBlock:r,toBlock:n,metadata:i})=>{if(!r)return;let o=e.token.address,s={inputs:[{indexed:!1,name:"to",type:"address"},{indexed:!1,name:"amount",type:"uint256"},{indexed:!1,name:"feeAddress",type:"address"},{indexed:!1,name:"feeAmount",type:"uint256"},{indexed:!1,name:"originTxId",type:"bytes32"},{indexed:!1,name:"originOutputIndex",type:"uint256"}],name:"Mint",type:"event"},m=(await t.getLogs({address:o,event:s,fromBlock:r,toBlock:n})).find(p=>gt(p)&&p.args.originTxId===`0x${i?.transactionHash}`);if(!lodash.isNil(m))return m.transactionHash};var oo=async(e,t)=>{let{targetChain:r}=e.bridgeTransfer,n=E({chain:r}),i=rr({targetClient:n,trackingParams:e,trackingConfig:x,checkMetadata:ht,bitcoinFunctions:t});return _({promise:i,delay:1e3*60,startAfter:x.initialDelayMs})},so=async(e,t)=>{let{bridgeTransfer:r}=e,n=E({chain:r.targetChain}),i=sr({transferData:t,targetClient:n}),o=or({targetClient:n,getTargetTxHash:i,checkMetadata:ht,trackingParams:e,trackingConfig:x});return _({promise:o,delay:2e3,startAfter:x.initialDelayMs})};function mr(e,t,r){let n,i=()=>{n?.();};return {result:(async()=>{let{bridgeTransfer:s}=t,{targetChain:a,sourceChain:m,asset:p,amount:c}=s,d=U({sourceChain:m,targetChain:a,asset:p,amount:c},e),{result:u,cancel:f}=await oo(t,r);n=f;let y=await u,{result:g,cancel:C}=await so({...t,bridgeTransfer:y},d);return n=C,g})(),cancel:i}}var pr=async({config:e,amount:t,fromAddress:r,sign:n,onStepChange:i,bitcoinFunctions:o,gasSettings:s})=>{let a=s?Number(s.price):void 0,{low:m,high:p}=a?{low:a,high:a}:await o.getFeeRates(),c=e.environment==="production"?p:m,{utxos:d}=await o.getUtxoBalance(r,!1),u=e.walletAddresses.bitcoin,{inputs:f,outputs:y}=await tt(u,r,t,c,d,o);if(!f||!y)throw new l("INVALID_PARAMS","Unable to create transaction");let g={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};return i?.(g),await n({inputs:f,outputs:y},o.issueRawTx,g)};async function cr(e,t,r,n){let{fromAddress:i,toAddress:o,sourceChain:s,targetChain:a,asset:m,amount:p,onStepChange:c,gasSettings:d}=t;Be([i,o],e.addressBlocklist);let{target:u}=U({sourceChain:s,targetChain:a,asset:m,amount:p},e),f=Date.now(),g=(await ie(e,{asset:m,amount:p,sourceChain:s,targetChain:a}))[u.chainId]?.[u.token.address]??0n,C=e.minimumConfirmations.bitcoin,b=await pr({config:e,amount:p,sign:r.sign,onStepChange:c,fromAddress:i,bitcoinFunctions:n,gasSettings:d}),A=E({chain:a}),w;try{w=await A.getBlockNumber();}catch(N){console.error(N);}return {type:"avalanche-btc-ava",environment:e.environment,fromAddress:i,toAddress:o,amount:t.amount,asset:m,bridgeFee:g,sourceChain:s,sourceStartedAt:f,sourceTxHash:b,sourceConfirmationCount:0,sourceRequiredConfirmationCount:C,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:w}}var dr=({fromAddress:e,toAddress:t,sourceChain:r,...n})=>{if(!viem.isAddress(t))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid toAddress was provided");let i=ne(r);if(!Ne(e,i))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided: Make sure it is Btc Address from correct environment");return {fromAddress:e,toAddress:t,sourceChain:r,...n}},Et=({fromAddress:e,sourceChain:t,...r})=>{let n=ne(t);if(!Ne(e,n))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided: Make sure it is Btc Address from correct environment");return {fromAddress:e,sourceChain:t,...r}};var ur=async(e,t,r)=>{let n=await et(e);return {type:"avalanche-btc-ava",analyzeTx:i=>Kn(n,i),estimateGas:i=>Yn(n,Et(i),r),estimateReceiveAmount:i=>er(n,Et(i)),getAssets:()=>tr(n),getFees:i=>ie(n,i),transferAsset:i=>cr(n,dr(i),t,r),trackTransfer:i=>mr(n,i,r),getMinimumTransferAmount:i=>nr(n,i)}};function yr(e,t){let{chainId:r,from:n,to:i,tokenTransfers:o}=t,s=De(r),a=je(r);if(!s&&!a)return {isBridgeTx:!1};let m=Xe(r),p=m?"eip155:43113":"eip155:43114",c=m?"bip122:000000000933ea01ad0ee984209779ba":"bip122:000000000019d6689c085ae165831e93",d=s&&lodash.isEqual(i.toLowerCase(),e.nativeTokenConfig.avalancheToken.token.address.toLowerCase())&&o.some(f=>f.to?.toLowerCase()===M.toLowerCase()&&f.symbol==="BTC.b"),u=a&&lodash.isEqual(n.toLowerCase(),e.walletAddresses.bitcoin.toLowerCase())&&o.some(f=>f.symbol==="BTC");return d||u?{isBridgeTx:!0,sourceChainId:p,targetChainId:c,bridgeType:"avalanche-ava-btc"}:{isBridgeTx:!1}}var co=(e,t)=>[{source:"eip155:43114",target:"bip122:000000000019d6689c085ae165831e93"},{source:"eip155:43113",target:"bip122:000000000933ea01ad0ee984209779ba"}].some(({source:n,target:i})=>n===e.chainId&&i===t.chainId),uo=(e,t)=>lodash.isEqual(e,Ee(t)),G=(e,t)=>{let{sourceChain:r,targetChain:n,amount:i,asset:o}=e;if(!co(r,n))throw new l("INVALID_PARAMS","SourceChain and TargetChain combination is not valid");if(i<=0n)throw new l("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let s=t.nativeTokenConfig.avalancheToken;if(!uo(s.token,o))throw new l("ASSET_NOT_SUPPORTED","Incorrect Asset was provided");return {source:s,target:t.nativeTokenConfig.bitcoinToken,btcToAva:!1}};async function lr(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o,fromAddress:s}=t,{source:a}=G({sourceChain:r,targetChain:n,asset:i,amount:o},e);return await E({chain:r}).estimateContractGas({address:a.token.address,abi:Ce,functionName:"unwrap",account:s,args:[o,0]})}async function oe(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:o}=t,{source:s}=G({sourceChain:r,targetChain:n,amount:i,asset:o},e);if(ae(s.bridgeFeeEstimate)){let{constAmount:a,numeratorPerSat:m,denominatorPerSat:p}=s.bridgeFeeEstimate.unwrapFeeEstimate.estimatedTxFee,c=a+m/p*Number(i),d=be(i,s.bridgeFeeEstimate.unwrapFeeEstimate.bridgeToll),u=BigInt(Math.ceil(c))+d;return {[n.chainId]:{NATIVE:BigInt(u)}}}else {let{constUnwrapFeeAmount:a,unwrapFeeNumerator:m,unwrapFeeDenominator:p}=s.bridgeFeeEstimate,c=a+m/p*Number(i),d=BigInt(Math.ceil(c));return {[n.chainId]:{NATIVE:BigInt(d)}}}}async function Tr(e,t){let{sourceChain:r,targetChain:n,asset:i,amount:o}=t,{target:s}=G({sourceChain:r,targetChain:n,asset:i,amount:o},e),a=await oe(e,{sourceChain:r,targetChain:n,amount:o,asset:i});return {asset:s.token,amount:t.amount-(a[s.chainId]?.NATIVE??0n)}}function gr(e){let t=e.nativeTokenConfig.avalancheToken,r={...t.token,destinations:{[t.target.networkId]:["avalanche-ava-btc"]}};return {[t.chainId]:[r]}}async function Ar(e,t){let{sourceChain:r,targetChain:n,amount:i,asset:o}=t,s=G({sourceChain:r,targetChain:n,amount:i,asset:o},e),a=await fo(e,t,s),m=e.dustThreshold;return BigInt(Math.ceil((a+m)*2))}async function fo(e,t,{source:r}){if(ae(r.bridgeFeeEstimate)){let{constAmount:n,numeratorPerSat:i,denominatorPerSat:o}=r.bridgeFeeEstimate.unwrapFeeEstimate.estimatedTxFee,s=n+i/o*Number(t.amount);return Number(r.bridgeFeeEstimate.unwrapFeeEstimate.bridgeToll.minimumFeeAmount)+s}else {let n=await oe(e,t);return Number(n[t.targetChain.chainId]?.NATIVE)}}var hr=({sourceClient:e,getMetadata:t,checkMetadata:r,trackingParams:{bridgeTransfer:n,updateListener:i},trackingConfig:{trackingLimitMs:o},bitcoinFunctions:s})=>{let a=lodash.cloneDeep(n);return async p=>{if(a.completedAt||r(a.metadata))return p(a);if(a.sourceStartedAt+o<=Date.now())return a=h(a,{completedAt:Date.now(),errorCode:5004},i),p(a);if(!viem.isHash(a.sourceTxHash))return;let c=await e.getTransactionReceipt({hash:a.sourceTxHash});if(!a.sourceNetworkFee){let g=await e.getTransaction({hash:a.sourceTxHash}),C=te(g,c);C&&(a=h(a,{sourceNetworkFee:C},i));}if(c.status==="reverted")return a=h(a,{completedAt:Date.now(),errorCode:5005},i),p(a);if(!viem.isHash(a.sourceTxHash))return;let d=await e.getTransactionConfirmations({hash:a.sourceTxHash}),u=d>a.sourceConfirmationCount,f=d>=a.sourceRequiredConfirmationCount;if(u){let g={};g.sourceConfirmationCount=Number(d),f||(g.targetStartBlockNumber=BigInt(await s.getChainHeight())),a=h(a,g,i);}if(!f)return;a.targetStartBlockNumber||(a=h(a,{targetStartBlockNumber:BigInt(await s.getChainHeight())},i));let y=t(c);return a=h(a,{targetStartedAt:Date.now(),metadata:y},i),p(a)}};var Er=({trackingParams:{bridgeTransfer:e,updateListener:t},trackingConfig:{trackingLimitMs:r},config:n,bitcoinFunctions:i})=>{let{toAddress:o,targetStartBlockNumber:s,amount:a}=e;if(!e.targetStartBlockNumber)throw new l("INVALID_PARAMS","targetStartBlockNumber is missing");let m=lodash.cloneDeep(e);return async c=>{if(m.completedAt)return c(m);if(m.sourceStartedAt+r<=Date.now())return m=h(m,{completedAt:Date.now(),errorCode:5004},t),c(m);if(!m.targetStartBlockNumber)throw new Error("unreachable");let d;if(!m.targetTxHash){let{confirmed:f,unconfirmed:y}=await i.getUTXOs(o,!1),C=[...f.filter(b=>!s||b.blockHeight>=s).sort((b,A)=>b.blockHeight-A.blockHeight),...y];for(let b of C){if(d=await i.getTransaction(b.txHash),!d)return;if(d.addresses.includes(n.walletAddresses.bitcoin)){m=h(m,{targetTxHash:d.hash,targetNetworkFee:BigInt(d.fees),targetConfirmationCount:d.confirmations},t);let w=d.outputs.find(N=>N.addresses?.length===1&&N.addresses[0]===o),I=w&&BigInt(Math.ceil(Number(a)-w.value));I&&(m=h(m,{bridgeFee:I},t));break}}if(!m.targetTxHash)return}if(d||(d=await i.getTransaction(m.targetTxHash)),!d)return;if(d.confirmations>=m.targetRequiredConfirmationCount)return m=h(m,{completedAt:Date.now(),targetConfirmationCount:d.confirmations},t),c(m)}};var To=async(e,t)=>{let{sourceChain:r}=e.bridgeTransfer,n=E({chain:r}),i=Ke(),o=hr({sourceClient:n,getMetadata:i,checkMetadata:Pe,trackingParams:e,trackingConfig:x,bitcoinFunctions:t});return _({promise:o,delay:2e3,startAfter:x.initialDelayMs})},go=async(e,t,r)=>{let n=Er({trackingParams:t,trackingConfig:x,config:e,bitcoinFunctions:r});return _({promise:n,delay:1e3*60,startAfter:x.initialDelayMs})};function br(e,t,r){let n,i=()=>{n?.();};return {result:(async()=>{let{bridgeTransfer:s}=t,{targetChain:a,sourceChain:m,asset:p,amount:c}=s;G({sourceChain:m,targetChain:a,asset:p,amount:c},e);let{result:d,cancel:u}=await To(t,r);n=u;let f=await d,{result:y,cancel:g}=await go(e,{...t,bridgeTransfer:f},r);return n=g,y})(),cancel:i}}async function Br(e,t,r,n){let{sourceChain:i,targetChain:o,asset:s,amount:a,fromAddress:m,toAddress:p,onStepChange:c,gasSettings:d}=t;Be([m,p],e.addressBlocklist);let{source:u}=G({sourceChain:i,targetChain:o,asset:s,amount:a},e),f=Date.now(),g=(await oe(e,{asset:s,amount:a,sourceChain:i,targetChain:o}))[o.chainId]?.NATIVE??0n,C=e.minimumConfirmations.avalanche,b=await Je({amount:a,source:u,sourceChain:i,fromAddress:m,sign:r.sign,onStepChange:c,gasSettings:d}),A=BigInt(await n.getChainHeight());return {type:"avalanche-ava-btc",environment:e.environment,fromAddress:m,toAddress:p,amount:t.amount,asset:s,bridgeFee:g,sourceChain:i,sourceStartedAt:f,sourceTxHash:b,sourceConfirmationCount:0,sourceRequiredConfirmationCount:C,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:A}}var Ir=({fromAddress:e,toAddress:t,targetChain:r,...n})=>{if(!viem.isAddress(e))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided");let i=ne(r);if(!Ne(t,i))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid toAddress was provided: Make sure it is Btc Address from correct environment");return {fromAddress:e,toAddress:t,targetChain:r,...n}},bt=({fromAddress:e,targetChain:t,...r})=>{if(!viem.isAddress(e))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided");return {fromAddress:e,targetChain:t,...r}};var kr=async(e,t,r)=>{let n=await et(e);return {type:"avalanche-ava-btc",analyzeTx:i=>yr(n,i),estimateGas:i=>lr(n,bt(i)),estimateReceiveAmount:i=>Tr(n,bt(i)),getAssets:()=>gr(n),getFees:i=>oe(n,i),transferAsset:i=>Br(n,Ir(i),t,r),trackTransfer:i=>br(n,i,r),getMinimumTransferAmount:i=>Ar(n,i)}};var fe=e=>{let t=n=>(...i)=>{console[n](`[${e}]`,...i);};return {log:t("log"),info:t("info"),error:t("error"),warn:t("warn")}};var Bt="test",xr=6,rt=1,at={dev:sdk.Env.dev,test:sdk.Env.ibc,staging:sdk.Env.stage,production:sdk.Env.prod},wr=2e-4,Ao=6,Nr=e=>{switch(e){case"lombard-btcb-to-btc":return Ao;default:return}};var ve={type:"native",name:"Bitcoin",symbol:"BTC",decimals:8},Co={[sdk.Env.dev]:{43113:"0x7FbdC44BfEBDe80C970ba622B678daB36cee31f6"},[sdk.Env.ibc]:{43113:"0x71ba2b8dc58e7ca1b6d81a60729e31aefa37ae02"},[sdk.Env.testnet]:{43113:"0xB14f240714Bd23Bda103A7189D512A90326E4D01"},[sdk.Env.stage]:{43113:"0x0000000000000000000000000000000000000000"},[sdk.Env.prod]:{43114:"0x152b9d0FdC40C096757F570A51E494bd4b943E50"}},it=(e,t)=>{let r=Co[t]?.[e];if(!r)throw new Error(`No BTCb address configured for env: ${t}, chainId: ${e}`);return {type:"erc20",name:"Bitcoin",symbol:"BTC.b",decimals:8,address:r}};async function ot(e,t,r,n){let i=0n,o=0n,s=0n;try{let a=await sdk.getMintingFee({token:e,chainId:t,env:r});i=BigInt(sdk.toBaseDenomination(a,8).toFixed());}catch(a){n?.error("unable to fetch the minting fee:",a);}try{let a=await sdk.getRedeemFee({token:e,chainId:t,env:r});o=BigInt(sdk.toBaseDenomination(a,8).toFixed());}catch(a){n?.error("unable to fetch the redeem fee:",a);}try{let a=await sdk.getMinRedeemAmount({token:e,chainId:t,env:r});s=BigInt(sdk.toBaseDenomination(a,8).toFixed());}catch(a){n?.error("unable to fetch the min redeem amount:",a);}return {mintingFee:i,redeemFee:o,minRedeemAmount:s}}function Ie(e){let{namespace:t,reference:r}=B.toJSON(e);if(t!=="eip155")throw new Error("Invalid namespace provided.");return Number(r)}function Sr(e,t){return {isBridgeTx:!1}}async function Rr(e,t){return 0n}async function Dr(e,t){return {asset:e.targetAsset,amount:t.amount-e.mintingFee}}function _r(e){return {[e.sourceChain]:[{...ve,destinations:{[e.targetChain]:["lombard-btc-to-btcb"]}}]}}async function Pr(e,t){return {[e.targetChain]:{[e.targetAsset.address]:e.mintingFee}}}async function Fr(e,t){return BigInt(sdk.toBaseDenomination(wr,ve.decimals).toFixed())}var Mr=e=>e.notarizationStatus===sdk.ENotarizationStatus.NOTARIZATION_STATUS_FAILED||e.sessionState===sdk.ESessionState.SESSION_STATE_EXPIRED,Or=(e,t,r)=>{let n=t!==void 0&&e?.notarizationStatus!==t,i=r!==void 0&&e?.sessionState!==r;return {needsNotarizationUpdate:n,needsSessionStateUpdate:i}};var Vr=(e,t,r)=>({bridgeTransfer:n,updateListener:i})=>{let o=fe(e),s=()=>{},a=E({chain:n.targetChain}),m=lodash.cloneDeep(n);return {cancel:s,result:(async()=>{if(m.completedAt)return m;let{confirmations:c,fees:d}=await t.getTransaction(m.sourceTxHash);if(m.sourceNetworkFee||(m=h(m,{sourceNetworkFee:BigInt(Math.ceil(d))},i)),c>m.sourceConfirmationCount&&(m=h(m,{sourceConfirmationCount:c},i)),c>m.sourceRequiredConfirmationCount){let y=await a.getBlockNumber();m=h(m,{targetStartBlockNumber:y},i);}let f=(await sdk.getDepositsByAddress({address:m.toAddress,env:r})).find(y=>y.txHash.toLowerCase()===m.sourceTxHash.toLowerCase());if(f){let y=f.claimTxHash,g,C,b,{needsNotarizationUpdate:A,needsSessionStateUpdate:w}=Or(m.metadata,f.notarizationStatus,f.sessionState);if(A||w){let I={...m.metadata};A&&(I.notarizationStatus=f.notarizationStatus),w&&(I.sessionState=f.sessionState),m=h(m,{metadata:I},i);}if(Mr(f)&&(o.warn(`The deposit ${n.sourceTxHash} for ${n.toAddress} could not be completed, try to mint manually or contact support.`),m=h(m,{completedAt:Date.now(),errorCode:5006},i)),y){let I=await a.waitForTransactionReceipt({hash:y});g=BigInt(I.gasUsed??0n)*BigInt(I.effectiveGasPrice??0n),C=Number(await a.getTransactionConfirmations({transactionReceipt:I}));let{timestamp:N}=await a.getBlock({blockNumber:I.blockNumber});b=Number(N),m=h(m,{targetTxHash:y,targetNetworkFee:g,targetConfirmationCount:C,completedAt:b},i);}}return m})()}},Lr=(e,t,r)=>({bridgeTransfer:n,updateListener:i})=>{let o=fe(e),s=()=>{},a=E({chain:n.sourceChain}),m=lodash.cloneDeep(n);return {cancel:s,result:(async()=>{if(m.completedAt)return m;let c=await a.waitForTransactionReceipt({hash:m.sourceTxHash}),d=Number(await a.getTransactionConfirmations({transactionReceipt:c}));if(d>m.sourceConfirmationCount&&(m=h(m,{sourceConfirmationCount:d},i)),!m.sourceNetworkFee){let y=BigInt(c.gasUsed??0n)*BigInt(c.effectiveGasPrice??0n);m=h(m,{sourceNetworkFee:y},i);}let f=(await sdk.getUnstakesByAddress({address:m.fromAddress,env:r})).find(y=>y.txHash.toLowerCase()===m.sourceTxHash.toLowerCase());if(f&&f.payoutTxHash&&(o.info(`found payout tx hash: ${f.payoutTxHash}`),m=h(m,{targetTxHash:f.payoutTxHash},i)),m.targetTxHash){let g=(await t.getTransaction(m.targetTxHash)).confirmations;g>m.targetConfirmationCount&&(m=h(m,{targetConfirmationCount:g},i)),g>=m.targetRequiredConfirmationCount&&(m=h(m,{completedAt:Date.now()},i));}return m})()}};var wo=1e3*30;function Ur(e,t,r){let n=Vr("lombard-btc-to-btcb",r,e.env);return _({promise:(o=>{let s=o.bridgeTransfer;return async a=>{let{result:m}=n({...o,bridgeTransfer:s});if(s=await m,s.completedAt)return a(s)}})(t),delay:wo,startAfter:x.initialDelayMs})}function So(e){return e.toLowerCase().startsWith("tb1")||e.toLowerCase().startsWith("bc1")}function Ro(e){if(!So(e))return !1;try{return base.bech32.decode(e),!0}catch{return !1}}function Me(e,t){return Ro(e)?e.toLowerCase().startsWith(t?"bc":"tb"):!1}var Gr=zod.z.object({txHash:zod.z.string(),txHex:zod.z.optional(zod.z.string()),index:zod.z.number(),value:zod.z.number(),script:zod.z.string(),blockHeight:zod.z.number(),confirmations:zod.z.number()}),zr=zod.z.array(Gr);Gr.extend({script:zod.z.optional(zod.z.string())});var Do=zod.z.object({address:zod.z.string(),value:zod.z.number()}),Wr=zod.z.array(Do);function Po(e){let t=[];return e.filter(r=>{let n=r.txHash+r.index.toString();return t.includes(n)?!1:(t.push(n),!0)})}async function $r(e,t,r,n,i,o){let s=Po(i),a=[{address:e,value:Number(r)}],{inputs:m,outputs:p,fee:c}=Ji__default.default(s,a,n);if(typeof c!="number")throw new l("UNKNOWN","Unable to choose utxo properly");if(!m||!p||!p.length)return {fee:c};let d=await o.getScriptsForUtxos(m),u=zr.parse(d),f=[p[0]],y=p[1];y&&f.push({address:t,value:y.value});let g=Wr.parse(f);return {inputs:u,outputs:g,fee:c}}async function jr(e,t,{evmSigner:r,btcSigner:n,bitcoinFunctions:i,logger:o}){let s=E({chain:t.targetChain});if(o.log("transferAsset",t),!Me(t.fromAddress,e.environment==="production"))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid fromAddress was provided: Make sure it is Btc Address from correct environment");let a=t.toAddress,m=Ie(t.targetChain.chainId),p;try{o.info("trying to retrieve deposit address"),p=await sdk.getDepositBtcAddress({address:a,chainId:m,partnerId:Bt,env:e.env,token:e.targetToken}),o.info(`found BTC deposit address for ${a} on ${m}: ${p}`);}catch(N){o.info(`could not find deposit address for ${a} on ${m}.`),o.error(`error: ${N}`);}let c=p?1:2,d={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:c};if(!p){let N=`destination chain id is ${m}`,J=await r.signMessage({message:N,address:a,chainId:m},ye=>s.sendRawTransaction({serializedTransaction:ye}),d);o.info(`trying to generate BTC deposit address with destination address signature: ${J}`);try{if(p=await sdk.generateDepositBtcAddress({token:e.targetToken,address:a,chainId:m,signature:J,partnerId:Bt,env:e.env}),p===sdk.SANCTIONED_ADDRESS)throw new Error("Could not obtain BTC deposit address, the connected wallet is sanctioned.")}catch(ye){throw o.error(ye),ye}}if(o.info("btc deposit address",p),!Me(p,e.environment==="production"))throw new l("INCORRECT_ADDRESS_PROVIDED","Generated deposit address (toAddress) is invalid");let{low:u,high:f}=await i.getFeeRates(),y=e.environment==="production"?f:u,{utxos:g}=await i.getUtxoBalance(t.fromAddress,!1),{inputs:C,outputs:b}=await $r(p,t.fromAddress,t.amount,y,g,i);if(o.log("BTC tx data",{inputs:C,outputs:b}),!C||!b)throw new l("INVALID_PARAMS","Unable to create transaction");let A=Date.now();t?.onStepChange?.(d);let w=await n.sign({inputs:C,outputs:b},i.issueRawTx,d);o.log("sent BTC, tx hash:",w);let I;try{I=await E({chain:t.targetChain}).getBlockNumber();}catch(N){o.log(N);}return {type:"lombard-btc-to-btcb",environment:e.environment,fromAddress:t.fromAddress,toAddress:t.toAddress,amount:t.amount,asset:t.asset,bridgeFee:0n,sourceChain:t.sourceChain,sourceStartedAt:A,sourceTxHash:w,sourceConfirmationCount:0,sourceRequiredConfirmationCount:xr,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:rt,targetStartBlockNumber:I}}var qr=async(e,t,r,n)=>{let i=fe("lombard-btc-to-btcb"),o=at[e],s=o===sdk.Env.prod?"bip122:000000000019d6689c085ae165831e93":"bip122:000000000933ea01ad0ee984209779ba",a=o===sdk.Env.prod?"eip155:43114":"eip155:43113",m=Ie(a),p=sdk.Token.BTCb,c=it(m,o),d=await ot(p,m,o,i),u={environment:e,env:o,sourceChain:s,targetChain:a,targetChainId:m,targetAsset:c,targetToken:p,mintingFee:d.mintingFee};return {type:"lombard-btc-to-btcb",analyzeTx:f=>Sr(),estimateGas:f=>Rr(),estimateReceiveAmount:f=>Dr(u,f),getAssets:()=>_r(u),getFees:f=>Pr(u),transferAsset:f=>jr(u,f,{evmSigner:t,btcSigner:r,bitcoinFunctions:n,logger:i}),trackTransfer:f=>Ur(u,f,n),getMinimumTransferAmount:f=>Fr()}};function Kr(e,t){return {isBridgeTx:!1}}async function Jr(e,t){return 0n}async function Zr(e,t){return {asset:e.targetAsset,amount:t.amount-e.redeemFee}}function Qr(e){return {[e.sourceChain]:[{...e.sourceAsset,destinations:{[e.targetChain]:["lombard-btcb-to-btc"]}}]}}async function Yr(e,t){return {[e.targetChain]:{NATIVE:e.redeemFee}}}async function ea(e,t){return e.minRedeemAmount}var Vo=1e3*60;function ta(e,t,r){let n=Lr("lombard-btcb-to-btc",r,e.env);return _({promise:(o=>{let s=o.bridgeTransfer;return async a=>{let{result:m}=n({...o,bridgeTransfer:s});if(s=await m,s.completedAt)return a(s)}})(t),delay:Vo,startAfter:x.initialDelayMs})}function na(e){return {sign:async(t,r)=>{let n={currentSignature:1,currentSignatureReason:"tokens-transfer",requiredSignatures:1};return e.sign(t,r,n)}}}async function ra(e,t,{evmSigner:r,bitcoinFunctions:n,logger:i}){if(i.log("transferAsset",t),!Me(t.toAddress,e.environment==="production"))throw new l("INCORRECT_ADDRESS_PROVIDED","Invalid toAddress was provided: Make sure it is Btc Address from correct environment");let o=await sdk.redeemToken({account:t.fromAddress,btcAddress:t.toAddress,amount:sdk.fromBaseDenomination(Number(t.amount),e.sourceAsset.decimals),chainId:e.sourceChainId,signer:na(r),tokenIn:sdk.Token.BTCb,tokenOut:void 0,env:e.env}),s=Date.now(),a;try{a=BigInt(await n.getChainHeight());}catch(m){i.log(m);}return {type:"lombard-btcb-to-btc",environment:e.environment,fromAddress:t.fromAddress,toAddress:t.toAddress,amount:t.amount,asset:t.asset,bridgeFee:e.redeemFee,sourceChain:t.sourceChain,sourceStartedAt:s,sourceTxHash:o,sourceConfirmationCount:0,sourceRequiredConfirmationCount:rt,targetChain:t.targetChain,targetConfirmationCount:0,targetRequiredConfirmationCount:1,targetStartBlockNumber:a}}var ia=async(e,t,r,n)=>{let i=fe("lombard-btcb-to-btc");i.info("trying to initialise bridge");let o=at[e],s=o===sdk.Env.prod?"eip155:43114":"eip155:43113",a=o===sdk.Env.prod?"bip122:000000000019d6689c085ae165831e93":"bip122:000000000933ea01ad0ee984209779ba",m=Ie(s),p=it(m,o);i.info("initialising bridge with",{environment:e,env:o,evmSigner:t,bitcoinFunctions:n,tokenContractAddress:p.address});let c=await ot(sdk.Token.BTCb,m,o,i),d={environment:e,env:o,sourceChain:s,targetChain:a,sourceChainId:m,sourceAsset:p,targetAsset:ve,redeemFee:c.redeemFee,minRedeemAmount:c.minRedeemAmount};return {type:"lombard-btcb-to-btc",analyzeTx:u=>Kr(),estimateGas:u=>Jr(),estimateReceiveAmount:u=>Zr(d,u),getAssets:()=>Qr(d),getFees:u=>Yr(d),transferAsset:u=>ra(d,u,{evmSigner:t,bitcoinFunctions:n,logger:i}),trackTransfer:u=>ta(d,u,n),getMinimumTransferAmount:u=>ea(d)}};var st={"avalanche-btc-ava":ur,"avalanche-ava-btc":kr,"avalanche-evm":jn,cctp:Qt,"ictt-erc20-erc20":Bn,"lombard-btc-to-btcb":qr,"lombard-btcb-to-btc":ia},$o=async(e,t)=>{let r=await Promise.allSettled(t.map(async n=>{if(It(n)){let o=st[n.type];return [n.type,await o(e,n.evmSigner,n.btcSigner,n.bitcoinFunctions)]}if(kt(n)){let o=st[n.type];return [n.type,await o(e,n.signer,n.bitcoinFunctions)]}if(xt(n)){let o=st[n.type];return [n.type,await o(e,n.signer,n.bitcoinFunctions)]}let i=st[n.type];return [n.type,await i(e,n.signer)]}));return new Map(lodash.compact(r.map(n=>n.status==="fulfilled"?n.value:void 0)))},se=(e,t,r)=>{let n=t.destinations[r];for(let i of n??[]){let o=e.get(i);if(o)return {bridge:o,type:i}}throw new He};var VC=({environment:e,enabledBridgeServices:t})=>({canTransferAsset:(u,f)=>{try{return se(t,u,f),!0}catch{return !1}},environment:e,estimateGas:async u=>{let{bridge:f}=se(t,u.asset,u.targetChain.chainId);return f.estimateGas(u)},estimateReceiveAmount:async u=>{let{bridge:f}=se(t,u.asset,u.targetChain.chainId);return f.estimateReceiveAmount(u)},getAssets:()=>Array.from(t.values()).map(f=>f.getAssets()).reduce((f,y)=>{for(let[g,C]of Object.entries(y)){let b=f[g];if(b)for(let A of C){let w=b.findIndex(({symbol:I})=>I===A.symbol);w===-1?b.push(A):lodash.mergeWith(b[w],A,(I,N)=>{if(lodash.isArray(I))return [...new Set(I.concat(N))]});}else f[g]=C;}return f},{}),getFees:async u=>{let{bridge:f}=se(t,u.asset,u.targetChain.chainId);return f.getFees(u)},analyzeTx:u=>{let f=["avalanche-ava-btc","avalanche-btc-ava","avalanche-evm","ictt-erc20-erc20","cctp"].map(y=>t.get(y)).filter(y=>!!y);for(let y of f){let g=y.analyzeTx(u);if(g.isBridgeTx)return g}return {isBridgeTx:!1}},getMinimumTransferAmount:async u=>{let{bridge:f}=se(t,u.asset,u.targetChain.chainId);return f.getMinimumTransferAmount(u)},trackTransfer:u=>{let{bridge:f}=se(t,u.bridgeTransfer.asset,u.bridgeTransfer.targetChain.chainId);return f.trackTransfer(u)},transferAsset:async u=>{let{bridge:f}=se(t,u.asset,u.targetChain.chainId);return f.transferAsset(u)}});
17
+
18
+ exports.AVALANCHE_FUJI_CHAIN = Yo;
19
+ exports.AVALANCHE_MAINNET_CHAIN = es;
20
+ exports.AvalancheChainIds = X;
21
+ exports.BITCOIN_MAINNET_CHAIN = as;
22
+ exports.BITCOIN_TESTNET_CHAIN = rs;
23
+ exports.BTC_BRIDGE_TYPES = Ko;
24
+ exports.BitcoinChainIds = q;
25
+ exports.BridgeSignatureReason = Z;
26
+ exports.BridgeType = k;
27
+ exports.ETHEREUM_MAINNET_CHAIN = ns;
28
+ exports.ETHEREUM_SEPOLIA_CHAIN = ts;
29
+ exports.EVM_BRIDGE_TYPES = oa;
30
+ exports.Environment = $;
31
+ exports.ErrorCode = z;
32
+ exports.ErrorReason = v;
33
+ exports.EthereumChainIds = Oe;
34
+ exports.TokenType = j;
35
+ exports.caip2 = B;
36
+ exports.createUnifiedBridgeService = VC;
37
+ exports.getEnabledBridgeServices = $o;
38
+ exports.getEstimatedBridgingTime = Nr;
39
+ exports.isAvaToBtcBridgeInitializer = kt;
40
+ exports.isBtcToAvaBridgeInitializer = xt;
41
+ exports.isErc20Asset = W;
42
+ exports.isEvmBridgeInitializer = Jo;
43
+ exports.isLombardBridgeInitializer = It;
44
+ exports.isNativeAsset = le;
6
45
  //# sourceMappingURL=out.js.map
7
46
  //# sourceMappingURL=index.cjs.map