@swapkit/toolbox-evm
Advanced tools
Comparing version 1.5.8 to 1.6.0
@@ -1,3 +0,3 @@ | ||
import{AbstractSigner as so,BrowserProvider as Oo,HDNodeWallet as ny,JsonRpcProvider as ty,Signature as oy,Transaction as yy}from"ethers";import{ChainIdToChain as Dn,RequestClient as Hn,formatBigIntToSafeValue as Gn}from"@swapkit/helpers";var J=({apiKey:n,chainId:t})=>({getBalance:async(y)=>{let{data:o}=await Hn.get(`https://api.covalenthq.com/v1/${t}/address/${y}/balances_v2/`,{searchParams:{key:n}});return(o?.items||[]).filter(({is_spam:p})=>!p).map(({balance:p,contract_decimals:T,contract_ticker_symbol:e,contract_address:u,native_token:i})=>({value:Gn({value:BigInt(p),decimal:T,bigIntDecimal:T}),decimal:T,chain:Dn[t],symbol:`${e||"Unknown"}${i?"":`-${u}`}`}))}});import{Chain as zn,RequestClient as In,formatBigIntToSafeValue as En}from"@swapkit/helpers";var Sn="https://api.ethplorer.io",nn=(n="freekey")=>({getBalance:async(t)=>{let{tokens:y=[]}=await In.get(`${Sn}/getAddressInfo/${t}`,{searchParams:{apiKey:n}});return y.filter(({tokenInfo:{symbol:o},rawBalance:p})=>o&&p!=="0").map(({tokenInfo:{symbol:o,decimals:p,address:T},rawBalance:e})=>({chain:zn.Ethereum,symbol:T?`${o}-${T}`:o,value:En({value:BigInt(e),decimal:Number.parseInt(p),bigIntDecimal:Number.parseInt(p)}),decimal:Number.parseInt(p)}))}});import{AssetValue as D,BaseDecimal as tn,FeeOption as on,SwapKitNumber as P,filterAssets as kn,formatBigIntToSafeValue as Ln,isGasAsset as Wn}from"@swapkit/helpers";var Yt=async({toolbox:n,from:t,memo:y="",feeOptionKey:o=on.Fastest,assetValue:p,abi:T,funcName:e,funcParams:u,contractAddress:i,txOverrides:m})=>{let l=(await n.getBalance(t)).find(({symbol:R,chain:$})=>p?R===p.symbol:R===D.from({chain:$})?.symbol),B=(await n.estimateGasPrices())[o];if(!l)return D.from({chain:p.chain});if(p&&(l.chain!==p.chain||l.symbol!==p?.symbol))return l;let h=T&&e&&u&&i?await n.estimateCall({contractAddress:i,abi:T,funcName:e,funcParams:u,txOverrides:m}):await n.estimateGasLimit({from:t,recipient:t,memo:y,assetValue:p}),c="maxFeePerGas"in B;if(!(("gasPrice"in B)||c))throw new Error("Could not fetch fee data");let M=h*(c?(B.maxFeePerGas||1n)+(B.maxPriorityFeePerGas||1n):B.gasPrice),b=P.fromBigInt(l.getBaseValue("bigint")).sub(M.toString());return D.from({chain:l.chain,value:b.getValue("string")})},E=(n)=>n>0n?`0x${n.toString(16)}`:"0x0",f=async({provider:n,api:t,address:y,chain:o,potentialScamFilter:p})=>{let T=await t.getBalance(y),e=await n.getBalance(y),u=[{chain:o,symbol:D.from({chain:o}).symbol,value:Ln({value:BigInt(e),decimal:18,bigIntDecimal:18}),decimal:tn[o]},...T.filter((m)=>!Wn(m))];return(p?kn(u):u).map(({symbol:m,value:l,decimal:B})=>new D({decimal:B||tn[o],value:l,identifier:`${o}.${m}`}))},g=async(n,t=on.Fast,y,o,p=!0)=>{let T=(await z(o,p))[t],e=await o.estimateGas(n),u=D.from({chain:y});if(!p&&T.gasPrice)return u.set(P.fromBigInt(T.gasPrice*e,u.decimal));if(T.maxFeePerGas&&T.maxPriorityFeePerGas)return u.set(P.fromBigInt((T.maxFeePerGas+T.maxPriorityFeePerGas)*e,u.decimal));throw new Error("No gas price found")};import{ChainToRPC as Qn}from"@swapkit/helpers";import{JsonRpcProvider as Xn}from"ethers";var _t=(n,t)=>{return new Xn(t||Qn[n])};import{Chain as q,ContractAddress as x,FeeOption as U,SwapKitError as a,SwapKitNumber as yn,erc20ABI as H,isGasAsset as Yn}from"@swapkit/helpers";import{BrowserProvider as Zn,Contract as Pn,Interface as Fn,MaxInt256 as _n,getAddress as S,hexlify as F,toUtf8Bytes as _}from"ethers";var N=_n,Nn={[q.Arbitrum]:x.ARB,[q.Avalanche]:x.AVAX,[q.Base]:x.BASE,[q.BinanceSmartChain]:x.BSC,[q.Ethereum]:x.ETH,[q.Optimism]:x.OP,[q.Polygon]:x.MATIC},jn=["payable","nonpayable"],An=(n)=>n.type===2||!!n.maxFeePerGas||!!n.maxPriorityFeePerGas,k=(n)=>n instanceof Zn,L=(n,t,y)=>{return new Pn(n,Fn.from(t),y)},pn=(n)=>{try{return S(n),!0}catch(t){return!1}},Kn=(n,t)=>{let y=n.find((o)=>o.name===t);if(!y)throw new a("toolbox_evm_no_abi_fragment",{functionName:t});return y.stateMutability&&jn.includes(y.stateMutability)},W=async(n,t,{callProvider:y,signer:o,contractAddress:p,abi:T,funcName:e,funcParams:u=[],txOverrides:i={},feeOption:m=U.Fast})=>{let l=y||n;if(!p)throw new Error("contractAddress must be provided");let B=Kn(T,e),h={...i,from:i?.from||await o?.getAddress()};if(B&&k(l)&&o){let M=await I(l,{contractAddress:p,abi:T,funcName:e,funcParams:u,txOverrides:h});return Q(l,M)}let c=L(p,T,l);if(B){if(!o)throw new a("toolbox_evm_no_signer");let M=i?.from||await o.getAddress();if(!M)throw new a("toolbox_evm_no_signer_address");let b=c.connect(o),{maxFeePerGas:R,maxPriorityFeePerGas:$,gasPrice:G}=(await z(n,t))[m],d=await c.getFunction(e).estimateGas(...u,i),Z=await b[e](...u,{...i,gasLimit:d,maxFeePerGas:R,maxPriorityFeePerGas:$,gasPrice:G,nonce:i?.nonce||await l.getTransactionCount(M)});return typeof Z?.hash==="string"?Z?.hash:Z}let r=await c[e]?.(...u);return typeof r?.hash==="string"?r?.hash:r},I=async(n,{contractAddress:t,abi:y,funcName:o,funcParams:p=[],txOverrides:T})=>L(t,y,n).getFunction(o).populateTransaction(...p.concat(T).filter((e)=>typeof e!=="undefined")),en=async(n,{assetAddress:t,spenderAddress:y,from:o})=>await W(n,!0,{contractAddress:t,abi:H,funcName:"allowance",funcParams:[o,y]}),Vn=async(n,{assetAddress:t,spenderAddress:y,from:o,amount:p=N})=>{return yn.fromBigInt(await en(n,{assetAddress:t,spenderAddress:y,from:o})).gte(yn.fromBigInt(BigInt(p)))},vn=async(n,{assetAddress:t,spenderAddress:y,feeOptionKey:o=U.Fast,amount:p,gasLimitFallback:T,from:e,nonce:u},i,m=!0)=>{let l=[y,BigInt(p||N)],h={contractAddress:t,abi:H,funcName:"approve",funcParams:l,signer:i,txOverrides:{from:e}};if(k(n))return Q(n,await I(n,h));return W(n,m,{...h,funcParams:l,txOverrides:{from:e,nonce:u,gasLimit:T?BigInt(T.toString()):void 0},feeOption:o})},sn=async(n,{assetValue:t,memo:y,recipient:o,feeOptionKey:p=U.Fast,data:T,from:e,maxFeePerGas:u,maxPriorityFeePerGas:i,gasPrice:m,...l},B,h=!0)=>{let c=t.getBaseValue("bigint"),r=t.chain,M=e||await B?.getAddress();if(!M)throw new a("toolbox_evm_no_from_address");if(!t.isGasAsset){let R=X(t,r);if(!R)throw new a("toolbox_evm_no_contract_address");return W(n,h,{signer:B,contractAddress:R,abi:H,funcName:"transfer",funcParams:[o,c],txOverrides:{from:M,maxFeePerGas:u,maxPriorityFeePerGas:i,gasPrice:m},feeOption:p})}let b={...l,from:M,to:o,value:c,data:T||F(_(y||""))};return un(n,b,p,B,h)},z=async(n,t=!0)=>{try{let{maxFeePerGas:y,maxPriorityFeePerGas:o,gasPrice:p}=await n.getFeeData();if(t){if(y===null||o===null)throw new a("toolbox_evm_no_fee_data");return{[U.Average]:{maxFeePerGas:y,maxPriorityFeePerGas:o},[U.Fast]:{maxFeePerGas:y*15n/10n,maxPriorityFeePerGas:o*15n/10n},[U.Fastest]:{maxFeePerGas:y*2n,maxPriorityFeePerGas:o*2n}}}if(!p)throw new a("toolbox_evm_no_gas_price");return{[U.Average]:{gasPrice:p},[U.Fast]:{gasPrice:p*15n/10n},[U.Fastest]:{gasPrice:p*2n}}}catch(y){throw new Error(`Failed to estimate gas price: ${y.msg??y.toString()}`)}},Tn=(n,{signer:t,contractAddress:y,abi:o,funcName:p,funcParams:T=[],txOverrides:e})=>{if(!y)throw new a("toolbox_evm_no_contract_address");let u=L(y,o,n);return t?u.connect(t).getFunction(p).estimateGas(...T,e):u.getFunction(p).estimateGas(...T,e)},On=(n,{assetValue:t,recipient:y,memo:o,from:p,funcName:T,funcParams:e,txOverrides:u,signer:i})=>{let m=t.bigIntValue,l=t.isGasAsset?null:X(t,t.chain);if(l&&T)return Tn(n,{contractAddress:l,abi:H,funcName:T,funcParams:e,txOverrides:u,signer:i});return n.estimateGas({from:p,to:y,value:m,data:o?F(_(o)):void 0})},un=async(n,t,y=U.Fast,o,p=!0)=>{if(!o)throw new a("toolbox_evm_no_signer");let{from:T,to:e,data:u,value:i,...m}=t;if(!e)throw new a("toolbox_evm_no_to_address");let l={...m,data:u||"0x",to:e,from:T,value:BigInt(i||0)};if(k(n))return Q(n,l);let B=T||await o.getAddress(),h=t.nonce||await n.getTransactionCount(B),c=(await n.getNetwork()).chainId,r=An(l)||p,M=r&&!(l.maxFeePerGas&&l.maxPriorityFeePerGas)||!l.gasPrice?Object.entries((await z(n,p))[y]).reduce((R,[$,G])=>({...R,[$]:E(BigInt(G))}),{}):{},b;try{b=E(l.gasLimit||await n.estimateGas(l)*11n/10n)}catch(R){throw new a("toolbox_evm_error_estimating_gas_limit",{error:R})}try{let R={...l,chainId:c,type:r?2:0,gasLimit:b,nonce:h,...M};try{return(await o.sendTransaction(R)).hash}catch($){let G=await o.signTransaction({...R,from:B});return(await n.broadcastTransaction(G)).hash}}catch(R){throw new a("toolbox_evm_error_sending_transaction",{error:R})}},Vt=(n)=>S(n),Q=(n,{from:t,to:y,data:o,value:p})=>{if(!k(n))throw new a("toolbox_evm_provider_not_eip1193_compatible");return n.send("eth_sendTransaction",[{value:E(BigInt(p||0)),from:t,to:y,data:o}])},vt=(n,t)=>{let y=X(n,t);if(y)return S(y.toLowerCase());throw new a("toolbox_evm_invalid_gas_asset_address")},X=({chain:n,symbol:t,ticker:y},o)=>{try{if(n===o&&t===o&&y===o||n===q.BinanceSmartChain&&t==="BNB"&&y==="BNB"||n===q.Arbitrum&&t==="ETH"&&y==="ETH")return Nn[o];return S(t.slice(y.length+1).replace(/^0X/,""))}catch(p){return null}},dn=async(n,{assetValue:t,memo:y,recipient:o,feeOptionKey:p=U.Fast,data:T,from:e,maxFeePerGas:u,maxPriorityFeePerGas:i,gasPrice:m,...l},B)=>{let h=t.getBaseValue("bigint"),c=t.chain,r=e||await B?.getAddress();if(!r)throw new a("toolbox_evm_no_from_address");if(!Yn(t)){let b=X(t,c);if(!b)throw new a("toolbox_evm_no_contract_address");return I(n,{contractAddress:b,abi:H,funcName:"transfer",funcParams:[o,h],txOverrides:{from:r,maxFeePerGas:u,maxPriorityFeePerGas:i,gasPrice:m}})}return{...l,from:r,to:o,value:h,data:T||F(_(y||""))}},nt=async(n,{assetAddress:t,spenderAddress:y,amount:o,from:p},T)=>{let e=[y,BigInt(o||N)];return await I(n,{contractAddress:t,abi:H,funcName:"approve",funcParams:e,signer:T,txOverrides:{from:p}})};function tt(n){if(!n)throw new a("toolbox_evm_no_signer");return n.signMessage}var w=({provider:n,signer:t,isEIP1559Compatible:y=!0})=>({approve:(o)=>vn(n,o,t,y),approvedAmount:(o)=>en(n,o),broadcastTransaction:n.broadcastTransaction,call:(o)=>W(n,y,{...o,signer:t}),createContract:(o,p,T)=>L(o,p,T||n),createContractTxObject:(o)=>I(n,o),EIP1193SendTransaction:(o)=>Q(n,o),estimateCall:(o)=>Tn(n,{...o,signer:t}),estimateGasLimit:({assetValue:o,recipient:p,memo:T})=>On(n,{assetValue:o,recipient:p,memo:T,signer:t}),estimateGasPrices:()=>z(n,y),isApproved:(o)=>Vn(n,o),sendTransaction:(o,p)=>un(n,o,p,t,y),transfer:(o)=>sn(n,o,t,y),validateAddress:pn,createTransferTx:(o)=>dn(n,o,t),createApprovalTx:(o)=>nt(n,o,t),signMessage:tt(t)}),st=w,ot=({address:n})=>pn(n);var yt;((y)=>{y.Test="goerli";y.Main="homestead"})(yt||={});import{BaseDecimal as pt,Chain as j,ChainId as ln,ChainToExplorerUrl as et,FeeOption as Y,RPCUrl as Tt}from"@swapkit/helpers";var ut=()=>({chainId:ln.ArbitrumHex,chainName:"Arbitrum One",nativeCurrency:{name:"Ethereum",symbol:j.Ethereum,decimals:pt.ETH},rpcUrls:[Tt.Arbitrum],blockExplorerUrls:[et[j.Arbitrum]]}),it=async(n)=>{try{let{gasPrice:t}=await n.getFeeData();if(!t)throw new Error("No fee data available");return{[Y.Average]:{gasPrice:t},[Y.Fast]:{gasPrice:t},[Y.Fastest]:{gasPrice:t}}}catch(t){throw new Error(`Failed to estimate gas price: ${t.msg??t.toString()}`)}},mn=({api:n,provider:t,signer:y,covalentApiKey:o})=>{let p=n||J({apiKey:o,chainId:ln.Arbitrum}),T=w({provider:t,signer:y,isEIP1559Compatible:!1}),e=j.Arbitrum;return{...T,getNetworkParams:ut,estimateGasPrices:()=>it(t),estimateTransactionFee:(u)=>g(u,Y.Average,e,t,!1),getBalance:(u,i=!0,m)=>f({provider:m||t,api:p,address:u,chain:e,potentialScamFilter:i})}};import{BaseDecimal as lt,Chain as A,ChainId as Bn,ChainToExplorerUrl as mt}from"@swapkit/helpers";var Bt=()=>({chainId:Bn.AvalancheHex,chainName:"Avalanche Network",nativeCurrency:{name:"Avalanche",symbol:A.Avalanche,decimals:lt.AVAX},rpcUrls:["https://api.avax.network/ext/bc/C/rpc"],blockExplorerUrls:[mt[A.Avalanche]]}),an=({api:n,provider:t,signer:y,covalentApiKey:o})=>{let p=n||J({apiKey:o,chainId:Bn.Avalanche}),T=w({provider:t,signer:y}),e=A.Avalanche;return{...T,getNetworkParams:Bt,estimateTransactionFee:(u,i)=>g(u,i,e,t),getBalance:(u,i=!0,m)=>f({provider:m||t,api:p,address:u,chain:e,potentialScamFilter:i})}};import{BaseDecimal as at,Chain as Rn,ChainId as wn,ChainToExplorerUrl as Rt}from"@swapkit/helpers";var wt=()=>({chainId:wn.BinanceSmartChainHex,chainName:"BNB Chain",nativeCurrency:{name:"Binance Coin",symbol:"BNB",decimals:at.BSC},rpcUrls:["https://bsc-dataseed.binance.org"],blockExplorerUrls:[Rt[Rn.BinanceSmartChain]]}),hn=({api:n,provider:t,signer:y,covalentApiKey:o})=>{let p=n||J({apiKey:o,chainId:wn.BinanceSmartChain}),T=w({provider:t,signer:y,isEIP1559Compatible:!1}),e=Rn.BinanceSmartChain;return{...T,getNetworkParams:wt,estimateTransactionFee:(u,i)=>g(u,i,e,t,!1),getBalance:(u,i=!0,m)=>f({provider:m||t,api:p,address:u,chain:e,potentialScamFilter:i})}};import{Chain as ht}from"@swapkit/helpers";var fn=({api:n,ethplorerApiKey:t,signer:y,provider:o})=>{let p=n||nn(t),T=w({provider:o,signer:y}),e=ht.Ethereum;return{...T,estimateTransactionFee:(u,i)=>g(u,i,e,o),getBalance:(u,i=!0,m)=>f({provider:m||o,api:p,address:u,chain:e,potentialScamFilter:i})}};import{Chain as C}from"@swapkit/helpers";import{BaseDecimal as ft,Chain as K,ChainId as cn,ChainToExplorerUrl as ct,RPCUrl as rt}from"@swapkit/helpers";var Mt=()=>({chainId:cn.BaseHex,chainName:"Base Mainnet",nativeCurrency:{name:"Ethereum",symbol:K.Ethereum,decimals:ft.ETH},rpcUrls:[rt.Base],blockExplorerUrls:[ct[K.Base]]}),rn=({api:n,provider:t,signer:y,covalentApiKey:o})=>{let p=w({provider:t,signer:y}),T=K.Base;return{...p,getNetworkParams:Mt,estimateTransactionFee:(e,u)=>g(e,u,T,t),getBalance:async(e,u=!0,i)=>{return await f({provider:i||t,api:n||J({apiKey:o,chainId:cn.Base}),address:e,chain:T,potentialScamFilter:u})}}};import{BaseDecimal as Jt,Chain as V,ChainId as Mn,ChainToExplorerUrl as gt,RPCUrl as bt}from"@swapkit/helpers";var Ut=()=>({chainId:Mn.PolygonHex,chainName:"Polygon Mainnet",nativeCurrency:{name:"Polygon",symbol:V.Polygon,decimals:Jt.MATIC},rpcUrls:[bt.Polygon],blockExplorerUrls:[gt[V.Polygon]]}),Jn=({api:n,provider:t,signer:y,covalentApiKey:o})=>{let p=n||J({apiKey:o,chainId:Mn.Polygon}),T=w({provider:t,signer:y}),e=V.Polygon;return{...T,getNetworkParams:Ut,estimateTransactionFee:(u,i)=>g(u,i,e,t),getBalance:(u,i=!0,m)=>f({provider:m||t,api:p,address:u,chain:e,potentialScamFilter:i})}};import{BaseDecimal as qt,Chain as s,ChainId as bn,ChainToExplorerUrl as $t,FeeOption as v,RPCUrl as xt}from"@swapkit/helpers";import{Contract as Ct,Transaction as Dt}from"ethers";var gn=[{inputs:[{internalType:"address",name:"_owner",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"DecimalsUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"GasPriceUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"L1BaseFeeUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"OverheadUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"ScalarUpdated",type:"event"},{inputs:[],name:"decimals",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"gasPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"_data",type:"bytes"}],name:"getL1Fee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"_data",type:"bytes"}],name:"getL1GasUsed",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"l1BaseFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"overhead",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"scalar",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_decimals",type:"uint256"}],name:"setDecimals",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_gasPrice",type:"uint256"}],name:"setGasPrice",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_baseFee",type:"uint256"}],name:"setL1BaseFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_overhead",type:"uint256"}],name:"setOverhead",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_scalar",type:"uint256"}],name:"setScalar",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"}];var Ht="0x420000000000000000000000000000000000000f",O=(n)=>{return new Ct(Ht,gn,n)},Un=(n)=>{let t=O(n);if(t&&"l1BaseFee"in t)return t?.l1BaseFee();return},qn=async(n,{data:t,from:y,to:o,gasPrice:p,type:T,gasLimit:e,nonce:u})=>{if(!o)throw new Error("Missing to address");return Dt.from({data:t,to:o,gasPrice:p,type:T,gasLimit:e,nonce:u?u:y?await n.getTransactionCount(y):0}).serialized},$n=async(n,t)=>{let y=await O(n),o=await qn(n,t);if(y&&"getL1Fee"in y)return y.getL1Fee(o)},xn=async(n,t)=>{let y=await n.send("eth_gasPrice",[]),o=await n.estimateGas(t);return y.mul(o)},Gt=async(n,t)=>{let y=await $n(n,t),o=await xn(n,t);return y.add(o)},zt=async(n,t)=>{let y=O(n),o=await qn(n,t);if(y&&"getL1GasUsed"in y)return y.getL1GasUsed(o)},It=()=>({chainId:bn.OptimismHex,chainName:"Optimism",nativeCurrency:{name:"Ethereum",symbol:s.Ethereum,decimals:qt.ETH},rpcUrls:[xt.Optimism],blockExplorerUrls:[$t[s.Optimism]]}),Et=async(n)=>{try{let{maxFeePerGas:t,maxPriorityFeePerGas:y,gasPrice:o}=await n.getFeeData(),p=await Un(n),T=o;if(!(t&&y))throw new Error("No fee data available");return{[v.Average]:{l1GasPrice:p,gasPrice:o,maxFeePerGas:t,maxPriorityFeePerGas:y},[v.Fast]:{l1GasPrice:(p||0n)*15n/10n,gasPrice:T*15n/10n,maxFeePerGas:t,maxPriorityFeePerGas:y*15n/10n},[v.Fastest]:{l1GasPrice:(p||0n)*2n,gasPrice:T*2n,maxFeePerGas:t,maxPriorityFeePerGas:y*2n}}}catch(t){throw new Error(`Failed to estimate gas price: ${t.msg??t.toString()}`)}},Cn=({api:n,provider:t,signer:y,covalentApiKey:o})=>{let p=n||J({apiKey:o,chainId:bn.Optimism});return{...w({provider:t,signer:y}),estimateTotalGasCost:(e)=>Gt(t,e),estimateL1GasCost:(e)=>$n(t,e),estimateL2GasCost:(e)=>xn(t,e),getL1GasPrice:()=>Un(t),estimateL1Gas:(e)=>zt(t,e),getNetworkParams:It,estimateGasPrices:()=>Et(t),getBalance:(e,u=!0,i)=>f({provider:i||t,api:p,address:e,chain:s.Optimism,potentialScamFilter:u})}};var jo=(n)=>{switch(n){case C.Avalanche:return an;case C.Arbitrum:return mn;case C.Base:return rn;case C.Optimism:return Cn;case C.Polygon:return Jn;case C.BinanceSmartChain:return hn;case C.Ethereum:return fn;default:throw new Error(`Chain ${n} is not supported`)}};export{E as toHexString,Vt as toChecksumAddress,Kn as isStateChangingCall,k as isBrowserProvider,jo as getToolboxByChain,X as getTokenAddress,_t as getProvider,Un as getL1GasPrice,vt as getChecksumAddressFromAsset,f as getBalance,ot as evmValidateAddress,nn as ethplorerApi,g as estimateTransactionFee,Gt as estimateTotalGasCost,Yt as estimateMaxSendableAmount,xn as estimateL2GasCost,$n as estimateL1GasCost,zt as estimateL1Gas,z as estimateGasPrices,I as createContractTxObject,L as createContract,J as covalentApi,O as connectGasPriceOracle,yy as Transaction,oy as Signature,Cn as OPToolbox,N as MAX_APPROVAL,Jn as MATICToolbox,ty as JsonRpcProvider,ny as HDNodeWallet,yt as EthNetwork,w as EVMToolbox,fn as ETHToolbox,Q as EIP1193SendTransaction,Oo as BrowserProvider,st as BaseEVMToolbox,hn as BSCToolbox,rn as BASEToolbox,so as AbstractSigner,an as AVAXToolbox,mn as ARBToolbox}; | ||
import{AbstractSigner as no,BrowserProvider as eo,HDNodeWallet as oo,JsonRpcProvider as yo,Signature as po,Transaction as ao}from"ethers";import{ChainIdToChain as kt,RequestClient as Ht,formatBigIntToSafeValue as xt}from"@swapkit/helpers";var R=({apiKey:t,chainId:n})=>({getBalance:async(o)=>{let{data:e}=await Ht.get(`https://api.covalenthq.com/v1/${n}/address/${o}/balances_v2/`,{searchParams:{key:t}});return(e?.items||[]).filter(({is_spam:y})=>!y).map(({balance:y,contract_decimals:p,contract_ticker_symbol:a,contract_address:l,native_token:u})=>({value:xt({value:BigInt(y),decimal:p,bigIntDecimal:p}),decimal:p,chain:kt[n],symbol:`${a||"Unknown"}${u?"":`-${l}`}`}))}});import{Chain as $t,RequestClient as Gt,formatBigIntToSafeValue as zt}from"@swapkit/helpers";var St="https://api.ethplorer.io",tt=(t="freekey")=>({getBalance:async(n)=>{let{tokens:o=[]}=await Gt.get(`${St}/getAddressInfo/${n}`,{searchParams:{apiKey:t}});return o.filter(({tokenInfo:{symbol:e},rawBalance:y})=>e&&y!=="0").map(({tokenInfo:{symbol:e,decimals:y,address:p},rawBalance:a})=>({chain:$t.Ethereum,symbol:p?`${e}-${p}`:e,value:zt({value:BigInt(a),decimal:Number.parseInt(y),bigIntDecimal:Number.parseInt(y)}),decimal:Number.parseInt(y)}))}});import{AssetValue as k,BaseDecimal as nt,FeeOption as et,SwapKitNumber as Z,filterAssets as Et,formatBigIntToSafeValue as It,isGasAsset as Lt}from"@swapkit/helpers";var Zn=async({toolbox:t,from:n,memo:o="",feeOptionKey:e=et.Fastest,assetValue:y,abi:p,funcName:a,funcParams:l,contractAddress:u,txOverrides:T})=>{let i=(await t.getBalance(n)).find(({symbol:s,chain:D})=>y?s===y.symbol:s===k.from({chain:D})?.symbol),m=(await t.estimateGasPrices())[e];if(!i)return k.from({chain:y.chain});if(y&&(i.chain!==y.chain||i.symbol!==y?.symbol))return i;let c=p&&a&&l&&u?await t.estimateCall({contractAddress:u,abi:p,funcName:a,funcParams:l,txOverrides:T}):await t.estimateGasLimit({from:n,recipient:n,memo:o,assetValue:y}),f="maxFeePerGas"in m;if(!(("gasPrice"in m)||f))throw new Error("Could not fetch fee data");let w=c*(f?(m.maxFeePerGas||1n)+(m.maxPriorityFeePerGas||1n):m.gasPrice),M=Z.fromBigInt(i.getBaseValue("bigint")).sub(w.toString());return k.from({chain:i.chain,value:M.getValue("string")})},z=(t)=>t>0n?`0x${t.toString(16)}`:"0x0",B=async({provider:t,api:n,address:o,chain:e,potentialScamFilter:y})=>{let p=await n.getBalance(o),a=await t.getBalance(o),l=[{chain:e,symbol:k.from({chain:e}).symbol,value:It({value:BigInt(a),decimal:18,bigIntDecimal:18}),decimal:nt[e]},...p.filter((T)=>!Lt(T))];return(y?Et(l):l).map(({symbol:T,value:i,decimal:m})=>new k({decimal:m||nt[e],value:i,identifier:`${e}.${T}`}))},h=async(t,n=et.Fast,o,e,y=!0)=>{let p=(await $(e,y))[n],a=await e.estimateGas(t),l=k.from({chain:o});if(!y&&p.gasPrice)return l.set(Z.fromBigInt(p.gasPrice*a,l.decimal));if(p.maxFeePerGas&&p.maxPriorityFeePerGas)return l.set(Z.fromBigInt((p.maxFeePerGas+p.maxPriorityFeePerGas)*a,l.decimal));throw new Error("No gas price found")};import{ChainToRPC as Wt}from"@swapkit/helpers";import{JsonRpcProvider as Qt}from"ethers";var Nn=(t,n)=>{return new Qt(n||Wt[t])};import{Chain as U,ContractAddress as q,FeeOption as J,SwapKitError as r,SwapKitNumber as ot,erc20ABI as H,isGasAsset as Xt}from"@swapkit/helpers";import{BrowserProvider as Yt,Contract as Zt,Interface as Pt,MaxInt256 as Ft,getAddress as S,hexlify as P,toUtf8Bytes as F}from"ethers";var _=Ft,_t={[U.Arbitrum]:q.ARB,[U.Avalanche]:q.AVAX,[U.Base]:q.BASE,[U.BinanceSmartChain]:q.BSC,[U.Ethereum]:q.ETH,[U.Optimism]:q.OP,[U.Polygon]:q.MATIC},Nt=["payable","nonpayable"],At=(t)=>t.type===2||!!t.maxFeePerGas||!!t.maxPriorityFeePerGas,E=(t)=>t instanceof Yt,I=(t,n,o)=>{return new Zt(t,Pt.from(n),o)},yt=(t)=>{try{return S(t),!0}catch(n){return!1}},jt=(t,n)=>{let o=t.find((e)=>e.name===n);if(!o)throw new r("toolbox_evm_no_abi_fragment",{functionName:n});return o.stateMutability&&Nt.includes(o.stateMutability)},L=async(t,n,{callProvider:o,signer:e,contractAddress:y,abi:p,funcName:a,funcParams:l=[],txOverrides:u={},feeOption:T=J.Fast})=>{let i=o||t;if(!y)throw new Error("contractAddress must be provided");let m=jt(p,a),c={...u,from:u?.from||await e?.getAddress()};if(m&&E(i)&&e){let w=await G(i,{contractAddress:y,abi:p,funcName:a,funcParams:l,txOverrides:c});return W(i,w)}let f=I(y,p,i);if(m){if(!e)throw new r("toolbox_evm_no_signer");let w=u?.from||await e.getAddress();if(!w)throw new r("toolbox_evm_no_signer_address");let M=f.connect(e),{maxFeePerGas:s,maxPriorityFeePerGas:D,gasPrice:x}=(await $(t,n))[T],d=await f.getFunction(a).estimateGas(...l,u),Y=await M[a](...l,{...u,gasLimit:d,maxFeePerGas:s,maxPriorityFeePerGas:D,gasPrice:x,nonce:u?.nonce||await i.getTransactionCount(w)});return typeof Y?.hash==="string"?Y?.hash:Y}let g=await f[a]?.(...l);return typeof g?.hash==="string"?g?.hash:g},G=async(t,{contractAddress:n,abi:o,funcName:e,funcParams:y=[],txOverrides:p})=>I(n,o,t).getFunction(e).populateTransaction(...y.concat(p).filter((a)=>typeof a!=="undefined")),pt=async(t,{assetAddress:n,spenderAddress:o,from:e})=>await L(t,!0,{contractAddress:n,abi:H,funcName:"allowance",funcParams:[e,o]}),Kt=async(t,{assetAddress:n,spenderAddress:o,from:e,amount:y=_})=>{return ot.fromBigInt(await pt(t,{assetAddress:n,spenderAddress:o,from:e})).gte(ot.fromBigInt(BigInt(y)))},vt=async(t,{assetAddress:n,spenderAddress:o,feeOptionKey:e=J.Fast,amount:y,gasLimitFallback:p,from:a,nonce:l},u,T=!0)=>{let i=[o,BigInt(y||_)],c={contractAddress:n,abi:H,funcName:"approve",funcParams:i,signer:u,txOverrides:{from:a}};if(E(t))return W(t,await G(t,c));return L(t,T,{...c,funcParams:i,txOverrides:{from:a,nonce:l,gasLimit:p?BigInt(p.toString()):void 0},feeOption:e})},Vt=async(t,{assetValue:n,memo:o,recipient:e,feeOptionKey:y=J.Fast,data:p,from:a,maxFeePerGas:l,maxPriorityFeePerGas:u,gasPrice:T,...i},m,c=!0)=>{let f=n.getBaseValue("bigint"),g=n.chain,w=a||await m?.getAddress();if(!w)throw new r("toolbox_evm_no_from_address");if(!n.isGasAsset){let s=Q(n,g);if(!s)throw new r("toolbox_evm_no_contract_address");return L(t,c,{signer:m,contractAddress:s,abi:H,funcName:"transfer",funcParams:[e,f],txOverrides:{from:w,maxFeePerGas:l,maxPriorityFeePerGas:u,gasPrice:T},feeOption:y})}let M={...i,from:w,to:e,value:f,data:p||P(F(o||""))};return lt(t,M,y,m,c)},$=async(t,n=!0)=>{try{let{maxFeePerGas:o,maxPriorityFeePerGas:e,gasPrice:y}=await t.getFeeData();if(n){if(o===null||e===null)throw new r("toolbox_evm_no_fee_data");return{[J.Average]:{maxFeePerGas:o,maxPriorityFeePerGas:e},[J.Fast]:{maxFeePerGas:o*15n/10n,maxPriorityFeePerGas:e*15n/10n},[J.Fastest]:{maxFeePerGas:o*2n,maxPriorityFeePerGas:e*2n}}}if(!y)throw new r("toolbox_evm_no_gas_price");return{[J.Average]:{gasPrice:y},[J.Fast]:{gasPrice:y*15n/10n},[J.Fastest]:{gasPrice:y*2n}}}catch(o){throw new Error(`Failed to estimate gas price: ${o.msg??o.toString()}`)}},at=(t,{signer:n,contractAddress:o,abi:e,funcName:y,funcParams:p=[],txOverrides:a})=>{if(!o)throw new r("toolbox_evm_no_contract_address");let l=I(o,e,t);return n?l.connect(n).getFunction(y).estimateGas(...p,a):l.getFunction(y).estimateGas(...p,a)},Ot=(t,{assetValue:n,recipient:o,memo:e,from:y,funcName:p,funcParams:a,txOverrides:l,signer:u})=>{let T=n.bigIntValue,i=n.isGasAsset?null:Q(n,n.chain);if(i&&p)return at(t,{contractAddress:i,abi:H,funcName:p,funcParams:a,txOverrides:l,signer:u});return t.estimateGas({from:y,to:o,value:T,data:e?P(F(e)):void 0})},lt=async(t,n,o=J.Fast,e,y=!0)=>{if(!e)throw new r("toolbox_evm_no_signer");let{from:p,to:a,data:l,value:u,...T}=n;if(!a)throw new r("toolbox_evm_no_to_address");let i={...T,data:l||"0x",to:a,from:p,value:BigInt(u||0)};if(E(t))return W(t,i);let m=p||await e.getAddress(),c=n.nonce||await t.getTransactionCount(m),f=(await t.getNetwork()).chainId,g=At(i)||y,w=g&&!(i.maxFeePerGas&&i.maxPriorityFeePerGas)||!i.gasPrice?Object.entries((await $(t,y))[o]).reduce((s,[D,x])=>({...s,[D]:z(BigInt(x))}),{}):{},M;try{M=z(i.gasLimit||await t.estimateGas(i)*11n/10n)}catch(s){throw new r("toolbox_evm_error_estimating_gas_limit",{error:s})}try{let s={...i,chainId:f,type:g?2:0,gasLimit:M,nonce:c,...w};try{return(await e.sendTransaction(s)).hash}catch(D){let x=await e.signTransaction({...s,from:m});return(await t.broadcastTransaction(x)).hash}}catch(s){throw new r("toolbox_evm_error_sending_transaction",{error:s})}},Vn=(t)=>S(t),W=(t,{from:n,to:o,data:e,value:y})=>{if(!E(t))throw new r("toolbox_evm_provider_not_eip1193_compatible");return t.send("eth_sendTransaction",[{value:z(BigInt(y||0)),from:n,to:o,data:e}])},On=(t,n)=>{let o=Q(t,n);if(o)return S(o.toLowerCase());throw new r("toolbox_evm_invalid_gas_asset_address")},Q=({chain:t,symbol:n,ticker:o},e)=>{try{if(t===e&&n===e&&o===e||t===U.BinanceSmartChain&&n==="BNB"&&o==="BNB"||t===U.Arbitrum&&n==="ETH"&&o==="ETH")return _t[e];return S(n.slice(o.length+1).replace(/^0X/,""))}catch(y){return null}},dt=async(t,{assetValue:n,memo:o,recipient:e,feeOptionKey:y=J.Fast,data:p,from:a,maxFeePerGas:l,maxPriorityFeePerGas:u,gasPrice:T,...i},m)=>{let c=n.getBaseValue("bigint"),f=n.chain,g=a||await m?.getAddress();if(!g)throw new r("toolbox_evm_no_from_address");if(!Xt(n)){let M=Q(n,f);if(!M)throw new r("toolbox_evm_no_contract_address");return G(t,{contractAddress:M,abi:H,funcName:"transfer",funcParams:[e,c],txOverrides:{from:g,maxFeePerGas:l,maxPriorityFeePerGas:u,gasPrice:T}})}return{...i,from:g,to:e,value:c,data:p||P(F(o||""))}},tn=async(t,{assetAddress:n,spenderAddress:o,amount:e,from:y},p)=>{let a=[o,BigInt(e||_)];return await G(t,{contractAddress:n,abi:H,funcName:"approve",funcParams:a,signer:p,txOverrides:{from:y}})};function nn(t){if(!t)throw new r("toolbox_evm_no_signer");return t.signMessage}var b=({provider:t,signer:n,isEIP1559Compatible:o=!0})=>({approve:(e)=>vt(t,e,n,o),approvedAmount:(e)=>pt(t,e),broadcastTransaction:t.broadcastTransaction,call:(e)=>L(t,o,{...e,signer:n}),createContract:(e,y,p)=>I(e,y,p||t),createContractTxObject:(e)=>G(t,e),EIP1193SendTransaction:(e)=>W(t,e),estimateCall:(e)=>at(t,{...e,signer:n}),estimateGasLimit:({assetValue:e,recipient:y,memo:p})=>Ot(t,{assetValue:e,recipient:y,memo:p,signer:n}),estimateGasPrices:()=>$(t,o),isApproved:(e)=>Kt(t,e),sendTransaction:(e,y)=>lt(t,e,y,n,o),transfer:(e)=>Vt(t,e,n,o),validateAddress:yt,createTransferTx:(e)=>dt(t,e,n),createApprovalTx:(e)=>tn(t,e,n),signMessage:nn(n)}),dn=b,en=({address:t})=>yt(t);var on;((o)=>{o.Test="goerli";o.Main="homestead"})(on||={});import{BaseDecimal as yn,Chain as N,ChainId as ut,ChainToExplorerUrl as pn,FeeOption as X,RPCUrl as an}from"@swapkit/helpers";var ln=()=>({chainId:ut.ArbitrumHex,chainName:"Arbitrum One",nativeCurrency:{name:"Ethereum",symbol:N.Ethereum,decimals:yn.ETH},rpcUrls:[an.Arbitrum],blockExplorerUrls:[pn[N.Arbitrum]]}),un=async(t)=>{try{let{gasPrice:n}=await t.getFeeData();if(!n)throw new Error("No fee data available");return{[X.Average]:{gasPrice:n},[X.Fast]:{gasPrice:n},[X.Fastest]:{gasPrice:n}}}catch(n){throw new Error(`Failed to estimate gas price: ${n.msg??n.toString()}`)}},it=({api:t,provider:n,signer:o,covalentApiKey:e})=>{let y=t||R({apiKey:e,chainId:ut.Arbitrum}),p=b({provider:n,signer:o,isEIP1559Compatible:!1}),a=N.Arbitrum;return{...p,getNetworkParams:ln,estimateGasPrices:()=>un(n),estimateTransactionFee:(l)=>h(l,X.Average,a,n,!1),getBalance:(l,u=!0,T)=>B({provider:T||n,api:y,address:l,chain:a,potentialScamFilter:u})}};import{BaseDecimal as Tn,Chain as A,ChainId as Tt,ChainToExplorerUrl as mn}from"@swapkit/helpers";var rn=()=>({chainId:Tt.AvalancheHex,chainName:"Avalanche Network",nativeCurrency:{name:"Avalanche",symbol:A.Avalanche,decimals:Tn.AVAX},rpcUrls:["https://api.avax.network/ext/bc/C/rpc"],blockExplorerUrls:[mn[A.Avalanche]]}),mt=({api:t,provider:n,signer:o,covalentApiKey:e})=>{let y=t||R({apiKey:e,chainId:Tt.Avalanche}),p=b({provider:n,signer:o}),a=A.Avalanche;return{...p,getNetworkParams:rn,estimateTransactionFee:(l,u)=>h(l,u,a,n),getBalance:(l,u=!0,T)=>B({provider:T||n,api:y,address:l,chain:a,potentialScamFilter:u})}};import{BaseDecimal as cn,Chain as rt,ChainId as ct,ChainToExplorerUrl as sn}from"@swapkit/helpers";var bn=()=>({chainId:ct.BinanceSmartChainHex,chainName:"BNB Chain",nativeCurrency:{name:"Binance Coin",symbol:"BNB",decimals:cn.BSC},rpcUrls:["https://bsc-dataseed.binance.org"],blockExplorerUrls:[sn[rt.BinanceSmartChain]]}),st=({api:t,provider:n,signer:o,covalentApiKey:e})=>{let y=t||R({apiKey:e,chainId:ct.BinanceSmartChain}),p=b({provider:n,signer:o,isEIP1559Compatible:!1}),a=rt.BinanceSmartChain;return{...p,getNetworkParams:bn,estimateTransactionFee:(l,u)=>h(l,u,a,n,!1),getBalance:(l,u=!0,T)=>B({provider:T||n,api:y,address:l,chain:a,potentialScamFilter:u})}};import{Chain as Bn,FeeOption as fn}from"@swapkit/helpers";var bt=[{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall2.Call[]",name:"calls",type:"tuple[]"}],name:"aggregate",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes[]",name:"returnData",type:"bytes[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall2.Call[]",name:"calls",type:"tuple[]"}],name:"blockAndAggregate",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes32",name:"blockHash",type:"bytes32"},{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall2.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"}],name:"getBlockHash",outputs:[{internalType:"bytes32",name:"blockHash",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getBlockNumber",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockCoinbase",outputs:[{internalType:"address",name:"coinbase",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockDifficulty",outputs:[{internalType:"uint256",name:"difficulty",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockGasLimit",outputs:[{internalType:"uint256",name:"gaslimit",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getCurrentBlockTimestamp",outputs:[{internalType:"uint256",name:"timestamp",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"addr",type:"address"}],name:"getEthBalance",outputs:[{internalType:"uint256",name:"balance",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getLastBlockHash",outputs:[{internalType:"bytes32",name:"blockHash",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bool",name:"requireSuccess",type:"bool"},{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall2.Call[]",name:"calls",type:"tuple[]"}],name:"tryAggregate",outputs:[{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall2.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"requireSuccess",type:"bool"},{components:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes",name:"callData",type:"bytes"}],internalType:"struct Multicall2.Call[]",name:"calls",type:"tuple[]"}],name:"tryBlockAndAggregate",outputs:[{internalType:"uint256",name:"blockNumber",type:"uint256"},{internalType:"bytes32",name:"blockHash",type:"bytes32"},{components:[{internalType:"bool",name:"success",type:"bool"},{internalType:"bytes",name:"returnData",type:"bytes"}],internalType:"struct Multicall2.Result[]",name:"returnData",type:"tuple[]"}],stateMutability:"nonpayable",type:"function"}];var Bt=({api:t,ethplorerApiKey:n,signer:o,provider:e})=>{let y=t||tt(n),p=b({provider:e,signer:o}),a=Bn.Ethereum;async function l(u,T="0x5ba1e12693dc8f9c48aad8770482f4739beed696",i="aggregate",m=fn.Fast){let c=await p.createContractTxObject({contractAddress:T,abi:bt,funcName:i,funcParams:[u]});return p.sendTransaction(c,m)}return{...p,estimateTransactionFee:(u,T)=>h(u,T,a,e),getBalance:(u,T=!0,i)=>B({provider:i||e,api:y,address:u,chain:a,potentialScamFilter:T}),multicall:l}};import{Chain as C}from"@swapkit/helpers";import{BaseDecimal as gn,Chain as j,ChainId as ft,ChainToExplorerUrl as wn,RPCUrl as Rn}from"@swapkit/helpers";var hn=()=>({chainId:ft.BaseHex,chainName:"Base Mainnet",nativeCurrency:{name:"Ethereum",symbol:j.Ethereum,decimals:gn.ETH},rpcUrls:[Rn.Base],blockExplorerUrls:[wn[j.Base]]}),gt=({api:t,provider:n,signer:o,covalentApiKey:e})=>{let y=b({provider:n,signer:o}),p=j.Base;return{...y,getNetworkParams:hn,estimateTransactionFee:(a,l)=>h(a,l,p,n),getBalance:async(a,l=!0,u)=>{return await B({provider:u||n,api:t||R({apiKey:e,chainId:ft.Base}),address:a,chain:p,potentialScamFilter:l})}}};import{BaseDecimal as Mn,Chain as K,ChainId as wt,ChainToExplorerUrl as Jn,RPCUrl as Un}from"@swapkit/helpers";var Dn=()=>({chainId:wt.PolygonHex,chainName:"Polygon Mainnet",nativeCurrency:{name:"Polygon",symbol:K.Polygon,decimals:Mn.MATIC},rpcUrls:[Un.Polygon],blockExplorerUrls:[Jn[K.Polygon]]}),Rt=({api:t,provider:n,signer:o,covalentApiKey:e})=>{let y=t||R({apiKey:e,chainId:wt.Polygon}),p=b({provider:n,signer:o}),a=K.Polygon;return{...p,getNetworkParams:Dn,estimateTransactionFee:(l,u)=>h(l,u,a,n),getBalance:(l,u=!0,T)=>B({provider:T||n,api:y,address:l,chain:a,potentialScamFilter:u})}};import{BaseDecimal as qn,Chain as V,ChainId as Mt,ChainToExplorerUrl as Cn,FeeOption as v,RPCUrl as kn}from"@swapkit/helpers";import{Contract as Hn,Transaction as xn}from"ethers";var ht=[{inputs:[{internalType:"address",name:"_owner",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"DecimalsUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"GasPriceUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"L1BaseFeeUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"OverheadUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"",type:"uint256"}],name:"ScalarUpdated",type:"event"},{inputs:[],name:"decimals",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"gasPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"_data",type:"bytes"}],name:"getL1Fee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"_data",type:"bytes"}],name:"getL1GasUsed",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"l1BaseFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"overhead",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"scalar",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_decimals",type:"uint256"}],name:"setDecimals",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_gasPrice",type:"uint256"}],name:"setGasPrice",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_baseFee",type:"uint256"}],name:"setL1BaseFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_overhead",type:"uint256"}],name:"setOverhead",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_scalar",type:"uint256"}],name:"setScalar",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"}];var $n="0x420000000000000000000000000000000000000f",O=(t)=>{return new Hn($n,ht,t)},Jt=(t)=>{let n=O(t);if(n&&"l1BaseFee"in n)return n?.l1BaseFee();return},Ut=async(t,{data:n,from:o,to:e,gasPrice:y,type:p,gasLimit:a,nonce:l})=>{if(!e)throw new Error("Missing to address");return xn.from({data:n,to:e,gasPrice:y,type:p,gasLimit:a,nonce:l?l:o?await t.getTransactionCount(o):0}).serialized},Dt=async(t,n)=>{let o=await O(t),e=await Ut(t,n);if(o&&"getL1Fee"in o)return o.getL1Fee(e)},qt=async(t,n)=>{let o=await t.send("eth_gasPrice",[]),e=await t.estimateGas(n);return o.mul(e)},Gn=async(t,n)=>{let o=await Dt(t,n),e=await qt(t,n);return o.add(e)},zn=async(t,n)=>{let o=O(t),e=await Ut(t,n);if(o&&"getL1GasUsed"in o)return o.getL1GasUsed(e)},Sn=()=>({chainId:Mt.OptimismHex,chainName:"Optimism",nativeCurrency:{name:"Ethereum",symbol:V.Ethereum,decimals:qn.ETH},rpcUrls:[kn.Optimism],blockExplorerUrls:[Cn[V.Optimism]]}),En=async(t)=>{try{let{maxFeePerGas:n,maxPriorityFeePerGas:o,gasPrice:e}=await t.getFeeData(),y=await Jt(t),p=e;if(!(n&&o))throw new Error("No fee data available");return{[v.Average]:{l1GasPrice:y,gasPrice:e,maxFeePerGas:n,maxPriorityFeePerGas:o},[v.Fast]:{l1GasPrice:(y||0n)*15n/10n,gasPrice:p*15n/10n,maxFeePerGas:n,maxPriorityFeePerGas:o*15n/10n},[v.Fastest]:{l1GasPrice:(y||0n)*2n,gasPrice:p*2n,maxFeePerGas:n,maxPriorityFeePerGas:o*2n}}}catch(n){throw new Error(`Failed to estimate gas price: ${n.msg??n.toString()}`)}},Ct=({api:t,provider:n,signer:o,covalentApiKey:e})=>{let y=t||R({apiKey:e,chainId:Mt.Optimism});return{...b({provider:n,signer:o}),estimateTotalGasCost:(a)=>Gn(n,a),estimateL1GasCost:(a)=>Dt(n,a),estimateL2GasCost:(a)=>qt(n,a),getL1GasPrice:()=>Jt(n),estimateL1Gas:(a)=>zn(n,a),getNetworkParams:Sn,estimateGasPrices:()=>En(n),getBalance:(a,l=!0,u)=>B({provider:u||n,api:y,address:a,chain:V.Optimism,potentialScamFilter:l})}};var ve=(t)=>{switch(t){case C.Avalanche:return mt;case C.Arbitrum:return it;case C.Base:return gt;case C.Optimism:return Ct;case C.Polygon:return Rt;case C.BinanceSmartChain:return st;case C.Ethereum:return Bt;default:throw new Error(`Chain ${t} is not supported`)}};export{z as toHexString,Vn as toChecksumAddress,jt as isStateChangingCall,E as isBrowserProvider,ve as getToolboxByChain,Q as getTokenAddress,Nn as getProvider,Jt as getL1GasPrice,On as getChecksumAddressFromAsset,B as getBalance,en as evmValidateAddress,tt as ethplorerApi,h as estimateTransactionFee,Gn as estimateTotalGasCost,Zn as estimateMaxSendableAmount,qt as estimateL2GasCost,Dt as estimateL1GasCost,zn as estimateL1Gas,$ as estimateGasPrices,G as createContractTxObject,I as createContract,R as covalentApi,O as connectGasPriceOracle,ao as Transaction,po as Signature,Ct as OPToolbox,_ as MAX_APPROVAL,Rt as MATICToolbox,yo as JsonRpcProvider,oo as HDNodeWallet,on as EthNetwork,b as EVMToolbox,Bt as ETHToolbox,W as EIP1193SendTransaction,eo as BrowserProvider,dn as BaseEVMToolbox,st as BSCToolbox,gt as BASEToolbox,no as AbstractSigner,mt as AVAXToolbox,it as ARBToolbox}; | ||
//# debugId=F573A9DE98394A9E64756E2164756E21 | ||
//# debugId=33BE38316EA7F22164756E2164756E21 |
@@ -35,3 +35,3 @@ { | ||
"types": "./src/index.ts", | ||
"version": "1.5.8" | ||
"version": "1.6.0" | ||
} |
@@ -1,2 +0,2 @@ | ||
import { Chain, type FeeOption } from "@swapkit/helpers"; | ||
import { Chain, FeeOption } from "@swapkit/helpers"; | ||
import type { BrowserProvider, JsonRpcProvider, JsonRpcSigner, Signer } from "ethers"; | ||
@@ -8,2 +8,3 @@ | ||
import { multicallAbi } from "../contracts/eth/multicall"; | ||
import { EVMToolbox } from "./EVMToolbox"; | ||
@@ -26,2 +27,18 @@ | ||
async function multicall( | ||
callTuples: { address: string; data: string }[], | ||
multicallAddress = "0x5ba1e12693dc8f9c48aad8770482f4739beed696", | ||
funcName = "aggregate", | ||
feeOptionKey: FeeOption = FeeOption.Fast, | ||
) { | ||
const txObject = await evmToolbox.createContractTxObject({ | ||
contractAddress: multicallAddress, | ||
abi: multicallAbi, | ||
funcName, | ||
funcParams: [callTuples], | ||
}); | ||
return evmToolbox.sendTransaction(txObject, feeOptionKey); | ||
} | ||
return { | ||
@@ -43,3 +60,4 @@ ...evmToolbox, | ||
}), | ||
multicall, | ||
}; | ||
}; |
Sorry, the diff of this file is not supported yet
166467
22
2056