@avalabs/core-bridge-sdk 3.1.0-alpha.4 → 3.1.0-alpha.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -626,20 +626,22 @@ type TransferAssetEVMParams = {
626
626
  */
627
627
  declare function transferAssetEVM({ currentBlockchain, amount, account, asset, avalancheProvider, ethereumProvider, config, onStatusChange, onTxHashChange, signAndSendEVM, }: TransferAssetEVMParams): Promise<TxHash>;
628
628
 
629
- type BtcTransactionRequest = [
630
- toAddress: string,
631
- amount: string,
632
- feeRate: number
633
- ];
629
+ type BtcTransactionRequest = {
630
+ from: string;
631
+ to: string;
632
+ amount: number;
633
+ feeRate: number;
634
+ };
634
635
  type TransferAssetBTCParams = {
635
- amount: string;
636
+ fromAccount: string;
637
+ amount: number;
636
638
  feeRate: number;
637
639
  config: AppConfig;
638
640
  onStatusChange: (status: WrapStatus) => void;
639
641
  onTxHashChange: (txHash: string) => void;
640
642
  signAndSendBTC: (txParams: BtcTransactionRequest) => Promise<TxHash>;
641
643
  };
642
- declare const transferAssetBTC: ({ amount, feeRate, config, onStatusChange, onTxHashChange, signAndSendBTC, }: TransferAssetBTCParams) => Promise<string>;
644
+ declare const transferAssetBTC: ({ fromAccount, amount, feeRate, config, onStatusChange, onTxHashChange, signAndSendBTC, }: TransferAssetBTCParams) => Promise<string>;
643
645
 
644
646
  /**
645
647
  * Transfer from Avalanche to Ethereum or Bitcoin.
@@ -746,7 +748,11 @@ declare function useTransferAssetEVM(asset: Maybe<EthereumConfigAsset | NativeAs
746
748
  * Transfer Bitcoin asset to Avalanche.
747
749
  */
748
750
  declare function useTransferAssetBTC(signAndSendBTC: (txParams: BtcTransactionRequest) => Promise<TxHash>): {
749
- transferAsset: (amount: string, feeRate: number) => Promise<string> | undefined;
751
+ transferAsset: ({ fromAccount, amount, feeRate, }: {
752
+ fromAccount: string;
753
+ amount: number;
754
+ feeRate: number;
755
+ }) => Promise<string> | undefined;
750
756
  status: WrapStatus;
751
757
  txHash: string;
752
758
  };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var t=require("react"),e=require("@avalabs/core-utils-sdk"),n=require("bitcoinjs-lib"),a=require("big.js"),s=require("ethers"),r=require("@avalabs/core-wallets-sdk"),o=require("@avalabs/core-coingecko-sdk"),i=(t=>(t.AVALANCHE="avalanche",t.ETHEREUM="ethereum",t.BITCOIN="bitcoin",t.UNKNOWN="",t))(i||{}),c=(t=>(t.MAINNET="mainnet",t.TESTNET="testnet",t))(c||{}),u=(t=>(t.DEV="development",t.STAGING="staging",t.TEST="test",t.PROD="prod",t))(u||{}),d=(t=>(t[t.NATIVE=0]="NATIVE",t[t.ERC20=1]="ERC20",t[t.BTC=2]="BTC",t))(d||{});const p=process.env.ETHERSCAN_API_KEY||process.env.REACT_APP_ETHERSCAN_API_KEY,l=process.env.INFURA_API_KEY||process.env.REACT_APP_INFURA_API_KEY;let m;function f(t){if(t)return h[t];if(!m)throw new Error("No environment set, initialize by calling setBridgeEnvironment");return m}const y={environment:u.DEV,bridgeUrl:"http://localhost:3000",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"],avalancheNetworkConfig:{chainId:"0xa869",chainName:"Avalanche Fuji Testnet",nativeCurrency:{name:"Fuji",symbol:"AVAX",decimals:18},rpcUrls:["https://api.avax-test.network/ext/bc/C/rpc"],blockExplorerUrls:["https://subnets-test.avax.network/c-chain"]},ethereumNetworkConfig:{chainId:11155111,rpcUrls:[`https://sepolia.infura.io/v3/${l}`]},disabledTokensOnNetwork:{[i.AVALANCHE]:[],[i.ETHEREUM]:["FAU"]}},w={...y,environment:u.STAGING,bridgeUrl:"https://bridge.avax-test.network",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.test.json"},b={...w,environment:u.TEST,bridgeUrl:"https://bridge.avax-test.network",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.test.json",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"]},g={...b,environment:u.PROD,bridgeUrl:"https://bridge.avax.network",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.json",avalancheNetworkConfig:{chainId:"0xa86a",chainName:"Avalanche Mainnet C-Chain",nativeCurrency:{name:"AVAX",symbol:"AVAX",decimals:18},rpcUrls:["https://api.avax.network/ext/bc/C/rpc"],blockExplorerUrls:["https://subnets.avax.network/c-chain"]},ethereumNetworkConfig:{chainId:1,rpcUrls:[`https://mainnet.infura.io/v3/${l}`]},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:{[i.AVALANCHE]:[],[i.ETHEREUM]:["CRV"]}},h={[u.PROD]:g,[u.STAGING]:w,[u.TEST]:b,[u.DEV]:y};const T={},A=t.createContext(T),E=({children:n})=>{const[a,s]=t.useState();return t.useEffect((()=>{!async function(){const t=await async function(){try{const t=await e.promiseResolveWithBackoff((()=>fetch(f().tokenInfoUrl)),(()=>!1),0,10);return await t.json()}catch(t){return console.error(t),{}}}();s(t)}()}),[]),t.createElement(A.Provider,{value:a},n)};function C(){return t.useContext(A)}const v={ETH:{symbol:"ETH",tokenName:"Ether",assetType:d.NATIVE,nativeNetwork:i.ETHEREUM,wrappedAssetSymbol:"WETH",denomination:18,coingeckoId:"ethereum"}};function N(t){try{return n.address.fromBech32(t),!0}catch{return!1}}function I(t,e){return!!N(t)&&t.toLowerCase().startsWith(e?"bc":"tb")}function k(t){try{return n.address.fromBase58Check(t),!0}catch(t){return!1}}function x(t){return t.mul(1e8).toNumber()}function B(t){return new a(t).div(1e8)}const S=new a(10),M=new a(0),F=(t,{max:e,min:n})=>t.gt(e)?e:t.lt(n)?n:t;var R=(t=>(t[t.MAINNET=43114]="MAINNET",t[t.TESTNET=43113]="TESTNET",t))(R||{});const H=3;function O(t){return t.critical.networks.avalanche===R.MAINNET}function _(t,e){return JSON.stringify(U(t))!==JSON.stringify(U(e))}function U(t){if(!t.config)return;const{critical:e,criticalBitcoin:n}=t.config;return[e,n]}function V(t){return Boolean(t.critical.useNewFeeStructure)}function P(t){return Boolean(t.criticalBitcoin.useNewFeeStructure)}const L=new Intl.NumberFormat(void 0,{style:"currency",currency:"USD",currencyDisplay:"symbol",minimumFractionDigits:2,maximumFractionDigits:2}),D=({addressEVM:t,addressBTC:e,bridgeConfig:n})=>!(!t||!n.config?.critical.addressBlocklist.includes(t))||!(!e||!n.config?.criticalBitcoin.addressBlocklist.includes(e)),G=t=>t.assetType===d.NATIVE,j=t=>t.assetType===d.BTC,W=t=>t.assetType===d.ERC20;var z=[{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"}],$=[{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"}],q=[{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:[{internalType:"bool",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:[{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"}];function K(t,e,n=!1){return n&&e?function(t,e){return new s.JsonRpcSigner(t,e)}(t,e):t}function X(t,e,n,a,r=!1){if(!s.isAddress(t)||t===s.ZeroAddress)throw Error(`Invalid 'address' parameter '${t}'.`);return new s.Contract(t,e,K(n,a,r))}function J(t,e,n){const{minimumFeeAmount:s,maximumFeeAmount:r,feePercentage:o,feePercentageDecimals:i}=n,c=new a(s).div(S.pow(e)),u=new a(r).div(S.pow(e)),d=new a(o).div(S.pow(i)).div(100),p=t.mul(d);return F(p,{min:c,max:u})}function Y({source:t,config:e,amount:n}){if(!P(e))return Z(t,e,x(n));const{wrapFeeEstimate:s,unwrapFeeEstimate:r}=e.nonCriticalBitcoin.networkInfo.btc.currentBridgeFeeEstimate;if(t===i.BITCOIN)return J(n,8,s);const{constAmount:o,numeratorPerSat:c,denominatorPerSat:u}=r.estimatedTxFee,d=o+c/u*x(n),p=J(n,8,r.bridgeToll),l=new a(d).div(S.pow(8));return p.add(l)}function Z(t,e,n){const{constUnwrapFeeAmount:a,unwrapFeeNumerator:s,unwrapFeeDenominator:r,wrapFeeAmount:o}=e.nonCriticalBitcoin.networkInfo.btc.currentBridgeFeeEstimate;return t===i.BITCOIN?B(o):B(a+s/r*n)}function Q(t){const e=t.criticalBitcoin?.bitcoinAssets||{};return e[Object.keys(e)[0]]}function tt(t,e,n){const a=function(t,e,n){if(P(e)){const a=t===i.BITCOIN,{currentBridgeFeeEstimate:s}=e.nonCriticalBitcoin.networkInfo.btc;if(a)return Number(s.wrapFeeEstimate.minimumFeeAmount);const{constAmount:r,numeratorPerSat:o,denominatorPerSat:c}=s.unwrapFeeEstimate.estimatedTxFee,u=r+o/c*n;return Number(s.unwrapFeeEstimate.bridgeToll.minimumFeeAmount)+u}const a=Y({source:t,config:e,amount:B(n)});return x(a)}(t,e,n);if(t===i.BITCOIN){const t=e.nonCriticalBitcoin.networkInfo.btc.minimumOnboardSize;return Math.max(4*a,t)}{const{dustThreshold:t}=e.nonCriticalBitcoin.networkInfo.btc.currentBridgeFeeEstimate;return 2*(a+t)}}async function et(t,e){return e.getTransaction(t)}function nt(t,e){switch(t){case i.ETHEREUM:{const n={...e.critical.assets,ETH:v.ETH};return at(t,n),n}case i.AVALANCHE:{const n={...e.critical.assets,...nt(i.BITCOIN,e)};return at(t,n),n}case i.BITCOIN:{const t=Q(e);return t?{BTC:t}:{}}default:return{}}}function at(t,e){(f().disabledTokensOnNetwork[t]||[]).forEach((t=>delete e[t]))}const st=t.createContext({});function rt(){return t.useContext(st)}function ot(){const{bridgeConfig:t}=rt();return t}function it({source:t,config:e,asset:n,amount:a}){if(!V(e))return ct(t,e,n);const{wrapFeeApproximation:s,unwrapFeeApproximation:r}=e.nonCritical,{symbol:o,denomination:c}=n;return J(a,c,t===i.ETHEREUM?s[o]:r[o])}function ct(t,e,n){const{wrapFeeApproximation:s,unwrapFeeApproximation:r}=e?.nonCritical||{},o=n.symbol,c=t===i.ETHEREUM?s?.[o]:r?.[o];return new a(c||0).div(S.pow(n.denomination))}const ut=2048;async function dt(t,e,n,a,r,o){const c=r?.nativeNetwork===t?r?.nativeContractAddress:r?.wrappedContractAddress;if(!c||!o||!n)return;const u=t===i.AVALANCHE?q:z,d=new s.Contract(c,u,e),p=t===i.AVALANCHE?"0x0000000000000000000000000000000000000000":n.critical.walletAddresses.ethereum,l=d.filters.Transfer(p,a),m=await e.getBlockNumber();let f=o-5,y=Math.min(f+ut-1,m);for(;y<=m;){const t=await d.queryFilter(l,f,y);if(0===t.length){if(f=y+1,y=Math.min(f+ut-1,m),f>y)return;continue}const n=await t[0].getTransaction();if(!n||!n.blockNumber)return{error:"no transaction or block number"};return{transaction:n,block:await e.getBlock(n.blockNumber)}}}async function pt(t,e,n,a,s){const r={};for(const o in t){const i=t[o];let c=null;i.assetType===d.ERC20?c=await lt(i,e,n,a,s):G(i)?c=await mt(i,e,n,a):j(i)&&(c=await await lt(i,e,n,a,s)),null!==c&&(r[o]=c)}return r}async function lt(t,n,r,o,c){const u=n===i.AVALANCHE?q:z;if(t.nativeNetwork!==n&&t.wrappedNetwork!==n)return null;let p;if(c&&W(t)?p=t.deprecatedTokenContractAddress:W(t)?p=n===t.nativeNetwork?t.nativeContractAddress:t.wrappedContractAddress:t.assetType===d.BTC&&(p=t.wrappedContractAddress),!p)return null;const l=new s.Contract(p,u,r),[m,f]=await e.resolve(l.balanceOf(o)),y=t.denomination??18;return m?new a(s.formatUnits(m,y)):ft(f,(()=>lt(t,n,r,o,c)))}async function mt(t,n,r,o){if(t.nativeNetwork!==n||!r)return null;const[i,c]=await e.resolve(r.getBalance(o));return i?new a(s.formatUnits(i,t.denomination)):ft(c,(()=>mt(t,n,r,o)))}async function ft(t,n){return s.isError(t,"SERVER_ERROR")?(await e.wait(1e3+Math.floor(1e3*Math.random())),n()):(console.error(t),null)}function yt(t){return t===i.AVALANCHE?"AVAX":"ETH"}async function wt({currentBlockchain:t,balance:n,currentAsset:s,assets:r,provider:o,config:i}){const c=yt(t),u=r[s||""];if(!u)return null;if(G(u)&&u.symbol===c){const t=r[u.wrappedAssetSymbol];if(!t||t.assetType!==d.ERC20)return null;if(j(t))throw new Error("Unable to calculate BTC fee data with EVM provider.");const s=X(t.nativeContractAddress,$,o),c=await o.getFeeData(),p=await s.deposit.estimateGas({value:1}),[l,m]=await e.resolve(s.transfer.estimateGas(i.critical.walletAddresses.ethereum,1));m&&console.error(m);const f=new a(p.toString()).add(l?l.toString():0).times(c.gasPrice?.toString()??0).times(2).div(e.BIG_TEN.pow(u.denomination));return f.gte(n)?null:n.minus(f)}return n}var bt=(t=>(t[t.INITIAL=0]="INITIAL",t[t.WAITING_FOR_DEPOSIT_CONFIRMATION=1]="WAITING_FOR_DEPOSIT_CONFIRMATION",t[t.WAITING_FOR_DEPOSIT=2]="WAITING_FOR_DEPOSIT",t[t.WAITING_FOR_CONFIRMATION=3]="WAITING_FOR_CONFIRMATION",t[t.COMPLETE=4]="COMPLETE",t[t.VULNERABLE_ADDRESS=5]="VULNERABLE_ADDRESS",t))(bt||{});async function gt(t,n){if(!n)return;return t.gasPrice&&e.bigintToBig(t.gasPrice*n.gasUsed,18)}function ht(t,e){return e===i.AVALANCHE?t.avalancheProvider:t.ethereumProvider}async function Tt(t){const{amount:e,addressC:n,startBlockNumber:r,symbol:o,targetChain:c}=t.bridgeTransaction,u=ht(t,c),d=t.config,p=nt(c,t.config)[o],{error:l,transaction:m}=await dt(c,u,d,n,p,r)||{};if(l)throw l;if(m){const t=await u.getTransactionReceipt(m.hash),n=await async function(t,e,n){if(!n)return;const r=t===i.AVALANCHE?q:z,o=new s.Interface(r).parseLog({data:n.logs[0].data,topics:[...n.logs[0].topics]}),c=o?.args[2];return e.minus(new a(s.formatUnits(c)))}(c,e,t),r=await gt(m,t);return{hash:m.hash,bridgeFee:n,networkFee:r,isConfirmed:!0}}}class At{closed;bridgeTransaction;onBridgeTransactionUpdate;config;avalancheProvider;ethereumProvider;bitcoinProvider;constructor({bridgeTransaction:t,onBridgeTransactionUpdate:e,config:n,avalancheProvider:a,ethereumProvider:s,bitcoinProvider:r}){this.closed=!1,this.bridgeTransaction=t,this.config=n,this.onBridgeTransactionUpdate=e,this.avalancheProvider=a,this.ethereumProvider=s,this.bitcoinProvider=r,this.start()}unsubscribe(){this.closed=!0}async start(){try{await this.trackSourceConfirmations(),await this.trackTargetTransaction()}catch(t){console.error(t),this.unsubscribe(),this.updateBridgeTransaction({error:t})}}unsubscribeIfComplete(){const{complete:t,sourceStartedAt:e}=this.bridgeTransaction,n=Date.now()-e>108e5;!t&&n&&this.updateBridgeTransaction({complete:!0,completedAt:Date.now(),error:"timeout"}),(t||n)&&this.unsubscribe()}async trackSourceConfirmations(){return this.onInterval(this.bridgeTransaction.sourceChain,(async t=>{const{confirmationCount:e,requiredConfirmationCount:n,targetStartedAt:a,startBlockNumber:s}=this.bridgeTransaction;if(a)return void t();const{confirmations:r,networkFee:o}=await this.getSourceConfirmations(),i=r>=n;if(r>e&&!i){const t=await this.getTargetBlockNumber();this.updateBridgeTransaction({sourceNetworkFee:o,confirmationCount:r,startBlockNumber:t})}else if(i){const e=s||await this.getTargetBlockNumber();this.updateBridgeTransaction({sourceNetworkFee:o,confirmationCount:r,targetStartedAt:Date.now(),startBlockNumber:e}),t()}}))}async trackTargetTransaction(){return this.onInterval(this.bridgeTransaction.targetChain,(async t=>{const e=await this.getTargetTxData();e&&(this.updateBridgeTransaction({targetTxHash:e.hash,targetBridgeFee:e.bridgeFee,targetNetworkFee:e.networkFee}),e.isConfirmed&&(this.updateBridgeTransaction({complete:!0,completedAt:Date.now()}),this.unsubscribe(),t()))}))}updateBridgeTransaction(t){this.bridgeTransaction={...this.bridgeTransaction,...t},this.onBridgeTransactionUpdate(this.bridgeTransaction)}async getSourceConfirmations(){return this.bridgeTransaction.sourceChain===i.BITCOIN?async function(t){const{sourceTxHash:e}=t.bridgeTransaction,{confirmations:n,fees:a}=await et(e,t.bitcoinProvider);return{confirmations:n,networkFee:B(a)}}(this):async function(t){const{sourceChain:e,sourceTxHash:n}=t.bridgeTransaction,a=ht(t,e),s=await a.getTransaction(n),r=s&&await a.getTransactionReceipt(s.hash),o=r?await gt(s,r):void 0;return{confirmations:await(s?.confirmations())||0,networkFee:o}}(this)}async getTargetTxData(){switch(this.bridgeTransaction.targetChain){case i.BITCOIN:return async function(t){const{bridgeTransaction:e,config:n,bitcoinProvider:a}=t,{amount:s,addressBTC:r,startBlockNumber:o}=e,{confirmed:i,unconfirmed:c}=await a.getUTXOs(r,!1),u=[...i.filter((t=>!o||t.blockHeight>=o)).sort(((t,e)=>t.blockHeight-e.blockHeight)),...c];for(const t of u){const e=await et(t.txHash,a);if(e.addresses.includes(n.criticalBitcoin?.walletAddresses.btc||"")){const t=e.outputs.find((t=>1===t.addresses?.length&&t.addresses[0]===r)),n=t&&B(x(s)-t.value),a=e.confirmations>=1;return{hash:e.hash,bridgeFee:n,networkFee:B(e.fees),isConfirmed:a}}}}(this);case i.AVALANCHE:case i.ETHEREUM:return Tt(this)}}async getTargetBlockNumber(){return this.bridgeTransaction.targetChain===i.BITCOIN?async function(t){return await t.bitcoinProvider.getChainHeight()}(this):async function(t){return ht(t,t.bridgeTransaction.targetChain).getBlockNumber()}(this)}_getIntervalDelayTime(t){return t===this.bridgeTransaction.targetChain&&t===i.BITCOIN?2e4:0}onInterval(t,e){const n=function(t){return t===i.AVALANCHE?1e3:t===i.ETHEREUM?3e4:6e4}(t);return new Promise((a=>{const s=async(t=0)=>{if(this.unsubscribeIfComplete(),this.closed)a();else try{let t=!1;await e((()=>{t=!0,a()})),t||setTimeout(s,n)}catch(e){console.error(e);setTimeout((()=>s(t+1)),n*2**t)}},r=this._getIntervalDelayTime(t);setTimeout(s,r)}))}}async function Et(t,e,n,a,s,r){if(r){return async function(t,e,n,a){const s={...t,from:e},r=await n.estimateGas(s),{chainId:o}=await n.getNetwork(),i=await a({...s,chainId:o,gasLimit:r});if("string"==typeof i)return i;throw new Error("Obtained signing result is not supported")}(await t[e].populateTransaction(...n),a,s,r)}return(await t[e](...n)).hash}async function Ct(t,n,a,s,r,o){const i=!o,c=X(a.wrappedContractAddress,q,s,n,i),u=e.bigToBigInt(t,a.denomination),d=await Et(c,"unwrap",[u,0],n,s,o);return r(d),d}const vt={[i.ETHEREUM]:"0x6b7a87899490EcE95443e979cA9485CBE7E71522",[i.AVALANCHE]:"0x9b17bAADf0f21F03e35249e0e59723F34994F806"};async function Nt(t,n,a,r,o,c,d,p,l){d(bt.INITIAL);const m=c.critical.walletAddresses.ethereum||"";if(W(a))return async function(t,n,a,s,r,o,i,c){const u=!c,d=X(a.nativeContractAddress,z,r,n,u),p=e.bigToBigInt(t,a.denomination);o(bt.WAITING_FOR_CONFIRMATION);const l=await Et(d,"transfer",[s,p],n,r,c);return i(l),o(bt.COMPLETE),l}(t,n,a,m,o,d,p,l);{const y=G(a)?c.critical.assets[a.wrappedAssetSymbol]:void 0;if(!y)throw new Error("missing wrappedAsset");return async function(t,n,a,r,o,c,d,p,l,m,y){const w=!y,b=X(r.nativeContractAddress,z,d,n,w),g=e.bigToBigInt(t,a.denomination);if(a.nativeNetwork===i.ETHEREUM){const t=await async function(t,e,n,a){const r=a.critical.assets.WETH;if(!r||f().environment!==u.PROD)return!1;try{const a=new s.Contract(r.nativeContractAddress,z,n),o=await a.allowance(t,vt[i.ETHEREUM]),c=new s.Contract(r.wrappedContractAddress,z,e),u=await c.allowance(t,vt[i.AVALANCHE]);return 0n!==o||0n!==u}catch(t){return!1}}(n,c,d,p);if(t)throw l(bt.VULNERABLE_ADDRESS),new Error("Address has vulnerable token approvals");l(bt.WAITING_FOR_DEPOSIT_CONFIRMATION);const e=X(r.nativeContractAddress,$,d,n,w),a=await Et(e,"deposit",[{value:g}],n,d,y);m(a),l(bt.WAITING_FOR_DEPOSIT),await d.waitForTransaction(a)}l(bt.WAITING_FOR_CONFIRMATION);const h=await Et(b,"transfer",[o,g],n,d,y);return m(h),l(bt.COMPLETE),h}(t,n,a,y,m,r,o,c,d,p,l)}}async function It({currentBlockchain:t,amount:e,account:n,asset:a,avalancheProvider:s,ethereumProvider:r,config:o,onStatusChange:c,onTxHashChange:u,signAndSendEVM:d}){if(t===i.AVALANCHE){if(G(a))throw new Error("Cannot transfer AVAX");return Ct(e,n,a,s,u,d)}if(!W(a)&&!G(a))throw new Error("Unsupported asset type");return Nt(e,n,a,s,r,o,c,u,d)}const kt=async({amount:t,feeRate:e,config:n,onStatusChange:a,onTxHashChange:s,signAndSendBTC:r})=>{a(bt.INITIAL);const o=n.criticalBitcoin?.walletAddresses.btc||"";if(!o)throw new Error("Bridge address is not found in the config.");const c=tt(i.BITCOIN,n,Number(t));if(Number(t)<c)throw new Error(`Amount must be at least ${c} satoshis.`);if(!e)throw new Error("Fee rate is not provided.");const u=[o,t,e];a(bt.WAITING_FOR_CONFIRMATION);const d=await r(u);return a(bt.COMPLETE),s(d),d};function xt(e,n,a,s){const[r,o]=t.useState(),{config:i}=ot();t.useEffect((()=>{n.getBlockNumber().then((t=>{o(t)})).catch((t=>console.error(t)))}),[n]);return{checkHistoryForNewTx:t.useCallback((async()=>dt(e,n,i,a,s,r)),[e,n,i,a,s,r]),startBlockNumber:r}}function Bt(e,n,a,s,r,o){const[i,c]=t.useState();return t.useEffect((()=>{!async function(){if(!n)return;const t=r&&s?await pt(n,e,a,r,o):{};c(t)}()}),[r,s,n,a,e,o]),i}function St(e,n=o.VsCurrencyType.USD){const{ethereumAssets:s}=rt(),r=C(),[i,c]=t.useState(M),u=t.useCallback((async t=>{try{const e=await o.simplePrice(o.getBasicCoingeckoHttp(),{coinIds:[t],currencies:[n]});c(new a(e[t.toLowerCase()]?.[n]?.price||0))}catch(t){console.error(t),c(M)}}),[n]);return t.useEffect((()=>{if(!s||!e)return;const t=s[e];if(t&&G(t))u(t.coingeckoId);else{const t=r?.[e];u(t?.coingeckoId||e)}}),[e,s,u,r]),i}function Mt(e,n,r,o){return t.useCallback((async(t,c)=>{if(!t||!c||!o)return;const u=c===i.AVALANCHE?e:n;await u.waitForTransaction(t);const d=await u.getTransactionReceipt(t);let p="";const l=d?.to?.toUpperCase();for(const t in o){const e=o[t];if(W(e)&&(e.nativeContractAddress.toUpperCase()===l||e.wrappedContractAddress.toUpperCase()===l)){p=t;break}}const m=s.AbiCoder.defaultAbiCoder().decode(["uint256"],d?.logs?.[0]?.data??"");let f;if(p&&m[0]){const t=o[p];f=new a(m[0].toString()).div(S.pow(t.denomination))}r({tokenSymbol:p,amount:f||M})}),[r,o])}function Ft(e,n,a,r,o,c){const[u,d]=t.useState();return t.useEffect((()=>{if(c&&o)return e===i.AVALANCHE?function(){if(!c||!o)return;const t=new s.Contract(o.wrappedContractAddress,q,n),e=t.filters.Transfer(null,c);function a(n,s,r,o){"0x0000000000000000000000000000000000000000"===n&&(t.off(e,a),o.getTransaction().then((t=>d(t))).catch((t=>console.error(t))))}return t.on(e,a),()=>{t.off(e,a)}}():function(){if(!c||!r)return;const t=r.critical.walletAddresses.ethereum;let e;return a.getBlockNumber().then((n=>{e=window.setInterval((async()=>{const a=`https://api${4===r?.critical.networks.ethereum?"-rinkeby":""}.etherscan.io/api?module=account&action=tokentx&address=${c}&startblock=${n}&endblock=99999999&sort=asc&apikey=${p}`;try{const n=await fetch(a),s=(await n.json()).result.find((e=>e.from.toLowerCase()===t));s&&(window.clearInterval(e),d(s))}catch(t){console.error(t)}}),2e3)})).catch((t=>console.error(t))),()=>{window.clearInterval(e)}}()}),[o,e,c,r]),u}function Rt(){const[e,n]=t.useState(Date.now()),[a,s]=t.useState(0),[r,o]=t.useState(!1);t.useEffect((()=>{let t;return r?t=window.setInterval((()=>{s(Math.floor((Date.now()-e)/1e3))}),1e3):r||0===a||window.clearInterval(t),()=>{window.clearInterval(t)}}),[r,e,a]);const i=t.useCallback(((t,e)=>{n(t);const a=e??Date.now();s(Math.floor((a-t)/1e3))}),[]),c=t.useCallback((()=>{r||(o(!0),n(Date.now()))}),[r]),u=t.useCallback((()=>{o(!1)}),[]);return t.useMemo((()=>({isActive:r,seconds:a,start:c,stop:u,setTimerSeconds:i,started:e})),[r,a,i,e,c,u])}function Ht(e,n,r){const[o,i]=t.useState(0),[c,u]=t.useState();return t.useEffect((()=>{if(r)return n.on("block",t),n.waitForTransaction(r,e).then((async e=>{e&&i(await e.confirmations()),n.removeListener("block",t)})).catch((t=>console.error(t))),()=>{n.removeListener("block",t)};async function t(){if(r)try{const t=await n.getTransaction(r);if(!t||!t.gasPrice)return;if(i(await t.confirmations()),!c){const e=await n.getTransactionReceipt(r);if(!e)return;u(new a(s.formatUnits(t.gasPrice*e.gasUsed,18)))}}catch(t){console.error(t)}}}),[r,n,e,c]),{confirmations:o,gasCost:c}}exports.AVERAGE_TRANSFER_TX_GAS_USAGE=40000n,exports.AssetType=d,exports.BIG_TEN=S,exports.BIG_ZERO=M,exports.Blockchain=i,exports.BridgeSDKProvider=function({children:e}){const[n,a]=t.useState(),[s,r]=t.useState({}),o=t.useCallback((t=>{if(_(s,t)&&t.config){const{critical:e,criticalBitcoin:n}=t.config;a({critical:e,criticalBitcoin:n})}r(t)}),[s]),[c,u]=t.useState(),[p,l]=t.useState(i.ETHEREUM),[m,f]=t.useState(i.AVALANCHE),[y,w]=t.useState(),b=t.useMemo((()=>n?nt(i.ETHEREUM,n):{}),[n]),g=t.useMemo((()=>{const t={};for(const e in b){const n=b[e];n.assetType===d.ERC20&&(t[e]=n)}return t}),[b]),h=t.useMemo((()=>n?nt(i.BITCOIN,n):{}),[n]),T=t.useMemo((()=>n?nt(i.AVALANCHE,n):{}),[n]),A=t.useMemo((()=>{if(c)return b[c]||h[c]||T[c]}),[T,h,c,b]),C=t.useMemo((()=>p===i.AVALANCHE?T:p===i.BITCOIN?h:b),[T,h,p,b]);t.useEffect((()=>{const t=Object.keys(C);c&&t.includes(c)||u(1===t.length?t[0]:void 0)}),[c,C]);const v=t.useMemo((()=>{if(p===i.AVALANCHE){if(A?.assetType===d.ERC20)return[i.ETHEREUM];if(A?.assetType===d.BTC)return[i.BITCOIN]}else if(p===i.ETHEREUM||p===i.BITCOIN)return[i.AVALANCHE];return[]}),[p,A]);t.useEffect((()=>{v.includes(m)||f(v[0])}),[p,m,v]),t.useEffect((()=>{p===i.BITCOIN||p===i.ETHEREUM?f(i.AVALANCHE):p===i.AVALANCHE&&(A?.assetType===d.ERC20?f(i.ETHEREUM):A?.assetType===d.BTC&&f(i.BITCOIN))}),[p,A]);const N={sourceAssets:C,ethereumAssets:b,bitcoinAssets:h,ethereumWrappedAssets:g,avalancheAssets:T,bridgeConfig:s,setBridgeConfig:o,criticalConfig:n,currentAsset:c,currentAssetData:A,setCurrentAsset:u,currentBlockchain:p,setCurrentBlockchain:l,targetBlockchain:m,transactionDetails:y,setTransactionDetails:w,targetChains:v};return t.createElement(st.Provider,{value:N},t.createElement(E,null,e))},exports.ETHERSCAN_API_KEY=p,exports.Environment=u,exports.INFURA_API_KEY=l,exports.NetworkType=c,exports.TokenInfoProvider=E,exports.WrapStatus=bt,exports.btcToSatoshi=x,exports.capped=F,exports.checkHistoryForNewTxEVM=dt,exports.estimateGas=async function(t,n,a,s,r,o,c=!1){if(W(a)||j(a)){if(o===i.AVALANCHE){const r=X(a.wrappedContractAddress,q,s.avalanche,n,c),o=await r.unwrap.populateTransaction(e.bigToBigInt(t,a.denomination),0);return s.avalanche.estimateGas({...o,from:n})}if(W(a)){const r=X(a.nativeContractAddress,z,s.ethereum,n,c),o=await r.transfer.populateTransaction(n,e.bigToBigInt(t,a.denomination));return s.ethereum.estimateGas({...o,from:n})}}else if(G(a)){const o=r.critical.assets[a.wrappedAssetSymbol];if(!o)throw new Error("Cannot estimate gas: missing wrappedAsset");let u=0n;if(a.nativeNetwork===i.ETHEREUM){const r=X(o.nativeContractAddress,$,s.ethereum,n,c),i=await r.deposit.populateTransaction({value:e.bigToBigInt(t,a.denomination)});u+=await s.ethereum.estimateGas({...i,from:n})}const d=X(o.nativeContractAddress,z,s.ethereum,n,c),p=await d.transfer.populateTransaction(n,e.bigToBigInt(t,a.denomination));try{u+=await s.ethereum.estimateGas({...p,from:n})}catch{u+=40000n}return u}},exports.fetchConfig=async function(t){const[n,a]=await e.resolve(async function(t){const e=f(t),n=[];for(const t of e.wardenConfigURLs)n.push(fetch(t));const a=await Promise.allSettled(n),s=[];for(const t of a)if("rejected"!==t.status&&t.value&&t.value.ok)try{s.push(await t.value.json())}catch(t){console.error(t)}const r=s.reduce(((t,e)=>{if(e.critical.disableFrontend||e.criticalBitcoin?.disableFrontend)throw new Error("Disable frontend");const n=JSON.stringify([e.critical,e.criticalBitcoin]),a=t.findIndex((t=>t.criticalJsonString===n));return a<0?t.push({appConfig:e,count:1,criticalJsonString:n}):t[a].count++,t}),[]),o=r.reduce(((t,e)=>t.count>=e.count?t:e),r[0]);if(!o||o.count<e.wardenConfigURLs.length-e.configMismatchThreshold)throw new Error("Warden config mismatch");const c=o.appConfig;for(const t in c.critical.assets)c.critical.assets[t].assetType=d.ERC20,c.critical.assets[t].symbol=t;if(c.criticalBitcoin)for(const t in c.criticalBitcoin.bitcoinAssets)c.criticalBitcoin.bitcoinAssets[t].assetType=d.BTC,c.criticalBitcoin.bitcoinAssets[t].symbol=t.toUpperCase(),c.criticalBitcoin.bitcoinAssets[t].denomination=8,c.criticalBitcoin.bitcoinAssets[t].nativeNetwork=i.BITCOIN;return c}(t));return n?{config:n}:{error:a}},exports.fetchTokenBalances=pt,exports.formatTokenAmount=function(t,e=2){return new Intl.NumberFormat("en-US",{minimumFractionDigits:2,maximumFractionDigits:e}).format(t.toNumber())},exports.getAssets=nt,exports.getBridgeFeeEstimateBTC=Y,exports.getBridgeFeeEstimateEVM=it,exports.getBtcAsset=Q,exports.getBtcTransaction=function(t,e,a,s,o){const c=O(t);if(!I(e,c))throw new Error("Address must be bech32");if(s%1!=0)throw new Error(`Amount must be a whole number. Satoshis can not be divided. ${s}`);const u=tt(i.BITCOIN,t,s);if(s<u)throw new Error(`Amount must be at least ${u} satoshis.`);const d=t.criticalBitcoin?.walletAddresses.btc||"";if(!d)throw new Error("Bridge address is not found in the config.");if(!o)throw new Error("Fee rate is not provided in the config.");const p=c?n.networks.bitcoin:n.networks.testnet,{inputs:l,outputs:m,psbt:f,fee:y}=r.createTransferTx(d,e,s,o,a,p);if(!l||!m||!f)throw new Error("Transaction values can not be satisfied.");const w=x(Y({source:i.BITCOIN,config:t,amount:B(s)}));return{fee:y,tx:f,bridgeFee:w,receiveAmount:s-w,inputs:l,outputs:m}},exports.getBtcTransactionDetails=function(t,e,n,a,s){if(!I(e,O(t)))throw new Error("Address must be bech32");if(a%1!=0)throw new Error(`Amount must be a whole number. Satoshis can not be divided. ${a}`);const o=tt(i.BITCOIN,t,a);if(a<o)throw new Error(`Amount must be at least ${o} satoshis.`);const c=t.criticalBitcoin?.walletAddresses.btc||"";if(!c)throw new Error("Bridge address is not found in the config.");if(!s)throw new Error("Fee rate is not provided in the config.");const{inputs:u,outputs:d,fee:p}=r.getTransferTxDetails(c,e,a,s,n);if(!u||!d)throw new Error("Transaction values can not be satisfied.");const l=x(Y({source:i.BITCOIN,config:t,amount:B(a)}));return{fee:p,bridgeFee:l,receiveAmount:a-l,inputs:u,outputs:d}},exports.getMaxTransferAmount=wt,exports.getMinimumConfirmations=function(t,e){return t===i.BITCOIN?e.nonCriticalBitcoin?.networkInfo.btc.minimumConfirmations||0:e.nonCritical.minimumConfirmations[t]||0},exports.getMinimumTransferAmount=tt,exports.getNativeSymbol=function(t){switch(t){case i.AVALANCHE:return"AVAX";case i.BITCOIN:return"BTC";case i.ETHEREUM:return"ETH";default:return"???"}},exports.getRuntimeConfig=f,exports.getStaticBridgeFeeEstimateBTC=Z,exports.getStaticBridgeFeeEstimateEVM=ct,exports.getTxConfirmations=async function(t,e){return(await et(t,e)).confirmations},exports.getTxDetails=et,exports.hasCriticalChanges=_,exports.initalState=T,exports.isAddressBlocklisted=D,exports.isBase58Address=k,exports.isBase58AddressInNetwork=function(t,e){if(!k(t))return!1;const a=e?n.networks.bitcoin:n.networks.testnet;try{return n.address.toOutputScript(t,a),!0}catch(t){return!1}},exports.isBech32Address=N,exports.isBech32AddressInNetwork=I,exports.isBtcAsset=j,exports.isBtcUsingDynamicFees=P,exports.isEthAsset=W,exports.isEthUsingDynamicFees=V,exports.isMainnetConfig=O,exports.isNativeAsset=G,exports.satoshiToBtc=B,exports.setBridgeEnvironment=function(t){m=h[t]},exports.trackBridgeTransaction=function(t){return new At(t)},exports.transferAssetBTC=kt,exports.transferAssetEVM=It,exports.unwrapAsset=Ct,exports.usdFormatter=L,exports.useBridgeConfig=ot,exports.useBridgeConfigUpdater=function(e){const{bridgeConfig:n,setBridgeConfig:a}=rt();t.useEffect((()=>{async function t(){const t=await e();a(t)}n.config||n.error||t();const s=window.setInterval((()=>{t()}),15e3);return()=>{window.clearInterval(s)}}),[e,n])},exports.useBridgeFeeEstimate=function(e){const{currentAssetData:n,currentBlockchain:a,bridgeConfig:s,ethereumAssets:r,ethereumWrappedAssets:o}=rt();return t.useMemo((()=>{if(!r||!n||!s.config)return;const t=j(n)&&(a===i.AVALANCHE||a===i.BITCOIN),c=!j(n)&&(a===i.AVALANCHE||a===i.ETHEREUM);if(t)return Y({source:a,config:s.config,amount:e});if(c){const t=G(n)?o[n.wrappedAssetSymbol]:n;return it({source:a,config:s.config,asset:t,amount:e})}}),[r,n,s.config,a,e,o])},exports.useBridgeSDK=rt,exports.useCheckHistoryForNewTxEVM=xt,exports.useGetAirdropAmount=function(e,n,s,r){return t.useCallback((()=>r?.avaxPromotionAmount&&r.avaxPromotionDollarThreshold&&e===i.AVALANCHE&&s?.amount?s.amount.times(n).lt(new a(r.avaxPromotionDollarThreshold))?0:new a(r.avaxPromotionAmount).div(S.pow(18)).toNumber():0),[r,n,e,s])},exports.useGetTokenBalanceEVM=function(e,n,a,s,r,o){const{ethereumAssets:i}=rt();if(n&&G(n)&&n.nativeNetwork!==e){const t=i[n.wrappedAssetSymbol];t&&t.assetType===d.ERC20&&(n=t)}const c=Bt(e,t.useMemo((()=>n?{[n.symbol]:n}:void 0),[n]),a,s,r,o);return n&&c?c[n.symbol]:void 0},exports.useGetTokenBalancesEVM=Bt,exports.useGetTokenSymbolOnNetwork=function(){const{sourceAssets:e}=rt();return{getTokenSymbolOnNetwork:t.useCallback(((t,n)=>{const a=e[t];let s=t;return a&&n!==a.nativeNetwork?(G(a)&&(s=a.wrappedAssetSymbol),a.nativeNetwork===i.ETHEREUM?`${s}.e`:a.nativeNetwork===i.AVALANCHE?`${s}.a`:a.nativeNetwork===i.BITCOIN?`${s}.b`:s):s}),[e])}},exports.useHasEnoughForGas=function(e,n){const[s,r]=t.useState(!0);return t.useEffect((()=>{!async function(){if(!e||!n)return;const t=await n.getBalance(e),s=await n.getFeeData();r(new a(t.toString()).gte(s?.gasPrice?.toString()||"0"))}()}),[e,n]),s},exports.useIsAddressSanctioned=function(t){const e=ot();return D({addressEVM:t,addressBTC:t,bridgeConfig:e})},exports.useMaxTransferAmount=function(e,n,a){const{currentAsset:s,currentBlockchain:r,ethereumAssets:o,avalancheAssets:c,bridgeConfig:{config:u}}=rt(),d=r===i.AVALANCHE?c:o,p=d[s||""],l=yt(r),[m,f]=t.useState(null);return t.useEffect((()=>{s&&e&&a&&u?wt({currentAsset:s,currentBlockchain:r,assets:d,balance:e,provider:a,config:u}).then((t=>{f(t)})).catch((t=>console.error(t))):f(null)}),[n,p,d,e,u,s,l,a,r]),m},exports.useMinimumTransferAmount=function(e){const{currentAssetData:n,currentBlockchain:s,bridgeConfig:r,ethereumAssets:o,ethereumWrappedAssets:c}=rt();return t.useMemo((()=>{if(!o||!n||!r.config)return M;const t=j(n)&&(s===i.AVALANCHE||s===i.BITCOIN),u=!j(n)&&(s===i.AVALANCHE||s===i.ETHEREUM);if(t)return B(tt(s,r.config,x(e)));if(u){const t=G(n)?c[n.wrappedAssetSymbol]:n;return function(t,e,n){if(V(e)){const s=t===i.ETHEREUM?"wrapFeeApproximation":"unwrapFeeApproximation",{minimumFeeAmount:r}=e.nonCritical[s][n.symbol];return new a(r).div(S.pow(n.denomination)).mul(H)}return it({source:t,config:e,asset:n,amount:M}).mul(H)}(s,r.config,t)}return M}),[o,n,r.config,s,e,c])},exports.usePrice=St,exports.usePriceForChain=function(t){return St(t===i.AVALANCHE?"avalanche-2":t)},exports.useResetTransactionDetailsFromParams=Mt,exports.useSubscribeForNewTransactionFromBridgeEVM=Ft,exports.useTimer=Rt,exports.useTokenInfoContext=C,exports.useTransferAssetBTC=function(e){const{currentBlockchain:n}=rt(),{config:a}=ot(),[s,r]=t.useState(bt.INITIAL),[o,c]=t.useState("");return{transferAsset:t.useCallback((function(t,s){if(a&&n===i.BITCOIN)return kt({amount:t,feeRate:s,config:a,onStatusChange:r,onTxHashChange:c,signAndSendBTC:e})}),[a,n,e]),status:s,txHash:o}},exports.useTransferAssetEVM=function(e,n,a,s,r){const{currentBlockchain:o}=rt(),{config:c}=ot(),[u,d]=t.useState(bt.INITIAL),[p,l]=t.useState("");return{transferAsset:t.useCallback((function(t){if(e&&n&&c&&(o===i.AVALANCHE||o===i.ETHEREUM))return It({currentBlockchain:o,amount:t,account:n,asset:e,avalancheProvider:a,ethereumProvider:s,config:c,onStatusChange:d,onTxHashChange:l,signAndSendEVM:r})}),[n,e,a,c,o,s,r]),status:u,txHash:p}},exports.useTxTracker=function(e,n,a,s,r,o,c,u,d,p,l){const[m,f]=t.useState(!1),[y,w]=t.useState(!1),[b,g]=t.useState(),h=p?.[d?.tokenSymbol||""],[T,A]=t.useState(!1),E=Rt(),C=Rt(),v=e===i.AVALANCHE?s:r,N=e===i.ETHEREUM?i.AVALANCHE:i.ETHEREUM,I=e===i.AVALANCHE?r:s,k=c?.nonCritical.minimumConfirmations[e]||1e3,x=Ft(N,s,r,c,h,u),{confirmations:B,gasCost:S}=Ht(k,v,n),M=Mt(s,r,o,p),F=St(e),{checkHistoryForNewTx:R}=xt(N,I,u,h),H=t.useCallback((t=>{C.stop(),g(t),A(!0)}),[C]);t.useEffect((()=>{E.start(),E.setTimerSeconds(parseInt(a))}),[]),t.useEffect((()=>{!async function(){if(!l&&m&&C.seconds>0){f(!1);const t=await R();t&&(t.block&&C.setTimerSeconds(Math.floor((1e3*t.block.timestamp-C.started)/1e3)),t.transaction&&H(t.transaction.hash))}else l&&f(!0)}()}),[R,H,m,C,l]),t.useEffect((()=>{d||(M(n,e),w(!0))}),[M,e,d,n]),t.useEffect((()=>{if(n&&B>=k){if(d?.tokenSymbol&&B>k&&y)return void H();E.isActive&&(E.stop(),C.start())}}),[B,H,y,k,E,C,d?.tokenSymbol,n]),t.useEffect((()=>{d&&x&&B>=k&&H(x.hash)}),[B,H,k,x,d]);const O=F&&S&&F.mul(S);return{sourceNetwork:e,sourceSeconds:E.seconds,sourceTxHash:n,targetNetwork:N,targetSeconds:C.seconds,targetTxHash:b,requiredConfirmationCount:k,confirmationCount:B,complete:T,gasCost:S,gasValue:O,amount:d?.amount,symbol:d?.tokenSymbol}},exports.useWaitForConfirmations=Ht,exports.wrapAsset=Nt;
1
+ "use strict";var t=require("react"),e=require("@avalabs/core-utils-sdk"),n=require("bitcoinjs-lib"),a=require("big.js"),s=require("ethers"),r=require("@avalabs/core-wallets-sdk"),o=require("@avalabs/core-coingecko-sdk"),i=(t=>(t.AVALANCHE="avalanche",t.ETHEREUM="ethereum",t.BITCOIN="bitcoin",t.UNKNOWN="",t))(i||{}),c=(t=>(t.MAINNET="mainnet",t.TESTNET="testnet",t))(c||{}),u=(t=>(t.DEV="development",t.STAGING="staging",t.TEST="test",t.PROD="prod",t))(u||{}),d=(t=>(t[t.NATIVE=0]="NATIVE",t[t.ERC20=1]="ERC20",t[t.BTC=2]="BTC",t))(d||{});const p=process.env.ETHERSCAN_API_KEY||process.env.REACT_APP_ETHERSCAN_API_KEY,l=process.env.INFURA_API_KEY||process.env.REACT_APP_INFURA_API_KEY;let m;function f(t){if(t)return h[t];if(!m)throw new Error("No environment set, initialize by calling setBridgeEnvironment");return m}const y={environment:u.DEV,bridgeUrl:"http://localhost:3000",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"],avalancheNetworkConfig:{chainId:"0xa869",chainName:"Avalanche Fuji Testnet",nativeCurrency:{name:"Fuji",symbol:"AVAX",decimals:18},rpcUrls:["https://api.avax-test.network/ext/bc/C/rpc"],blockExplorerUrls:["https://subnets-test.avax.network/c-chain"]},ethereumNetworkConfig:{chainId:11155111,rpcUrls:[`https://sepolia.infura.io/v3/${l}`]},disabledTokensOnNetwork:{[i.AVALANCHE]:[],[i.ETHEREUM]:["FAU"]}},w={...y,environment:u.STAGING,bridgeUrl:"https://bridge.avax-test.network",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.test.json"},b={...w,environment:u.TEST,bridgeUrl:"https://bridge.avax-test.network",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.test.json",configMismatchThreshold:2,wardenConfigURLs:["https://ava-warden-bucket.s3.eu-central-1.amazonaws.com/bridge_settings.json","https://ava-warden-testnet.s3.us-west-1.amazonaws.com/bridge_settings.json","https://assets.warden-testnet.avalanche.protofire.io/bridge_settings.json","https://avalabs-warden-test-blob.s3.amazonaws.com/bridge_settings.json","https://avawarden.s3.amazonaws.com/bridge_settings.json","https://blob-storage-testnet.warden-avascan.info/bridge_settings.json","https://chainstack-ava-warden-testnet.s3.us-west-2.amazonaws.com/bridge_settings.json","https://s3.amazonaws.com/warden-mgmt-prod-testnet.blockdaemon.com/bridge_settings.json"]},g={...b,environment:u.PROD,bridgeUrl:"https://bridge.avax.network",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.json",avalancheNetworkConfig:{chainId:"0xa86a",chainName:"Avalanche Mainnet C-Chain",nativeCurrency:{name:"AVAX",symbol:"AVAX",decimals:18},rpcUrls:["https://api.avax.network/ext/bc/C/rpc"],blockExplorerUrls:["https://subnets.avax.network/c-chain"]},ethereumNetworkConfig:{chainId:1,rpcUrls:[`https://mainnet.infura.io/v3/${l}`]},wardenConfigURLs:["https://ava-warden-bucket-prod.s3.eu-central-1.amazonaws.com/bridge_settings.json","https://ava-warden-mainnet.s3.us-west-1.amazonaws.com/bridge_settings.json","https://assets.warden-mainnet.avalanche.protofire.io/bridge_settings.json","https://avawarden-prod.s3.amazonaws.com/bridge_settings.json","https://blob-storage-mainnet.warden-avascan.info/bridge_settings.json","https://chainstack-ava-warden-mainnet.s3.us-west-2.amazonaws.com/bridge_settings.json","https://s3.amazonaws.com/warden-mgmt-prod-mainnet.blockdaemon.com/bridge_settings.json","https://warden-avax-storage.s3.amazonaws.com/bridge_settings.json"],disabledTokensOnNetwork:{[i.AVALANCHE]:[],[i.ETHEREUM]:["CRV"]}},h={[u.PROD]:g,[u.STAGING]:w,[u.TEST]:b,[u.DEV]:y};const T={},A=t.createContext(T),E=({children:n})=>{const[a,s]=t.useState();return t.useEffect((()=>{!async function(){const t=await async function(){try{const t=await e.promiseResolveWithBackoff((()=>fetch(f().tokenInfoUrl)),(()=>!1),0,10);return await t.json()}catch(t){return console.error(t),{}}}();s(t)}()}),[]),t.createElement(A.Provider,{value:a},n)};function C(){return t.useContext(A)}const v={ETH:{symbol:"ETH",tokenName:"Ether",assetType:d.NATIVE,nativeNetwork:i.ETHEREUM,wrappedAssetSymbol:"WETH",denomination:18,coingeckoId:"ethereum"}};function N(t){try{return n.address.fromBech32(t),!0}catch{return!1}}function I(t,e){return!!N(t)&&t.toLowerCase().startsWith(e?"bc":"tb")}function k(t){try{return n.address.fromBase58Check(t),!0}catch(t){return!1}}function x(t){return t.mul(1e8).toNumber()}function B(t){return new a(t).div(1e8)}const S=new a(10),M=new a(0),F=(t,{max:e,min:n})=>t.gt(e)?e:t.lt(n)?n:t;var R=(t=>(t[t.MAINNET=43114]="MAINNET",t[t.TESTNET=43113]="TESTNET",t))(R||{});const H=3;function O(t){return t.critical.networks.avalanche===R.MAINNET}function _(t,e){return JSON.stringify(U(t))!==JSON.stringify(U(e))}function U(t){if(!t.config)return;const{critical:e,criticalBitcoin:n}=t.config;return[e,n]}function V(t){return Boolean(t.critical.useNewFeeStructure)}function P(t){return Boolean(t.criticalBitcoin.useNewFeeStructure)}const L=new Intl.NumberFormat(void 0,{style:"currency",currency:"USD",currencyDisplay:"symbol",minimumFractionDigits:2,maximumFractionDigits:2}),D=({addressEVM:t,addressBTC:e,bridgeConfig:n})=>!(!t||!n.config?.critical.addressBlocklist.includes(t))||!(!e||!n.config?.criticalBitcoin.addressBlocklist.includes(e)),G=t=>t.assetType===d.NATIVE,j=t=>t.assetType===d.BTC,W=t=>t.assetType===d.ERC20;var z=[{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"}],$=[{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"}],q=[{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:[{internalType:"bool",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:[{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"}];function K(t,e,n=!1){return n&&e?function(t,e){return new s.JsonRpcSigner(t,e)}(t,e):t}function X(t,e,n,a,r=!1){if(!s.isAddress(t)||t===s.ZeroAddress)throw Error(`Invalid 'address' parameter '${t}'.`);return new s.Contract(t,e,K(n,a,r))}function J(t,e,n){const{minimumFeeAmount:s,maximumFeeAmount:r,feePercentage:o,feePercentageDecimals:i}=n,c=new a(s).div(S.pow(e)),u=new a(r).div(S.pow(e)),d=new a(o).div(S.pow(i)).div(100),p=t.mul(d);return F(p,{min:c,max:u})}function Y({source:t,config:e,amount:n}){if(!P(e))return Z(t,e,x(n));const{wrapFeeEstimate:s,unwrapFeeEstimate:r}=e.nonCriticalBitcoin.networkInfo.btc.currentBridgeFeeEstimate;if(t===i.BITCOIN)return J(n,8,s);const{constAmount:o,numeratorPerSat:c,denominatorPerSat:u}=r.estimatedTxFee,d=o+c/u*x(n),p=J(n,8,r.bridgeToll),l=new a(d).div(S.pow(8));return p.add(l)}function Z(t,e,n){const{constUnwrapFeeAmount:a,unwrapFeeNumerator:s,unwrapFeeDenominator:r,wrapFeeAmount:o}=e.nonCriticalBitcoin.networkInfo.btc.currentBridgeFeeEstimate;return t===i.BITCOIN?B(o):B(a+s/r*n)}function Q(t){const e=t.criticalBitcoin?.bitcoinAssets||{};return e[Object.keys(e)[0]]}function tt(t,e,n){const a=function(t,e,n){if(P(e)){const a=t===i.BITCOIN,{currentBridgeFeeEstimate:s}=e.nonCriticalBitcoin.networkInfo.btc;if(a)return Number(s.wrapFeeEstimate.minimumFeeAmount);const{constAmount:r,numeratorPerSat:o,denominatorPerSat:c}=s.unwrapFeeEstimate.estimatedTxFee,u=r+o/c*n;return Number(s.unwrapFeeEstimate.bridgeToll.minimumFeeAmount)+u}const a=Y({source:t,config:e,amount:B(n)});return x(a)}(t,e,n);if(t===i.BITCOIN){const t=e.nonCriticalBitcoin.networkInfo.btc.minimumOnboardSize;return Math.max(4*a,t)}{const{dustThreshold:t}=e.nonCriticalBitcoin.networkInfo.btc.currentBridgeFeeEstimate;return 2*(a+t)}}async function et(t,e){return e.getTransaction(t)}function nt(t,e){switch(t){case i.ETHEREUM:{const n={...e.critical.assets,ETH:v.ETH};return at(t,n),n}case i.AVALANCHE:{const n={...e.critical.assets,...nt(i.BITCOIN,e)};return at(t,n),n}case i.BITCOIN:{const t=Q(e);return t?{BTC:t}:{}}default:return{}}}function at(t,e){(f().disabledTokensOnNetwork[t]||[]).forEach((t=>delete e[t]))}const st=t.createContext({});function rt(){return t.useContext(st)}function ot(){const{bridgeConfig:t}=rt();return t}function it({source:t,config:e,asset:n,amount:a}){if(!V(e))return ct(t,e,n);const{wrapFeeApproximation:s,unwrapFeeApproximation:r}=e.nonCritical,{symbol:o,denomination:c}=n;return J(a,c,t===i.ETHEREUM?s[o]:r[o])}function ct(t,e,n){const{wrapFeeApproximation:s,unwrapFeeApproximation:r}=e?.nonCritical||{},o=n.symbol,c=t===i.ETHEREUM?s?.[o]:r?.[o];return new a(c||0).div(S.pow(n.denomination))}const ut=2048;async function dt(t,e,n,a,r,o){const c=r?.nativeNetwork===t?r?.nativeContractAddress:r?.wrappedContractAddress;if(!c||!o||!n)return;const u=t===i.AVALANCHE?q:z,d=new s.Contract(c,u,e),p=t===i.AVALANCHE?"0x0000000000000000000000000000000000000000":n.critical.walletAddresses.ethereum,l=d.filters.Transfer(p,a),m=await e.getBlockNumber();let f=o-5,y=Math.min(f+ut-1,m);for(;y<=m;){const t=await d.queryFilter(l,f,y);if(0===t.length){if(f=y+1,y=Math.min(f+ut-1,m),f>y)return;continue}const n=await t[0].getTransaction();if(!n||!n.blockNumber)return{error:"no transaction or block number"};return{transaction:n,block:await e.getBlock(n.blockNumber)}}}async function pt(t,e,n,a,s){const r={};for(const o in t){const i=t[o];let c=null;i.assetType===d.ERC20?c=await lt(i,e,n,a,s):G(i)?c=await mt(i,e,n,a):j(i)&&(c=await await lt(i,e,n,a,s)),null!==c&&(r[o]=c)}return r}async function lt(t,n,r,o,c){const u=n===i.AVALANCHE?q:z;if(t.nativeNetwork!==n&&t.wrappedNetwork!==n)return null;let p;if(c&&W(t)?p=t.deprecatedTokenContractAddress:W(t)?p=n===t.nativeNetwork?t.nativeContractAddress:t.wrappedContractAddress:t.assetType===d.BTC&&(p=t.wrappedContractAddress),!p)return null;const l=new s.Contract(p,u,r),[m,f]=await e.resolve(l.balanceOf(o)),y=t.denomination??18;return m?new a(s.formatUnits(m,y)):ft(f,(()=>lt(t,n,r,o,c)))}async function mt(t,n,r,o){if(t.nativeNetwork!==n||!r)return null;const[i,c]=await e.resolve(r.getBalance(o));return i?new a(s.formatUnits(i,t.denomination)):ft(c,(()=>mt(t,n,r,o)))}async function ft(t,n){return s.isError(t,"SERVER_ERROR")?(await e.wait(1e3+Math.floor(1e3*Math.random())),n()):(console.error(t),null)}function yt(t){return t===i.AVALANCHE?"AVAX":"ETH"}async function wt({currentBlockchain:t,balance:n,currentAsset:s,assets:r,provider:o,config:i}){const c=yt(t),u=r[s||""];if(!u)return null;if(G(u)&&u.symbol===c){const t=r[u.wrappedAssetSymbol];if(!t||t.assetType!==d.ERC20)return null;if(j(t))throw new Error("Unable to calculate BTC fee data with EVM provider.");const s=X(t.nativeContractAddress,$,o),c=await o.getFeeData(),p=await s.deposit.estimateGas({value:1}),[l,m]=await e.resolve(s.transfer.estimateGas(i.critical.walletAddresses.ethereum,1));m&&console.error(m);const f=new a(p.toString()).add(l?l.toString():0).times(c.gasPrice?.toString()??0).times(2).div(e.BIG_TEN.pow(u.denomination));return f.gte(n)?null:n.minus(f)}return n}var bt=(t=>(t[t.INITIAL=0]="INITIAL",t[t.WAITING_FOR_DEPOSIT_CONFIRMATION=1]="WAITING_FOR_DEPOSIT_CONFIRMATION",t[t.WAITING_FOR_DEPOSIT=2]="WAITING_FOR_DEPOSIT",t[t.WAITING_FOR_CONFIRMATION=3]="WAITING_FOR_CONFIRMATION",t[t.COMPLETE=4]="COMPLETE",t[t.VULNERABLE_ADDRESS=5]="VULNERABLE_ADDRESS",t))(bt||{});async function gt(t,n){if(!n)return;return t.gasPrice&&e.bigintToBig(t.gasPrice*n.gasUsed,18)}function ht(t,e){return e===i.AVALANCHE?t.avalancheProvider:t.ethereumProvider}async function Tt(t){const{amount:e,addressC:n,startBlockNumber:r,symbol:o,targetChain:c}=t.bridgeTransaction,u=ht(t,c),d=t.config,p=nt(c,t.config)[o],{error:l,transaction:m}=await dt(c,u,d,n,p,r)||{};if(l)throw l;if(m){const t=await u.getTransactionReceipt(m.hash),n=await async function(t,e,n){if(!n)return;const r=t===i.AVALANCHE?q:z,o=new s.Interface(r).parseLog({data:n.logs[0].data,topics:[...n.logs[0].topics]}),c=o?.args[2];return e.minus(new a(s.formatUnits(c)))}(c,e,t),r=await gt(m,t);return{hash:m.hash,bridgeFee:n,networkFee:r,isConfirmed:!0}}}class At{closed;bridgeTransaction;onBridgeTransactionUpdate;config;avalancheProvider;ethereumProvider;bitcoinProvider;constructor({bridgeTransaction:t,onBridgeTransactionUpdate:e,config:n,avalancheProvider:a,ethereumProvider:s,bitcoinProvider:r}){this.closed=!1,this.bridgeTransaction=t,this.config=n,this.onBridgeTransactionUpdate=e,this.avalancheProvider=a,this.ethereumProvider=s,this.bitcoinProvider=r,this.start()}unsubscribe(){this.closed=!0}async start(){try{await this.trackSourceConfirmations(),await this.trackTargetTransaction()}catch(t){console.error(t),this.unsubscribe(),this.updateBridgeTransaction({error:t})}}unsubscribeIfComplete(){const{complete:t,sourceStartedAt:e}=this.bridgeTransaction,n=Date.now()-e>108e5;!t&&n&&this.updateBridgeTransaction({complete:!0,completedAt:Date.now(),error:"timeout"}),(t||n)&&this.unsubscribe()}async trackSourceConfirmations(){return this.onInterval(this.bridgeTransaction.sourceChain,(async t=>{const{confirmationCount:e,requiredConfirmationCount:n,targetStartedAt:a,startBlockNumber:s}=this.bridgeTransaction;if(a)return void t();const{confirmations:r,networkFee:o}=await this.getSourceConfirmations(),i=r>=n;if(r>e&&!i){const t=await this.getTargetBlockNumber();this.updateBridgeTransaction({sourceNetworkFee:o,confirmationCount:r,startBlockNumber:t})}else if(i){const e=s||await this.getTargetBlockNumber();this.updateBridgeTransaction({sourceNetworkFee:o,confirmationCount:r,targetStartedAt:Date.now(),startBlockNumber:e}),t()}}))}async trackTargetTransaction(){return this.onInterval(this.bridgeTransaction.targetChain,(async t=>{const e=await this.getTargetTxData();e&&(this.updateBridgeTransaction({targetTxHash:e.hash,targetBridgeFee:e.bridgeFee,targetNetworkFee:e.networkFee}),e.isConfirmed&&(this.updateBridgeTransaction({complete:!0,completedAt:Date.now()}),this.unsubscribe(),t()))}))}updateBridgeTransaction(t){this.bridgeTransaction={...this.bridgeTransaction,...t},this.onBridgeTransactionUpdate(this.bridgeTransaction)}async getSourceConfirmations(){return this.bridgeTransaction.sourceChain===i.BITCOIN?async function(t){const{sourceTxHash:e}=t.bridgeTransaction,{confirmations:n,fees:a}=await et(e,t.bitcoinProvider);return{confirmations:n,networkFee:B(a)}}(this):async function(t){const{sourceChain:e,sourceTxHash:n}=t.bridgeTransaction,a=ht(t,e),s=await a.getTransaction(n),r=s&&await a.getTransactionReceipt(s.hash),o=r?await gt(s,r):void 0;return{confirmations:await(s?.confirmations())||0,networkFee:o}}(this)}async getTargetTxData(){switch(this.bridgeTransaction.targetChain){case i.BITCOIN:return async function(t){const{bridgeTransaction:e,config:n,bitcoinProvider:a}=t,{amount:s,addressBTC:r,startBlockNumber:o}=e,{confirmed:i,unconfirmed:c}=await a.getUTXOs(r,!1),u=[...i.filter((t=>!o||t.blockHeight>=o)).sort(((t,e)=>t.blockHeight-e.blockHeight)),...c];for(const t of u){const e=await et(t.txHash,a);if(e.addresses.includes(n.criticalBitcoin?.walletAddresses.btc||"")){const t=e.outputs.find((t=>1===t.addresses?.length&&t.addresses[0]===r)),n=t&&B(x(s)-t.value),a=e.confirmations>=1;return{hash:e.hash,bridgeFee:n,networkFee:B(e.fees),isConfirmed:a}}}}(this);case i.AVALANCHE:case i.ETHEREUM:return Tt(this)}}async getTargetBlockNumber(){return this.bridgeTransaction.targetChain===i.BITCOIN?async function(t){return await t.bitcoinProvider.getChainHeight()}(this):async function(t){return ht(t,t.bridgeTransaction.targetChain).getBlockNumber()}(this)}_getIntervalDelayTime(t){return t===this.bridgeTransaction.targetChain&&t===i.BITCOIN?2e4:0}onInterval(t,e){const n=function(t){return t===i.AVALANCHE?1e3:t===i.ETHEREUM?3e4:6e4}(t);return new Promise((a=>{const s=async(t=0)=>{if(this.unsubscribeIfComplete(),this.closed)a();else try{let t=!1;await e((()=>{t=!0,a()})),t||setTimeout(s,n)}catch(e){console.error(e);setTimeout((()=>s(t+1)),n*2**t)}},r=this._getIntervalDelayTime(t);setTimeout(s,r)}))}}async function Et(t,e,n,a,s,r){if(r){return async function(t,e,n,a){const s={...t,from:e},r=await n.estimateGas(s),{chainId:o}=await n.getNetwork(),i=await a({...s,chainId:o,gasLimit:r});if("string"==typeof i)return i;throw new Error("Obtained signing result is not supported")}(await t[e].populateTransaction(...n),a,s,r)}return(await t[e](...n)).hash}async function Ct(t,n,a,s,r,o){const i=!o,c=X(a.wrappedContractAddress,q,s,n,i),u=e.bigToBigInt(t,a.denomination),d=await Et(c,"unwrap",[u,0],n,s,o);return r(d),d}const vt={[i.ETHEREUM]:"0x6b7a87899490EcE95443e979cA9485CBE7E71522",[i.AVALANCHE]:"0x9b17bAADf0f21F03e35249e0e59723F34994F806"};async function Nt(t,n,a,r,o,c,d,p,l){d(bt.INITIAL);const m=c.critical.walletAddresses.ethereum||"";if(W(a))return async function(t,n,a,s,r,o,i,c){const u=!c,d=X(a.nativeContractAddress,z,r,n,u),p=e.bigToBigInt(t,a.denomination);o(bt.WAITING_FOR_CONFIRMATION);const l=await Et(d,"transfer",[s,p],n,r,c);return i(l),o(bt.COMPLETE),l}(t,n,a,m,o,d,p,l);{const y=G(a)?c.critical.assets[a.wrappedAssetSymbol]:void 0;if(!y)throw new Error("missing wrappedAsset");return async function(t,n,a,r,o,c,d,p,l,m,y){const w=!y,b=X(r.nativeContractAddress,z,d,n,w),g=e.bigToBigInt(t,a.denomination);if(a.nativeNetwork===i.ETHEREUM){const t=await async function(t,e,n,a){const r=a.critical.assets.WETH;if(!r||f().environment!==u.PROD)return!1;try{const a=new s.Contract(r.nativeContractAddress,z,n),o=await a.allowance(t,vt[i.ETHEREUM]),c=new s.Contract(r.wrappedContractAddress,z,e),u=await c.allowance(t,vt[i.AVALANCHE]);return 0n!==o||0n!==u}catch(t){return!1}}(n,c,d,p);if(t)throw l(bt.VULNERABLE_ADDRESS),new Error("Address has vulnerable token approvals");l(bt.WAITING_FOR_DEPOSIT_CONFIRMATION);const e=X(r.nativeContractAddress,$,d,n,w),a=await Et(e,"deposit",[{value:g}],n,d,y);m(a),l(bt.WAITING_FOR_DEPOSIT),await d.waitForTransaction(a)}l(bt.WAITING_FOR_CONFIRMATION);const h=await Et(b,"transfer",[o,g],n,d,y);return m(h),l(bt.COMPLETE),h}(t,n,a,y,m,r,o,c,d,p,l)}}async function It({currentBlockchain:t,amount:e,account:n,asset:a,avalancheProvider:s,ethereumProvider:r,config:o,onStatusChange:c,onTxHashChange:u,signAndSendEVM:d}){if(t===i.AVALANCHE){if(G(a))throw new Error("Cannot transfer AVAX");return Ct(e,n,a,s,u,d)}if(!W(a)&&!G(a))throw new Error("Unsupported asset type");return Nt(e,n,a,s,r,o,c,u,d)}const kt=async({fromAccount:t,amount:e,feeRate:n,config:a,onStatusChange:s,onTxHashChange:r,signAndSendBTC:o})=>{s(bt.INITIAL);const c=a.criticalBitcoin?.walletAddresses.btc||"";if(!c)throw new Error("Bridge address is not found in the config.");const u=tt(i.BITCOIN,a,Number(e));if(Number(e)<u)throw new Error(`Amount must be at least ${u} satoshis.`);if(!n)throw new Error("Fee rate is not provided.");const d={from:t,to:c,amount:e,feeRate:n};s(bt.WAITING_FOR_CONFIRMATION);const p=await o(d);return s(bt.COMPLETE),r(p),p};function xt(e,n,a,s){const[r,o]=t.useState(),{config:i}=ot();t.useEffect((()=>{n.getBlockNumber().then((t=>{o(t)})).catch((t=>console.error(t)))}),[n]);return{checkHistoryForNewTx:t.useCallback((async()=>dt(e,n,i,a,s,r)),[e,n,i,a,s,r]),startBlockNumber:r}}function Bt(e,n,a,s,r,o){const[i,c]=t.useState();return t.useEffect((()=>{!async function(){if(!n)return;const t=r&&s?await pt(n,e,a,r,o):{};c(t)}()}),[r,s,n,a,e,o]),i}function St(e,n=o.VsCurrencyType.USD){const{ethereumAssets:s}=rt(),r=C(),[i,c]=t.useState(M),u=t.useCallback((async t=>{try{const e=await o.simplePrice(o.getBasicCoingeckoHttp(),{coinIds:[t],currencies:[n]});c(new a(e[t.toLowerCase()]?.[n]?.price||0))}catch(t){console.error(t),c(M)}}),[n]);return t.useEffect((()=>{if(!s||!e)return;const t=s[e];if(t&&G(t))u(t.coingeckoId);else{const t=r?.[e];u(t?.coingeckoId||e)}}),[e,s,u,r]),i}function Mt(e,n,r,o){return t.useCallback((async(t,c)=>{if(!t||!c||!o)return;const u=c===i.AVALANCHE?e:n;await u.waitForTransaction(t);const d=await u.getTransactionReceipt(t);let p="";const l=d?.to?.toUpperCase();for(const t in o){const e=o[t];if(W(e)&&(e.nativeContractAddress.toUpperCase()===l||e.wrappedContractAddress.toUpperCase()===l)){p=t;break}}const m=s.AbiCoder.defaultAbiCoder().decode(["uint256"],d?.logs?.[0]?.data??"");let f;if(p&&m[0]){const t=o[p];f=new a(m[0].toString()).div(S.pow(t.denomination))}r({tokenSymbol:p,amount:f||M})}),[r,o])}function Ft(e,n,a,r,o,c){const[u,d]=t.useState();return t.useEffect((()=>{if(c&&o)return e===i.AVALANCHE?function(){if(!c||!o)return;const t=new s.Contract(o.wrappedContractAddress,q,n),e=t.filters.Transfer(null,c);function a(n,s,r,o){"0x0000000000000000000000000000000000000000"===n&&(t.off(e,a),o.getTransaction().then((t=>d(t))).catch((t=>console.error(t))))}return t.on(e,a),()=>{t.off(e,a)}}():function(){if(!c||!r)return;const t=r.critical.walletAddresses.ethereum;let e;return a.getBlockNumber().then((n=>{e=window.setInterval((async()=>{const a=`https://api${4===r?.critical.networks.ethereum?"-rinkeby":""}.etherscan.io/api?module=account&action=tokentx&address=${c}&startblock=${n}&endblock=99999999&sort=asc&apikey=${p}`;try{const n=await fetch(a),s=(await n.json()).result.find((e=>e.from.toLowerCase()===t));s&&(window.clearInterval(e),d(s))}catch(t){console.error(t)}}),2e3)})).catch((t=>console.error(t))),()=>{window.clearInterval(e)}}()}),[o,e,c,r]),u}function Rt(){const[e,n]=t.useState(Date.now()),[a,s]=t.useState(0),[r,o]=t.useState(!1);t.useEffect((()=>{let t;return r?t=window.setInterval((()=>{s(Math.floor((Date.now()-e)/1e3))}),1e3):r||0===a||window.clearInterval(t),()=>{window.clearInterval(t)}}),[r,e,a]);const i=t.useCallback(((t,e)=>{n(t);const a=e??Date.now();s(Math.floor((a-t)/1e3))}),[]),c=t.useCallback((()=>{r||(o(!0),n(Date.now()))}),[r]),u=t.useCallback((()=>{o(!1)}),[]);return t.useMemo((()=>({isActive:r,seconds:a,start:c,stop:u,setTimerSeconds:i,started:e})),[r,a,i,e,c,u])}function Ht(e,n,r){const[o,i]=t.useState(0),[c,u]=t.useState();return t.useEffect((()=>{if(r)return n.on("block",t),n.waitForTransaction(r,e).then((async e=>{e&&i(await e.confirmations()),n.removeListener("block",t)})).catch((t=>console.error(t))),()=>{n.removeListener("block",t)};async function t(){if(r)try{const t=await n.getTransaction(r);if(!t||!t.gasPrice)return;if(i(await t.confirmations()),!c){const e=await n.getTransactionReceipt(r);if(!e)return;u(new a(s.formatUnits(t.gasPrice*e.gasUsed,18)))}}catch(t){console.error(t)}}}),[r,n,e,c]),{confirmations:o,gasCost:c}}exports.AVERAGE_TRANSFER_TX_GAS_USAGE=40000n,exports.AssetType=d,exports.BIG_TEN=S,exports.BIG_ZERO=M,exports.Blockchain=i,exports.BridgeSDKProvider=function({children:e}){const[n,a]=t.useState(),[s,r]=t.useState({}),o=t.useCallback((t=>{if(_(s,t)&&t.config){const{critical:e,criticalBitcoin:n}=t.config;a({critical:e,criticalBitcoin:n})}r(t)}),[s]),[c,u]=t.useState(),[p,l]=t.useState(i.ETHEREUM),[m,f]=t.useState(i.AVALANCHE),[y,w]=t.useState(),b=t.useMemo((()=>n?nt(i.ETHEREUM,n):{}),[n]),g=t.useMemo((()=>{const t={};for(const e in b){const n=b[e];n.assetType===d.ERC20&&(t[e]=n)}return t}),[b]),h=t.useMemo((()=>n?nt(i.BITCOIN,n):{}),[n]),T=t.useMemo((()=>n?nt(i.AVALANCHE,n):{}),[n]),A=t.useMemo((()=>{if(c)return b[c]||h[c]||T[c]}),[T,h,c,b]),C=t.useMemo((()=>p===i.AVALANCHE?T:p===i.BITCOIN?h:b),[T,h,p,b]);t.useEffect((()=>{const t=Object.keys(C);c&&t.includes(c)||u(1===t.length?t[0]:void 0)}),[c,C]);const v=t.useMemo((()=>{if(p===i.AVALANCHE){if(A?.assetType===d.ERC20)return[i.ETHEREUM];if(A?.assetType===d.BTC)return[i.BITCOIN]}else if(p===i.ETHEREUM||p===i.BITCOIN)return[i.AVALANCHE];return[]}),[p,A]);t.useEffect((()=>{v.includes(m)||f(v[0])}),[p,m,v]),t.useEffect((()=>{p===i.BITCOIN||p===i.ETHEREUM?f(i.AVALANCHE):p===i.AVALANCHE&&(A?.assetType===d.ERC20?f(i.ETHEREUM):A?.assetType===d.BTC&&f(i.BITCOIN))}),[p,A]);const N={sourceAssets:C,ethereumAssets:b,bitcoinAssets:h,ethereumWrappedAssets:g,avalancheAssets:T,bridgeConfig:s,setBridgeConfig:o,criticalConfig:n,currentAsset:c,currentAssetData:A,setCurrentAsset:u,currentBlockchain:p,setCurrentBlockchain:l,targetBlockchain:m,transactionDetails:y,setTransactionDetails:w,targetChains:v};return t.createElement(st.Provider,{value:N},t.createElement(E,null,e))},exports.ETHERSCAN_API_KEY=p,exports.Environment=u,exports.INFURA_API_KEY=l,exports.NetworkType=c,exports.TokenInfoProvider=E,exports.WrapStatus=bt,exports.btcToSatoshi=x,exports.capped=F,exports.checkHistoryForNewTxEVM=dt,exports.estimateGas=async function(t,n,a,s,r,o,c=!1){if(W(a)||j(a)){if(o===i.AVALANCHE){const r=X(a.wrappedContractAddress,q,s.avalanche,n,c),o=await r.unwrap.populateTransaction(e.bigToBigInt(t,a.denomination),0);return s.avalanche.estimateGas({...o,from:n})}if(W(a)){const r=X(a.nativeContractAddress,z,s.ethereum,n,c),o=await r.transfer.populateTransaction(n,e.bigToBigInt(t,a.denomination));return s.ethereum.estimateGas({...o,from:n})}}else if(G(a)){const o=r.critical.assets[a.wrappedAssetSymbol];if(!o)throw new Error("Cannot estimate gas: missing wrappedAsset");let u=0n;if(a.nativeNetwork===i.ETHEREUM){const r=X(o.nativeContractAddress,$,s.ethereum,n,c),i=await r.deposit.populateTransaction({value:e.bigToBigInt(t,a.denomination)});u+=await s.ethereum.estimateGas({...i,from:n})}const d=X(o.nativeContractAddress,z,s.ethereum,n,c),p=await d.transfer.populateTransaction(n,e.bigToBigInt(t,a.denomination));try{u+=await s.ethereum.estimateGas({...p,from:n})}catch{u+=40000n}return u}},exports.fetchConfig=async function(t){const[n,a]=await e.resolve(async function(t){const e=f(t),n=[];for(const t of e.wardenConfigURLs)n.push(fetch(t));const a=await Promise.allSettled(n),s=[];for(const t of a)if("rejected"!==t.status&&t.value&&t.value.ok)try{s.push(await t.value.json())}catch(t){console.error(t)}const r=s.reduce(((t,e)=>{if(e.critical.disableFrontend||e.criticalBitcoin?.disableFrontend)throw new Error("Disable frontend");const n=JSON.stringify([e.critical,e.criticalBitcoin]),a=t.findIndex((t=>t.criticalJsonString===n));return a<0?t.push({appConfig:e,count:1,criticalJsonString:n}):t[a].count++,t}),[]),o=r.reduce(((t,e)=>t.count>=e.count?t:e),r[0]);if(!o||o.count<e.wardenConfigURLs.length-e.configMismatchThreshold)throw new Error("Warden config mismatch");const c=o.appConfig;for(const t in c.critical.assets)c.critical.assets[t].assetType=d.ERC20,c.critical.assets[t].symbol=t;if(c.criticalBitcoin)for(const t in c.criticalBitcoin.bitcoinAssets)c.criticalBitcoin.bitcoinAssets[t].assetType=d.BTC,c.criticalBitcoin.bitcoinAssets[t].symbol=t.toUpperCase(),c.criticalBitcoin.bitcoinAssets[t].denomination=8,c.criticalBitcoin.bitcoinAssets[t].nativeNetwork=i.BITCOIN;return c}(t));return n?{config:n}:{error:a}},exports.fetchTokenBalances=pt,exports.formatTokenAmount=function(t,e=2){return new Intl.NumberFormat("en-US",{minimumFractionDigits:2,maximumFractionDigits:e}).format(t.toNumber())},exports.getAssets=nt,exports.getBridgeFeeEstimateBTC=Y,exports.getBridgeFeeEstimateEVM=it,exports.getBtcAsset=Q,exports.getBtcTransaction=function(t,e,a,s,o){const c=O(t);if(!I(e,c))throw new Error("Address must be bech32");if(s%1!=0)throw new Error(`Amount must be a whole number. Satoshis can not be divided. ${s}`);const u=tt(i.BITCOIN,t,s);if(s<u)throw new Error(`Amount must be at least ${u} satoshis.`);const d=t.criticalBitcoin?.walletAddresses.btc||"";if(!d)throw new Error("Bridge address is not found in the config.");if(!o)throw new Error("Fee rate is not provided in the config.");const p=c?n.networks.bitcoin:n.networks.testnet,{inputs:l,outputs:m,psbt:f,fee:y}=r.createTransferTx(d,e,s,o,a,p);if(!l||!m||!f)throw new Error("Transaction values can not be satisfied.");const w=x(Y({source:i.BITCOIN,config:t,amount:B(s)}));return{fee:y,tx:f,bridgeFee:w,receiveAmount:s-w,inputs:l,outputs:m}},exports.getBtcTransactionDetails=function(t,e,n,a,s){if(!I(e,O(t)))throw new Error("Address must be bech32");if(a%1!=0)throw new Error(`Amount must be a whole number. Satoshis can not be divided. ${a}`);const o=tt(i.BITCOIN,t,a);if(a<o)throw new Error(`Amount must be at least ${o} satoshis.`);const c=t.criticalBitcoin?.walletAddresses.btc||"";if(!c)throw new Error("Bridge address is not found in the config.");if(!s)throw new Error("Fee rate is not provided in the config.");const{inputs:u,outputs:d,fee:p}=r.getTransferTxDetails(c,e,a,s,n);if(!u||!d)throw new Error("Transaction values can not be satisfied.");const l=x(Y({source:i.BITCOIN,config:t,amount:B(a)}));return{fee:p,bridgeFee:l,receiveAmount:a-l,inputs:u,outputs:d}},exports.getMaxTransferAmount=wt,exports.getMinimumConfirmations=function(t,e){return t===i.BITCOIN?e.nonCriticalBitcoin?.networkInfo.btc.minimumConfirmations||0:e.nonCritical.minimumConfirmations[t]||0},exports.getMinimumTransferAmount=tt,exports.getNativeSymbol=function(t){switch(t){case i.AVALANCHE:return"AVAX";case i.BITCOIN:return"BTC";case i.ETHEREUM:return"ETH";default:return"???"}},exports.getRuntimeConfig=f,exports.getStaticBridgeFeeEstimateBTC=Z,exports.getStaticBridgeFeeEstimateEVM=ct,exports.getTxConfirmations=async function(t,e){return(await et(t,e)).confirmations},exports.getTxDetails=et,exports.hasCriticalChanges=_,exports.initalState=T,exports.isAddressBlocklisted=D,exports.isBase58Address=k,exports.isBase58AddressInNetwork=function(t,e){if(!k(t))return!1;const a=e?n.networks.bitcoin:n.networks.testnet;try{return n.address.toOutputScript(t,a),!0}catch(t){return!1}},exports.isBech32Address=N,exports.isBech32AddressInNetwork=I,exports.isBtcAsset=j,exports.isBtcUsingDynamicFees=P,exports.isEthAsset=W,exports.isEthUsingDynamicFees=V,exports.isMainnetConfig=O,exports.isNativeAsset=G,exports.satoshiToBtc=B,exports.setBridgeEnvironment=function(t){m=h[t]},exports.trackBridgeTransaction=function(t){return new At(t)},exports.transferAssetBTC=kt,exports.transferAssetEVM=It,exports.unwrapAsset=Ct,exports.usdFormatter=L,exports.useBridgeConfig=ot,exports.useBridgeConfigUpdater=function(e){const{bridgeConfig:n,setBridgeConfig:a}=rt();t.useEffect((()=>{async function t(){const t=await e();a(t)}n.config||n.error||t();const s=window.setInterval((()=>{t()}),15e3);return()=>{window.clearInterval(s)}}),[e,n])},exports.useBridgeFeeEstimate=function(e){const{currentAssetData:n,currentBlockchain:a,bridgeConfig:s,ethereumAssets:r,ethereumWrappedAssets:o}=rt();return t.useMemo((()=>{if(!r||!n||!s.config)return;const t=j(n)&&(a===i.AVALANCHE||a===i.BITCOIN),c=!j(n)&&(a===i.AVALANCHE||a===i.ETHEREUM);if(t)return Y({source:a,config:s.config,amount:e});if(c){const t=G(n)?o[n.wrappedAssetSymbol]:n;return it({source:a,config:s.config,asset:t,amount:e})}}),[r,n,s.config,a,e,o])},exports.useBridgeSDK=rt,exports.useCheckHistoryForNewTxEVM=xt,exports.useGetAirdropAmount=function(e,n,s,r){return t.useCallback((()=>r?.avaxPromotionAmount&&r.avaxPromotionDollarThreshold&&e===i.AVALANCHE&&s?.amount?s.amount.times(n).lt(new a(r.avaxPromotionDollarThreshold))?0:new a(r.avaxPromotionAmount).div(S.pow(18)).toNumber():0),[r,n,e,s])},exports.useGetTokenBalanceEVM=function(e,n,a,s,r,o){const{ethereumAssets:i}=rt();if(n&&G(n)&&n.nativeNetwork!==e){const t=i[n.wrappedAssetSymbol];t&&t.assetType===d.ERC20&&(n=t)}const c=Bt(e,t.useMemo((()=>n?{[n.symbol]:n}:void 0),[n]),a,s,r,o);return n&&c?c[n.symbol]:void 0},exports.useGetTokenBalancesEVM=Bt,exports.useGetTokenSymbolOnNetwork=function(){const{sourceAssets:e}=rt();return{getTokenSymbolOnNetwork:t.useCallback(((t,n)=>{const a=e[t];let s=t;return a&&n!==a.nativeNetwork?(G(a)&&(s=a.wrappedAssetSymbol),a.nativeNetwork===i.ETHEREUM?`${s}.e`:a.nativeNetwork===i.AVALANCHE?`${s}.a`:a.nativeNetwork===i.BITCOIN?`${s}.b`:s):s}),[e])}},exports.useHasEnoughForGas=function(e,n){const[s,r]=t.useState(!0);return t.useEffect((()=>{!async function(){if(!e||!n)return;const t=await n.getBalance(e),s=await n.getFeeData();r(new a(t.toString()).gte(s?.gasPrice?.toString()||"0"))}()}),[e,n]),s},exports.useIsAddressSanctioned=function(t){const e=ot();return D({addressEVM:t,addressBTC:t,bridgeConfig:e})},exports.useMaxTransferAmount=function(e,n,a){const{currentAsset:s,currentBlockchain:r,ethereumAssets:o,avalancheAssets:c,bridgeConfig:{config:u}}=rt(),d=r===i.AVALANCHE?c:o,p=d[s||""],l=yt(r),[m,f]=t.useState(null);return t.useEffect((()=>{s&&e&&a&&u?wt({currentAsset:s,currentBlockchain:r,assets:d,balance:e,provider:a,config:u}).then((t=>{f(t)})).catch((t=>console.error(t))):f(null)}),[n,p,d,e,u,s,l,a,r]),m},exports.useMinimumTransferAmount=function(e){const{currentAssetData:n,currentBlockchain:s,bridgeConfig:r,ethereumAssets:o,ethereumWrappedAssets:c}=rt();return t.useMemo((()=>{if(!o||!n||!r.config)return M;const t=j(n)&&(s===i.AVALANCHE||s===i.BITCOIN),u=!j(n)&&(s===i.AVALANCHE||s===i.ETHEREUM);if(t)return B(tt(s,r.config,x(e)));if(u){const t=G(n)?c[n.wrappedAssetSymbol]:n;return function(t,e,n){if(V(e)){const s=t===i.ETHEREUM?"wrapFeeApproximation":"unwrapFeeApproximation",{minimumFeeAmount:r}=e.nonCritical[s][n.symbol];return new a(r).div(S.pow(n.denomination)).mul(H)}return it({source:t,config:e,asset:n,amount:M}).mul(H)}(s,r.config,t)}return M}),[o,n,r.config,s,e,c])},exports.usePrice=St,exports.usePriceForChain=function(t){return St(t===i.AVALANCHE?"avalanche-2":t)},exports.useResetTransactionDetailsFromParams=Mt,exports.useSubscribeForNewTransactionFromBridgeEVM=Ft,exports.useTimer=Rt,exports.useTokenInfoContext=C,exports.useTransferAssetBTC=function(e){const{currentBlockchain:n}=rt(),{config:a}=ot(),[s,r]=t.useState(bt.INITIAL),[o,c]=t.useState("");return{transferAsset:t.useCallback((function({fromAccount:t,amount:s,feeRate:o}){if(a&&n===i.BITCOIN)return kt({fromAccount:t,amount:s,feeRate:o,config:a,onStatusChange:r,onTxHashChange:c,signAndSendBTC:e})}),[a,n,e]),status:s,txHash:o}},exports.useTransferAssetEVM=function(e,n,a,s,r){const{currentBlockchain:o}=rt(),{config:c}=ot(),[u,d]=t.useState(bt.INITIAL),[p,l]=t.useState("");return{transferAsset:t.useCallback((function(t){if(e&&n&&c&&(o===i.AVALANCHE||o===i.ETHEREUM))return It({currentBlockchain:o,amount:t,account:n,asset:e,avalancheProvider:a,ethereumProvider:s,config:c,onStatusChange:d,onTxHashChange:l,signAndSendEVM:r})}),[n,e,a,c,o,s,r]),status:u,txHash:p}},exports.useTxTracker=function(e,n,a,s,r,o,c,u,d,p,l){const[m,f]=t.useState(!1),[y,w]=t.useState(!1),[b,g]=t.useState(),h=p?.[d?.tokenSymbol||""],[T,A]=t.useState(!1),E=Rt(),C=Rt(),v=e===i.AVALANCHE?s:r,N=e===i.ETHEREUM?i.AVALANCHE:i.ETHEREUM,I=e===i.AVALANCHE?r:s,k=c?.nonCritical.minimumConfirmations[e]||1e3,x=Ft(N,s,r,c,h,u),{confirmations:B,gasCost:S}=Ht(k,v,n),M=Mt(s,r,o,p),F=St(e),{checkHistoryForNewTx:R}=xt(N,I,u,h),H=t.useCallback((t=>{C.stop(),g(t),A(!0)}),[C]);t.useEffect((()=>{E.start(),E.setTimerSeconds(parseInt(a))}),[]),t.useEffect((()=>{!async function(){if(!l&&m&&C.seconds>0){f(!1);const t=await R();t&&(t.block&&C.setTimerSeconds(Math.floor((1e3*t.block.timestamp-C.started)/1e3)),t.transaction&&H(t.transaction.hash))}else l&&f(!0)}()}),[R,H,m,C,l]),t.useEffect((()=>{d||(M(n,e),w(!0))}),[M,e,d,n]),t.useEffect((()=>{if(n&&B>=k){if(d?.tokenSymbol&&B>k&&y)return void H();E.isActive&&(E.stop(),C.start())}}),[B,H,y,k,E,C,d?.tokenSymbol,n]),t.useEffect((()=>{d&&x&&B>=k&&H(x.hash)}),[B,H,k,x,d]);const O=F&&S&&F.mul(S);return{sourceNetwork:e,sourceSeconds:E.seconds,sourceTxHash:n,targetNetwork:N,targetSeconds:C.seconds,targetTxHash:b,requiredConfirmationCount:k,confirmationCount:B,complete:T,gasCost:S,gasValue:O,amount:d?.amount,symbol:d?.tokenSymbol}},exports.useWaitForConfirmations=Ht,exports.wrapAsset=Nt;
@@ -5,7 +5,11 @@ import { BtcTransactionRequest } from '../lib/transferAssetBTC.js';
5
5
  * Transfer Bitcoin asset to Avalanche.
6
6
  */
7
7
  declare function useTransferAssetBTC(signAndSendBTC: (txParams: BtcTransactionRequest) => Promise<TxHash>): {
8
- transferAsset: (amount: string, feeRate: number) => Promise<string> | undefined;
8
+ transferAsset: ({ fromAccount, amount, feeRate, }: {
9
+ fromAccount: string;
10
+ amount: number;
11
+ feeRate: number;
12
+ }) => Promise<string> | undefined;
9
13
  status: WrapStatus;
10
14
  txHash: string;
11
15
  };
@@ -1 +1 @@
1
- import{useState as t,useCallback as r}from"react";import{useBridgeSDK as o}from"../contexts/BridgeSDKProvider.js";import"../contexts/TokenInfoProvider.js";import"bitcoinjs-lib";import"big.js";import{Blockchain as i}from"../types/config.js";import"../utils/bignumber.js";import"@avalabs/core-utils-sdk";import"ethers";import"@avalabs/core-wallets-sdk";import"../runtime/config.js";import"../runtime/nativeAssets.js";import{WrapStatus as s}from"../lib/models.js";import"../lib/hasAddressVulnerableMultichainApproval.js";import{transferAssetBTC as e}from"../lib/transferAssetBTC.js";import{useBridgeConfig as n}from"./useBridgeConfig.js";function m(m){const{currentBlockchain:a}=o(),{config:p}=n(),[f,c]=t(s.INITIAL),[l,u]=t("");return{transferAsset:r((function(t,r){if(p&&a===i.BITCOIN)return e({amount:t,feeRate:r,config:p,onStatusChange:c,onTxHashChange:u,signAndSendBTC:m})}),[p,a,m]),status:f,txHash:l}}export{m as useTransferAssetBTC};
1
+ import{useState as t,useCallback as o}from"react";import{useBridgeSDK as r}from"../contexts/BridgeSDKProvider.js";import"../contexts/TokenInfoProvider.js";import"bitcoinjs-lib";import"big.js";import{Blockchain as i}from"../types/config.js";import"../utils/bignumber.js";import"@avalabs/core-utils-sdk";import"ethers";import"@avalabs/core-wallets-sdk";import"../runtime/config.js";import"../runtime/nativeAssets.js";import{WrapStatus as s}from"../lib/models.js";import"../lib/hasAddressVulnerableMultichainApproval.js";import{transferAssetBTC as e}from"../lib/transferAssetBTC.js";import{useBridgeConfig as n}from"./useBridgeConfig.js";function m(m){const{currentBlockchain:a}=r(),{config:c}=n(),[f,p]=t(s.INITIAL),[u,l]=t("");return{transferAsset:o((function({fromAccount:t,amount:o,feeRate:r}){if(c&&a===i.BITCOIN)return e({fromAccount:t,amount:o,feeRate:r,config:c,onStatusChange:p,onTxHashChange:l,signAndSendBTC:m})}),[c,a,m]),status:f,txHash:u}}export{m as useTransferAssetBTC};
@@ -1,19 +1,21 @@
1
1
  import { AppConfig } from '../types/config.js';
2
2
  import { WrapStatus, TxHash } from './models.js';
3
3
 
4
- type BtcTransactionRequest = [
5
- toAddress: string,
6
- amount: string,
7
- feeRate: number
8
- ];
4
+ type BtcTransactionRequest = {
5
+ from: string;
6
+ to: string;
7
+ amount: number;
8
+ feeRate: number;
9
+ };
9
10
  type TransferAssetBTCParams = {
10
- amount: string;
11
+ fromAccount: string;
12
+ amount: number;
11
13
  feeRate: number;
12
14
  config: AppConfig;
13
15
  onStatusChange: (status: WrapStatus) => void;
14
16
  onTxHashChange: (txHash: string) => void;
15
17
  signAndSendBTC: (txParams: BtcTransactionRequest) => Promise<TxHash>;
16
18
  };
17
- declare const transferAssetBTC: ({ amount, feeRate, config, onStatusChange, onTxHashChange, signAndSendBTC, }: TransferAssetBTCParams) => Promise<string>;
19
+ declare const transferAssetBTC: ({ fromAccount, amount, feeRate, config, onStatusChange, onTxHashChange, signAndSendBTC, }: TransferAssetBTCParams) => Promise<string>;
18
20
 
19
21
  export { BtcTransactionRequest, TransferAssetBTCParams, transferAssetBTC };
@@ -1 +1 @@
1
- import{Blockchain as t}from"../types/config.js";import{WrapStatus as o}from"./models.js";import"bitcoinjs-lib";import"big.js";import"../utils/bignumber.js";import"@avalabs/core-utils-sdk";import"ethers";import{getMinimumTransferAmount as r}from"./btc/getMinimumTransferAmount.js";import"@avalabs/core-wallets-sdk";const s=async({amount:s,feeRate:i,config:e,onStatusChange:n,onTxHashChange:a,signAndSendBTC:m})=>{n(o.INITIAL);const c=e.criticalBitcoin?.walletAddresses.btc||"";if(!c)throw new Error("Bridge address is not found in the config.");const d=r(t.BITCOIN,e,Number(s));if(Number(s)<d)throw new Error(`Amount must be at least ${d} satoshis.`);if(!i)throw new Error("Fee rate is not provided.");const u=[c,s,i];n(o.WAITING_FOR_CONFIRMATION);const b=await m(u);return n(o.COMPLETE),a(b),b};export{s as transferAssetBTC};
1
+ import{Blockchain as t}from"../types/config.js";import{WrapStatus as o}from"./models.js";import"bitcoinjs-lib";import"big.js";import"../utils/bignumber.js";import"@avalabs/core-utils-sdk";import"ethers";import{getMinimumTransferAmount as r}from"./btc/getMinimumTransferAmount.js";import"@avalabs/core-wallets-sdk";const e=async({fromAccount:e,amount:s,feeRate:i,config:n,onStatusChange:a,onTxHashChange:m,signAndSendBTC:c})=>{a(o.INITIAL);const f=n.criticalBitcoin?.walletAddresses.btc||"";if(!f)throw new Error("Bridge address is not found in the config.");const u=r(t.BITCOIN,n,Number(s));if(Number(s)<u)throw new Error(`Amount must be at least ${u} satoshis.`);if(!i)throw new Error("Fee rate is not provided.");const d={from:e,to:f,amount:s,feeRate:i};a(o.WAITING_FOR_CONFIRMATION);const b=await c(d);return a(o.COMPLETE),m(b),b};export{e as transferAssetBTC};
@@ -1 +1 @@
1
- import{Environment as t,Blockchain as e}from"../types/config.js";const a=process.env.ETHERSCAN_API_KEY||process.env.REACT_APP_ETHERSCAN_API_KEY,s=process.env.INFURA_API_KEY||process.env.REACT_APP_INFURA_API_KEY;let n;function o(t){n=g[t]}function r(t){if(t)return g[t];if(!n)throw new Error("No environment set, initialize by calling setBridgeEnvironment");return n}const i={environment:t.DEV,bridgeUrl:"http://localhost:3000",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"],avalancheNetworkConfig:{chainId:"0xa869",chainName:"Avalanche Fuji Testnet",nativeCurrency:{name:"Fuji",symbol:"AVAX",decimals:18},rpcUrls:["https://api.avax-test.network/ext/bc/C/rpc"],blockExplorerUrls:["https://subnets-test.avax.network/c-chain"]},ethereumNetworkConfig:{chainId:11155111,rpcUrls:[`https://sepolia.infura.io/v3/${s}`]},disabledTokensOnNetwork:{[e.AVALANCHE]:[],[e.ETHEREUM]:["FAU"]}},c={...i,environment:t.STAGING,bridgeUrl:"https://bridge.avax-test.network",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.test.json"},m={...c,environment:t.TEST,bridgeUrl:"https://bridge.avax-test.network",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.test.json",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"]},d={...m,environment:t.PROD,bridgeUrl:"https://bridge.avax.network",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.json",avalancheNetworkConfig:{chainId:"0xa86a",chainName:"Avalanche Mainnet C-Chain",nativeCurrency:{name:"AVAX",symbol:"AVAX",decimals:18},rpcUrls:["https://api.avax.network/ext/bc/C/rpc"],blockExplorerUrls:["https://subnets.avax.network/c-chain"]},ethereumNetworkConfig:{chainId:1,rpcUrls:[`https://mainnet.infura.io/v3/${s}`]},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:{[e.AVALANCHE]:[],[e.ETHEREUM]:["CRV"]}},g={[t.PROD]:d,[t.STAGING]:c,[t.TEST]:m,[t.DEV]:i};export{a as ETHERSCAN_API_KEY,s as INFURA_API_KEY,r as getRuntimeConfig,o as setBridgeEnvironment};
1
+ import{Environment as t,Blockchain as e}from"../types/config.js";const s=process.env.ETHERSCAN_API_KEY||process.env.REACT_APP_ETHERSCAN_API_KEY,a=process.env.INFURA_API_KEY||process.env.REACT_APP_INFURA_API_KEY;let n;function o(t){n=m[t]}function r(t){if(t)return m[t];if(!n)throw new Error("No environment set, initialize by calling setBridgeEnvironment");return n}const i={environment:t.DEV,bridgeUrl:"http://localhost:3000",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"],avalancheNetworkConfig:{chainId:"0xa869",chainName:"Avalanche Fuji Testnet",nativeCurrency:{name:"Fuji",symbol:"AVAX",decimals:18},rpcUrls:["https://api.avax-test.network/ext/bc/C/rpc"],blockExplorerUrls:["https://subnets-test.avax.network/c-chain"]},ethereumNetworkConfig:{chainId:11155111,rpcUrls:[`https://sepolia.infura.io/v3/${a}`]},disabledTokensOnNetwork:{[e.AVALANCHE]:[],[e.ETHEREUM]:["FAU"]}},c={...i,environment:t.STAGING,bridgeUrl:"https://bridge.avax-test.network",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.test.json"},d={...c,environment:t.TEST,bridgeUrl:"https://bridge.avax-test.network",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.test.json",configMismatchThreshold:2,wardenConfigURLs:["https://ava-warden-bucket.s3.eu-central-1.amazonaws.com/bridge_settings.json","https://ava-warden-testnet.s3.us-west-1.amazonaws.com/bridge_settings.json","https://assets.warden-testnet.avalanche.protofire.io/bridge_settings.json","https://avalabs-warden-test-blob.s3.amazonaws.com/bridge_settings.json","https://avawarden.s3.amazonaws.com/bridge_settings.json","https://blob-storage-testnet.warden-avascan.info/bridge_settings.json","https://chainstack-ava-warden-testnet.s3.us-west-2.amazonaws.com/bridge_settings.json","https://s3.amazonaws.com/warden-mgmt-prod-testnet.blockdaemon.com/bridge_settings.json"]},g={...d,environment:t.PROD,bridgeUrl:"https://bridge.avax.network",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.json",avalancheNetworkConfig:{chainId:"0xa86a",chainName:"Avalanche Mainnet C-Chain",nativeCurrency:{name:"AVAX",symbol:"AVAX",decimals:18},rpcUrls:["https://api.avax.network/ext/bc/C/rpc"],blockExplorerUrls:["https://subnets.avax.network/c-chain"]},ethereumNetworkConfig:{chainId:1,rpcUrls:[`https://mainnet.infura.io/v3/${a}`]},wardenConfigURLs:["https://ava-warden-bucket-prod.s3.eu-central-1.amazonaws.com/bridge_settings.json","https://ava-warden-mainnet.s3.us-west-1.amazonaws.com/bridge_settings.json","https://assets.warden-mainnet.avalanche.protofire.io/bridge_settings.json","https://avawarden-prod.s3.amazonaws.com/bridge_settings.json","https://blob-storage-mainnet.warden-avascan.info/bridge_settings.json","https://chainstack-ava-warden-mainnet.s3.us-west-2.amazonaws.com/bridge_settings.json","https://s3.amazonaws.com/warden-mgmt-prod-mainnet.blockdaemon.com/bridge_settings.json","https://warden-avax-storage.s3.amazonaws.com/bridge_settings.json"],disabledTokensOnNetwork:{[e.AVALANCHE]:[],[e.ETHEREUM]:["CRV"]}},m={[t.PROD]:g,[t.STAGING]:c,[t.TEST]:d,[t.DEV]:i};export{s as ETHERSCAN_API_KEY,a as INFURA_API_KEY,r as getRuntimeConfig,o as setBridgeEnvironment};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@avalabs/core-bridge-sdk",
3
- "version": "3.1.0-alpha.4",
3
+ "version": "3.1.0-alpha.41",
4
4
  "license": "Limited Ecosystem License",
5
5
  "private": false,
6
6
  "main": "dist/index.js",
@@ -34,9 +34,9 @@
34
34
  "ts-jest": "29.1.2"
35
35
  },
36
36
  "dependencies": {
37
- "@avalabs/core-coingecko-sdk": "3.1.0-alpha.4",
38
- "@avalabs/core-utils-sdk": "3.1.0-alpha.4",
39
- "@avalabs/core-wallets-sdk": "3.1.0-alpha.4"
37
+ "@avalabs/core-coingecko-sdk": "3.1.0-alpha.41",
38
+ "@avalabs/core-utils-sdk": "3.1.0-alpha.41",
39
+ "@avalabs/core-wallets-sdk": "3.1.0-alpha.41"
40
40
  },
41
41
  "peerDependencies": {
42
42
  "big.js": "^6.2.1",
@@ -45,5 +45,5 @@
45
45
  "ethers": "^6.7.1",
46
46
  "react": "^17.0.2"
47
47
  },
48
- "gitHead": "dd93ae25b564c7f8d099f81efa120c077c92eff9"
48
+ "gitHead": "4842a9c0a1764b2e3595bde1d12a8bfc04d71fd0"
49
49
  }