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