UNPKG

cra-template-web3

Version:

[![license](https://img.shields.io/github/license/jamesisaac/react-native-background-task.svg)](https://opensource.org/licenses/MIT)

41 lines (33 loc) 1.45 kB
import BN from "bn.js"; import Web3 from "web3"; import { NetworkType } from "./network"; import CONTRACT_ERC20 from "../contracts/ERC20.json"; export type TokenMetadataType = { address: string; name: string; symbol: string; decimals: string; balance?: string; }; export const fromHRToBN = (n: number, decimals: number) => { const MAX_SMALL_DECIMAL = 6; if (decimals <= MAX_SMALL_DECIMAL) { return new BN(10).pow(new BN(decimals)).muln(n); } const multiplierSmall = new BN(10).pow(new BN(MAX_SMALL_DECIMAL)); const multiplierMain = new BN(10).pow(new BN(decimals - MAX_SMALL_DECIMAL)); return multiplierSmall.muln(n).mul(multiplierMain); }; export const toHRNumber = (bn: BN, decimal = 0) => bn.div(new BN(10).pow(new BN(decimal))).toNumber(); export const toHRNumberFloat = (bn: BN, decimal = 0) => toHRNumber(bn.muln(100), decimal) / 100; export const getTokenMetadata = async (web3: Web3, chain: NetworkType, address: string, account?: string) => { const tokenContract = new web3.eth.Contract(CONTRACT_ERC20 as any, address); const balance = account ? await tokenContract.methods.balanceOf(account).call() : undefined; return { address, balance, name: await tokenContract.methods.name().call(), symbol: await tokenContract.methods.symbol().call(), decimals: await tokenContract.methods.decimals().call(), } as TokenMetadataType; };