essential-eth
๐ชถ Essential Eth ๐ชถ
An alternative for ethers & web3 that's 10x smaller
Why you should replace Ethers.js and web3โ
- ๐๏ธ tiny
- ๐ Strongly written TypeScript
- ๐งช Matches both
ethers
andweb3
- โก๏ธ Near-identical API to
ethers
- โก๏ธ Similar but improved API to
web3
- โก๏ธ Near-identical API to
- ๐ Works for all EVM chains
- ๐ Ethereum
- ๐ฃ Polygon
- ๐ด Optimism
- ๐ต Arbitrum
- Many more
- ๐งช Strongly tested
- ๐ฒ Tree-shaking and no side-effects
- ๐ All common JS versions (CommonJS, ESM, & UMD)
- โ Node 20, 18, 16, & 14
- โ Web
Table of Contentsโ
Click to expand
- Why you should replace Ethers.js and web3
- Install
- ๐ Utils
arrayify
computeAddress
computePublicKey
concat
etherToGwei
etherToWei
gweiToEther
hashMessage
hexConcat
hexDataLength
hexDataSlice
hexStripZeros
hexValue
hexZeroPad
hexlify
isAddress
isBytes
isBytesLike
isHexString
jsonRpcProvider
keccak256
pack
solidityKeccak256
splitSignature
stripZeros
tinyBig
toChecksumAddress
toUtf8Bytes
weiToEther
zeroPad
- Providers
- Contract
- More Info
- Contributing and GitPOAP
Installโ
npm install --save essential-eth # TypeScript included
# or yarn
yarn add essential-eth # TypeScript included
Browsers:
<!-- index.html -->
<script src="https://unpkg.com/essential-eth@0.10.3"></script>
๐ Utilsโ
import { etherToWei } from 'essential-eth';
// or in a non-import environment
const { etherToWei } = require('essential-eth');
arrayify
โ
arrayify(value: number | BytesLike | Hexable, options: DataOptions): Uint8Array
View Example
import { arrayify } from 'essential-eth';
arrayify(1);
// Uint8Array(1) [ 1 ]
arrayify(0x1234);
// Uint8Array(2) [ 18, 52 ]
arrayify('0x1', { hexPad: 'right' });
// Uint8Array(1) [ 16 ]
computeAddress
โ
computeAddress(key: string): string
View Example
import { computeAddress } from 'essential-eth';
computeAddress(
'0x0458eb591f407aef12936bd2989ca699cf5061de9c4964dd6eb6005fd8f580c407434447e813969a1be6e9954b002cad84dfc67a69e032b273e4695e7d0db2d952',
); // public key
// '0xA2902059a7BF992f1450BACD7357CCAa5cC8336a'
computeAddress(
'0x2f2c419acf4a1da8c1ebea75bb3fcfbd3ec2aa3bf0162901ccdc2f38b8f92427',
); // private key
// '0xA2902059a7BF992f1450BACD7357CCAa5cC8336a'
computePublicKey
โ
computePublicKey(privKey: BytesLike): string
View Example
import { computePublicKey } from 'essential-eth';
computePublicKey(
'0xb27cc8dea0177d910110e8d3ec5480d56c723abf433529f4063f261ffdb9297c',
);
// '0x045cd0032015eecfde49f82f4e149d804e8ac6e3a0bface32e37c72a71ceac864fe84da7e8df84342f7b11dfb753c4d158f636142b46b29cf7f0f171ae0aa4fb87'
computePublicKey([
50, 102, 50, 99, 52, 49, 57, 97, 99, 102, 52, 97, 49, 100, 97, 56, 99, 49,
101, 98, 101, 97, 55, 53, 98, 98, 51, 102, 99, 102, 98, 100,
]);
// '0x04a9cea77eca949df84f661cee153426fb51f2294b9364b4fac240df57360b9b0ac9c99e4d7966491ab4c81f8c82e0cd24ec5759832ad4ab736d22c7d90b806ee8'
concat
โ
concat(arrayOfBytesLike: Array<BytesLikeWithNumber>): Uint8Array
View Example
import { concat } from 'essential-eth';
concat([0, 1]);
// Uint8Array(2) [ 0, 1 ]
etherToGwei
โ
etherToGwei(etherQuantity: string | number | TinyBig | Big): TinyBig
View Example
import { etherToGwei } from 'essential-eth';
etherToGwei('1000').toString();
// '1000000000000'
etherToGwei(1000).toString();
// '1000000000000'
etherToGwei('1000').toNumber();
// 1000000000000
etherToGwei(1000).toNumber();
// 1000000000000
etherToWei
โ
etherToWei(etherQuantity: string | number | TinyBig | Big): TinyBig
View Example
import { etherToWei } from 'essential-eth';
etherToWei('1000').toString();
// '1000000000000000000000'
etherToWei(1000).toString();
// '1000000000000000000000'
etherToWei('1000').toNumber();
// 1000000000000000000000
etherToWei(1000).toNumber();
// 1000000000000000000000
gweiToEther
โ
gweiToEther(gweiQuantity: string | number | TinyBig | Big): TinyBig
View Example
import { gweiToEther } from 'essential-eth';
gweiToEther('1000000000000').toString();
// '1000'
gweiToEther(1000000000000).toString();
// '1000'
gweiToEther('1000000000000').toNumber();
// 1000
gweiToEther(1000000000000).toNumber();
// 1000
hashMessage
โ
hashMessage(message: string | Bytes): string
View Example
import { hashMessage } from 'essential-eth';
hashMessage('Hello World');
// '0xa1de988600a42c4b4ab089b619297c17d53cffae5d5120d82d8a92d0bb3b78f2'
hexConcat
โ
hexConcat(items: Array<BytesLike>): string
View Example
import { hexConcat } from 'essential-eth';
hexConcat([[2, 4, 0, 1], 9, '0x2934', '0x3947']);
// '0x020400010929343947'
hexDataLength
โ
hexDataLength(data: BytesLike): undefined
View Example
import { hexDataLength } from 'essential-eth';
hexDataLength([2, 4, 0, 1]);
// 4
hexDataLength('0x3925');
// 2
hexDataSlice
โ
hexDataSlice(data: BytesLikeWithNumber, offset: number, endOffset: number): string
View Example
import { hexDataSlice } from 'essential-eth';
hexDataSlice([20, 6, 48], 0, 2);
// '0x1406'
hexStripZeros
โ
hexStripZeros(value: BytesLike): string
View Example
import { hexStripZeros } from 'essential-eth';
hexStripZeros([0, 0, 0, 48]);
// '0x30'
hexValue
โ
hexValue(value: number | bigint | BytesLike | Hexable): string
View Example
import { hexValue } from 'essential-eth';
hexValue(39);
// '0x27'
hexValue([9, 4, 19, 4]);
// '0x9041304'
hexZeroPad
โ
hexZeroPad(value: BytesLikeWithNumber, length: number): string
View Example
import { hexZeroPad } from 'essential-eth';
hexZeroPad('0x60', 2);
// '0x0060'
hexZeroPad(0x60, 3);
// '0x000060'
hexZeroPad('12345', 1);
// Throws
hexlify
โ
hexlify(value: number | bigint | BytesLike | Hexable, options: DataOptions): string
View Example
import { hexlify } from 'essential-eth';
hexlify(4);
// '0x04'
hexlify(14);
// '0x0e'
isAddress
โ
isAddress(address: string): boolean
View Example
import { isAddress } from 'essential-eth';
isAddress('0xc0deaf6bd3f0c6574a6a625ef2f22f62a5150eab');
// true
isAddress('bad');
// false
// Does NOT support ENS.
isAddress('vitalik.eth');
// false
isBytes
โ
isBytes(value: any): value
View Example
import { isBytes } from 'essential-eth';
isBytes([1, 2, 3]);
// true
isBytes(false);
// false
isBytes(new Uint8Array(1));
// true
isBytesLike
โ
isBytesLike(value: any): value
View Example
import { isBytesLike } from 'essential-eth';
isBytesLike([1, 2, 3]);
// true
isBytesLike(false);
// false
isBytesLike(new Uint8Array(1));
// true
isHexString
โ
isHexString(value: any, length: number): boolean
View Example
import { isHexString } from 'essential-eth';
isHexString('0x4924');
// true
isHexString('0x4924', 4);
// false
// length of 4 in bytes would mean a hex string with 8 characters
jsonRpcProvider
โ
jsonRpcProvider(rpcUrl: string): JsonRpcProvider
View Example
import { jsonRpcProvider } from 'essential-eth';
jsonRpcProvider()
.getBlock('latest')
.then((block) => {
console.log(block.number);
});
// 14530496
keccak256
โ
keccak256(data: BytesLike): string
View Example
import { keccak256 } from 'essential-eth';
keccak256('essential-eth');
// '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
keccak256('0x123');
// '0x5fa2358263196dbbf23d1ca7a509451f7a2f64c15837bfbb81298b1e3e24e4fa'
pack
โ
pack(types: Array<string>, values: Array<any>): string
View Example
import { pack } from 'essential-eth';
const types = ['bool', 'string', 'uint64'];
const values = [true, 'text', 30];
pack(types, values);
// '0x0174657874000000000000001e'
solidityKeccak256
โ
solidityKeccak256(types: Array<string>, values: Array<any>): string
View Example
import { solidityKeccak256 } from 'essential-eth';
const types = ['string', 'bool', 'uint32'];
const values = ['essential-eth is great', true, 14];
solidityKeccak256(types, values);
// '0xe4d4c8e809faac09d58f468f0aeab9474fe8965d554c6c0f868c433c3fd6acab'
const types = ['bytes4', 'uint32[5]'];
const values = [
[116, 101, 115, 116],
[5, 3, 4, 9, 18],
];
solidityKeccak256(types, values);
// '0x038707a887f09355dc545412b058e7ba8f3c74047050c7c5e5e52eec608053d9'
splitSignature
โ
splitSignature(signature: SignatureLike): Signature
View Example
import { splitSignature } from 'essential-eth';
const signature = '0x60bc4ed91f2021aefe7045f3f77bd12f87eb733aee24bd1965343b3c27b3971647252185b7d2abb411b01b5d1ac4ab41ea486df1e9b396758c1aec6c1b6eee331b';
splitSignature(signature);
{
r: "0x60bc4ed91f2021aefe7045f3f77bd12f87eb733aee24bd1965343b3c27b39716",
s: "0x47252185b7d2abb411b01b5d1ac4ab41ea486df1e9b396758c1aec6c1b6eee33",
_vs: "0x47252185b7d2abb411b01b5d1ac4ab41ea486df1e9b396758c1aec6c1b6eee33",
recoveryParam: 0,
v: 27,
yParityAndS: "0x47252185b7d2abb411b01b5d1ac4ab41ea486df1e9b396758c1aec6c1b6eee33",
compact: "0x60bc4ed91f2021aefe7045f3f77bd12f87eb733aee24bd1965343b3c27b3971647252185b7d2abb411b01b5d1ac4ab41ea486df1e9b396758c1aec6c1b6eee33"
}
stripZeros
โ
stripZeros(value: BytesLike): Uint8Array
View Example
import { stripZeros } from 'essential-eth';
stripZeros('0x00002834');
// Uint8Array { [Iterator] 0: 40, 1: 52 }
// Equivalent to '0x2834'
tinyBig
โ
tinyBig(value: string | number | TinyBig | Big): TinyBig
View Example
import { tinyBig } from 'essential-eth';
tinyBig(10).times(3).toNumber();
// 30
toChecksumAddress
โ
toChecksumAddress(address: string): string
View Example
import { toChecksumAddress } from 'essential-eth';
toChecksumAddress('0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359');
// '0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359'
Similar to "getAddress" in ethers.js
Similar to "toChecksumAddress" in web3.js
toUtf8Bytes
โ
toUtf8Bytes(data: string): Uint8Array
View Example
import { toUtf8Bytes } from 'essential-eth';
toUtf8Bytes('essential-eth');
// Uint8Array { [Iterator] 0: 101, 1: 115, 2: 115, 3: 101, 4: 110, 5: 116, 6: 105, 7: 97, 8: 108, 9: 45, 10: 101, 11: 116, 12: 104 }
toUtf8Bytes('ethereum');
// Uint8Array { [Iterator] 0: 101, 1: 116, 2: 104, 3: 101, 4: 114, 5: 101, 6: 117, 7: 109 }
weiToEther
โ
weiToEther(weiQuantity: string | number | TinyBig | Big): TinyBig
View Example
import { weiToEther } from 'essential-eth';
weiToEther('1000000000000000000000').toString();
// '1000'
weiToEther(1000000000000000000000).toString();
// '1000'
weiToEther('1000000000000000000000').toNumber();
// 1000
weiToEther(1000000000000000000000).toNumber();
// 1000
zeroPad
โ
zeroPad(value: BytesLike, length: number): Uint8Array
View Example
import { zeroPad } from 'essential-eth';
zeroPad('0x039284');
// Uint8Array { [Iterator] 0: 0, 1: 0, 2: 0, 3: 3, 4: 146, 5: 132 }
// Equivalent to 0x000000039284
zeroPad([39, 25, 103, 45], 5);
// Uint8Array { [Iterator] 0: 0, 1: 39, 2: 25, 3: 103, 4: 45 }
- The return-type
TinyBig
is justBig
but expands scientific notation ontoNumber()
andtoString()
Providersโ
import { JsonRpcProvider } from 'essential-eth';
const provider = new JsonRpcProvider('RPC URL HERE' /* Try POKT or Infura */);
// OR for very quick testing (limited to 10,000 requests)
const provider = new JsonRpcProvider();
Want a redundant provider that handles outages?
import { FallthroughProvider } from 'essential-eth';
// The FallthroughProvider handles falling through to the next valid URL.
// It's dynamic to never trust one URL again when it fails * until it has tried all other provided URLs
// The default timeout for a request is 8 seconds after which it moves to the next URL
const provider = new FallthroughProvider([
'https://bad.com',
'https://free-eth-node.com/api/eth',
]);
provider.getGasPrice().toNumber();
/*
39695942769
*/
call
โ
provider.call(transaction: TransactionRequest, blockTag?: BlockTag): Promise<string>
View Example
import { JsonRpcProvider } from 'essential-eth';
const provider = new JsonRpcProvider('RPC URL HERE' /* Try Infura or POKT */);
await provider.call({
to: '0x6b175474e89094c44da98b954eedeac495271d0f',
data: '0x70a082310000000000000000000000006E0d01A76C3Cf4288372a29124A26D4353EE51BE',
});
// '0x0000000000000000000000000000000000000000000000000858898f93629000'
estimateGas
โ
provider.estimateGas(transaction: TransactionRequest): Promise<TinyBig>
View Example
import { JsonRpcProvider } from 'essential-eth';
const provider = new JsonRpcProvider('RPC URL HERE' /* Try Infura or POKT */);
await provider.estimateGas({
// Wrapped ETH address
to: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
data: '0xd0e30db0',
value: etherToWei('1.0').toHexString(),
});
// { TinyBig: "27938" }
getBalance
โ
provider.getBalance(address: string, blockTag?: BlockTag): Promise<TinyBig>
View Example
import { JsonRpcProvider } from 'essential-eth';
const provider = new JsonRpcProvider('RPC URL HERE' /* Try Infura or POKT */);
await provider.getBalance('0x7cB57B5A97eAbe94205C07890BE4c1aD31E486A8');
// 28798127851528138
getBlock
โ
provider.getBlock(timeFrame?: BlockTag, returnTransactionObjects?: boolean): Promise<BlockResponse>
View Example
import { JsonRpcProvider } from 'essential-eth';
const provider = new JsonRpcProvider('RPC URL HERE' /* Try Infura or POKT */);
await provider.getBlock(14879862);
// {
// baseFeePerGas: { TinyBig: 39095728776 },
// difficulty: { TinyBig: 14321294455359973 },
// extraData: "0x486976656f6e2073672d6865617679",
// gasLimit: { TinyBig: 29970620 },
// gasUsed: { TinyBig: 20951384 },
// hash: "0x563b458ec3c4f87393b53f70bdddc0058497109b784d8cacd9247ddf267049ab",
// logsBloom:
// "0x9f38794fe80b521794df6efad8b0d2e9582f9ec3959a3f9384bda0fa371cfa5fac5af9d515c6bdf1ec325f5b5f7ebdd6a3a9fae17b38a86d4dc4b0971afc68d8086640550f4c156e6f923f4a1bb94fb0bed6cdcc474c5c64bfeff7a4a906f72b9a7b94004ee58efc53d63ac66961acd3a431b2d896cc9fd75f6072960bced45f770587caf130f57504decfcb63c6ca8fbc5bdbd749edd5a99a7375d2b81872289adb775fb3c928259f4be39c6d3f4d5b6217822979bb88c1f1fb62429b1b6d41cf4e3f77f9e1db3f5723108f1e5b1255dd734ad8cdb11e7ea22487c788e67c83777b6f395e504ca59c64f52245ee6de3804cf809e5caa4f0ea6a9aa9eb6ed801",
// miner: "0x1aD91ee08f21bE3dE0BA2ba6918E714dA6B45836",
// mixHash: "0x73cc9419bfb89c9d41c3a8c34ce56b5ebe468bdcf870258d2e77262275d580ec",
// nonce: "0x976f3f5d596ffb08",
// number: 14879862,
// parentHash: "0x95986ae14a71face8d9a6a379edd875b2e8bc73e4de0d9d460e7752bddb0f579",
// receiptsRoot: "0x8e6ba2fd9bee602b653dae6e3132f16538c2c5df24f1df8c000392053f73defa",
// sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
// size: { TinyBig: 134483 },
// stateRoot: "0xbf2bb67bd1c741f3d00904b8451d7c2cf4e3a2726f5a5884792ede2074747b85",
// timestamp: { TinyBig: 1654016186 },
// totalDifficulty: { TinyBig: 50478104614257705213748 },
// transactions: [
// "0xb3326a9149809603a2c28545e50e4f7d16e194bf5ee9764e0544603854c4a8d2",
// "0x8b42095f8d335404a4896b2817b8e5e3d86a5a87cb434a8eec295d5280a7f48e",
// "0x882f78fcb73f0f7ad0700bb0424a8b4beb366aaa93b88a3562c49a8d0ce4dcff",
// ...
// ],
// transactionsRoot: "0x5934902f3dcc263ec34f24318179bf6301f53f4834685792066026f3a4849d72",
// uncles: [],
// }
getBlockNumber
โ
provider.getBlockNumber(): Promise<number>
View Example
import { JsonRpcProvider } from 'essential-eth';
const provider = new JsonRpcProvider('RPC URL HERE' /* Try Infura or POKT */);
await provider.getBlockNumber();
// 1053312
getCode
โ
provider.getCode(address: string, blockTag?: BlockTag): Promise<string>
View Example
import { JsonRpcProvider } from 'essential-eth';
const provider = new JsonRpcProvider('RPC URL HERE' /* Try Infura or POKT */);
await jsonRpcProvider().getCode(
'0xaC6095720221C79C6E7C638d260A2eFBC5D8d880',
'latest',
);
// '0x608060405234801561001057600080fd5b506004361061...'
getFeeData
โ
provider.getFeeData(): Promise<FeeData>
View Example
import { JsonRpcProvider } from 'essential-eth';
const provider = new JsonRpcProvider('RPC URL HERE' /* Try Infura or POKT */);
await provider.getFeeData();
// {
// gasPrice: { TinyBig: "14184772639" },
// lastBaseFeePerGas: { TinyBig: "14038523098" },
// maxFeePerGas: { TinyBig: "29577046196" },
// maxPriorityFeePerGas: { TinyBig: "1500000000" }
// }
getGasPrice
โ
provider.getGasPrice(): Promise<TinyBig>
View Example
import { JsonRpcProvider } from 'essential-eth';
const provider = new JsonRpcProvider('RPC URL HERE' /* Try Infura or POKT */);
await provider.getGasPrice();
// 52493941856
getLogs
โ
provider.getLogs(filter: Filter | FilterByBlockHash): Promise<Array<Log>>
View Example
import { JsonRpcProvider } from 'essential-eth';
const provider = new JsonRpcProvider('RPC URL HERE' /* Try Infura or POKT */);
provider.getLogs({
address: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
topics: [
'0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
'0x00000000000000000000000021b8065d10f73ee2e260e5b47d3344d3ced7596e',
],
fromBlock: 14825027,
toBlock: 14825039,
});
[
{
address: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
blockHash:
'0x8e0dfac2f704851960f866c8708b3bef2f66c0fee0329cf25ff0261b264ca6bc',
blockNumber: 14825029,
data: '0x000000000000000000000000000000000000000000000000005f862ee352a38a',
logIndex: 384,
removed: false,
topics: [
'0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
'0x00000000000000000000000021b8065d10f73ee2e260e5b47d3344d3ced7596e',
'0x00000000000000000000000068b3465833fb72a70ecdf485e0e4c7bd8665fc45',
],
transactionHash:
'0xbd49031be16f8fd1775f4e0fe79b408ffd8ae9c65b2827ee47e3238e3f51f4c0',
transactionIndex: 226,
},
];
getNetwork
โ
provider.getNetwork(): Promise<Network>
View Example
import { JsonRpcProvider } from 'essential-eth';
const provider = new JsonRpcProvider('RPC URL HERE' /* Try Infura or POKT */);
jsonRpcProvider('https://free-eth-node.com/api/eth').getNetwork();
// { chainId: 1, name: 'eth', ensAddress: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e' }
jsonRpcProvider('https://free-eth-node.com/api/MATIC').getNetwork();
// { chainId: 137, name: 'MATIC', ensAddress: null }
getTransaction
โ
provider.getTransaction(transactionHash: string): Promise<TransactionResponse>
View Example
import { JsonRpcProvider } from 'essential-eth';
const provider = new JsonRpcProvider('RPC URL HERE' /* Try Infura or POKT */);
await provider.getTransaction(
'0x9014ae6ef92464338355a79e5150e542ff9a83e2323318b21f40d6a3e65b4789',
);
// {
// accessList: [],
// blockHash: "0x876810a013dbcd140f6fd6048c1dc33abbb901f1f96b394c2fa63aef3cb40b5d",
// blockNumber: 14578286,
// chainId: 1,
// from: "0xdfD9dE5f6FA60BD70636c0900752E93a6144AEd4",
// gas: { TinyBig: 112163 },
// gasPrice: { TinyBig: 48592426858 },
// hash: "0x9014ae6ef92464338355a79e5150e542ff9a83e2323318b21f40d6a3e65b4789",
// input: "0x83259f17000000000000000000000000000000000000000000...",
// maxFeePerGas: { TinyBig: 67681261618 },
// maxPriorityFeePerGas: { TinyBig: 1500000000 },
// nonce: { TinyBig: 129 },
// r: "0x59a7c15b12c18cd68d6c440963d959bff3e73831ffc938e75ecad07f7ee43fbc",
// s: "0x1ebaf05f0d9273b16c2a7748b150a79d22533a8cd74552611cbe620fee3dcf1c",
// to: "0x39B72d136ba3e4ceF35F48CD09587ffaB754DD8B",
// transactionIndex: 29,
// type: 2,
// v: 0,
// value: { TinyBig: 0 },
// confirmations: 298140,
// }
getTransactionCount
โ
provider.getTransactionCount(address: string, blockTag?: BlockTag): Promise<number>
View Example
import { JsonRpcProvider } from 'essential-eth';
const provider = new JsonRpcProvider('RPC URL HERE' /* Try Infura or POKT */);
await provider.getTransactionCount(
'0x71660c4005ba85c37ccec55d0c4493e66fe775d3',
);
// 1060000
await provider.getTransactionCount(
'0x71660c4005ba85c37ccec55d0c4493e66fe775d3',
'latest',
);
// 1060000
await provider.getTransactionCount(
'0x71660c4005ba85c37ccec55d0c4493e66fe775d3',
14649390,
);
// 1053312
getTransactionReceipt
โ
provider.getTransactionReceipt(transactionHash: string): Promise<TransactionReceipt>
View Example
import { JsonRpcProvider } from 'essential-eth';
const provider = new JsonRpcProvider('RPC URL HERE' /* Try Infura or POKT */);
await provider.getTransactionReceipt(
'0x9014ae6ef92464338355a79e5150e542ff9a83e2323318b21f40d6a3e65b4789',
);
// {
// blockHash: "0x876810a013dbcd140f6fd6048c1dc33abbb901f1f96b394c2fa63aef3cb40b5d",
// blockNumber: 14578286,
// contractAddress: null,
// cumulativeGasUsed: { TinyBig: 3067973 },
// effectiveGasPrice: { TinyBig: 48592426858 },
// from: "0xdfD9dE5f6FA60BD70636c0900752E93a6144AEd4",
// gasUsed: { TinyBig: 112163 },
// logs: [
// {
// address: "0x0eDF9bc41Bbc1354c70e2107F80C42caE7FBBcA8",
// blockHash: "0x876810a013dbcd140f6fd6048c1dc33abbb901f1f96b394c2fa63aef3cb40b5d",
// blockNumber: 14578286,
// data: "0x0000000000000000000000000000000000000000000003a12ec797b5484968c1",
// logIndex: 42,
// topics: [
// "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
// "0x00000000000000000000000039b72d136ba3e4cef35f48cd09587ffab754dd8b",
// "0x000000000000000000000000dfd9de5f6fa60bd70636c0900752e93a6144aed4",
// ],
// transactionHash: "0x9014ae6ef92464338355a79e5150e542ff9a83e2323318b21f40d6a3e65b4789",
// transactionIndex: 29,
// },
// {
// address: "0x39B72d136ba3e4ceF35F48CD09587ffaB754DD8B",
// blockHash: "0x876810a013dbcd140f6fd6048c1dc33abbb901f1f96b394c2fa63aef3cb40b5d",
// blockNumber: 14578286,
// data: "0x0000000000000000000000000000000000000000000003a12ec797b5484968c1",
// logIndex: 43,
// topics: [
// "0x34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf7",
// "0x000000000000000000000000dfd9de5f6fa60bd70636c0900752e93a6144aed4",
// "0x0000000000000000000000000000000000000000000000000000000000000003",
// ],
// transactionHash: "0x9014ae6ef92464338355a79e5150e542ff9a83e2323318b21f40d6a3e65b4789",
// transactionIndex: 29,
// },
// ],
// logsBloom: "0x00000000000000000000000000000...",
// status: 1,
// to: "0x39B72d136ba3e4ceF35F48CD09587ffaB754DD8B",
// transactionHash: "0x9014ae6ef92464338355a79e5150e542ff9a83e2323318b21f40d6a3e65b4789",
// transactionIndex: 29,
// type: 2,
// byzantium: true,
// confirmations: 298171,
// }
Contractโ
โ ๏ธ Only read functions are currently supported. โ ๏ธ
- ๐งช
Contract
support is experimental, do not use this in production yet. (even though earni.fi does)
Encoding support:
bool
bytes
address
Decoding support:
bool
address
uint256
bytes32
uint8
string
(only if there is one string output, not multiple yet)
Assume all types outside the above types will break for now
import { Contract, jsonRpcProvider, JSONABI } from 'essential-eth';
// UNI airdrop contract
const contractAddress = '0x090D4613473dEE047c3f2706764f49E0821D256e';
const provider = jsonRpcProvider(/* RPC URL optional */);
const abi: JSONABI = [
{
inputs: [
{
internalType: 'uint256',
name: 'index',
type: 'uint256',
},
],
name: 'isClaimed',
outputs: [
{
internalType: 'bool',
name: '',
type: 'bool',
},
],
stateMutability: 'view',
type: 'function',
},
];
const contract = new Contract(contractAddress, abi, provider);
(async () => {
// prints boolean as to whether index 0 has claimed airdrop or not
console.log(await contract.isClaimed(0));
})();
contractFunctionName(args)
โ
Any function on a contract. Returns are the same as ethers.js
, except that instead of BigNumber, essential-eth
always returns a TinyBig
More Infoโ
๐งช This repo is under active development. The API is less-fully featured than web3
and ethers
. More functions added often!
๐จ๐ปโ๐ป Breaking changes will exist between minor versions until 1.0.0
(Versions go major.minor.patch
)
Identical vs Similar vs Dissimilarโ
Throughout the documentation for essential-eth
, you may notice that some functions are compared to ethers.js
and web3.js
. The keywords identical
, similar
, and dissimilar
are used to help you migrate to essential-eth
. Here's a guide on what these keywords mean:
- Identical -- should behave exactly like the library you're already using, except the types might be different (
TinyBig
vsBn.js
). - Similar -- can probably be used as a replacement to the library you're currently using, except there are some differences. Read the notes next to this keyword to see why these aren't considered
identical
. - Dissimilar -- should not be used in place of the function you're currently using. Read the notes next to this keyword to see why these functions aren't considered
similar
, and potentially learn how to alter your implementation to makeessential-eth
work for you.
Note: In web3.js
, almost every method or function can be passed a callback. essential-eth
, like ethers.js
, does not include this functionality and trusts that users will rely on the much more modern promise and async/await patterns.
Miscellaneousโ
Contributing and GitPOAPโ
We welcome and appreciate all contributions to Essential Eth! If you're interested in helping us improve this library, please read our Contributing Guidelines to understand the types of contributions we're looking for and the process of making them.
In partnership with GitPOAP, Essential ETH wants to recognize all contributors for their contributions toward the growth of this library. More information about GitPOAP can be found on the Contributing Guidelines.