NEAR for Ethereum developers
NEAR components are chain-agnostic, enabling you to create decentralized frontends tailored for any Ethereum dApps. Throughout this article, we'll navigate prevalent use-cases with code snippets. You’ll also find links to exemplary NEAR components for reference.
Interact with Ethereum using Ethers.js
The NEAR VM has imported the Ethers.js library, allowing for seamless interaction with Ethereum nodes using JavaScript in a NEAR component.
The Ethers object exposes the provider connection:
Ethers.provider()is a read-only connection to the blockchain, which allows querying the blockchain state (e.g., account, block or transaction details), querying event logs or evaluating read-only code using call.Ethers.provider().getSigner()abstracts the class that interacts with an accountEthers.provider().getSigner().getBalance()returns a Promise that resolves to the account address.
Ethers.provider().getBlockNumber()looks up the current block number (i.e. height)Ethers.provider().getFeeData()gets the best guess at the recommended FeeData
You can see various ways of using Ethers objects on the Ethers documentation portal).
Furthermore, numerous basic tools can be found in the ethers.utils object (be aware of the lowercase 'e').
ethers.utils.parseUnits(value, unit)converts the decimal string value to a BigInt, assuming unit decimal places. The unit may the number of decimal places or the name of a unit (e.g. "gwei" for 9 decimal places).ethers.utils.formatEther(wei)converts value into a decimal string using 18 decimal places.
Example showing the difference between Ethers.provider() and ethers.utils:
Ethers.provider()
.getSigner()
.getBalance()
.then((balance) => {
console.log("Your ETH balance: ", ethers.utils.formatEther(balance))
});
FAQ
How to get a user account?
const receiver = Ethers.provider().send("eth_requestAccounts", [])[0];
How to get the current chain ID?
Ethers.provider().getNetwork().then((chainIdData) => {
console.log(chainIdData.chainId);
});