Skip to content

@therootnetwork/evm

EVM helpers: chain definitions, precompile address derivation, ABIs.

Vendor-neutral, on-chain only

Published under @therootnetwork. These talk directly to TRN nodes (WS or HTTPS) — no hosted Futureverse service in the path — so they are the safest dependency to take for projects that need to outlive the Futureverse company.

Version
1.0.5
Published
2024-06-25
License
Apache-2.0
Status
trn-active
npm
https://www.npmjs.com/package/@therootnetwork/evm
Types
./dist/index.d.ts
Maintainers
zees-fv, karishma09, aidan-starke, kenvu-ai
Recent versions
1.0.0 · 1.0.1 · 1.0.2 · 1.0.3 · 1.0.4 · 1.0.5
## Technical notes

Why use it

You build TRN dApps with viem/ethers/wagmi. Gives you a typed ROOT_NETWORK / PORCINI chain, plus helpers like getERC20PrecompileAddress(assetId) and getNftPrecompileAddress(collectionId) so you do not hard-code address prefixes.

When to skip it

You only interact with vanilla Solidity contracts you deployed yourself — no precompiles. Then plain viem/ethers config is enough.

Pairs with

  • viem — EVM client
  • wagmi + @futureverse/wagmi-connectors — wallet connection

Alternatives

  • @futureverse/evm (fv-winddown) — identical surface but ships under fv namespace

Example

ts
import { ROOT_NETWORK, getERC20PrecompileAddress } from '@therootnetwork/evm';
import { createPublicClient, http } from 'viem';

const client = createPublicClient({ chain: ROOT_NETWORK, transport: http() });
const xrp = getERC20PrecompileAddress(2);
const balance = await client.readContract({ address: xrp, abi: erc20Abi, functionName: 'balanceOf', args: [me] });

Gotchas

  • Native gas asset is XRP at 18 decimals on EVM (not 6). The ERC-20 mirror at the XRP precompile address is also 18.
  • Precompile addresses are not chain-id-namespaced — same on Root and Porcini.

Upstream README

@therootnetwork/evm

A utility package that simplifies EVM development on The Root Network.

Install

bash
yarn add @therootnetwork/evm

Usage

  • Import and utilize what you need
typescript
import {
  collectionIdToERC721Address,
  ERC721_PRECOMPILE_ABI,
  getPublicProviderUrl,
} from "@therootnetwork/evm";
import { Contract, getDefaultProvider } from "ethers";

const collectionAddress = collectionIdToERC721Address(1);
const providerUrl = getPublicProviderUrl("porcini");
const provider = getDefaultProvider();
const contract = new Contract(collectionAddress, ERC721_PRECOMPILE_ABI, provider);

API

function assetIdToERC20Address(assetId: string | number)

Converts native asset id to ERC-20 contract address

function collectionIdToERC721Address(collectionId: string | number)

Converts native nft collection id to ERC-721 contract address

function collectionIdToERC1155Address(collectionId: string | number)

Converts native sft collection id to ERC-1155 contract address

function getPublicProviderUrl(network: NetworkName): HttpProviderUrl

Returns the Public RPC URls for the corresponding network

Constants

Addresses

ConstantDescription
NFT_PRECOMPILE_ADDRESS: stringPrecompile address for nft pallet
SFT_PRECOMPILE_ADDRESS: stringPrecompile address for sft pallet
FUTUREPASS_REGISTRAR_PRECOMPILE_ADDRESS: stringPrecompile address for futurepass pallet
PEG_PRECOMPILE_ADDRESS: stringPrecompile address for erc20Peg and nftPeg pallets
DEX_PRECOMPILE_ADDRESS: stringPrecompile address for dex pallet
FEE_PROXY_PRECOMPILE_ADDRESSPrecompile address for feeProxy pallet

ABIs

ConstantDescription
ERC20_ABI: string[]ABI for the ERC-20 standard
ERC721_ABI: string[]ABI for the ERC-721 standard
ERC1155_ABI: string[]ABI for the ERC-1155 standard
NFT_PRECOMPILE_ABI: string[]ABI for the nft pallet
SFT_PRECOMPILE_ABI: string[]ABI for the sft pallet
FEE_PROXY_PRECOMPILE_ABI: string[]ABI for feeProxy pallet
FUTUREPASS_PRECOMPILE_ABI: string[]ABI for futurepass account
FUTUREPASS_REGISTRAR_PRECOMPILE_ABI: string[]ABI for futurepass pallet
DEX_PRECOMPILE_ABI: string[]ABI for the dex pallet

NOTE: All exported ABIs are in human-readable format

Curated independently by Codeology. Source-attributed reference for The Root Network. Not affiliated with Futureverse / TRN Labs.