@avalabs/evm-module 0.1.6 → 0.1.7
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 +24 -24
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +20 -20
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -2,34 +2,34 @@ import { rpcErrors } from '@metamask/rpc-errors';
|
|
|
2
2
|
import { TransactionType, AlertType, RpcMethod, parseManifest, TokenType, Environment, WalletType, NetworkVMType, RawSimplePriceResponseSchema, SimplePriceResponseSchema } from '@avalabs/vm-module-types';
|
|
3
3
|
import { getEvmAddressFromPubKey, getAddressFromXPub, JsonRpcBatchInternal } from '@avalabs/core-wallets-sdk';
|
|
4
4
|
import { toUtf8String, Network, isHexString, Interface, ethers, TypedDataEncoder } from 'ethers';
|
|
5
|
-
import { numberToBN, balanceToDisplayValue,
|
|
5
|
+
import { TokenUnit, numberToBN, balanceToDisplayValue, ipfsResolver } from '@avalabs/core-utils-sdk';
|
|
6
6
|
import { getNormalTxs, getErc20Txs } from '@avalabs/core-etherscan-sdk';
|
|
7
|
-
import
|
|
8
|
-
import { z, string, boolean } from 'zod';
|
|
9
|
-
import
|
|
7
|
+
import mn from 'lodash.startcase';
|
|
8
|
+
import { z as z$1, object, string, record, number, boolean } from 'zod';
|
|
9
|
+
import Ze from '@blockaid/client';
|
|
10
10
|
import { getBasicCoingeckoHttp, VsCurrencyType, simpleTokenPrice, simplePrice } from '@avalabs/core-coingecko-sdk';
|
|
11
11
|
import { Zodios } from '@zodios/core';
|
|
12
12
|
import { Glacier } from '@avalabs/glacier-sdk';
|
|
13
13
|
|
|
14
|
-
var Dt=Object.defineProperty;var Bt=(t,e,r)=>e in t?Dt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var C=(t,e,r)=>(Bt(t,typeof e!="symbol"?e+"":e,r),r),ge=(t,e,r)=>{if(!e.has(t))throw TypeError("Cannot "+r)};var h=(t,e,r)=>(ge(t,e,"read from private field"),r?r.call(t):e.get(t)),_=(t,e,r)=>{if(e.has(t))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(t):e.set(t,r);},D=(t,e,r,a)=>(ge(t,e,"write to private field"),a?a.call(t,r):e.set(t,r),r);async function X({chainId:t,proxyApiUrl:e}){let r=await fetch(`${e}/tokens?evmChainId=${t}`);if(!r.ok)throw rpcErrors.internal(`Failed to fetch tokens for chainId ${t}`);return r.json()}var Vt=process.env.GLACIER_API_KEY,A=t=>{let{chainId:e,chainName:r,rpcUrl:a,multiContractAddress:s,pollingInterval:o=2e3}=t,n=new JsonRpcBatchInternal({maxCalls:40,multiContractAddress:s},Ft(a,Vt),new Network(r,e));return n.pollingInterval=o,n},Lt=["glacier-api.avax.network","proxy-api.avax.network"];function Ft(t,e){let r=new URL(t);if(e&&Lt.includes(r.hostname)){let a=r.searchParams;return a.set("token",e),r.search=a.toString(),r.toString()}return t}var oe={LOW:1n,MEDIUM:4n,HIGH:6n},se=500000000n;async function he({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:a}){let s=A({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:a}),{maxFeePerGas:o}=await s.getFeeData();if(!o)throw rpcErrors.internal("Pre-EIP-1559 networks are not supported");let n=se*oe.LOW,i=se*oe.MEDIUM,c=se*oe.HIGH;return {baseFee:o,low:{maxFeePerGas:o+n,maxPriorityFeePerGas:n},medium:{maxFeePerGas:o+i,maxPriorityFeePerGas:i},high:{maxFeePerGas:o+c,maxPriorityFeePerGas:c},isFixedFee:!1}}function G(t,e,r="tx"){return `${t}/${r}/${e}`}var ke=({tx:t,networkToken:e,chainId:r,explorerUrl:a,address:s})=>{let o=t.from.toLowerCase()===s.toLowerCase(),n=parseInt(t.timeStamp)*1e3,i=e.decimals,p=new TokenUnit(t.value,e.decimals,e.symbol).toDisplay(),l=o?TransactionType.SEND:TransactionType.RECEIVE,{from:f,to:m,gasPrice:u,gasUsed:y,hash:b}=t,g=G(a,b);return {isIncoming:!o,isOutgoing:o,isContractCall:$t(t),timestamp:n,hash:b,isSender:o,from:f,to:m,tokens:[{decimal:i.toString(),name:e.name,symbol:e.symbol,amount:p,type:TokenType.NATIVE}],gasUsed:y,gasPrice:u,chainId:r.toString(),txType:l,explorerLink:g}};function $t(t){return t.input!=="0x"}function Ee({tx:t,address:e,explorerUrl:r,chainId:a}){let s=t.from.toLowerCase()===e.toLowerCase(),o=parseInt(t.timeStamp)*1e3,i=new TokenUnit(t.value,Number(t.tokenDecimal),t.tokenSymbol).toDisplay(),{from:c,to:p,gasPrice:l,gasUsed:f,hash:m,tokenDecimal:u,tokenName:y,tokenSymbol:b}=t,g=s?TransactionType.SEND:TransactionType.RECEIVE,T=G(r,m);return {isIncoming:!s,isOutgoing:s,isContractCall:!1,timestamp:o,hash:m,isSender:s,from:c,to:p,tokens:[{decimal:u,name:y,symbol:b,type:TokenType.ERC20,amount:i}],gasUsed:f,gasPrice:l,chainId:a.toString(),txType:g,explorerLink:T}}var Se=async({isTestnet:t,networkToken:e,explorerUrl:r,chainId:a,address:s,nextPageToken:o,offset:n})=>{let i=o?JSON.parse(o):void 0,c=i?.page||1,p=i?.queries||["normal","erc20"],l=(p.includes("normal")?await getNormalTxs(s,!t,{page:c,offset:n}):[]).map(b=>ke({tx:b,chainId:a,networkToken:e,explorerUrl:r,address:s})),f=(p.includes("erc20")?await getErc20Txs(s,!t,void 0,{page:c,offset:n}):[]).map(b=>Ee({tx:b,address:s,explorerUrl:r,chainId:a})),m=f.map(b=>b.hash),u=l.filter(b=>!m.includes(b.hash)),y={queries:[],page:c+1};return l.length&&y.queries.push("normal"),f.length&&y.queries.push("erc20"),{transactions:[...u,...f],nextPageToken:y.queries.length?JSON.stringify(y):""}};var Re=t=>t===1||t===5||t===4||t===11155111;var Ce=({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r},a,s)=>{let o=!e&&!r,n=zt(t.method?.methodName),i=a.toLowerCase(),c=n.toLowerCase().includes("swap"),p=o&&t.from.address.toLowerCase()===i,l=o&&t.to.address.toLowerCase()===i,f=n==="Market Buy Orders With Eth"||n==="Buy NFT",m=n==="Approve",u=n.toLowerCase().includes("transfer"),y=n.toLowerCase().includes("airdrop"),b=n.toLowerCase().includes("unwrap"),g=n==="Fill Order",T=u&&!!s[0]&&Ne(s[0].type)&&s[0].from?.address.toLowerCase()===i,k=u&&!!s[0]&&Ne(s[0].type)&&s[0].to?.address.toLowerCase()===i;return c?TransactionType.SWAP:p?TransactionType.SEND:l?TransactionType.RECEIVE:f?TransactionType.NFT_BUY:m?TransactionType.APPROVE:T?TransactionType.NFT_SEND:k?TransactionType.NFT_RECEIVE:u?TransactionType.TRANSFER:y?TransactionType.AIRDROP:b?TransactionType.UNWRAP:g?TransactionType.FILL_ORDER:TransactionType.UNKNOWN};function Ne(t){return t===TokenType.ERC721||t===TokenType.ERC1155}var zt=(t="")=>t.includes("(")?Kt(t.split("(",1)[0]):t;var Ae=(t,{nativeTransaction:e,erc20Transfers:r,erc721Transfers:a},s)=>{let o=t===TransactionType.TRANSFER,n=t===TransactionType.SEND,i=t===TransactionType.RECEIVE,c=e?.from?.address,p=e?.to?.address;o&&r&&r[0]&&(c=r[0].from.address,p=r[0].to.address),o&&a&&a[0]&&(c=a[0].from.address,p=a[0].to.address);let l=n||o&&c.toLowerCase()===s.toLowerCase(),f=i||o&&p.toLowerCase()===s.toLowerCase();return {isOutgoing:l,isIncoming:f,isSender:c===s,from:c,to:p}};async function xe(t){try{return t.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}var Xt="https://ipfs.io";function M(t,e=Xt){if(!t)return "";try{return ipfsResolver(t,e)}catch{return t}}async function Zt(t,e=5e3){let r=new AbortController;return setTimeout(()=>r.abort(),e),fetch(t,{signal:r.signal})}async function we(t){let e={};if(t)if(t.startsWith("data:application/json;base64,")){let r=t.substring(29);try{let a=Buffer.from(r,"base64").toString();e=JSON.parse(a);}catch{e={};}}else e=await Zt(M(t)).then(r=>r.json()).catch(()=>({}));else return {};return e}var er="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function Ie(t,e="256"){let r=M(t);return `${er}/width=${e},fit/${r}`}var Be=async({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:a},s)=>{let o=[];if(t.value!=="0"){let n=s.decimals,c=new TokenUnit(t.value,s.decimals,s.symbol).toDisplay();o.push({decimal:n.toString(),name:s.name,symbol:s.symbol,amount:c,from:t.from,to:t.to,type:TokenType.NATIVE});}return e?.forEach(n=>{let i=n.erc20Token.decimals,p=new TokenUnit(n.value,i,n.erc20Token.symbol).toDisplay();o.push({decimal:i.toString(),name:n.erc20Token.name,symbol:n.erc20Token.symbol,amount:p,from:n.from,to:n.to,imageUri:n.erc20Token.logoUri,type:TokenType.ERC20});}),r&&await Promise.allSettled(r.map(async n=>{let i=n.erc721Token,c=await De(i.tokenUri,i.metadata.imageUri);o.push({name:n.erc721Token.name,symbol:n.erc721Token.symbol,amount:"1",imageUri:c,from:n.from,to:n.to,collectableTokenId:n.erc721Token.tokenId,type:TokenType.ERC721});})),a&&await Promise.allSettled(a.map(async n=>{let i=n.erc1155Token,c=await De(i.tokenUri,i.metadata.imageUri);o.push({name:n.erc1155Token.metadata.name??"",symbol:n.erc1155Token.metadata.symbol??"",amount:n.value,imageUri:c,from:n.from,to:n.to,collectableTokenId:n.erc1155Token.tokenId,type:TokenType.ERC1155});})),o},De=async(t,e)=>{if(e)return e.startsWith("ipfs://")?M(e):e;{let[r,a]=await xe(we(t));return a?"":r.image?Ie(r.image):""}};var Ue=[TransactionType.SEND,TransactionType.RECEIVE,TransactionType.TRANSFER],ee=(n=>(n.TOTAL_SUPPLY="totalSupply",n.BALANCE_OF="balanceOf",n.TRANSFER="transfer",n.TRANSFER_FROM="transferFrom",n.APPROVE="approve",n.ALLOWANCE="allowance",n))(ee||{});var Ge=async({transactions:t,explorerUrl:e,networkToken:r,chainId:a,address:s})=>{let o=await Be(t,r),n=Ce(t,s,o),{isOutgoing:i,isIncoming:c,isSender:p,from:l,to:f}=Ae(n,t,s),{blockTimestamp:m,txHash:u,gasPrice:y,gasUsed:b}=t.nativeTransaction,g=G(e,u);return {isContractCall:!Ue.includes(n),isIncoming:c,isOutgoing:i,isSender:p,timestamp:m*1e3,hash:u,from:l,to:f,tokens:o,gasPrice:y,gasUsed:b,chainId:a.toString(),txType:n,explorerLink:g}};var Me=async({chainId:t,explorerUrl:e,networkToken:r,address:a,nextPageToken:s,offset:o,glacierService:n})=>{try{let i=await n.listTransactions({chainId:t.toString(),address:a,pageToken:s,pageSize:o});return {transactions:(await Promise.all(i.transactions.filter(l=>l.nativeTransaction.txStatus==="1").map(l=>Ge({transactions:l,explorerUrl:e,networkToken:r,chainId:t,address:a}).then(f=>f)))).filter(l=>l.tokens.find(f=>Number(f.amount)!==0)),nextPageToken:i.nextPageToken}}catch{return {transactions:[],nextPageToken:""}}};var Ve=async({chainId:t,isTestnet:e,networkToken:r,explorerUrl:a,address:s,nextPageToken:o,offset:n,glacierService:i})=>Re(t)?Se({isTestnet:e,networkToken:r,explorerUrl:a,chainId:t,address:s,nextPageToken:o,offset:n}):i.isHealthy()?Me({networkToken:r,explorerUrl:a,chainId:t,address:s,nextPageToken:o,offset:n,glacierService:i}):{transactions:[],nextPageToken:""};var Le={name:"EVM",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/bundle.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}},provider:{checksum:"",location:{npm:{filePath:"dist/provider.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:["eip155:1","eip155:43114","eip155:43113"],namespaces:["eip155"]},cointype:"60",permissions:{rpc:{dapps:!0,methods:["personal_sign","eth_sendTransaction","eth_*","web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"]}},manifestVersion:"0.0"};var rr=z.object({from:z.string().length(42),to:z.string().length(42),data:z.string().optional(),value:z.string().startsWith("0x").optional(),gas:z.string().startsWith("0x").optional(),gasPrice:z.string().startsWith("0x").optional(),maxFeePerGas:z.string().startsWith("0x").optional(),maxPriorityFeePerGas:z.string().startsWith("0x").optional(),nonce:z.string().optional(),chainId:z.string().optional()}),ar=z.array(rr).length(1),Fe=t=>ar.safeParse(t);var He=async({transactionParams:{from:t,to:e,data:r,value:a},provider:s})=>{let o=await s.getTransactionCount(t);return Number(await s.estimateGas({from:t,to:e,nonce:o,data:r,value:a}))};var Oe=async({from:t,provider:e})=>e.getTransactionCount(t);var $e="DUMMY_API_KEY",je=async({proxyApiUrl:t,chainId:e,params:r,domain:a})=>new We({baseURL:t+"/proxy/blockaid/",apiKey:$e}).evm.transaction.scan({account_address:r.from,chain:e.toString(),options:["validation","simulation"],data:{from:r.from,to:r.to,data:r.data,value:r.value,gas:r.gas,gas_price:r.gasPrice},metadata:a&&a.length>0?{domain:a}:{non_dapp:!0}}),Ye=async({proxyApiUrl:t,chainId:e,accountAddress:r,data:a,domain:s})=>new We({baseURL:t+"/proxy/blockaid/",apiKey:$e}).evm.jsonRpc.scan({chain:e.toString(),options:["validation","simulation"],account_address:r,data:a,metadata:s&&s.length>0?{domain:s}:{non_dapp:!0}});var qe=async({request:t,dAppUrl:e,params:r,chainId:a,proxyApiUrl:s})=>{let o,n,i;try{let{validation:c,simulation:p}=await je({proxyApiUrl:s,chainId:a,params:r,domain:e});!c||c.result_type==="Error"||c.result_type==="Warning"?o=L[AlertType.WARNING]:c.result_type==="Malicious"&&(o=L[AlertType.DANGER]),p?.status==="Success"&&(i=Ke(t,p.account_summary.exposures),n=ze(p.account_summary.assets_diffs));}catch(c){console.error("processTransactionSimulation error",c),o=L[AlertType.WARNING];}return {alert:o,balanceChange:n,tokenApprovals:i}},Ke=(t,e)=>{let r=[];for(let s of e){let o=Qe(s.asset);if(o)for(let[n,i]of Object.entries(s.spenders))if(i.exposure.length===0)r.push({token:o,spenderAddress:n,logoUri:o.logoUri});else for(let c of i.exposure)"raw_value"in c?r.push({token:o,spenderAddress:n,value:c.raw_value,usdPrice:c.usd_price,logoUri:o.logoUri}):r.push({token:o,spenderAddress:n,logoUri:c.logo_url,usdPrice:c.usd_price});}return r.length===0?void 0:{isEditable:r.length===1&&r[0]?.token.type===TokenType.ERC20&&t.method===RpcMethod.ETH_SEND_TRANSACTION,approvals:r}},ze=t=>{let e=Je(t,"in"),r=Je(t,"out");if(!(e.length===0&&r.length===0))return {ins:e,outs:r}},Je=(t,e)=>t.filter(r=>r[e].length>0).sort((r,a)=>r[e].length-a[e].length).map(r=>{let a=r.asset,s="address"in a?Qe(a):cr(a);if(!s)return;let o=r[e].map(n=>{let i;if("value"in n&&n.value)if("decimals"in s){let c=numberToBN(n.value,s.decimals);i=balanceToDisplayValue(c,s.decimals);}else isHexString(n.value)&&(i=parseInt(n.value,16).toString());else "type"in s&&s.type===TokenType.ERC721&&(i="1");return i?{displayValue:i,usdPrice:n.usd_price}:void 0}).filter(n=>n!==void 0);return {token:s,items:o}}).filter(r=>r!==void 0),Qe=t=>{let e;return t.type==="ERC20"?e={type:TokenType.ERC20,address:t.address,decimals:t.decimals,name:t.name??t.symbol??"",symbol:t.symbol??"",logoUri:t.logo_url}:t.type==="ERC1155"?e={type:TokenType.ERC1155,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}:t.type==="ERC721"?e={type:TokenType.ERC721,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}:t.type==="NONERC"&&(e={type:TokenType.NONERC,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}),e},cr=t=>({name:t.name??"",symbol:t.symbol??"",decimals:t.decimals,description:"",logoUri:t.logo_url}),Xe=async({request:t,dAppUrl:e,accountAddress:r,chainId:a,data:s,proxyApiUrl:o})=>{let n,i,c;try{let{validation:p,simulation:l}=await Ye({proxyApiUrl:o,chainId:a,accountAddress:r,data:s,domain:e});!p||p.result_type==="Error"||p.result_type==="Warning"?n=L[AlertType.WARNING]:p.result_type==="Malicious"&&(n=L[AlertType.DANGER]),l?.status==="Success"&&(c=Ke(t,l.account_summary.exposures),i=ze(l.account_summary.assets_diffs));}catch(p){console.error("processJsonRpcSimulation error",p),n=L[AlertType.WARNING];}return {alert:n,balanceChange:i,tokenApprovals:c}},L={[AlertType.WARNING]:{type:AlertType.WARNING,details:{title:"Suspicious Transaction",description:"Use caution, this transaction may be malicious."}},[AlertType.DANGER]:{type:AlertType.DANGER,details:{title:"Scam Transaction",description:"This transaction is malicious, do not proceed.",actionTitles:{reject:"Reject Transaction",proceed:"Proceed Anyway"}}}};var te={_format:"hh-sol-artifact-1",contractName:"ERC20",sourceName:"contracts/token/ERC20/ERC20.sol",abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}],bytecode:"0x60806040523480156200001157600080fd5b5060405162000aed38038062000aed8339810160408190526200003491620001db565b81516200004990600390602085019062000068565b5080516200005f90600490602084019062000068565b50505062000281565b828054620000769062000245565b90600052602060002090601f0160209004810192826200009a5760008555620000e5565b82601f10620000b557805160ff1916838001178555620000e5565b82800160010185558215620000e5579182015b82811115620000e5578251825591602001919060010190620000c8565b50620000f3929150620000f7565b5090565b5b80821115620000f35760008155600101620000f8565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200013657600080fd5b81516001600160401b03808211156200015357620001536200010e565b604051601f8301601f19908116603f011681019082821181831017156200017e576200017e6200010e565b816040528381526020925086838588010111156200019b57600080fd5b600091505b83821015620001bf5785820183015181830184015290820190620001a0565b83821115620001d15760008385830101525b9695505050505050565b60008060408385031215620001ef57600080fd5b82516001600160401b03808211156200020757600080fd5b620002158683870162000124565b935060208501519150808211156200022c57600080fd5b506200023b8582860162000124565b9150509250929050565b600181811c908216806200025a57607f821691505b6020821081036200027b57634e487b7160e01b600052602260045260246000fd5b50919050565b61085c80620002916000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069a565b60405180910390f35b6100df6100da36600461070b565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610735565b61024a565b604051601281526020016100c3565b6100df61013136600461070b565b61026e565b6100f3610144366004610771565b6001600160a01b031660009081526020819052604090205490565b6100b6610290565b6100df61017536600461070b565b61029f565b6100df61018836600461070b565b61031f565b6100f361019b366004610793565b61032d565b6060600380546101af906107c6565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c6565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b600033610240818585610358565b5060019392505050565b60003361025885828561047c565b6102638585856104f6565b506001949350505050565b600033610240818585610281838361032d565b61028b9190610800565b610358565b6060600480546101af906107c6565b600033816102ad828661032d565b9050838110156103125760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102638286868403610358565b6000336102408185856104f6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103ba5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610309565b6001600160a01b03821661041b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610309565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610488848461032d565b905060001981146104f057818110156104e35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610309565b6104f08484848403610358565b50505050565b6001600160a01b03831661055a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610309565b6001600160a01b0382166105bc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610309565b6001600160a01b038316600090815260208190526040902054818110156106345760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610309565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f0565b600060208083528351808285015260005b818110156106c7578581018301518582016040015282016106ab565b818111156106d9576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461070657600080fd5b919050565b6000806040838503121561071e57600080fd5b610727836106ef565b946020939093013593505050565b60008060006060848603121561074a57600080fd5b610753846106ef565b9250610761602085016106ef565b9150604084013590509250925092565b60006020828403121561078357600080fd5b61078c826106ef565b9392505050565b600080604083850312156107a657600080fd5b6107af836106ef565b91506107bd602084016106ef565b90509250929050565b600181811c908216806107da57607f821691505b6020821081036107fa57634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561082157634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220e7dc257596a973556752e9db5f465b21aad78d068ae819d0395e1f99a95065a964736f6c634300080d0033",deployedBytecode:"0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069a565b60405180910390f35b6100df6100da36600461070b565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610735565b61024a565b604051601281526020016100c3565b6100df61013136600461070b565b61026e565b6100f3610144366004610771565b6001600160a01b031660009081526020819052604090205490565b6100b6610290565b6100df61017536600461070b565b61029f565b6100df61018836600461070b565b61031f565b6100f361019b366004610793565b61032d565b6060600380546101af906107c6565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c6565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b600033610240818585610358565b5060019392505050565b60003361025885828561047c565b6102638585856104f6565b506001949350505050565b600033610240818585610281838361032d565b61028b9190610800565b610358565b6060600480546101af906107c6565b600033816102ad828661032d565b9050838110156103125760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102638286868403610358565b6000336102408185856104f6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103ba5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610309565b6001600160a01b03821661041b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610309565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610488848461032d565b905060001981146104f057818110156104e35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610309565b6104f08484848403610358565b50505050565b6001600160a01b03831661055a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610309565b6001600160a01b0382166105bc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610309565b6001600160a01b038316600090815260208190526040902054818110156106345760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610309565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f0565b600060208083528351808285015260005b818110156106c7578581018301518582016040015282016106ab565b818111156106d9576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461070657600080fd5b919050565b6000806040838503121561071e57600080fd5b610727836106ef565b946020939093013593505050565b60008060006060848603121561074a57600080fd5b610753846106ef565b9250610761602085016106ef565b9150604084013590509250925092565b60006020828403121561078357600080fd5b61078c826106ef565b9392505050565b600080604083850312156107a657600080fd5b6107af836106ef565b91506107bd602084016106ef565b90509250929050565b600181811c908216806107da57607f821691505b6020821081036107fa57634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561082157634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220e7dc257596a973556752e9db5f465b21aad78d068ae819d0395e1f99a95065a964736f6c634300080d0033",linkReferences:{},deployedLinkReferences:{}};var Ze=t=>{if(t.data)try{let r=new Interface(te.abi).parseTransaction({data:t.data,value:t.value}),a=r?.name??r?.fragment?.name;return a&&mr(a)?a:void 0}catch{return}};function mr(t){return Object.values(ee).includes(t)}var et=async({request:t,network:e,approvalController:r,proxyApiUrl:a})=>{let{dappInfo:s,params:o}=t,n=Fe(o);if(!n.success)return console.error("invalid params",n.error),{error:rpcErrors.invalidParams("Transaction params are invalid")};let i=n.data[0];if(!i)return {error:rpcErrors.invalidParams("Transaction params are invalid")};let c=A({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});if(!i.gas||Number(i.gas)<0)try{let k=await He({transactionParams:{from:i.from,to:i.to,data:i.data,value:i.value},provider:c});i.gas="0x"+k.toString(16);}catch{return {error:rpcErrors.internal("Unable to calculate gas limit")}}if(!i.nonce)try{let k=await Oe({from:i.from,provider:c});i.nonce=String(k);}catch{return {error:rpcErrors.internal("Unable to calculate nonce")}}let p=Ze(i),{alert:l,balanceChange:f,tokenApprovals:m}=await qe({request:t,proxyApiUrl:a,chainId:e.chainId,params:i,dAppUrl:t.dappInfo.url}),u="Approve Transaction";p==="approve"&&(u="Token Spend Approval");let y={title:u,network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},transactionDetails:{website:new URL(s.url).hostname,from:i.from,to:i.to,data:i.data,type:p},networkFeeSelector:!0,alert:l,balanceChange:f,tokenApprovals:m},b={type:RpcMethod.ETH_SEND_TRANSACTION,account:i.from,data:{type:2,nonce:Number(i.nonce),gasLimit:Number(i.gas),to:i.to,from:i.from,data:i.data,value:i.value,chainId:i.chainId}},g=await r.requestApproval({request:t,displayData:y,signingData:b});if("error"in g)return {error:g.error};let T=await c.send("eth_sendRawTransaction",[g.result]);return ur({provider:c,txHash:T,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted}),{result:T}},ur=async({provider:t,txHash:e,onTransactionConfirmed:r,onTransactionReverted:a})=>{(await t.waitForTransaction(e))?.status===1?r(e):a(e);};var tt=async({provider:t,tokenService:e,address:r,currency:a,tokens:s,network:o})=>{let n=o.pricingProviders?.coingecko.assetPlatformId,i=o.pricingProviders?.coingecko.nativeTokenId,c=s.map(f=>f.address),p=await Promise.allSettled(s.map(async f=>{let y=await new ethers.Contract(f.address,te.abi,t).balanceOf?.(r)||0n;return {...f,balance:y}})).then(f=>f.reduce((m,u)=>u.status==="fulfilled"&&u.value.balance!==0n?[...m,u.value]:m,[]));if(!p.length)return {};let l=n&&await e.getPricesByAddresses(c,n,a)||{};return p.reduce((f,m)=>{let u=l?.[i??""]?.[a]?.price??void 0,y=l?.[i??""]?.[a]?.marketCap??void 0,b=l?.[i??""]?.[a]?.vol24??void 0,g=l?.[i??""]?.[a]?.change24??void 0,T=new TokenUnit(m.balance,m.decimals,m.symbol),k=u!==void 0?T.mul(u):void 0;return {...f,[m.address.toLowerCase()]:{...m,type:TokenType.ERC20,balance:m.balance,balanceDisplayValue:T.toDisplay(),balanceInCurrency:k?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:k?.toDisplay({fixedDp:2}),priceInCurrency:u,marketCap:y,change24:g,vol24:b}}},{})};var rt=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:a=Y.exponential()})=>{let s=0,o=0,n;for(;o<r;){o>0&&await gr(s);try{let c=await t(o);if(e(c))return c}catch(c){n=c;}s=a(o),o++;}let i=n?`Max retry exceeded. ${n}`:"Max retry exceeded.";throw new Error(i)},Y=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}};function gr(t){return new Promise(e=>setTimeout(e,t))}var pe=t=>rt({operation:e=>t(e>0),maxRetries:2,backoffPolicy:Y.constant(1),isSuccess:e=>e?.status?.error_code!==429});function at(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function le(t){let e,r=0;for(e=0;e<t.length;e++){let a=at(t[e]??"");r=r+65027/a;}return (""+r).slice(0,16)}var de=t=>new Zodios(`${t}/proxy/coingecko`,[{method:"post",path:"/simple/price",parameters:[{name:"ids",type:"Query",schema:string()},{name:"vs_currencies",type:"Query",schema:string()},{name:"include_market_cap",type:"Query",schema:string().optional()},{name:"include_24hr_vol",type:"Query",schema:string().optional()},{name:"include_24hr_change",type:"Query",schema:string().optional()},{name:"include_last_updated_at",type:"Query",schema:string().optional()}],alias:"simplePrice",response:RawSimplePriceResponseSchema},{method:"post",path:"/simple/token_price/:id",parameters:[{name:"id",type:"Path",schema:string()},{name:"contract_addresses",type:"Query",schema:string().array()},{name:"vs_currencies",type:"Query",schema:string().array()},{name:"include_market_cap",type:"Query",schema:boolean().optional()},{name:"include_24hr_vol",type:"Query",schema:boolean().optional()},{name:"include_24hr_change",type:"Query",schema:boolean().optional()}],alias:"simplePriceByContractAddresses",response:SimplePriceResponseSchema}],{axiosConfig:{headers:{"Content-Type":"application/json"}}});var nt=getBasicCoingeckoHttp(),x,F,q=class{constructor({storage:e,proxyApiUrl:r}){_(this,x,void 0);_(this,F,void 0);C(this,"transformSimplePriceResponse",(e,r=[VsCurrencyType.USD])=>{let a={};return Object.keys(e).forEach(s=>{let o=e[s];a[s]={},r.forEach(n=>{a[s]={[n]:{price:o?.[n],change24:o?.[`${n}_24h_change`],vol24:o?.[`${n}_24h_vol`],marketCap:o?.[`${n}_market_cap`]}};});}),a});D(this,x,e),D(this,F,r);}async getSimplePrice({coinIds:e=[],currencies:r=[VsCurrencyType.USD]}){let a,o=`getSimplePrice-${e?`${le(e)}-${r.toString()}`:`${r.toString()}`}`;if(a=h(this,x)?.get?.(o),a)return a;try{a=await pe(n=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:n}));}catch{a=void 0;}return h(this,x)?.set?.(o,a),a}async getPricesByAddresses(e,r,a=VsCurrencyType.USD){let s,n=`getPricesWithMarketDataByAddresses-${`${le(e)}-${r}-${a}`}`;if(s=h(this,x)?.get?.(n),s)return s;try{s=await pe(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:a,useCoingeckoProxy:i}));}catch{s=void 0;}return h(this,x)?.set?.(n,s),s}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:a=VsCurrencyType.USD,useCoingeckoProxy:s=!1}){return s?de(h(this,F)).simplePriceByContractAddresses(void 0,{params:{id:e},queries:{contract_addresses:r,vs_currencies:[a],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0}}):simpleTokenPrice(nt,{assetPlatformId:e,tokenAddresses:r,currencies:[a],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:r=[VsCurrencyType.USD],marketCap:a=!1,vol24:s=!1,change24:o=!1,lastUpdated:n=!1,useCoingeckoProxy:i=!1,shouldThrow:c=!0}){if(i){let p=await de(h(this,F)).simplePrice(void 0,{queries:{ids:e?.join(","),vs_currencies:r.join(","),include_market_cap:String(a),include_24hr_vol:String(s),include_24hr_change:String(o),include_last_updated_at:String(n)}});return this.transformSimplePriceResponse(p,r)}return simplePrice(nt,{coinIds:e,currencies:r,marketCap:a,vol24:s,change24:o,lastUpdated:n,shouldThrow:c})}};x=new WeakMap,F=new WeakMap;var ot=async({provider:t,tokenService:e,address:r,currency:a,network:s})=>{let o=s.pricingProviders?.coingecko.nativeTokenId,n=s.networkToken,i=o?await e.getSimplePrice({coinIds:[o],currencies:[a]}):{},c=i?.[o??""]?.[a]?.price??void 0,p=i?.[o??""]?.[a]?.marketCap??void 0,l=i?.[o??""]?.[a]?.vol24??void 0,f=i?.[o??""]?.[a]?.change24??void 0,m=await t.getBalance(r),u=new TokenUnit(m,n.decimals,n.symbol),y=c!==void 0?u.mul(c):void 0;return {...n,coingeckoId:o??"",type:TokenType.NATIVE,balance:m,balanceDisplayValue:u.toDisplay(),balanceInCurrency:y?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:y?.toDisplay({fixedDp:2}),priceInCurrency:c,marketCap:p,vol24:l,change24:f}};var st=async({address:t,currency:e,chainId:r,glacierService:a,coingeckoId:s})=>{let n=(await a.getNativeBalance({chainId:r.toString(),address:t,currency:e.toLocaleLowerCase()})).nativeTokenBalance,i=new TokenUnit(n.balance,n.decimals,n.symbol),c=n.price?.value,p=c!==void 0?i.mul(c):void 0;return {name:n.name,symbol:n.symbol,decimals:n.decimals,type:TokenType.NATIVE,logoUri:n.logoUri,balance:i.toSubUnit(),balanceDisplayValue:i.toDisplay(),balanceInCurrency:p?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:p?.toDisplay({fixedDp:2}),priceInCurrency:c,coingeckoId:s}};var ct=async({glacierService:t,currency:e,chainId:r,address:a,customTokens:s})=>{let o=[],n;do{let i=await t.listErc20Balances({chainId:r.toString(),address:a,currency:e.toLocaleLowerCase(),pageSize:100,pageToken:n});o.push(...Ir(i.erc20TokenBalances,Number(r))),n=i.nextPageToken;}while(n);return [...wr(s),...o].reduce((i,c)=>({...i,[c.address.toLowerCase()]:c}),{})},wr=t=>t.map(e=>({...e,decimals:e.decimals??18,type:TokenType.ERC20,balance:0n,balanceInCurrency:0,balanceDisplayValue:"0",balanceCurrencyDisplayValue:"0",priceInCurrency:0,marketCap:0,change24:0,vol24:0})),Ir=(t,e)=>t.map(r=>{let a=new TokenUnit(r.balance,r.decimals,r.symbol),s=a.toDisplay(),o=r.balanceValue?.value.toString(),n=r.price?.value,i=n!==void 0?a.mul(n).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {chainId:e,address:r.address,name:r.name,symbol:r.symbol,decimals:r.decimals,logoUri:r.logoUri,balance:a.toSubUnit(),balanceCurrencyDisplayValue:o,balanceDisplayValue:s,balanceInCurrency:i,priceInCurrency:n,type:TokenType.ERC20}});var lt=async({addresses:t,currency:e,network:r,proxyApiUrl:a,customTokens:s=[],storage:o,glacierService:n})=>{let i=r.chainId,c=await n.isNetworkSupported(r.chainId),p=n.isHealthy(),l=[];if(p&&c)l=await Promise.allSettled(t.map(async m=>{let u=await st({address:m,currency:e,chainId:i,glacierService:n,coingeckoId:r.pricingProviders?.coingecko.nativeTokenId??""}),y=await ct({customTokens:s.filter(pt),glacierService:n,currency:e,chainId:i,address:m});return {address:m,balances:{[u.symbol]:u,...y}}}));else {let m=new q({storage:o,proxyApiUrl:a}),y=[...await X({chainId:Number(i),proxyApiUrl:a}),...s],b=A({chainId:i,chainName:r.chainName,rpcUrl:r.rpcUrl,multiContractAddress:r.utilityAddresses?.multicall});l=await Promise.allSettled(t.map(async g=>{let T=await ot({network:r,tokenService:m,address:g,currency:e,provider:b}),k=await tt({provider:b,network:r,tokenService:m,address:g,currency:e,tokens:y.filter(pt)});return {address:g,balances:{[T.symbol]:T,...k}}}));}return l.reduce((m,u)=>u.status==="rejected"?m:{...m,[u.value.address]:u.value.balances},{})};function pt(t){return t.type===TokenType.ERC20}var Dr={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},Br={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},dt=t=>{switch(t){case Environment.PRODUCTION:return Dr;case Environment.DEV:return Br}};var N=class extends Error{constructor(){super(...arguments);C(this,"message","Glacier is unhealthy. Try again later.");}},ae=class{constructor({glacierApiUrl:e}){C(this,"glacierSdk");C(this,"isGlacierHealthy",!0);C(this,"supportedChainIds",[]);C(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new Glacier({BASE:e}),this.getSupportedChainIds().catch(()=>{});}setGlacierToUnhealthy(){this.isGlacierHealthy=!1,setTimeout(()=>{this.isGlacierHealthy=!0;},5*60*1e3);}async isNetworkSupported(e){return (await this.getSupportedChainIds()).some(a=>a===e.toString())}async getSupportedChainIds(){if(this.supportedChainIds.length)return this.supportedChainIds;try{let e=await this.glacierSdk.evmChains.supportedChains({});return this.supportedChainIds=e.chains.map(r=>r.chainId),this.supportedChainIds}catch{return []}}async reindexNft({address:e,chainId:r,tokenId:a}){try{await this.glacierSdk.nfTs.reindexNft({address:e,chainId:r,tokenId:a});}catch(s){throw s instanceof N&&this.setGlacierToUnhealthy(),s}}async getTokenDetails({address:e,chainId:r,tokenId:a}){try{return this.glacierSdk.nfTs.getTokenDetails({address:e,chainId:r,tokenId:a})}catch(s){throw s instanceof N&&this.setGlacierToUnhealthy(),s}}async getNativeBalance({chainId:e,address:r,currency:a}){try{return this.glacierSdk.evmBalances.getNativeBalance({chainId:e,address:r,currency:a.toLocaleLowerCase()})}catch(s){throw s instanceof N&&this.setGlacierToUnhealthy(),s}}async listErc721Balances({chainId:e,address:r,pageSize:a,pageToken:s}){try{return this.glacierSdk.evmBalances.listErc721Balances({chainId:e,address:r,pageSize:a,pageToken:s})}catch(o){throw o instanceof N&&this.setGlacierToUnhealthy(),o}}async listErc1155Balances({chainId:e,address:r,pageSize:a,pageToken:s}){try{return this.glacierSdk.evmBalances.listErc1155Balances({chainId:e,address:r,pageSize:a,pageToken:s})}catch(o){throw o instanceof N&&this.setGlacierToUnhealthy(),o}}async listErc20Balances({chainId:e,address:r,currency:a,pageSize:s,pageToken:o}){try{return this.glacierSdk.evmBalances.listErc20Balances({chainId:e,address:r,currency:a.toLocaleLowerCase(),pageSize:s,pageToken:o})}catch(n){throw n instanceof N&&this.setGlacierToUnhealthy(),n}}async listTransactions({chainId:e,address:r,pageToken:a,pageSize:s}){try{return this.glacierSdk.evmTransactions.listTransactions({chainId:e,address:r,pageToken:a,pageSize:s})}catch(o){throw o instanceof N&&this.setGlacierToUnhealthy(),o}}};var ue=t=>{let e="";e+=`Domain
|
|
15
|
-
`;for(let
|
|
14
|
+
var qt=Object.defineProperty;var zt=(n,e,t)=>e in n?qt(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var N=(n,e,t)=>(zt(n,typeof e!="symbol"?e+"":e,t),t),we=(n,e,t)=>{if(!e.has(n))throw TypeError("Cannot "+t)};var g=(n,e,t)=>(we(n,e,"read from private field"),t?t.call(n):e.get(n)),R=(n,e,t)=>{if(e.has(n))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(n):e.set(n,t);},P=(n,e,t,a)=>(we(n,e,"write to private field"),a?a.call(n,t):e.set(n,t),t);async function te({chainId:n,proxyApiUrl:e}){let t=await fetch(`${e}/tokens?evmChainId=${n}`);if(!t.ok)throw rpcErrors.internal(`Failed to fetch tokens for chainId ${n}`);return t.json()}var Zt=process.env.GLACIER_API_KEY,A=n=>{let{chainId:e,chainName:t,rpcUrl:a,multiContractAddress:s,pollingInterval:r=2e3}=n,o=new JsonRpcBatchInternal({maxCalls:40,multiContractAddress:s},tn(a,Zt),new Network(t,e));return o.pollingInterval=r,o},en=["glacier-api.avax.network","proxy-api.avax.network"];function tn(n,e){let t=new URL(n);if(e&&en.includes(t.hostname)){let a=t.searchParams;return a.set("token",e),t.search=a.toString(),t.toString()}return n}var de={LOW:1n,MEDIUM:4n,HIGH:6n},ue=500000000n;async function xe({chainId:n,chainName:e,rpcUrl:t,multiContractAddress:a}){let s=A({chainId:n,chainName:e,rpcUrl:t,multiContractAddress:a}),{maxFeePerGas:r}=await s.getFeeData();if(!r)throw rpcErrors.internal("Pre-EIP-1559 networks are not supported");let o=ue*de.LOW,i=ue*de.MEDIUM,c=ue*de.HIGH;return {baseFee:r,low:{maxFeePerGas:r+o,maxPriorityFeePerGas:o},medium:{maxFeePerGas:r+i,maxPriorityFeePerGas:i},high:{maxFeePerGas:r+c,maxPriorityFeePerGas:c},isFixedFee:!1}}function V(n,e,t="tx"){return `${n}/${t}/${e}`}var Ne=({tx:n,networkToken:e,chainId:t,explorerUrl:a,address:s})=>{let r=n.from.toLowerCase()===s.toLowerCase(),o=parseInt(n.timeStamp)*1e3,i=e.decimals,l=new TokenUnit(n.value,e.decimals,e.symbol).toDisplay(),d=r?TransactionType.SEND:TransactionType.RECEIVE,{from:b,to:m,gasPrice:p,gasUsed:f,hash:u}=n,h=V(a,u);return {isIncoming:!r,isOutgoing:r,isContractCall:on(n),timestamp:o,hash:u,isSender:r,from:b,to:m,tokens:[{decimal:i.toString(),name:e.name,symbol:e.symbol,amount:l,type:TokenType.NATIVE}],gasUsed:f,gasPrice:p,chainId:t.toString(),txType:d,explorerLink:h}};function on(n){return n.input!=="0x"}function _e({tx:n,address:e,explorerUrl:t,chainId:a}){let s=n.from.toLowerCase()===e.toLowerCase(),r=parseInt(n.timeStamp)*1e3,i=new TokenUnit(n.value,Number(n.tokenDecimal),n.tokenSymbol).toDisplay(),{from:c,to:l,gasPrice:d,gasUsed:b,hash:m,tokenDecimal:p,tokenName:f,tokenSymbol:u}=n,h=s?TransactionType.SEND:TransactionType.RECEIVE,T=V(t,m);return {isIncoming:!s,isOutgoing:s,isContractCall:!1,timestamp:r,hash:m,isSender:s,from:c,to:l,tokens:[{decimal:p,name:f,symbol:u,type:TokenType.ERC20,amount:i}],gasUsed:b,gasPrice:d,chainId:a.toString(),txType:h,explorerLink:T}}var De=async({isTestnet:n,networkToken:e,explorerUrl:t,chainId:a,address:s,nextPageToken:r,offset:o})=>{let i=r?JSON.parse(r):void 0,c=i?.page||1,l=i?.queries||["normal","erc20"],d=(l.includes("normal")?await getNormalTxs(s,!n,{page:c,offset:o}):[]).map(u=>Ne({tx:u,chainId:a,networkToken:e,explorerUrl:t,address:s})),b=(l.includes("erc20")?await getErc20Txs(s,!n,void 0,{page:c,offset:o}):[]).map(u=>_e({tx:u,address:s,explorerUrl:t,chainId:a})),m=b.map(u=>u.hash),p=d.filter(u=>!m.includes(u.hash)),f={queries:[],page:c+1};return d.length&&f.queries.push("normal"),b.length&&f.queries.push("erc20"),{transactions:[...p,...b],nextPageToken:f.queries.length?JSON.stringify(f):""}};var Be=n=>n===1||n===5||n===4||n===11155111;var Ve=({nativeTransaction:n,erc20Transfers:e,erc721Transfers:t},a,s)=>{let r=!e&&!t,o=dn(n.method?.methodName),i=a.toLowerCase(),c=o.toLowerCase().includes("swap"),l=r&&n.from.address.toLowerCase()===i,d=r&&n.to.address.toLowerCase()===i,b=o==="Market Buy Orders With Eth"||o==="Buy NFT",m=o==="Approve",p=o.toLowerCase().includes("transfer"),f=o.toLowerCase().includes("airdrop"),u=o.toLowerCase().includes("unwrap"),h=o==="Fill Order",T=p&&!!s[0]&&Ge(s[0].type)&&s[0].from?.address.toLowerCase()===i,k=p&&!!s[0]&&Ge(s[0].type)&&s[0].to?.address.toLowerCase()===i;return c?TransactionType.SWAP:l?TransactionType.SEND:d?TransactionType.RECEIVE:b?TransactionType.NFT_BUY:m?TransactionType.APPROVE:T?TransactionType.NFT_SEND:k?TransactionType.NFT_RECEIVE:p?TransactionType.TRANSFER:f?TransactionType.AIRDROP:u?TransactionType.UNWRAP:h?TransactionType.FILL_ORDER:TransactionType.UNKNOWN};function Ge(n){return n===TokenType.ERC721||n===TokenType.ERC1155}var dn=(n="")=>n.includes("(")?mn(n.split("(",1)[0]):n;var Me=(n,{nativeTransaction:e,erc20Transfers:t,erc721Transfers:a},s)=>{let r=n===TransactionType.TRANSFER,o=n===TransactionType.SEND,i=n===TransactionType.RECEIVE,c=e?.from?.address,l=e?.to?.address;r&&t&&t[0]&&(c=t[0].from.address,l=t[0].to.address),r&&a&&a[0]&&(c=a[0].from.address,l=a[0].to.address);let d=o||r&&c.toLowerCase()===s.toLowerCase(),b=i||r&&l.toLowerCase()===s.toLowerCase();return {isOutgoing:d,isIncoming:b,isSender:c===s,from:c,to:l}};async function Le(n){try{return n.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}var fn="https://ipfs.io";function M(n,e=fn){if(!n)return "";try{return ipfsResolver(n,e)}catch{return n}}async function yn(n,e=5e3){let t=new AbortController;return setTimeout(()=>t.abort(),e),fetch(n,{signal:t.signal})}async function Fe(n){let e={};if(n)if(n.startsWith("data:application/json;base64,")){let t=n.substring(29);try{let a=Buffer.from(t,"base64").toString();e=JSON.parse(a);}catch{e={};}}else e=await yn(M(n)).then(t=>t.json()).catch(()=>({}));else return {};return e}var bn="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function He(n,e="256"){let t=M(n);return `${bn}/width=${e},fit/${t}`}var $e=async({nativeTransaction:n,erc20Transfers:e,erc721Transfers:t,erc1155Transfers:a},s)=>{let r=[];if(n.value!=="0"){let o=s.decimals,c=new TokenUnit(n.value,s.decimals,s.symbol).toDisplay();r.push({decimal:o.toString(),name:s.name,symbol:s.symbol,amount:c,from:n.from,to:n.to,type:TokenType.NATIVE});}return e?.forEach(o=>{let i=o.erc20Token.decimals,l=new TokenUnit(o.value,i,o.erc20Token.symbol).toDisplay();r.push({decimal:i.toString(),name:o.erc20Token.name,symbol:o.erc20Token.symbol,amount:l,from:o.from,to:o.to,imageUri:o.erc20Token.logoUri,type:TokenType.ERC20});}),t&&await Promise.allSettled(t.map(async o=>{let i=o.erc721Token,c=await Oe(i.tokenUri,i.metadata.imageUri);r.push({name:o.erc721Token.name,symbol:o.erc721Token.symbol,amount:"1",imageUri:c,from:o.from,to:o.to,collectableTokenId:o.erc721Token.tokenId,type:TokenType.ERC721});})),a&&await Promise.allSettled(a.map(async o=>{let i=o.erc1155Token,c=await Oe(i.tokenUri,i.metadata.imageUri);r.push({name:o.erc1155Token.metadata.name??"",symbol:o.erc1155Token.metadata.symbol??"",amount:o.value,imageUri:c,from:o.from,to:o.to,collectableTokenId:o.erc1155Token.tokenId,type:TokenType.ERC1155});})),r},Oe=async(n,e)=>{if(e)return e.startsWith("ipfs://")?M(e):e;{let[t,a]=await Le(Fe(n));return a?"":t.image?He(t.image):""}};var je=[TransactionType.SEND,TransactionType.RECEIVE,TransactionType.TRANSFER],ae=(o=>(o.TOTAL_SUPPLY="totalSupply",o.BALANCE_OF="balanceOf",o.TRANSFER="transfer",o.TRANSFER_FROM="transferFrom",o.APPROVE="approve",o.ALLOWANCE="allowance",o))(ae||{});var Ye=async({transactions:n,explorerUrl:e,networkToken:t,chainId:a,address:s})=>{let r=await $e(n,t),o=Ve(n,s,r),{isOutgoing:i,isIncoming:c,isSender:l,from:d,to:b}=Me(o,n,s),{blockTimestamp:m,txHash:p,gasPrice:f,gasUsed:u}=n.nativeTransaction,h=V(e,p);return {isContractCall:!je.includes(o),isIncoming:c,isOutgoing:i,isSender:l,timestamp:m*1e3,hash:p,from:d,to:b,tokens:r,gasPrice:f,gasUsed:u,chainId:a.toString(),txType:o,explorerLink:h}};var Je=async({chainId:n,explorerUrl:e,networkToken:t,address:a,nextPageToken:s,offset:r,glacierService:o})=>{try{let i=await o.listTransactions({chainId:n.toString(),address:a,pageToken:s,pageSize:r});return {transactions:(await Promise.all(i.transactions.filter(d=>d.nativeTransaction.txStatus==="1").map(d=>Ye({transactions:d,explorerUrl:e,networkToken:t,chainId:n,address:a}).then(b=>b)))).filter(d=>d.tokens.find(b=>Number(b.amount)!==0)),nextPageToken:i.nextPageToken}}catch{return {transactions:[],nextPageToken:""}}};var qe=async({chainId:n,isTestnet:e,networkToken:t,explorerUrl:a,address:s,nextPageToken:r,offset:o,glacierService:i})=>Be(n)?De({isTestnet:e,networkToken:t,explorerUrl:a,chainId:n,address:s,nextPageToken:r,offset:o}):i.isHealthy()?Je({networkToken:t,explorerUrl:a,chainId:n,address:s,nextPageToken:r,offset:o,glacierService:i}):{transactions:[],nextPageToken:""};var ze={name:"EVM",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/bundle.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}},provider:{checksum:"",location:{npm:{filePath:"dist/provider.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:["eip155:1","eip155:43114","eip155:43113"],namespaces:["eip155"]},cointype:"60",permissions:{rpc:{dapps:!0,methods:["personal_sign","eth_sendTransaction","eth_*","web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"]}},manifestVersion:"0.0"};var hn=z$1.object({from:z$1.string().length(42),to:z$1.string().length(42),data:z$1.string().optional(),value:z$1.string().startsWith("0x").optional(),gas:z$1.string().startsWith("0x").optional(),gasPrice:z$1.string().startsWith("0x").optional(),maxFeePerGas:z$1.string().startsWith("0x").optional(),maxPriorityFeePerGas:z$1.string().startsWith("0x").optional(),nonce:z$1.string().optional(),chainId:z$1.string().optional()}),Tn=z$1.array(hn).length(1),Ke=n=>Tn.safeParse(n);var Qe=async({transactionParams:{from:n,to:e,data:t,value:a},provider:s})=>{let r=await s.getTransactionCount(n);return Number(await s.estimateGas({from:n,to:e,nonce:r,data:t,value:a}))};var Xe=async({from:n,provider:e})=>e.getTransactionCount(n);var et="DUMMY_API_KEY",tt=async({proxyApiUrl:n,chainId:e,params:t,domain:a})=>new Ze({baseURL:n+"/proxy/blockaid/",apiKey:et}).evm.transaction.scan({account_address:t.from,chain:e.toString(),options:["validation","simulation"],data:{from:t.from,to:t.to,data:t.data,value:t.value,gas:t.gas,gas_price:t.gasPrice},metadata:a&&a.length>0?{domain:a}:{non_dapp:!0}}),nt=async({proxyApiUrl:n,chainId:e,accountAddress:t,data:a,domain:s})=>new Ze({baseURL:n+"/proxy/blockaid/",apiKey:et}).evm.jsonRpc.scan({chain:e.toString(),options:["validation","simulation"],account_address:t,data:a,metadata:s&&s.length>0?{domain:s}:{non_dapp:!0}});var rt=async({request:n,dAppUrl:e,params:t,chainId:a,proxyApiUrl:s})=>{let r,o,i;try{let{validation:c,simulation:l}=await tt({proxyApiUrl:s,chainId:a,params:t,domain:e});!c||c.result_type==="Error"||c.result_type==="Warning"?r=F[AlertType.WARNING]:c.result_type==="Malicious"&&(r=F[AlertType.DANGER]),l?.status==="Success"&&(i=ot(n,l.account_summary.exposures),o=st(l.account_summary.assets_diffs));}catch(c){console.error("processTransactionSimulation error",c),r=F[AlertType.WARNING];}return {alert:r,balanceChange:o,tokenApprovals:i}},ot=(n,e)=>{let t=[];for(let s of e){let r=it(s.asset);if(r)for(let[o,i]of Object.entries(s.spenders))if(i.exposure.length===0)t.push({token:r,spenderAddress:o,logoUri:r.logoUri});else for(let c of i.exposure)"raw_value"in c?t.push({token:r,spenderAddress:o,value:c.raw_value,usdPrice:c.usd_price,logoUri:r.logoUri}):t.push({token:r,spenderAddress:o,logoUri:c.logo_url,usdPrice:c.usd_price});}return t.length===0?void 0:{isEditable:t.length===1&&t[0]?.token.type===TokenType.ERC20&&n.method===RpcMethod.ETH_SEND_TRANSACTION,approvals:t}},st=n=>{let e=at(n,"in"),t=at(n,"out");if(!(e.length===0&&t.length===0))return {ins:e,outs:t}},at=(n,e)=>n.filter(t=>t[e].length>0).sort((t,a)=>t[e].length-a[e].length).map(t=>{let a=t.asset,s="address"in a?it(a):Rn(a);if(!s)return;let r=t[e].map(o=>{let i;if("value"in o&&o.value)if("decimals"in s){let c=numberToBN(o.value,s.decimals);i=balanceToDisplayValue(c,s.decimals);}else isHexString(o.value)&&(i=parseInt(o.value,16).toString());else "type"in s&&s.type===TokenType.ERC721&&(i="1");return i?{displayValue:i,usdPrice:o.usd_price}:void 0}).filter(o=>o!==void 0);return {token:s,items:r}}).filter(t=>t!==void 0),it=n=>{let e;return n.type==="ERC20"?e={type:TokenType.ERC20,address:n.address,decimals:n.decimals,name:n.name??n.symbol??"",symbol:n.symbol??"",logoUri:n.logo_url}:n.type==="ERC1155"?e={type:TokenType.ERC1155,address:n.address,logoUri:n.logo_url,name:n.name,symbol:n.symbol}:n.type==="ERC721"?e={type:TokenType.ERC721,address:n.address,logoUri:n.logo_url,name:n.name,symbol:n.symbol}:n.type==="NONERC"&&(e={type:TokenType.NONERC,address:n.address,logoUri:n.logo_url,name:n.name,symbol:n.symbol}),e},Rn=n=>({name:n.name??"",symbol:n.symbol??"",decimals:n.decimals,description:"",logoUri:n.logo_url}),ct=async({request:n,dAppUrl:e,accountAddress:t,chainId:a,data:s,proxyApiUrl:r})=>{let o,i,c;try{let{validation:l,simulation:d}=await nt({proxyApiUrl:r,chainId:a,accountAddress:t,data:s,domain:e});!l||l.result_type==="Error"||l.result_type==="Warning"?o=F[AlertType.WARNING]:l.result_type==="Malicious"&&(o=F[AlertType.DANGER]),d?.status==="Success"&&(c=ot(n,d.account_summary.exposures),i=st(d.account_summary.assets_diffs));}catch(l){console.error("processJsonRpcSimulation error",l),o=F[AlertType.WARNING];}return {alert:o,balanceChange:i,tokenApprovals:c}},F={[AlertType.WARNING]:{type:AlertType.WARNING,details:{title:"Suspicious Transaction",description:"Use caution, this transaction may be malicious."}},[AlertType.DANGER]:{type:AlertType.DANGER,details:{title:"Scam Transaction",description:"This transaction is malicious, do not proceed.",actionTitles:{reject:"Reject Transaction",proceed:"Proceed Anyway"}}}};var re={_format:"hh-sol-artifact-1",contractName:"ERC20",sourceName:"contracts/token/ERC20/ERC20.sol",abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}],bytecode:"0x60806040523480156200001157600080fd5b5060405162000aed38038062000aed8339810160408190526200003491620001db565b81516200004990600390602085019062000068565b5080516200005f90600490602084019062000068565b50505062000281565b828054620000769062000245565b90600052602060002090601f0160209004810192826200009a5760008555620000e5565b82601f10620000b557805160ff1916838001178555620000e5565b82800160010185558215620000e5579182015b82811115620000e5578251825591602001919060010190620000c8565b50620000f3929150620000f7565b5090565b5b80821115620000f35760008155600101620000f8565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200013657600080fd5b81516001600160401b03808211156200015357620001536200010e565b604051601f8301601f19908116603f011681019082821181831017156200017e576200017e6200010e565b816040528381526020925086838588010111156200019b57600080fd5b600091505b83821015620001bf5785820183015181830184015290820190620001a0565b83821115620001d15760008385830101525b9695505050505050565b60008060408385031215620001ef57600080fd5b82516001600160401b03808211156200020757600080fd5b620002158683870162000124565b935060208501519150808211156200022c57600080fd5b506200023b8582860162000124565b9150509250929050565b600181811c908216806200025a57607f821691505b6020821081036200027b57634e487b7160e01b600052602260045260246000fd5b50919050565b61085c80620002916000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069a565b60405180910390f35b6100df6100da36600461070b565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610735565b61024a565b604051601281526020016100c3565b6100df61013136600461070b565b61026e565b6100f3610144366004610771565b6001600160a01b031660009081526020819052604090205490565b6100b6610290565b6100df61017536600461070b565b61029f565b6100df61018836600461070b565b61031f565b6100f361019b366004610793565b61032d565b6060600380546101af906107c6565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c6565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b600033610240818585610358565b5060019392505050565b60003361025885828561047c565b6102638585856104f6565b506001949350505050565b600033610240818585610281838361032d565b61028b9190610800565b610358565b6060600480546101af906107c6565b600033816102ad828661032d565b9050838110156103125760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102638286868403610358565b6000336102408185856104f6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103ba5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610309565b6001600160a01b03821661041b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610309565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610488848461032d565b905060001981146104f057818110156104e35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610309565b6104f08484848403610358565b50505050565b6001600160a01b03831661055a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610309565b6001600160a01b0382166105bc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610309565b6001600160a01b038316600090815260208190526040902054818110156106345760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610309565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f0565b600060208083528351808285015260005b818110156106c7578581018301518582016040015282016106ab565b818111156106d9576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461070657600080fd5b919050565b6000806040838503121561071e57600080fd5b610727836106ef565b946020939093013593505050565b60008060006060848603121561074a57600080fd5b610753846106ef565b9250610761602085016106ef565b9150604084013590509250925092565b60006020828403121561078357600080fd5b61078c826106ef565b9392505050565b600080604083850312156107a657600080fd5b6107af836106ef565b91506107bd602084016106ef565b90509250929050565b600181811c908216806107da57607f821691505b6020821081036107fa57634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561082157634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220e7dc257596a973556752e9db5f465b21aad78d068ae819d0395e1f99a95065a964736f6c634300080d0033",deployedBytecode:"0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069a565b60405180910390f35b6100df6100da36600461070b565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610735565b61024a565b604051601281526020016100c3565b6100df61013136600461070b565b61026e565b6100f3610144366004610771565b6001600160a01b031660009081526020819052604090205490565b6100b6610290565b6100df61017536600461070b565b61029f565b6100df61018836600461070b565b61031f565b6100f361019b366004610793565b61032d565b6060600380546101af906107c6565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c6565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b600033610240818585610358565b5060019392505050565b60003361025885828561047c565b6102638585856104f6565b506001949350505050565b600033610240818585610281838361032d565b61028b9190610800565b610358565b6060600480546101af906107c6565b600033816102ad828661032d565b9050838110156103125760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102638286868403610358565b6000336102408185856104f6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103ba5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610309565b6001600160a01b03821661041b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610309565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610488848461032d565b905060001981146104f057818110156104e35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610309565b6104f08484848403610358565b50505050565b6001600160a01b03831661055a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610309565b6001600160a01b0382166105bc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610309565b6001600160a01b038316600090815260208190526040902054818110156106345760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610309565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f0565b600060208083528351808285015260005b818110156106c7578581018301518582016040015282016106ab565b818111156106d9576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461070657600080fd5b919050565b6000806040838503121561071e57600080fd5b610727836106ef565b946020939093013593505050565b60008060006060848603121561074a57600080fd5b610753846106ef565b9250610761602085016106ef565b9150604084013590509250925092565b60006020828403121561078357600080fd5b61078c826106ef565b9392505050565b600080604083850312156107a657600080fd5b6107af836106ef565b91506107bd602084016106ef565b90509250929050565b600181811c908216806107da57607f821691505b6020821081036107fa57634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561082157634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220e7dc257596a973556752e9db5f465b21aad78d068ae819d0395e1f99a95065a964736f6c634300080d0033",linkReferences:{},deployedLinkReferences:{}};var lt=n=>{if(n.data)try{let t=new Interface(re.abi).parseTransaction({data:n.data,value:n.value}),a=t?.name??t?.fragment?.name;return a&&wn(a)?a:void 0}catch{return}};function wn(n){return Object.values(ae).includes(n)}var pt=async({request:n,network:e,approvalController:t,proxyApiUrl:a})=>{let{dappInfo:s,params:r}=n,o=Ke(r);if(!o.success)return console.error("invalid params",o.error),{error:rpcErrors.invalidParams("Transaction params are invalid")};let i=o.data[0];if(!i)return {error:rpcErrors.invalidParams("Transaction params are invalid")};let c=A({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});if(!i.gas||Number(i.gas)<0)try{let k=await Qe({transactionParams:{from:i.from,to:i.to,data:i.data,value:i.value},provider:c});i.gas="0x"+k.toString(16);}catch{return {error:rpcErrors.internal("Unable to calculate gas limit")}}if(!i.nonce)try{let k=await Xe({from:i.from,provider:c});i.nonce=String(k);}catch{return {error:rpcErrors.internal("Unable to calculate nonce")}}let l=lt(i),{alert:d,balanceChange:b,tokenApprovals:m}=await rt({request:n,proxyApiUrl:a,chainId:e.chainId,params:i,dAppUrl:n.dappInfo.url}),p="Approve Transaction";l==="approve"&&(p="Token Spend Approval");let f={title:p,network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},transactionDetails:{website:new URL(s.url).hostname,from:i.from,to:i.to,data:i.data,type:l},networkFeeSelector:!0,alert:d,balanceChange:b,tokenApprovals:m},u={type:RpcMethod.ETH_SEND_TRANSACTION,account:i.from,data:{type:2,nonce:Number(i.nonce),gasLimit:Number(i.gas),to:i.to,from:i.from,data:i.data,value:i.value,chainId:i.chainId}},h=await t.requestApproval({request:n,displayData:f,signingData:u});if("error"in h)return {error:h.error};let T=await c.send("eth_sendRawTransaction",[h.result]);return In({provider:c,txHash:T,onTransactionConfirmed:t.onTransactionConfirmed,onTransactionReverted:t.onTransactionReverted}),{result:T}},In=async({provider:n,txHash:e,onTransactionConfirmed:t,onTransactionReverted:a})=>{(await n.waitForTransaction(e))?.status===1?t(e):a(e);};var mt=async({provider:n,tokenService:e,address:t,currency:a,tokens:s,network:r})=>{let o=r.pricingProviders?.coingecko.assetPlatformId,i=r.pricingProviders?.coingecko.nativeTokenId,c=s.map(b=>b.address),l=await Promise.allSettled(s.map(async b=>{let f=await new ethers.Contract(b.address,re.abi,n).balanceOf?.(t)||0n;return {...b,balance:f}})).then(b=>b.reduce((m,p)=>p.status==="fulfilled"&&p.value.balance!==0n?[...m,p.value]:m,[]));if(!l.length)return {};let d=o&&await e.getPricesByAddresses(c,o,a)||{};return l.reduce((b,m)=>{let p=d?.[i??""]?.[a]?.price??void 0,f=d?.[i??""]?.[a]?.marketCap??void 0,u=d?.[i??""]?.[a]?.vol24??void 0,h=d?.[i??""]?.[a]?.change24??void 0,T=new TokenUnit(m.balance,m.decimals,m.symbol),k=p!==void 0?T.mul(p):void 0;return {...b,[m.address.toLowerCase()]:{...m,type:TokenType.ERC20,balance:m.balance,balanceDisplayValue:T.toDisplay(),balanceInCurrency:k?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:k?.toDisplay({fixedDp:2}),priceInCurrency:p,marketCap:f,change24:h,vol24:u}}},{})};var dt=async({operation:n,isSuccess:e,maxRetries:t=10,backoffPolicy:a=z.exponential()})=>{let s=0,r=0,o;for(;r<t;){r>0&&await Dn(s);try{let c=await n(r);if(e(c))return c}catch(c){o=c;}s=a(r),r++;}let i=o?`Max retry exceeded. ${o}`:"Max retry exceeded.";throw new Error(i)},z=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return t=>e*1e3}static constantMs(e){return t=>e}};function Dn(n){return new Promise(e=>setTimeout(e,n))}var be=n=>dt({operation:e=>n(e>0),maxRetries:2,backoffPolicy:z.constant(1),isSuccess:e=>e?.status?.error_code!==429});function ut(n){let e,t=0;for(e=0;e<n.length;e++)t+=n.charCodeAt(e)*(e+1);return t}function ge(n){let e,t=0;for(e=0;e<n.length;e++){let a=ut(n[e]??"");t=t+65027/a;}return (""+t).slice(0,16)}var Te=n=>new Zodios(`${n}/proxy/coingecko`,[{method:"post",path:"/simple/price",parameters:[{name:"ids",type:"Query",schema:string()},{name:"vs_currencies",type:"Query",schema:string()},{name:"include_market_cap",type:"Query",schema:string().optional()},{name:"include_24hr_vol",type:"Query",schema:string().optional()},{name:"include_24hr_change",type:"Query",schema:string().optional()},{name:"include_last_updated_at",type:"Query",schema:string().optional()}],alias:"simplePrice",response:RawSimplePriceResponseSchema},{method:"post",path:"/simple/token_price/:id",parameters:[{name:"id",type:"Path",schema:string()},{name:"contract_addresses",type:"Query",schema:string().array()},{name:"vs_currencies",type:"Query",schema:string().array()},{name:"include_market_cap",type:"Query",schema:boolean().optional()},{name:"include_24hr_vol",type:"Query",schema:boolean().optional()},{name:"include_24hr_change",type:"Query",schema:boolean().optional()}],alias:"simplePriceByContractAddresses",response:SimplePriceResponseSchema}],{axiosConfig:{headers:{"Content-Type":"application/json"}}});var ft=getBasicCoingeckoHttp(),_,H,Q=class{constructor({storage:e,proxyApiUrl:t}){R(this,_,void 0);R(this,H,void 0);N(this,"transformSimplePriceResponse",(e,t=[VsCurrencyType.USD])=>{let a={};return Object.keys(e).forEach(s=>{let r=e[s];a[s]={},t.forEach(o=>{a[s]={[o]:{price:r?.[o],change24:r?.[`${o}_24h_change`],vol24:r?.[`${o}_24h_vol`],marketCap:r?.[`${o}_market_cap`]}};});}),a});P(this,_,e),P(this,H,t);}async getSimplePrice({coinIds:e=[],currencies:t=[VsCurrencyType.USD]}){let a,r=`getSimplePrice-${e?`${ge(e)}-${t.toString()}`:`${t.toString()}`}`;if(a=g(this,_)?.get?.(r),a)return a;try{a=await be(o=>this.simplePrice({coinIds:e,currencies:t,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:o}));}catch{a=void 0;}return g(this,_)?.set?.(r,a),a}async getPricesByAddresses(e,t,a=VsCurrencyType.USD){let s,o=`getPricesWithMarketDataByAddresses-${`${ge(e)}-${t}-${a}`}`;if(s=g(this,_)?.get?.(o),s)return s;try{s=await be(i=>this.fetchPricesByAddresses({assetPlatformId:t,tokenAddresses:e,currency:a,useCoingeckoProxy:i}));}catch{s=void 0;}return g(this,_)?.set?.(o,s),s}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:t,currency:a=VsCurrencyType.USD,useCoingeckoProxy:s=!1}){return s?Te(g(this,H)).simplePriceByContractAddresses(void 0,{params:{id:e},queries:{contract_addresses:t,vs_currencies:[a],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0}}):simpleTokenPrice(ft,{assetPlatformId:e,tokenAddresses:t,currencies:[a],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:t=[VsCurrencyType.USD],marketCap:a=!1,vol24:s=!1,change24:r=!1,lastUpdated:o=!1,useCoingeckoProxy:i=!1,shouldThrow:c=!0}){if(i){let l=await Te(g(this,H)).simplePrice(void 0,{queries:{ids:e?.join(","),vs_currencies:t.join(","),include_market_cap:String(a),include_24hr_vol:String(s),include_24hr_change:String(r),include_last_updated_at:String(o)}});return this.transformSimplePriceResponse(l,t)}return simplePrice(ft,{coinIds:e,currencies:t,marketCap:a,vol24:s,change24:r,lastUpdated:o,shouldThrow:c})}};_=new WeakMap,H=new WeakMap;var $n="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",jn="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",bt=object({date:string(),usd:record(number())}),Yn=new Zodios($n,[{method:"get",path:"",alias:"getExchangeRates",response:bt}]),Jn=new Zodios(jn,[{method:"get",path:"",alias:"getExchangeRates",response:bt}]),se=async()=>{try{return await Yn.getExchangeRates()}catch{return await Jn.getExchangeRates()}};var gt=async({provider:n,tokenService:e,address:t,currency:a,network:s})=>{let r=s.pricingProviders?.coingecko.nativeTokenId,o=s.networkToken,i=r?await e.getSimplePrice({coinIds:[r],currencies:[a]}):{},c=i?.[r??""]?.[a]?.price??void 0,l=i?.[r??""]?.[a]?.marketCap??void 0,d=i?.[r??""]?.[a]?.vol24??void 0,b=i?.[r??""]?.[a]?.change24??void 0,m=await n.getBalance(t),p=new TokenUnit(m,o.decimals,o.symbol),f=c!==void 0?p.mul(c):void 0;return {...o,coingeckoId:r??"",type:TokenType.NATIVE,balance:m,balanceDisplayValue:p.toDisplay(),balanceInCurrency:f?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:f?.toDisplay({fixedDp:2}),priceInCurrency:c,marketCap:l,vol24:d,change24:b}};var W,ie=class{constructor(e){this.baseUrl=e;R(this,W,[]);}async isNetworkSupported(e){return (await this.getChainList()).map(s=>s.community_id).some(s=>s===e)}async getChainInfo({chainId:e}){return await(await fetch(`${this.baseUrl}/v1/chain?id=${e}`)).json()}async getTokenBalance({chainId:e,address:t,tokenId:a}){return await(await fetch(`${this.baseUrl}/v1/user/token?id=${t}&chain_id=${e}&token_id=${a}`)).json()}async getTokenList({chainId:e,address:t}){return await(await fetch(`${this.baseUrl}/v1/user/token_list?id=${t}&chain_id=${e}`)).json()}async getChainList(){if(g(this,W).length===0){let e=await fetch(`${this.baseUrl}/v1/chain/list`);P(this,W,await e.json());}return g(this,W)}};W=new WeakMap;var S,le=class{constructor({proxyApiUrl:e}){R(this,S,void 0);P(this,S,new ie(`${e}/proxy/debank`));}async isNetworkSupported(e){return g(this,S).isNetworkSupported(e)}async getNativeBalance({chainId:e,address:t,currency:a}){if(!isHexString(t))throw rpcErrors.invalidParams("getNativeBalance: not valid address: "+t);let r=(await g(this,S).getChainList()).find(h=>h.community_id===e)?.id;if(!r)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let i=(await g(this,S).getChainInfo({chainId:r})).wrapped_token_id,c=await g(this,S).getTokenBalance({address:t,chainId:r,tokenId:i}),l=new TokenUnit(c.raw_amount,c.decimals,c.symbol),d=l.toDisplay(),m=(await se()).usd[a.toLowerCase()],p=m?m*c.price:void 0,f=p?l.mul(p).toDisplay({fixedDp:2}):void 0,u=p?l.mul(p).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {name:c.name,symbol:c.symbol,decimals:c.decimals,type:TokenType.NATIVE,logoUri:c.logo_url,balance:l.toSubUnit(),balanceDisplayValue:d,balanceInCurrency:u,balanceCurrencyDisplayValue:f,priceInCurrency:p}}async listErc20Balances({chainId:e,address:t,currency:a}){if(!isHexString(t))throw rpcErrors.invalidParams("listErc20Balances: not valid address");let r=(await g(this,S).getChainList()).find(p=>p.community_id===e)?.id;if(!r)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let o=await g(this,S).getTokenList({chainId:r,address:t}),i=await g(this,S).getChainInfo({chainId:r}),l=o.filter(p=>p.id!==i.native_token_id).map(p=>g(this,S).getTokenBalance({chainId:r,tokenId:p.id,address:t}).then(f=>({id:p.id,status:"fulfilled",value:f})).catch(f=>({id:p.id,status:"rejected",reason:f}))),d={};await Promise.allSettled(l).then(p=>{d=p.reduce((f,u)=>(u.status==="fulfilled"&&"value"in u.value&&(f[u.value.id]=u.value.value),f),{});});let b=Object.keys(d),m={};for(let p=0;p<b.length;p++){let f=b[p];if(f===void 0||!isHexString(f))continue;let u=d[f];if(u===void 0)continue;let h=new TokenUnit(u.raw_amount,u.decimals,u.symbol),T=h.toDisplay(),Ce=(await se()).usd[a.toLowerCase()],q=Ce?Ce*u.price:void 0,Yt=q?h.mul(q).toDisplay({fixedDp:2}):void 0,Jt=q?h.mul(q).toDisplay({fixedDp:2,asNumber:!0}):void 0;m[u.id]={chainId:i.community_id,address:u.id,name:u.name,symbol:u.symbol,decimals:u.decimals,logoUri:u.logo_url,balance:h.toSubUnit(),balanceCurrencyDisplayValue:Yt,balanceDisplayValue:T,balanceInCurrency:Jt,priceInCurrency:q,type:TokenType.ERC20};}return m}};S=new WeakMap;async function kt(n,e){let t=n.map(async(r,o)=>({index:o,result:await e(r)})),s=(await Promise.allSettled(t)).filter(r=>r.status==="fulfilled").map(r=>r).find(r=>r.value.result);return s?n[s.value.index]:void 0}var Et=async({addresses:n,currency:e,network:t,proxyApiUrl:a,customTokens:s=[],storage:r,glacierService:o})=>{let i=t.chainId,c=[o,new le({proxyApiUrl:a})],l=await kt(c,m=>m.isNetworkSupported(t.chainId)),d;if(l)d=await Promise.allSettled(n.map(async m=>{let p=await l.getNativeBalance({address:m,currency:e.toUpperCase(),chainId:i}),f=await l.listErc20Balances({customTokens:s.filter(vt),currency:e.toUpperCase(),chainId:i,address:m,pageSize:100});return {address:m,balances:{[p.symbol]:p,...f}}}));else {let m=new Q({storage:r,proxyApiUrl:a}),f=[...await te({chainId:Number(i),proxyApiUrl:a}),...s],u=A({chainId:i,chainName:t.chainName,rpcUrl:t.rpcUrl,multiContractAddress:t.utilityAddresses?.multicall});d=await Promise.allSettled(n.map(async h=>{let T=await gt({network:t,tokenService:m,address:h,currency:e,provider:u}),k=await mt({provider:u,network:t,tokenService:m,address:h,currency:e,tokens:f.filter(vt)});return {address:h,balances:{[T.symbol]:T,...k}}}));}return d.reduce((m,p)=>p.status==="rejected"?m:{...m,[p.value.address]:p.value.balances},{})};function vt(n){return n.type===TokenType.ERC20}var Qn={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},Xn={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},Rt=n=>{switch(n){case Environment.PRODUCTION:return Qn;case Environment.DEV:return Xn}};var I=class extends Error{constructor(){super(...arguments);N(this,"message","Glacier is unhealthy. Try again later.");}},pe=class{constructor({glacierApiUrl:e}){N(this,"glacierSdk");N(this,"isGlacierHealthy",!0);N(this,"supportedChainIds",[]);N(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new Glacier({BASE:e}),this.getSupportedChainIds().catch(()=>{});}setGlacierToUnhealthy(){this.isGlacierHealthy=!1,setTimeout(()=>{this.isGlacierHealthy=!0;},5*60*1e3);}async isNetworkSupported(e){return (await this.getSupportedChainIds()).some(a=>a===e.toString())}async getSupportedChainIds(){if(this.supportedChainIds.length)return this.supportedChainIds;try{let e=await this.glacierSdk.evmChains.supportedChains({});return this.supportedChainIds=e.chains.map(t=>t.chainId),this.supportedChainIds}catch{return []}}async reindexNft({address:e,chainId:t,tokenId:a}){try{await this.glacierSdk.nfTs.reindexNft({address:e,chainId:t,tokenId:a});}catch(s){throw s instanceof I&&this.setGlacierToUnhealthy(),s}}async getTokenDetails({address:e,chainId:t,tokenId:a}){try{return this.glacierSdk.nfTs.getTokenDetails({address:e,chainId:t,tokenId:a})}catch(s){throw s instanceof I&&this.setGlacierToUnhealthy(),s}}async getNativeBalance({chainId:e,address:t,currency:a,coingeckoId:s}){try{let o=(await this.glacierSdk.evmBalances.getNativeBalance({chainId:e.toString(),address:t,currency:a.toLocaleLowerCase()})).nativeTokenBalance,i=new TokenUnit(o.balance,o.decimals,o.symbol),c=o.price?.value,l=c!==void 0?i.mul(c):void 0;return {name:o.name,symbol:o.symbol,decimals:o.decimals,type:TokenType.NATIVE,logoUri:o.logoUri,balance:i.toSubUnit(),balanceDisplayValue:i.toDisplay(),balanceInCurrency:l?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:l?.toDisplay({fixedDp:2}),priceInCurrency:c,coingeckoId:s??""}}catch(r){throw r instanceof I&&this.setGlacierToUnhealthy(),r}}async listErc721Balances({chainId:e,address:t,pageSize:a,pageToken:s}){try{return this.glacierSdk.evmBalances.listErc721Balances({chainId:e,address:t,pageSize:a,pageToken:s})}catch(r){throw r instanceof I&&this.setGlacierToUnhealthy(),r}}async listErc1155Balances({chainId:e,address:t,pageSize:a,pageToken:s}){try{return this.glacierSdk.evmBalances.listErc1155Balances({chainId:e,address:t,pageSize:a,pageToken:s})}catch(r){throw r instanceof I&&this.setGlacierToUnhealthy(),r}}async listErc20Balances({chainId:e,address:t,currency:a,customTokens:s}){try{let r=[],o;do{let i=await this.glacierSdk.evmBalances.listErc20Balances({chainId:e.toString(),address:t,currency:a.toLocaleLowerCase(),pageSize:100,pageToken:o});r.push(...na(i.erc20TokenBalances,Number(e))),o=i.nextPageToken;}while(o);return [...ta(s),...r].reduce((i,c)=>({...i,[c.address.toLowerCase()]:c}),{})}catch(r){throw r instanceof I&&this.setGlacierToUnhealthy(),r}}async listTransactions({chainId:e,address:t,pageToken:a,pageSize:s}){try{return this.glacierSdk.evmTransactions.listTransactions({chainId:e,address:t,pageToken:a,pageSize:s})}catch(r){throw r instanceof I&&this.setGlacierToUnhealthy(),r}}},ta=n=>n.map(e=>({...e,decimals:e.decimals??18,type:TokenType.ERC20,balance:0n,balanceInCurrency:0,balanceDisplayValue:"0",balanceCurrencyDisplayValue:"0",priceInCurrency:0,marketCap:0,change24:0,vol24:0})),na=(n,e)=>n.map(t=>{let a=new TokenUnit(t.balance,t.decimals,t.symbol),s=a.toDisplay(),r=t.balanceValue?.value.toString(),o=t.price?.value,i=o!==void 0?a.mul(o).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {chainId:e,address:t.address,name:t.name,symbol:t.symbol,decimals:t.decimals,logoUri:t.logoUri,balance:a.toSubUnit(),balanceCurrencyDisplayValue:r,balanceDisplayValue:s,balanceInCurrency:i,priceInCurrency:o,type:TokenType.ERC20}});var Ee=n=>{let e="";e+=`Domain
|
|
15
|
+
`;for(let t in n.domain)e+=` ${t}: ${U(String(n.domain[t]))}
|
|
16
16
|
`;e+=`
|
|
17
17
|
Message
|
|
18
|
-
`;for(let
|
|
19
|
-
`;for(let a in
|
|
20
|
-
`,
|
|
21
|
-
`;})):e+=` ${a}: ${
|
|
22
|
-
`;}else Array.isArray(
|
|
23
|
-
`,
|
|
24
|
-
`;for(let
|
|
25
|
-
`,a[
|
|
26
|
-
`;})):e+=` ${
|
|
27
|
-
`;})):e+=` ${
|
|
28
|
-
`;return e},
|
|
29
|
-
`,e+=`${
|
|
18
|
+
`;for(let t in n.message)if(typeof n.message[t]=="object"&&!Array.isArray(n.message[t])){e+=` ${t}:
|
|
19
|
+
`;for(let a in n.message[t])Array.isArray(n.message[t][a])?(e+=` ${a}:
|
|
20
|
+
`,n.message[t][a].forEach((s,r)=>{e+=` ${r}: ${U(s)}
|
|
21
|
+
`;})):e+=` ${a}: ${U(String(n.message[t][a]))}
|
|
22
|
+
`;}else Array.isArray(n.message[t])?(e+=` ${t}:
|
|
23
|
+
`,n.message[t].forEach((a,s)=>{e+=` ${s}:
|
|
24
|
+
`;for(let r in a)Array.isArray(a[r])?(e+=` ${r}:
|
|
25
|
+
`,a[r].forEach((o,i)=>{e+=` ${i}: ${U(o)}
|
|
26
|
+
`;})):e+=` ${r}: ${U(String(a[r]))}
|
|
27
|
+
`;})):e+=` ${t}: ${U(String(n.message[t]))}
|
|
28
|
+
`;return e},Ct=n=>{let e="";return n.forEach(t=>{e+=`${t.name}:
|
|
29
|
+
`,e+=`${U(String(t.value))}
|
|
30
30
|
|
|
31
|
-
`;}),e},
|
|
31
|
+
`;}),e},U=n=>{let e={0:"\u{1D7EC}",1:"\u{1D7ED}",2:"\u{1D7EE}",3:"\u{1D7EF}",4:"\u{1D7F0}",5:"\u{1D7F1}",6:"\u{1D7F2}",7:"\u{1D7F3}",8:"\u{1D7F4}",9:"\u{1D7F5}",a:"\u{1D5EE}",b:"\u{1D5EF}",c:"\u{1D5F0}",d:"\u{1D5F1}",e:"\u{1D5F2}",f:"\u{1D5F3}",g:"\u{1D5F4}",h:"\u{1D5F5}",i:"\u{1D5F6}",j:"\u{1D5F7}",k:"\u{1D5F8}",l:"\u{1D5F9}",m:"\u{1D5FA}",n:"\u{1D5FB}",o:"\u{1D5FC}",p:"\u{1D5FD}",q:"\u{1D5FE}",r:"\u{1D5FF}",s:"\u{1D600}",t:"\u{1D601}",u:"\u{1D602}",v:"\u{1D603}",w:"\u{1D604}",x:"\u{1D605}",y:"\u{1D606}",z:"\u{1D607}",A:"\u{1D5D4}",B:"\u{1D5D5}",C:"\u{1D5D6}",D:"\u{1D5D7}",E:"\u{1D5D8}",F:"\u{1D5D9}",G:"\u{1D5DA}",H:"\u{1D5DB}",I:"\u{1D5DC}",J:"\u{1D5DD}",K:"\u{1D5DE}",L:"\u{1D5DF}",M:"\u{1D5E0}",N:"\u{1D5E1}",O:"\u{1D5E2}",P:"\u{1D5E3}",Q:"\u{1D5E4}",R:"\u{1D5E5}",S:"\u{1D5E6}",T:"\u{1D5E7}",U:"\u{1D5E8}",V:"\u{1D5E9}",W:"\u{1D5EA}",X:"\u{1D5EB}",Y:"\u{1D5EC}",Z:"\u{1D5ED}"};return n.split("").map(t=>e[t]||t).join("")};var X=z$1.string().describe("message"),w=z$1.string().describe("address");var xt=z$1.object({method:z$1.literal(RpcMethod.ETH_SIGN),params:z$1.tuple([w,X])});var It=z$1.object({name:z$1.string(),type:z$1.string()}),O=z$1.object({types:z$1.object({EIP712Domain:z$1.array(It)}).catchall(z$1.array(It)),primaryType:z$1.string(),domain:z$1.record(z$1.any()),message:z$1.record(z$1.any())}),Re=z$1.array(z$1.object({type:z$1.string(),name:z$1.string(),value:z$1.union([z$1.string(),z$1.number(),z$1.boolean(),z$1.object({}).passthrough(),z$1.array(z$1.unknown()),z$1.null()])})).nonempty(),Pe=O.or(Re),Nt=z$1.union([z$1.string().describe("data string"),O]),At=z$1.union([z$1.string().describe("data string"),Pe]),_t=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA),params:z$1.tuple([w,At])}),Dt=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V1),params:z$1.tuple([w,At])}),Bt=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V3),params:z$1.tuple([w,Nt])}),Ut=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V4),params:z$1.tuple([w,Nt])});var Gt=z$1.object({method:z$1.literal(RpcMethod.PERSONAL_SIGN),params:z$1.union([z$1.tuple([X,w]),z$1.tuple([X,w,z$1.string().optional().describe("password")])])});var oa=z$1.discriminatedUnion("method",[Gt,xt,_t,Dt,Bt,Ut]).transform((n,e)=>{let{method:t,params:a}=n;switch(t){case RpcMethod.PERSONAL_SIGN:return {data:a[0],address:a[1],method:t};case RpcMethod.ETH_SIGN:return {data:a[1],address:a[0],method:t};case RpcMethod.SIGN_TYPED_DATA:case RpcMethod.SIGN_TYPED_DATA_V1:{let s=a[0],r=a[1];if(typeof r!="string")return {data:r,address:s,method:t};try{let o=JSON.parse(r);return {data:Pe.parse(o),address:s,method:t}}catch{return e.addIssue({code:z$1.ZodIssueCode.custom,message:"param is not a valid json"}),z$1.NEVER}}case RpcMethod.SIGN_TYPED_DATA_V3:case RpcMethod.SIGN_TYPED_DATA_V4:{let s=a[0],r=a[1];if(typeof r!="string")return {data:r,address:s,method:t};try{let o=JSON.parse(r);return {data:O.parse(o),address:s,method:t}}catch{return e.addIssue({code:z$1.ZodIssueCode.custom,message:"param is not a valid json"}),z$1.NEVER}}}});function Vt(n){return oa.safeParse(n)}var Mt=n=>Re.safeParse(n).success,Gs=n=>O.safeParse(n).success;var Lt=n=>{try{let{EIP712Domain:e,...t}=n.types;return TypedDataEncoder.getPayload(n.domain,t,n.message),{isValid:!0}}catch(e){return {isValid:!1,error:e}}};var Ht=async({request:n,network:e,approvalController:t,proxyApiUrl:a})=>{let s=Vt({method:n.method,params:n.params});if(!s.success)return console.error("invalid params",s.error),{success:!1,error:rpcErrors.invalidParams("Params are invalid")};let{method:r,data:o,address:i}=s.data,c;(r===RpcMethod.SIGN_TYPED_DATA_V3||r===RpcMethod.SIGN_TYPED_DATA_V4)&&(c=Lt(o));let l,d,b,m;if(c&&!c.isValid&&(m={type:AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements.",detailedDescription:c.error.toString()}}),r===RpcMethod.ETH_SIGN)l={type:r,account:i,data:o},d=o,b="Signing this message can be dangerous. This signature could potentially perform any operation on your account's behalf, including granting complete control of your account and all of its assets to the requesting site. Only sign this message if you know what you're doing or completely trust the requesting site";else if(r===RpcMethod.PERSONAL_SIGN)l={type:r,account:i,data:o},d=toUtf8String(o);else if(r===RpcMethod.SIGN_TYPED_DATA||r===RpcMethod.SIGN_TYPED_DATA_V1)l={type:r,account:i,data:o},d=Mt(o)?Ct(o):Ee(o);else if(r===RpcMethod.SIGN_TYPED_DATA_V3||r===RpcMethod.SIGN_TYPED_DATA_V4){l={type:r,account:i,data:o};let{types:h,primaryType:T,...k}=o;d=Ee(k);}if(!l)return {success:!1,error:rpcErrors.internal("Unable to generate signing data")};let p=await ct({request:n,proxyApiUrl:a,accountAddress:i,chainId:e.chainId,data:{method:r,params:n.params},dAppUrl:n.dappInfo.url}),f={title:"Sign Message",dAppInfo:{name:n.dappInfo.name,action:`${n.dappInfo.name} requests you to sign the following message`,logoUri:n.dappInfo.icon},network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},account:i,messageDetails:d,disclaimer:b,alert:p?.alert??m,balanceChange:p?.balanceChange,tokenApprovals:p?.tokenApprovals},u=await t.requestApproval({request:n,displayData:f,signingData:l});return "error"in u?{error:u.error}:{result:u.result}};var Wt=async(n,e)=>{try{return {result:await A({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3}).send(n.method,n.params)}}catch(t){let a=t.info?.error?.message||t.error?.message||t.message;return {error:rpcErrors.internal(a)}}};var $t=async({accountIndex:n,xpub:e,walletType:t})=>{switch(t){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:return {[NetworkVMType.EVM]:getAddressFromXPub(e,n)};case WalletType.LedgerLive:case WalletType.Seedless:{let a=Buffer.from(e,"hex");return {[NetworkVMType.EVM]:getEvmAddressFromPubKey(a)}}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${t}`)}};var Y,B,J,jt=class{constructor({approvalController:e,environment:t}){R(this,Y,void 0);R(this,B,void 0);R(this,J,void 0);let{glacierApiUrl:a,proxyApiUrl:s}=Rt(t);P(this,Y,new pe({glacierApiUrl:a})),P(this,B,s),P(this,J,e);}getAddress({accountIndex:e,xpub:t,walletType:a}){return $t({accountIndex:e,xpub:t,walletType:a})}getBalances({addresses:e,network:t,currency:a,customTokens:s,storage:r}){return Et({addresses:e,currency:a,network:t,proxyApiUrl:g(this,B),customTokens:s,glacierService:g(this,Y),storage:r})}getManifest(){let e=parseManifest(ze);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:t,chainName:a,rpcUrl:s,utilityAddresses:r}=e;return xe({chainId:t,chainName:a,rpcUrl:s,multiContractAddress:r?.multicall})}getTransactionHistory(e){let{network:t,address:a,nextPageToken:s,offset:r}=e,{chainId:o,isTestnet:i,networkToken:c,explorerUrl:l=""}=t;return qe({chainId:o,isTestnet:i,networkToken:c,explorerUrl:l,address:a,nextPageToken:s,offset:r,glacierService:g(this,Y)})}getTokens(e){let{chainId:t}=e;return te({chainId:t,proxyApiUrl:g(this,B)})}async onRpcRequest(e,t){switch(e.method){case RpcMethod.ETH_SEND_TRANSACTION:return pt({request:e,network:t,approvalController:g(this,J),proxyApiUrl:g(this,B)});case RpcMethod.PERSONAL_SIGN:case RpcMethod.ETH_SIGN:case RpcMethod.SIGN_TYPED_DATA:case RpcMethod.SIGN_TYPED_DATA_V1:case RpcMethod.SIGN_TYPED_DATA_V3:case RpcMethod.SIGN_TYPED_DATA_V4:return Ht({request:e,network:t,approvalController:g(this,J),proxyApiUrl:g(this,B)});default:return ya(e.method)?Wt(e,t):{error:rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};Y=new WeakMap,B=new WeakMap,J=new WeakMap;var ya=n=>n.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(n);
|
|
32
32
|
|
|
33
|
-
export {
|
|
33
|
+
export { ae as ERC20TransactionType, jt as EvmModule, je as NonContractCallTypes, Gs as isTypedData, Mt as isTypedDataV1 };
|
|
34
34
|
//# sourceMappingURL=out.js.map
|
|
35
35
|
//# sourceMappingURL=index.js.map
|