Ethereum Explorer is a NPM package to make easy the interaction with Ethereum blockchain.
Ethereum Explorer is a NPM package to ease the interaction with the Ethereum blockchain.
With Ethereum Explorer you can easily invoke smart contracts, self-sign transactions or get general information about the blockchain (like gas price, gas limit, block information).
To use Ethereum Explorer you first have to install the package ethereum-explorer
in your project:
npm i ethereum-explorer
Import the library ethereum-explorer
in your code.
const EthereumExplorer = require('ethereum-explorer');
or
import EthereumExplorer from 'ethereum-explorer';
Then initialize and boot the Ethereum Explorer:
// instantiate a new EthereumExplorer object
const ethExp = new EthereumExplorer();
// connect to the blockchain network
try {
await ethExp.bootWeb3();
} catch (error) {
console.error(error);
}
Before to continue with this section, please sure you booted the EthereumExplorer
object with bootWeb3()
as explained before.
To interact with a smart contract first you must initialize it.
The function for initializing the smart contract is loadContact
and accepts the following parameters:
- Contract address (required): the address of the contract.
- Contract ABI (required): the JSON of the contract's ABI.
- Contract name (optional): the name of the contract. You must give it a name if you have more than one smart contract.
const contractAddress1 = '0x9eF8cFDd40fB1Fa402a1c0f981249B763A0a7E4e';
const contractAbiJson1 = require('./assets/contracts/ABI/SmartContract1.json');
ethExp.loadContact(contractAddress1, contractAbiJson1, 'SmartContract1');
const contractAddress2 = '0x1e5d52BC66D53b5A7521C1169133E83F582B7f81';
const contractAbiJson2 = require('./assets/contracts/ABI/SmartContract2.json');
ethExp.loadContact(contractAddress2, contractAbiJson2, 'SmartContract2');
You can easily initialize smart contracts from the JSON given in output from the Truffle framework compile.
const netId = await ethExp.getNetworkId();
ethExp.loadContact(ContractAbiJson.networks[netId].address, ContractAbiJson.abi);
The function call
helps to invoke a function of a smart contract. The parameter to give to the function are:
- Name of the function (required).
- List of parameter to give to the smart contract function in a form of an array (optional).
- Name of the smart contract (optional).
Let's suppose we have a Users
smart contract and it has a function called getUserById
to get an user by ID. And below the implementation of the function:
function getUserById(string memory idNumber) public view returns (
string memory,
string memory,
address
) {
...
}
To invoke the function you can proceed as per below:
const message = await ethExp.call(
'getUserById', // name of the smart contract function
['341'], // parameters required from the smart contract function
'Users' // name of the smart contract
);
There are 2 ways to invoke a function that changes the state of the blockchain:
- Using the wallet user address connected to the wallet provider (like MetaMask). The user will be prompted to MetaMask to confirm the transaction.
- Provide the wallet address and the related private key to sign the transaction.
The function sendTxToSmartContract
invokes a functions and needs the following parameters:
- Address of the wallet of the user (required).
- Private key of the user (optional). If not provided the user will be prompted to the wallet provider (like MetaMask).
- Name of the function to call (required).
- Array of parameter required by the smart contract function (optional).
- Optional values for the transaction (optional).
- Name of the smart contract (optional).
The example below invokes a function using the wallet the user is connected with. The user will be prompted to MetaMask (or any other wallet manager) to confirm the transaction.
const walletAddress = await ethExp.getUserAccount(); // wallet address of the user that is sending the transaction
const name = 'John';
const surname = 'Doe'
const address = '0x123'
(await ethExp.sendTxToSmartContract(walletAddress, null, 'updateUser', [name, surname, address], {}, 'Users'))
.on('transactionHash', transactionHash => console.log(transactionHash))
.on('receipt', receipt => console.log(receipt))
.on('error', error => console.error(error));
In the example below, the wallet address and its related key are used to sign the transaction, so they must be provided.
const walletAddress = '0x8aD783Bdb18Bd445CB4929BCee117e094Df03A47';
const privateKey = '3eadd2ddc6711115252e919ca785d0fac5d803059c13588dcf36dca5c5a18f2a';
const name = 'John';
const surname = 'Doe'
const address = '0x123'
(await ethExp.sendTxToSmartContract(walletAddress, privateKey, 'updateUser', [name, surname, address], {}, 'Users'))
.on('transactionHash', transactionHash => console.log(transactionHash))
.on('receipt', receipt => console.log(receipt))
.on('error', error => console.error(error));
Below a list of utility function:
getGasLimit
: retrieve the current gas limit.getGasPrice
: retrieve the current gas price.getBlock
: return the block information by block number. It accepts positive integers orlatest
.getBlockNumber
: return the total number of blocks in the blockchain.getUserAccount
: return the wallet user address connected to the wallet provider.
On the repo https://github.com/danielefavi/ethereum-explorer-example you can find a DApp that uses the package ethereum-explorer
.