@avalabs/core-bridge-sdk 3.1.0-alpha.7 → 3.1.0-alpha.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +2 -1
- package/esm/contexts/BridgeSDKProvider.js +1 -1
- package/esm/contexts/TokenInfoProvider.js +1 -1
- package/esm/contexts/models.d.ts +2 -2
- package/esm/hooks/usePrice.js +1 -1
- package/esm/hooks/useTxTracker.d.ts +2 -1
- package/esm/lib/btc/models.d.ts +1 -1
- package/esm/lib/checkHistoryForNewTxEVM.d.ts +2 -1
- package/esm/lib/getBridgeFeeEstimateEVM.d.ts +1 -1
- package/esm/lib/models.d.ts +2 -1
- package/esm/lib/tracker/models.d.ts +1 -1
- package/esm/lib/tracker/trackBridgeTransaction.d.ts +2 -1
- package/esm/lib/transferAssetBTC.d.ts +2 -1
- package/esm/lib/transferAssetEVM.d.ts +2 -1
- package/esm/runtime/config.js +1 -1
- package/esm/runtime/nativeAssets.js +1 -1
- package/esm/types/config.d.ts +2 -1
- package/esm/types/tokenInfo.d.ts +1 -1
- package/package.json +16 -7
- package/dist/index.js +0 -1
package/dist/index.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var t=require("react/jsx-runtime"),e=require("react"),n=require("@avalabs/core-utils-sdk"),a=require("bitcoinjs-lib"),s=require("big.js"),r=require("ethers"),o=require("@avalabs/core-wallets-sdk"),i=require("@avalabs/core-coingecko-sdk"),c=(t=>(t.AVALANCHE="avalanche",t.ETHEREUM="ethereum",t.BITCOIN="bitcoin",t.UNKNOWN="",t))(c||{}),u=(t=>(t.MAINNET="mainnet",t.TESTNET="testnet",t))(u||{}),d=(t=>(t.DEV="development",t.STAGING="staging",t.TEST="test",t.PROD="prod",t))(d||{}),p=(t=>(t[t.NATIVE=0]="NATIVE",t[t.ERC20=1]="ERC20",t[t.BTC=2]="BTC",t))(p||{});const l=process.env.ETHERSCAN_API_KEY||process.env.REACT_APP_ETHERSCAN_API_KEY,m=process.env.INFURA_API_KEY||process.env.REACT_APP_INFURA_API_KEY;let f;function y(t){if(t)return T[t];if(!f)throw new Error("No environment set, initialize by calling setBridgeEnvironment");return f}const w={environment:d.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/${m}`]},disabledTokensOnNetwork:{[c.AVALANCHE]:[],[c.ETHEREUM]:["FAU"]}},b={...w,environment:d.STAGING,bridgeUrl:"https://bridge.avax-test.network",tokenInfoUrl:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/token_list.test.json"},g={...b,environment:d.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"]},h={...g,environment:d.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/${m}`]},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:{[c.AVALANCHE]:[],[c.ETHEREUM]:["CRV"]}},T={[d.PROD]:h,[d.STAGING]:b,[d.TEST]:g,[d.DEV]:w};const A={},E=e.createContext(A),C=({children:a})=>{const[s,r]=e.useState();return e.useEffect((()=>{!async function(){const t=await async function(){try{const t=await n.promiseResolveWithBackoff((()=>fetch(y().tokenInfoUrl)),(()=>!1),0,10);return await t.json()}catch(t){return console.error(t),{}}}();r(t)}()}),[]),t.jsx(E.Provider,{value:s,children:a})};function v(){return e.useContext(E)}const N={ETH:{symbol:"ETH",tokenName:"Ether",assetType:p.NATIVE,nativeNetwork:c.ETHEREUM,wrappedAssetSymbol:"WETH",denomination:18,coingeckoId:"ethereum"}};function I(t){try{return a.address.fromBech32(t),!0}catch{return!1}}function k(t,e){return!!I(t)&&t.toLowerCase().startsWith(e?"bc":"tb")}function x(t){try{return a.address.fromBase58Check(t),!0}catch(t){return!1}}function B(t){return t.mul(1e8).toNumber()}function S(t){return new s(t).div(1e8)}const M=new s(10),F=new s(0),R=(t,{max:e,min:n})=>t.gt(e)?e:t.lt(n)?n:t;var H=(t=>(t[t.MAINNET=43114]="MAINNET",t[t.TESTNET=43113]="TESTNET",t))(H||{});const O=3;function _(t){return t.critical.networks.avalanche===H.MAINNET}function U(t,e){return JSON.stringify(V(t))!==JSON.stringify(V(e))}function V(t){if(!t.config)return;const{critical:e,criticalBitcoin:n}=t.config;return[e,n]}function P(t){return Boolean(t.critical.useNewFeeStructure)}function L(t){return Boolean(t.criticalBitcoin.useNewFeeStructure)}const D=new Intl.NumberFormat(void 0,{style:"currency",currency:"USD",currencyDisplay:"symbol",minimumFractionDigits:2,maximumFractionDigits:2}),j=({addressEVM:t,addressBTC:e,bridgeConfig:n})=>!(!t||!n.config?.critical.addressBlocklist.includes(t))||!(!e||!n.config?.criticalBitcoin.addressBlocklist.includes(e)),G=t=>t.assetType===p.NATIVE,W=t=>t.assetType===p.BTC,z=t=>t.assetType===p.ERC20;var $=[{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"}],q=[{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"}],K=[{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 X(t,e,n=!1){return n&&e?function(t,e){return new r.JsonRpcSigner(t,e)}(t,e):t}function J(t,e,n,a,s=!1){if(!r.isAddress(t)||t===r.ZeroAddress)throw Error(`Invalid 'address' parameter '${t}'.`);return new r.Contract(t,e,X(n,a,s))}function Y(t,e,n){const{minimumFeeAmount:a,maximumFeeAmount:r,feePercentage:o,feePercentageDecimals:i}=n,c=new s(a).div(M.pow(e)),u=new s(r).div(M.pow(e)),d=new s(o).div(M.pow(i)).div(100),p=t.mul(d);return R(p,{min:c,max:u})}function Z({source:t,config:e,amount:n}){if(!L(e))return Q(t,e,B(n));const{wrapFeeEstimate:a,unwrapFeeEstimate:r}=e.nonCriticalBitcoin.networkInfo.btc.currentBridgeFeeEstimate;if(t===c.BITCOIN)return Y(n,8,a);const{constAmount:o,numeratorPerSat:i,denominatorPerSat:u}=r.estimatedTxFee,d=o+i/u*B(n),p=Y(n,8,r.bridgeToll),l=new s(d).div(M.pow(8));return p.add(l)}function Q(t,e,n){const{constUnwrapFeeAmount:a,unwrapFeeNumerator:s,unwrapFeeDenominator:r,wrapFeeAmount:o}=e.nonCriticalBitcoin.networkInfo.btc.currentBridgeFeeEstimate;return t===c.BITCOIN?S(o):S(a+s/r*n)}function tt(t){const e=t.criticalBitcoin?.bitcoinAssets||{};return e[Object.keys(e)[0]]}function et(t,e,n){const a=function(t,e,n){if(L(e)){const a=t===c.BITCOIN,{currentBridgeFeeEstimate:s}=e.nonCriticalBitcoin.networkInfo.btc;if(a)return Number(s.wrapFeeEstimate.minimumFeeAmount);const{constAmount:r,numeratorPerSat:o,denominatorPerSat:i}=s.unwrapFeeEstimate.estimatedTxFee,u=r+o/i*n;return Number(s.unwrapFeeEstimate.bridgeToll.minimumFeeAmount)+u}const a=Z({source:t,config:e,amount:S(n)});return B(a)}(t,e,n);if(t===c.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 nt(t,e){return e.getTransaction(t)}function at(t,e){switch(t){case c.ETHEREUM:{const n={...e.critical.assets,ETH:N.ETH};return st(t,n),n}case c.AVALANCHE:{const n={...e.critical.assets,...at(c.BITCOIN,e)};return st(t,n),n}case c.BITCOIN:{const t=tt(e);return t?{BTC:t}:{}}default:return{}}}function st(t,e){(y().disabledTokensOnNetwork[t]||[]).forEach((t=>delete e[t]))}const rt=e.createContext({});function ot(){return e.useContext(rt)}function it(){const{bridgeConfig:t}=ot();return t}function ct({source:t,config:e,asset:n,amount:a}){if(!P(e))return ut(t,e,n);const{wrapFeeApproximation:s,unwrapFeeApproximation:r}=e.nonCritical,{symbol:o,denomination:i}=n;return Y(a,i,t===c.ETHEREUM?s[o]:r[o])}function ut(t,e,n){const{wrapFeeApproximation:a,unwrapFeeApproximation:r}=e?.nonCritical||{},o=n.symbol,i=t===c.ETHEREUM?a?.[o]:r?.[o];return new s(i||0).div(M.pow(n.denomination))}const dt=2048;async function pt(t,e,n,a,s,o){const i=s?.nativeNetwork===t?s?.nativeContractAddress:s?.wrappedContractAddress;if(!i||!o||!n)return;const u=t===c.AVALANCHE?K:$,d=new r.Contract(i,u,e),p=t===c.AVALANCHE?"0x0000000000000000000000000000000000000000":n.critical.walletAddresses.ethereum,l=d.filters.Transfer(p,a),m=await e.getBlockNumber();let f=o-5,y=Math.min(f+dt-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+dt-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 lt(t,e,n,a,s){const r={};for(const o in t){const i=t[o];let c=null;i.assetType===p.ERC20?c=await mt(i,e,n,a,s):G(i)?c=await ft(i,e,n,a):W(i)&&(c=await await mt(i,e,n,a,s)),null!==c&&(r[o]=c)}return r}async function mt(t,e,a,o,i){const u=e===c.AVALANCHE?K:$;if(t.nativeNetwork!==e&&t.wrappedNetwork!==e)return null;let d;if(i&&z(t)?d=t.deprecatedTokenContractAddress:z(t)?d=e===t.nativeNetwork?t.nativeContractAddress:t.wrappedContractAddress:t.assetType===p.BTC&&(d=t.wrappedContractAddress),!d)return null;const l=new r.Contract(d,u,a),[m,f]=await n.resolve(l.balanceOf(o)),y=t.denomination??18;return m?new s(r.formatUnits(m,y)):yt(f,(()=>mt(t,e,a,o,i)))}async function ft(t,e,a,o){if(t.nativeNetwork!==e||!a)return null;const[i,c]=await n.resolve(a.getBalance(o));return i?new s(r.formatUnits(i,t.denomination)):yt(c,(()=>ft(t,e,a,o)))}async function yt(t,e){return r.isError(t,"SERVER_ERROR")?(await n.wait(1e3+Math.floor(1e3*Math.random())),e()):(console.error(t),null)}function wt(t){return t===c.AVALANCHE?"AVAX":"ETH"}async function bt({currentBlockchain:t,balance:e,currentAsset:a,assets:r,provider:o,config:i}){const c=wt(t),u=r[a||""];if(!u)return null;if(G(u)&&u.symbol===c){const t=r[u.wrappedAssetSymbol];if(!t||t.assetType!==p.ERC20)return null;if(W(t))throw new Error("Unable to calculate BTC fee data with EVM provider.");const a=J(t.nativeContractAddress,q,o),c=await o.getFeeData(),d=await a.deposit.estimateGas({value:1}),[l,m]=await n.resolve(a.transfer.estimateGas(i.critical.walletAddresses.ethereum,1));m&&console.error(m);const f=new s(d.toString()).add(l?l.toString():0).times(c.gasPrice?.toString()??0).times(2).div(n.BIG_TEN.pow(u.denomination));return f.gte(e)?null:e.minus(f)}return e}var gt=(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))(gt||{});async function ht(t,e){if(!e)return;return t.gasPrice&&n.bigintToBig(t.gasPrice*e.gasUsed,18)}function Tt(t,e){return e===c.AVALANCHE?t.avalancheProvider:t.ethereumProvider}async function At(t){const{amount:e,addressC:n,startBlockNumber:a,symbol:o,targetChain:i}=t.bridgeTransaction,u=Tt(t,i),d=t.config,p=at(i,t.config)[o],{error:l,transaction:m}=await pt(i,u,d,n,p,a)||{};if(l)throw l;if(m){const t=await u.getTransactionReceipt(m.hash),n=await async function(t,e,n){if(!n)return;const a=t===c.AVALANCHE?K:$,o=new r.Interface(a).parseLog({data:n.logs[0].data,topics:[...n.logs[0].topics]}),i=o?.args[2];return e.minus(new s(r.formatUnits(i)))}(i,e,t),a=await ht(m,t);return{hash:m.hash,bridgeFee:n,networkFee:a,isConfirmed:!0}}}class Et{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===c.BITCOIN?async function(t){const{sourceTxHash:e}=t.bridgeTransaction,{confirmations:n,fees:a}=await nt(e,t.bitcoinProvider);return{confirmations:n,networkFee:S(a)}}(this):async function(t){const{sourceChain:e,sourceTxHash:n}=t.bridgeTransaction,a=Tt(t,e),s=await a.getTransaction(n),r=s&&await a.getTransactionReceipt(s.hash),o=r?await ht(s,r):void 0;return{confirmations:await(s?.confirmations())||0,networkFee:o}}(this)}async getTargetTxData(){switch(this.bridgeTransaction.targetChain){case c.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 nt(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&&S(B(s)-t.value),a=e.confirmations>=1;return{hash:e.hash,bridgeFee:n,networkFee:S(e.fees),isConfirmed:a}}}}(this);case c.AVALANCHE:case c.ETHEREUM:return At(this)}}async getTargetBlockNumber(){return this.bridgeTransaction.targetChain===c.BITCOIN?async function(t){return await t.bitcoinProvider.getChainHeight()}(this):async function(t){return Tt(t,t.bridgeTransaction.targetChain).getBlockNumber()}(this)}_getIntervalDelayTime(t){return t===this.bridgeTransaction.targetChain&&t===c.BITCOIN?2e4:0}onInterval(t,e){const n=function(t){return t===c.AVALANCHE?1e3:t===c.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 Ct(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 vt(t,e,a,s,r,o){const i=!o,c=J(a.wrappedContractAddress,K,s,e,i),u=n.bigToBigInt(t,a.denomination),d=await Ct(c,"unwrap",[u,0],e,s,o);return r(d),d}const Nt={[c.ETHEREUM]:"0x6b7a87899490EcE95443e979cA9485CBE7E71522",[c.AVALANCHE]:"0x9b17bAADf0f21F03e35249e0e59723F34994F806"};async function It(t,e,a,s,o,i,u,p,l){u(gt.INITIAL);const m=i.critical.walletAddresses.ethereum||"";if(z(a))return async function(t,e,a,s,r,o,i,c){const u=!c,d=J(a.nativeContractAddress,$,r,e,u),p=n.bigToBigInt(t,a.denomination);o(gt.WAITING_FOR_CONFIRMATION);const l=await Ct(d,"transfer",[s,p],e,r,c);return i(l),o(gt.COMPLETE),l}(t,e,a,m,o,u,p,l);{const f=G(a)?i.critical.assets[a.wrappedAssetSymbol]:void 0;if(!f)throw new Error("missing wrappedAsset");return async function(t,e,a,s,o,i,u,p,l,m,f){const w=!f,b=J(s.nativeContractAddress,$,u,e,w),g=n.bigToBigInt(t,a.denomination);if(a.nativeNetwork===c.ETHEREUM){const t=await async function(t,e,n,a){const s=a.critical.assets.WETH;if(!s||y().environment!==d.PROD)return!1;try{const a=new r.Contract(s.nativeContractAddress,$,n),o=await a.allowance(t,Nt[c.ETHEREUM]),i=new r.Contract(s.wrappedContractAddress,$,e),u=await i.allowance(t,Nt[c.AVALANCHE]);return 0n!==o||0n!==u}catch(t){return!1}}(e,i,u,p);if(t)throw l(gt.VULNERABLE_ADDRESS),new Error("Address has vulnerable token approvals");l(gt.WAITING_FOR_DEPOSIT_CONFIRMATION);const n=J(s.nativeContractAddress,q,u,e,w),a=await Ct(n,"deposit",[{value:g}],e,u,f);m(a),l(gt.WAITING_FOR_DEPOSIT),await u.waitForTransaction(a)}l(gt.WAITING_FOR_CONFIRMATION);const h=await Ct(b,"transfer",[o,g],e,u,f);return m(h),l(gt.COMPLETE),h}(t,e,a,f,m,s,o,i,u,p,l)}}async function kt({currentBlockchain:t,amount:e,account:n,asset:a,avalancheProvider:s,ethereumProvider:r,config:o,onStatusChange:i,onTxHashChange:u,signAndSendEVM:d}){if(t===c.AVALANCHE){if(G(a))throw new Error("Cannot transfer AVAX");return vt(e,n,a,s,u,d)}if(!z(a)&&!G(a))throw new Error("Unsupported asset type");return It(e,n,a,s,r,o,i,u,d)}const xt=async({fromAccount:t,amount:e,feeRate:n,config:a,onStatusChange:s,onTxHashChange:r,signAndSendBTC:o})=>{s(gt.INITIAL);const i=a.criticalBitcoin?.walletAddresses.btc||"";if(!i)throw new Error("Bridge address is not found in the config.");const u=et(c.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:i,amount:e,feeRate:n};s(gt.WAITING_FOR_CONFIRMATION);const p=await o(d);return s(gt.COMPLETE),r(p),p};function Bt(t,n,a,s){const[r,o]=e.useState(),{config:i}=it();e.useEffect((()=>{n.getBlockNumber().then((t=>{o(t)})).catch((t=>console.error(t)))}),[n]);return{checkHistoryForNewTx:e.useCallback((async()=>pt(t,n,i,a,s,r)),[t,n,i,a,s,r]),startBlockNumber:r}}function St(t,n,a,s,r,o){const[i,c]=e.useState();return e.useEffect((()=>{!async function(){if(!n)return;const e=r&&s?await lt(n,t,a,r,o):{};c(e)}()}),[r,s,n,a,t,o]),i}function Mt(t,n=i.VsCurrencyType.USD){const{ethereumAssets:a}=ot(),r=v(),[o,c]=e.useState(F),u=e.useCallback((async t=>{try{const e=await i.simplePrice(i.getBasicCoingeckoHttp(),{coinIds:[t],currencies:[n]});c(new s(e[t.toLowerCase()]?.[n]?.price||0))}catch(t){console.error(t),c(F)}}),[n]);return e.useEffect((()=>{if(!a||!t)return;const e=a[t];if(e&&G(e))u(e.coingeckoId);else{const e=r?.[t];u(e?.coingeckoId||t)}}),[t,a,u,r]),o}function Ft(t,n,a,o){return e.useCallback((async(e,i)=>{if(!e||!i||!o)return;const u=i===c.AVALANCHE?t:n;await u.waitForTransaction(e);const d=await u.getTransactionReceipt(e);let p="";const l=d?.to?.toUpperCase();for(const t in o){const e=o[t];if(z(e)&&(e.nativeContractAddress.toUpperCase()===l||e.wrappedContractAddress.toUpperCase()===l)){p=t;break}}const m=r.AbiCoder.defaultAbiCoder().decode(["uint256"],d?.logs?.[0]?.data??"");let f;if(p&&m[0]){const t=o[p];f=new s(m[0].toString()).div(M.pow(t.denomination))}a({tokenSymbol:p,amount:f||F})}),[a,o])}function Rt(t,n,a,s,o,i){const[u,d]=e.useState();return e.useEffect((()=>{if(i&&o)return t===c.AVALANCHE?function(){if(!i||!o)return;const t=new r.Contract(o.wrappedContractAddress,K,n),e=t.filters.Transfer(null,i);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(!i||!s)return;const t=s.critical.walletAddresses.ethereum;let e;return a.getBlockNumber().then((n=>{e=window.setInterval((async()=>{const a=`https://api${4===s?.critical.networks.ethereum?"-rinkeby":""}.etherscan.io/api?module=account&action=tokentx&address=${i}&startblock=${n}&endblock=99999999&sort=asc&apikey=${l}`;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,t,i,s]),u}function Ht(){const[t,n]=e.useState(Date.now()),[a,s]=e.useState(0),[r,o]=e.useState(!1);e.useEffect((()=>{let e;return r?e=window.setInterval((()=>{s(Math.floor((Date.now()-t)/1e3))}),1e3):r||0===a||window.clearInterval(e),()=>{window.clearInterval(e)}}),[r,t,a]);const i=e.useCallback(((t,e)=>{n(t);const a=e??Date.now();s(Math.floor((a-t)/1e3))}),[]),c=e.useCallback((()=>{r||(o(!0),n(Date.now()))}),[r]),u=e.useCallback((()=>{o(!1)}),[]);return e.useMemo((()=>({isActive:r,seconds:a,start:c,stop:u,setTimerSeconds:i,started:t})),[r,a,i,t,c,u])}function Ot(t,n,a){const[o,i]=e.useState(0),[c,u]=e.useState();return e.useEffect((()=>{if(a)return n.on("block",e),n.waitForTransaction(a,t).then((async t=>{t&&i(await t.confirmations()),n.removeListener("block",e)})).catch((t=>console.error(t))),()=>{n.removeListener("block",e)};async function e(){if(a)try{const t=await n.getTransaction(a);if(!t||!t.gasPrice)return;if(i(await t.confirmations()),!c){const e=await n.getTransactionReceipt(a);if(!e)return;u(new s(r.formatUnits(t.gasPrice*e.gasUsed,18)))}}catch(t){console.error(t)}}}),[a,n,t,c]),{confirmations:o,gasCost:c}}exports.AVERAGE_TRANSFER_TX_GAS_USAGE=40000n,exports.AssetType=p,exports.BIG_TEN=M,exports.BIG_ZERO=F,exports.Blockchain=c,exports.BridgeSDKProvider=function({children:n}){const[a,s]=e.useState(),[r,o]=e.useState({}),i=e.useCallback((t=>{if(U(r,t)&&t.config){const{critical:e,criticalBitcoin:n}=t.config;s({critical:e,criticalBitcoin:n})}o(t)}),[r]),[u,d]=e.useState(),[l,m]=e.useState(c.ETHEREUM),[f,y]=e.useState(c.AVALANCHE),[w,b]=e.useState(),g=e.useMemo((()=>a?at(c.ETHEREUM,a):{}),[a]),h=e.useMemo((()=>{const t={};for(const e in g){const n=g[e];n.assetType===p.ERC20&&(t[e]=n)}return t}),[g]),T=e.useMemo((()=>a?at(c.BITCOIN,a):{}),[a]),A=e.useMemo((()=>a?at(c.AVALANCHE,a):{}),[a]),E=e.useMemo((()=>{if(u)return g[u]||T[u]||A[u]}),[A,T,u,g]),v=e.useMemo((()=>l===c.AVALANCHE?A:l===c.BITCOIN?T:g),[A,T,l,g]);e.useEffect((()=>{const t=Object.keys(v);u&&t.includes(u)||d(1===t.length?t[0]:void 0)}),[u,v]);const N=e.useMemo((()=>{if(l===c.AVALANCHE){if(E?.assetType===p.ERC20)return[c.ETHEREUM];if(E?.assetType===p.BTC)return[c.BITCOIN]}else if(l===c.ETHEREUM||l===c.BITCOIN)return[c.AVALANCHE];return[]}),[l,E]);e.useEffect((()=>{N.includes(f)||y(N[0])}),[l,f,N]),e.useEffect((()=>{l===c.BITCOIN||l===c.ETHEREUM?y(c.AVALANCHE):l===c.AVALANCHE&&(E?.assetType===p.ERC20?y(c.ETHEREUM):E?.assetType===p.BTC&&y(c.BITCOIN))}),[l,E]);const I={sourceAssets:v,ethereumAssets:g,bitcoinAssets:T,ethereumWrappedAssets:h,avalancheAssets:A,bridgeConfig:r,setBridgeConfig:i,criticalConfig:a,currentAsset:u,currentAssetData:E,setCurrentAsset:d,currentBlockchain:l,setCurrentBlockchain:m,targetBlockchain:f,transactionDetails:w,setTransactionDetails:b,targetChains:N};return t.jsx(rt.Provider,{value:I,children:t.jsx(C,{children:n})})},exports.ETHERSCAN_API_KEY=l,exports.Environment=d,exports.INFURA_API_KEY=m,exports.NetworkType=u,exports.TokenInfoProvider=C,exports.WrapStatus=gt,exports.btcToSatoshi=B,exports.capped=R,exports.checkHistoryForNewTxEVM=pt,exports.estimateGas=async function(t,e,a,s,r,o,i=!1){if(z(a)||W(a)){if(o===c.AVALANCHE){const r=J(a.wrappedContractAddress,K,s.avalanche,e,i),o=await r.unwrap.populateTransaction(n.bigToBigInt(t,a.denomination),0);return s.avalanche.estimateGas({...o,from:e})}if(z(a)){const r=J(a.nativeContractAddress,$,s.ethereum,e,i),o=await r.transfer.populateTransaction(e,n.bigToBigInt(t,a.denomination));return s.ethereum.estimateGas({...o,from:e})}}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===c.ETHEREUM){const r=J(o.nativeContractAddress,q,s.ethereum,e,i),c=await r.deposit.populateTransaction({value:n.bigToBigInt(t,a.denomination)});u+=await s.ethereum.estimateGas({...c,from:e})}const d=J(o.nativeContractAddress,$,s.ethereum,e,i),p=await d.transfer.populateTransaction(e,n.bigToBigInt(t,a.denomination));try{u+=await s.ethereum.estimateGas({...p,from:e})}catch{u+=40000n}return u}},exports.fetchConfig=async function(t){const[e,a]=await n.resolve(async function(t){const e=y(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 i=o.appConfig;for(const t in i.critical.assets)i.critical.assets[t].assetType=p.ERC20,i.critical.assets[t].symbol=t;if(i.criticalBitcoin)for(const t in i.criticalBitcoin.bitcoinAssets)i.criticalBitcoin.bitcoinAssets[t].assetType=p.BTC,i.criticalBitcoin.bitcoinAssets[t].symbol=t.toUpperCase(),i.criticalBitcoin.bitcoinAssets[t].denomination=8,i.criticalBitcoin.bitcoinAssets[t].nativeNetwork=c.BITCOIN;return i}(t));return e?{config:e}:{error:a}},exports.fetchTokenBalances=lt,exports.formatTokenAmount=function(t,e=2){return new Intl.NumberFormat("en-US",{minimumFractionDigits:2,maximumFractionDigits:e}).format(t.toNumber())},exports.getAssets=at,exports.getBridgeFeeEstimateBTC=Z,exports.getBridgeFeeEstimateEVM=ct,exports.getBtcAsset=tt,exports.getBtcTransaction=function(t,e,n,s,r){const i=_(t);if(!k(e,i))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=et(c.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(!r)throw new Error("Fee rate is not provided in the config.");const p=i?a.networks.bitcoin:a.networks.testnet,{inputs:l,outputs:m,psbt:f,fee:y}=o.createTransferTx(d,e,s,r,n,p);if(!l||!m||!f)throw new Error("Transaction values can not be satisfied.");const w=B(Z({source:c.BITCOIN,config:t,amount:S(s)}));return{fee:y,tx:f,bridgeFee:w,receiveAmount:s-w,inputs:l,outputs:m}},exports.getBtcTransactionDetails=function(t,e,n,a,s){if(!k(e,_(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 r=et(c.BITCOIN,t,a);if(a<r)throw new Error(`Amount must be at least ${r} satoshis.`);const i=t.criticalBitcoin?.walletAddresses.btc||"";if(!i)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}=o.getTransferTxDetails(i,e,a,s,n);if(!u||!d)throw new Error("Transaction values can not be satisfied.");const l=B(Z({source:c.BITCOIN,config:t,amount:S(a)}));return{fee:p,bridgeFee:l,receiveAmount:a-l,inputs:u,outputs:d}},exports.getMaxTransferAmount=bt,exports.getMinimumConfirmations=function(t,e){return t===c.BITCOIN?e.nonCriticalBitcoin?.networkInfo.btc.minimumConfirmations||0:e.nonCritical.minimumConfirmations[t]||0},exports.getMinimumTransferAmount=et,exports.getNativeSymbol=function(t){switch(t){case c.AVALANCHE:return"AVAX";case c.BITCOIN:return"BTC";case c.ETHEREUM:return"ETH";default:return"???"}},exports.getRuntimeConfig=y,exports.getStaticBridgeFeeEstimateBTC=Q,exports.getStaticBridgeFeeEstimateEVM=ut,exports.getTxConfirmations=async function(t,e){return(await nt(t,e)).confirmations},exports.getTxDetails=nt,exports.hasCriticalChanges=U,exports.initalState=A,exports.isAddressBlocklisted=j,exports.isBase58Address=x,exports.isBase58AddressInNetwork=function(t,e){if(!x(t))return!1;const n=e?a.networks.bitcoin:a.networks.testnet;try{return a.address.toOutputScript(t,n),!0}catch(t){return!1}},exports.isBech32Address=I,exports.isBech32AddressInNetwork=k,exports.isBtcAsset=W,exports.isBtcUsingDynamicFees=L,exports.isEthAsset=z,exports.isEthUsingDynamicFees=P,exports.isMainnetConfig=_,exports.isNativeAsset=G,exports.satoshiToBtc=S,exports.setBridgeEnvironment=function(t){f=T[t]},exports.trackBridgeTransaction=function(t){return new Et(t)},exports.transferAssetBTC=xt,exports.transferAssetEVM=kt,exports.unwrapAsset=vt,exports.usdFormatter=D,exports.useBridgeConfig=it,exports.useBridgeConfigUpdater=function(t){const{bridgeConfig:n,setBridgeConfig:a}=ot();e.useEffect((()=>{async function e(){const e=await t();a(e)}n.config||n.error||e();const s=window.setInterval((()=>{e()}),15e3);return()=>{window.clearInterval(s)}}),[t,n])},exports.useBridgeFeeEstimate=function(t){const{currentAssetData:n,currentBlockchain:a,bridgeConfig:s,ethereumAssets:r,ethereumWrappedAssets:o}=ot();return e.useMemo((()=>{if(!r||!n||!s.config)return;const e=W(n)&&(a===c.AVALANCHE||a===c.BITCOIN),i=!W(n)&&(a===c.AVALANCHE||a===c.ETHEREUM);if(e)return Z({source:a,config:s.config,amount:t});if(i){const e=G(n)?o[n.wrappedAssetSymbol]:n;return ct({source:a,config:s.config,asset:e,amount:t})}}),[r,n,s.config,a,t,o])},exports.useBridgeSDK=ot,exports.useCheckHistoryForNewTxEVM=Bt,exports.useGetAirdropAmount=function(t,n,a,r){return e.useCallback((()=>r?.avaxPromotionAmount&&r.avaxPromotionDollarThreshold&&t===c.AVALANCHE&&a?.amount?a.amount.times(n).lt(new s(r.avaxPromotionDollarThreshold))?0:new s(r.avaxPromotionAmount).div(M.pow(18)).toNumber():0),[r,n,t,a])},exports.useGetTokenBalanceEVM=function(t,n,a,s,r,o){const{ethereumAssets:i}=ot();if(n&&G(n)&&n.nativeNetwork!==t){const t=i[n.wrappedAssetSymbol];t&&t.assetType===p.ERC20&&(n=t)}const c=St(t,e.useMemo((()=>n?{[n.symbol]:n}:void 0),[n]),a,s,r,o);return n&&c?c[n.symbol]:void 0},exports.useGetTokenBalancesEVM=St,exports.useGetTokenSymbolOnNetwork=function(){const{sourceAssets:t}=ot();return{getTokenSymbolOnNetwork:e.useCallback(((e,n)=>{const a=t[e];let s=e;return a&&n!==a.nativeNetwork?(G(a)&&(s=a.wrappedAssetSymbol),a.nativeNetwork===c.ETHEREUM?`${s}.e`:a.nativeNetwork===c.AVALANCHE?`${s}.a`:a.nativeNetwork===c.BITCOIN?`${s}.b`:s):s}),[t])}},exports.useHasEnoughForGas=function(t,n){const[a,r]=e.useState(!0);return e.useEffect((()=>{!async function(){if(!t||!n)return;const e=await n.getBalance(t),a=await n.getFeeData();r(new s(e.toString()).gte(a?.gasPrice?.toString()||"0"))}()}),[t,n]),a},exports.useIsAddressSanctioned=function(t){const e=it();return j({addressEVM:t,addressBTC:t,bridgeConfig:e})},exports.useMaxTransferAmount=function(t,n,a){const{currentAsset:s,currentBlockchain:r,ethereumAssets:o,avalancheAssets:i,bridgeConfig:{config:u}}=ot(),d=r===c.AVALANCHE?i:o,p=d[s||""],l=wt(r),[m,f]=e.useState(null);return e.useEffect((()=>{s&&t&&a&&u?bt({currentAsset:s,currentBlockchain:r,assets:d,balance:t,provider:a,config:u}).then((t=>{f(t)})).catch((t=>console.error(t))):f(null)}),[n,p,d,t,u,s,l,a,r]),m},exports.useMinimumTransferAmount=function(t){const{currentAssetData:n,currentBlockchain:a,bridgeConfig:r,ethereumAssets:o,ethereumWrappedAssets:i}=ot();return e.useMemo((()=>{if(!o||!n||!r.config)return F;const e=W(n)&&(a===c.AVALANCHE||a===c.BITCOIN),u=!W(n)&&(a===c.AVALANCHE||a===c.ETHEREUM);if(e)return S(et(a,r.config,B(t)));if(u){const t=G(n)?i[n.wrappedAssetSymbol]:n;return function(t,e,n){if(P(e)){const a=t===c.ETHEREUM?"wrapFeeApproximation":"unwrapFeeApproximation",{minimumFeeAmount:r}=e.nonCritical[a][n.symbol];return new s(r).div(M.pow(n.denomination)).mul(O)}return ct({source:t,config:e,asset:n,amount:F}).mul(O)}(a,r.config,t)}return F}),[o,n,r.config,a,t,i])},exports.usePrice=Mt,exports.usePriceForChain=function(t){return Mt(t===c.AVALANCHE?"avalanche-2":t)},exports.useResetTransactionDetailsFromParams=Ft,exports.useSubscribeForNewTransactionFromBridgeEVM=Rt,exports.useTimer=Ht,exports.useTokenInfoContext=v,exports.useTransferAssetBTC=function(t){const{currentBlockchain:n}=ot(),{config:a}=it(),[s,r]=e.useState(gt.INITIAL),[o,i]=e.useState("");return{transferAsset:e.useCallback((function({fromAccount:e,amount:s,feeRate:o}){if(a&&n===c.BITCOIN)return xt({fromAccount:e,amount:s,feeRate:o,config:a,onStatusChange:r,onTxHashChange:i,signAndSendBTC:t})}),[a,n,t]),status:s,txHash:o}},exports.useTransferAssetEVM=function(t,n,a,s,r){const{currentBlockchain:o}=ot(),{config:i}=it(),[u,d]=e.useState(gt.INITIAL),[p,l]=e.useState("");return{transferAsset:e.useCallback((function(e){if(t&&n&&i&&(o===c.AVALANCHE||o===c.ETHEREUM))return kt({currentBlockchain:o,amount:e,account:n,asset:t,avalancheProvider:a,ethereumProvider:s,config:i,onStatusChange:d,onTxHashChange:l,signAndSendEVM:r})}),[n,t,a,i,o,s,r]),status:u,txHash:p}},exports.useTxTracker=function(t,n,a,s,r,o,i,u,d,p,l){const[m,f]=e.useState(!1),[y,w]=e.useState(!1),[b,g]=e.useState(),h=p?.[d?.tokenSymbol||""],[T,A]=e.useState(!1),E=Ht(),C=Ht(),v=t===c.AVALANCHE?s:r,N=t===c.ETHEREUM?c.AVALANCHE:c.ETHEREUM,I=t===c.AVALANCHE?r:s,k=i?.nonCritical.minimumConfirmations[t]||1e3,x=Rt(N,s,r,i,h,u),{confirmations:B,gasCost:S}=Ot(k,v,n),M=Ft(s,r,o,p),F=Mt(t),{checkHistoryForNewTx:R}=Bt(N,I,u,h),H=e.useCallback((t=>{C.stop(),g(t),A(!0)}),[C]);e.useEffect((()=>{E.start(),E.setTimerSeconds(parseInt(a))}),[]),e.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]),e.useEffect((()=>{d||(M(n,t),w(!0))}),[M,t,d,n]),e.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]),e.useEffect((()=>{d&&x&&B>=k&&H(x.hash)}),[B,H,k,x,d]);const O=F&&S&&F.mul(S);return{sourceNetwork:t,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=Ot,exports.wrapAsset=It;
|
package/dist/index.d.ts
CHANGED
|
@@ -853,4 +853,5 @@ declare function estimateGas(amount: Big, account: string, asset: Asset, provide
|
|
|
853
853
|
avalanche: JsonRpcApiProvider;
|
|
854
854
|
}, config: AppConfig, sourceBlockchain: Blockchain, withSigner?: boolean): Promise<bigint | undefined>;
|
|
855
855
|
|
|
856
|
-
export { AVERAGE_TRANSFER_TX_GAS_USAGE,
|
|
856
|
+
export { AVERAGE_TRANSFER_TX_GAS_USAGE, AssetType, BIG_TEN, BIG_ZERO, Blockchain, BridgeSDKProvider, ETHERSCAN_API_KEY, Environment, INFURA_API_KEY, NetworkType, TokenInfoProvider, WrapStatus, btcToSatoshi, capped, checkHistoryForNewTxEVM, estimateGas, fetchConfig, fetchTokenBalances, formatTokenAmount, getAssets, getBridgeFeeEstimateBTC, getBridgeFeeEstimateEVM, getBtcAsset, getBtcTransaction, getBtcTransactionDetails, getMaxTransferAmount, getMinimumConfirmations, getMinimumTransferAmount, getNativeSymbol, getRuntimeConfig, getStaticBridgeFeeEstimateBTC, getStaticBridgeFeeEstimateEVM, getTxConfirmations, getTxDetails, hasCriticalChanges, initalState, isAddressBlocklisted, isBase58Address, isBase58AddressInNetwork, isBech32Address, isBech32AddressInNetwork, isBtcAsset, isBtcUsingDynamicFees, isEthAsset, isEthUsingDynamicFees, isMainnetConfig, isNativeAsset, satoshiToBtc, setBridgeEnvironment, trackBridgeTransaction, transferAssetBTC, transferAssetEVM, unwrapAsset, usdFormatter, useBridgeConfig, useBridgeConfigUpdater, useBridgeFeeEstimate, useBridgeSDK, useCheckHistoryForNewTxEVM, useGetAirdropAmount, useGetTokenBalanceEVM, useGetTokenBalancesEVM, useGetTokenSymbolOnNetwork, useHasEnoughForGas, useIsAddressSanctioned, useMaxTransferAmount, useMinimumTransferAmount, usePrice, usePriceForChain, useResetTransactionDetailsFromParams, useSubscribeForNewTransactionFromBridgeEVM, useTimer, useTokenInfoContext, useTransferAssetBTC, useTransferAssetEVM, useTxTracker, useWaitForConfirmations, wrapAsset };
|
|
857
|
+
export type { AddEthereumChainParameter, AppConfig, AppConfigWithDynamicFeesForBitcoin, AppConfigWithDynamicFeesForEthereum, AppConfigWithFullDynamicFees, AppConfigWithFullStaticFees, AppConfigWithStaticFeesForBitcoin, AppConfigWithStaticFeesForEthereum, Asset, AssetBase, Assets, AvalancheAssets, BitcoinConfigAsset, BitcoinConfigAssets, BitcoinDynamicFeeConfig, BitcoinDynamicFeeConfigAsset, BitcoinDynamicFeeConfigAssets, BitcoinDynamicFeeCriticalConfig, BitcoinStaticFeeConfig, BitcoinStaticFeeConfigAsset, BitcoinStaticFeeConfigAssets, BitcoinStaticFeeCriticalConfig, BridgeConfig, BridgeSDKState, BridgeTransaction, BtcBlockchains, BtcTransactionRequest, CriticalConfig, DynamicFeeEstimation, EthChains, EthereumAssetConfigBase, EthereumAssets, EthereumConfigAsset, EthereumConfigAssets, EthereumDynamicFeeAssetConfig, EthereumDynamicFeeConfig, EthereumDynamicFeeConfigAssets, EthereumStaticFeeAssetConfig, EthereumStaticFeeConfig, EthereumStaticFeeConfigAssets, HistoryTxData, NativeAsset, NonCriticalConfig, RuntimeConfig, TokenInfo, TokenInfoData, TrackerSubscription, TrackerViewProps, TransactionDetails, TransferAssetBTCParams, TransferAssetEVMParams, TxHash };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import t
|
|
1
|
+
import{jsx as t}from"react/jsx-runtime";import{createContext as e,useState as r,useCallback as s,useMemo as i,useEffect as n,useContext as c}from"react";import{Blockchain as o,AssetType as a}from"../types/config.js";import{TokenInfoProvider as A}from"./TokenInfoProvider.js";import{getAssets as E}from"../lib/getAssets.js";import"../utils/bignumber.js";import{hasCriticalChanges as u}from"../utils/config.js";import"@avalabs/core-utils-sdk";import"ethers";const l=e({});function C(){return c(l)}function f({children:e}){const[c,C]=r(),[f,T]=r({}),m=s((t=>{if(u(f,t)&&t.config){const{critical:e,criticalBitcoin:r}=t.config;C({critical:e,criticalBitcoin:r})}T(t)}),[f]),[p,g]=r(),[B,H]=r(o.ETHEREUM),[I,N]=r(o.AVALANCHE),[d,h]=r(),R=i((()=>c?E(o.ETHEREUM,c):{}),[c]),b=i((()=>{const t={};for(const e in R){const r=R[e];r.assetType===a.ERC20&&(t[e]=r)}return t}),[R]),j=i((()=>c?E(o.BITCOIN,c):{}),[c]),y=i((()=>c?E(o.AVALANCHE,c):{}),[c]),L=i((()=>{if(p)return R[p]||j[p]||y[p]}),[y,j,p,R]),O=i((()=>B===o.AVALANCHE?y:B===o.BITCOIN?j:R),[y,j,B,R]);n((()=>{const t=Object.keys(O);p&&t.includes(p)||g(1===t.length?t[0]:void 0)}),[p,O]);const V=i((()=>{if(B===o.AVALANCHE){if(L?.assetType===a.ERC20)return[o.ETHEREUM];if(L?.assetType===a.BTC)return[o.BITCOIN]}else if(B===o.ETHEREUM||B===o.BITCOIN)return[o.AVALANCHE];return[]}),[B,L]);n((()=>{V.includes(I)||N(V[0])}),[B,I,V]),n((()=>{B===o.BITCOIN||B===o.ETHEREUM?N(o.AVALANCHE):B===o.AVALANCHE&&(L?.assetType===a.ERC20?N(o.ETHEREUM):L?.assetType===a.BTC&&N(o.BITCOIN))}),[B,L]);const k={sourceAssets:O,ethereumAssets:R,bitcoinAssets:j,ethereumWrappedAssets:b,avalancheAssets:y,bridgeConfig:f,setBridgeConfig:m,criticalConfig:c,currentAsset:p,currentAssetData:L,setCurrentAsset:g,currentBlockchain:B,setCurrentBlockchain:H,targetBlockchain:I,transactionDetails:d,setTransactionDetails:h,targetChains:V};return t(l.Provider,{value:k,children:t(A,{children:e})})}export{f as BridgeSDKProvider,C as useBridgeSDK};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import{jsx as r}from"react/jsx-runtime";import{createContext as o,useState as t,useEffect as n,useContext as e}from"react";import{loadTokenInfo as i}from"../utils/loadTokenInfo.js";const c={},a=o(c),m=({children:o})=>{const[e,c]=t();return n((()=>{!async function(){const r=await i();c(r)}()}),[]),r(a.Provider,{value:e,children:o})};function s(){return e(a)}export{m as TokenInfoProvider,c as initalState,s as useTokenInfoContext};
|
package/esm/contexts/models.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TransactionDetails } from '../lib/models.js';
|
|
2
|
-
import { NativeAsset, EthereumConfigAsset,
|
|
2
|
+
import { NativeAsset, EthereumConfigAsset, EthereumConfigAssets, BitcoinConfigAsset, Assets, BitcoinConfigAssets, BridgeConfig, CriticalConfig, Blockchain, Asset } from '../types/config.js';
|
|
3
3
|
|
|
4
4
|
type EthereumAssets = Record<string, NativeAsset | EthereumConfigAsset>;
|
|
5
5
|
type AvalancheAssets = Record<string, BitcoinConfigAsset | EthereumConfigAsset>;
|
|
@@ -23,4 +23,4 @@ interface BridgeSDKState {
|
|
|
23
23
|
targetChains: Blockchain[];
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
export { AvalancheAssets, BridgeSDKState, EthereumAssets };
|
|
26
|
+
export type { AvalancheAssets, BridgeSDKState, EthereumAssets };
|
package/esm/hooks/usePrice.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useState as o,useCallback as r,useEffect as e}from"react";import t from"big.js";import{BIG_ZERO as s}from"../utils/bignumber.js";import{isNativeAsset as i}from"../utils/asset.js";import"@avalabs/core-utils-sdk";import"ethers";import{useBridgeSDK as c}from"../contexts/BridgeSDKProvider.js";import{useTokenInfoContext as n}from"../contexts/TokenInfoProvider.js";import{
|
|
1
|
+
import{useState as o,useCallback as r,useEffect as e}from"react";import t from"big.js";import{BIG_ZERO as s}from"../utils/bignumber.js";import{isNativeAsset as i}from"../utils/asset.js";import"@avalabs/core-utils-sdk";import"ethers";import{useBridgeSDK as c}from"../contexts/BridgeSDKProvider.js";import{useTokenInfoContext as n}from"../contexts/TokenInfoProvider.js";import{VsCurrencyType as m,simplePrice as a,getBasicCoingeckoHttp as f}from"@avalabs/core-coingecko-sdk";function p(p,u=m.USD){const{ethereumAssets:d}=c(),l=n(),[g,k]=o(s),b=r((async o=>{try{const r=await a(f(),{coinIds:[o],currencies:[u]});k(new t(r[o.toLowerCase()]?.[u]?.price||0))}catch(o){console.error(o),k(s)}}),[u]);return e((()=>{if(!d||!p)return;const o=d[p];if(o&&i(o))b(o.coingeckoId);else{const o=l?.[p];b(o?.coingeckoId||p)}}),[p,d,b,l]),g}export{p as usePrice};
|
|
@@ -28,4 +28,5 @@ interface TrackerViewProps {
|
|
|
28
28
|
*/
|
|
29
29
|
declare function useTxTracker(sourceNetwork: Blockchain, txId: string, started: string, avalancheProvider: Provider, ethereumProvider: Provider, setTransactionDetails: (details: TransactionDetails) => void, config: Maybe<AppConfig>, account: Maybe<string>, transactionDetails: Maybe<TransactionDetails>, ethWrappedAssets: Maybe<EthereumConfigAssets>, isHidden?: boolean): TrackerViewProps;
|
|
30
30
|
|
|
31
|
-
export {
|
|
31
|
+
export { useTxTracker };
|
|
32
|
+
export type { TrackerViewProps };
|
package/esm/lib/btc/models.d.ts
CHANGED
|
@@ -12,4 +12,5 @@ interface HistoryTxData {
|
|
|
12
12
|
*/
|
|
13
13
|
declare function checkHistoryForNewTxEVM(network: Blockchain, provider: Provider, config: Maybe<AppConfig>, account: Maybe<string>, asset: Maybe<EthereumConfigAsset>, startBlockNumber: Maybe<number>): Promise<HistoryTxData | undefined>;
|
|
14
14
|
|
|
15
|
-
export {
|
|
15
|
+
export { checkHistoryForNewTxEVM };
|
|
16
|
+
export type { HistoryTxData };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AppConfig, EthereumConfigAsset, AppConfigWithStaticFeesForEthereum } from '../types/config.js';
|
|
2
2
|
import Big from 'big.js';
|
|
3
3
|
import { EthChains } from './models.js';
|
|
4
4
|
|
package/esm/lib/models.d.ts
CHANGED
|
@@ -18,4 +18,5 @@ type TransferAssetBTCParams = {
|
|
|
18
18
|
};
|
|
19
19
|
declare const transferAssetBTC: ({ fromAccount, amount, feeRate, config, onStatusChange, onTxHashChange, signAndSendBTC, }: TransferAssetBTCParams) => Promise<string>;
|
|
20
20
|
|
|
21
|
-
export {
|
|
21
|
+
export { transferAssetBTC };
|
|
22
|
+
export type { BtcTransactionRequest, TransferAssetBTCParams };
|
|
@@ -25,4 +25,5 @@ type TransferAssetEVMParams = {
|
|
|
25
25
|
*/
|
|
26
26
|
declare function transferAssetEVM({ currentBlockchain, amount, account, asset, avalancheProvider, ethereumProvider, config, onStatusChange, onTxHashChange, signAndSendEVM, }: TransferAssetEVMParams): Promise<TxHash>;
|
|
27
27
|
|
|
28
|
-
export {
|
|
28
|
+
export { transferAssetEVM };
|
|
29
|
+
export type { TransferAssetEVMParams };
|
package/esm/runtime/config.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Blockchain as t,Environment 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:e.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:{[t.AVALANCHE]:[],[t.ETHEREUM]:["FAU"]}},c={...i,environment:e.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:e.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:e.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:{[t.AVALANCHE]:[],[t.ETHEREUM]:["CRV"]}},m={[e.PROD]:g,[e.STAGING]:c,[e.TEST]:d,[e.DEV]:i};export{s as ETHERSCAN_API_KEY,a as INFURA_API_KEY,r as getRuntimeConfig,o as setBridgeEnvironment};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Blockchain as e,AssetType as o}from"../types/config.js";var t={ETH:{symbol:"ETH",tokenName:"Ether",assetType:o.NATIVE,nativeNetwork:e.ETHEREUM,wrappedAssetSymbol:"WETH",denomination:18,coingeckoId:"ethereum"}};export{t as default};
|
package/esm/types/config.d.ts
CHANGED
|
@@ -294,4 +294,5 @@ interface AddEthereumChainParameter {
|
|
|
294
294
|
iconUrls?: string[];
|
|
295
295
|
}
|
|
296
296
|
|
|
297
|
-
export {
|
|
297
|
+
export { AssetType, Blockchain, Environment, NetworkType };
|
|
298
|
+
export type { AddEthereumChainParameter, AppConfig, AppConfigWithDynamicFeesForBitcoin, AppConfigWithDynamicFeesForEthereum, AppConfigWithFullDynamicFees, AppConfigWithFullStaticFees, AppConfigWithStaticFeesForBitcoin, AppConfigWithStaticFeesForEthereum, Asset, AssetBase, Assets, BitcoinConfigAsset, BitcoinConfigAssets, BitcoinDynamicFeeConfig, BitcoinDynamicFeeConfigAsset, BitcoinDynamicFeeConfigAssets, BitcoinDynamicFeeCriticalConfig, BitcoinStaticFeeConfig, BitcoinStaticFeeConfigAsset, BitcoinStaticFeeConfigAssets, BitcoinStaticFeeCriticalConfig, BridgeConfig, CriticalConfig, DynamicFeeEstimation, EthereumAssetConfigBase, EthereumConfigAsset, EthereumConfigAssets, EthereumDynamicFeeAssetConfig, EthereumDynamicFeeConfig, EthereumDynamicFeeConfigAssets, EthereumStaticFeeAssetConfig, EthereumStaticFeeConfig, EthereumStaticFeeConfigAssets, NativeAsset, NonCriticalConfig, RuntimeConfig };
|
package/esm/types/tokenInfo.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@avalabs/core-bridge-sdk",
|
|
3
|
-
"version": "3.1.0-alpha.
|
|
3
|
+
"version": "3.1.0-alpha.70",
|
|
4
4
|
"license": "Limited Ecosystem License",
|
|
5
5
|
"private": false,
|
|
6
|
-
"
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "dist/index.cjs",
|
|
7
8
|
"module": "esm/index.js",
|
|
8
9
|
"typings": "dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./esm/index.d.ts",
|
|
13
|
+
"import": "./esm/index.js",
|
|
14
|
+
"require": "./dist/index.cjs",
|
|
15
|
+
"default": "./esm/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
9
18
|
"files": [
|
|
10
19
|
"dist",
|
|
11
20
|
"esm"
|
|
@@ -14,7 +23,7 @@
|
|
|
14
23
|
"scripts": {
|
|
15
24
|
"start": "rollup -c --watch",
|
|
16
25
|
"build": "rollup -c",
|
|
17
|
-
"lint": "eslint --fix -c ./.eslintrc.
|
|
26
|
+
"lint": "eslint --fix -c ./.eslintrc.cjs \"src/**/*.ts*\"",
|
|
18
27
|
"test": "jest",
|
|
19
28
|
"test:watch": "jest --watch"
|
|
20
29
|
},
|
|
@@ -34,9 +43,9 @@
|
|
|
34
43
|
"ts-jest": "29.1.2"
|
|
35
44
|
},
|
|
36
45
|
"dependencies": {
|
|
37
|
-
"@avalabs/core-coingecko-sdk": "3.1.0-alpha.
|
|
38
|
-
"@avalabs/core-utils-sdk": "3.1.0-alpha.
|
|
39
|
-
"@avalabs/core-wallets-sdk": "3.1.0-alpha.
|
|
46
|
+
"@avalabs/core-coingecko-sdk": "3.1.0-alpha.70",
|
|
47
|
+
"@avalabs/core-utils-sdk": "3.1.0-alpha.70",
|
|
48
|
+
"@avalabs/core-wallets-sdk": "3.1.0-alpha.70"
|
|
40
49
|
},
|
|
41
50
|
"peerDependencies": {
|
|
42
51
|
"big.js": "^6.2.1",
|
|
@@ -45,5 +54,5 @@
|
|
|
45
54
|
"ethers": "^6.7.1",
|
|
46
55
|
"react": "^17.0.2"
|
|
47
56
|
},
|
|
48
|
-
"gitHead": "
|
|
57
|
+
"gitHead": "688e937b78780f292ebdced7548a0eca99cee55a"
|
|
49
58
|
}
|
package/dist/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
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({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;
|