Asentum

Reference

Ethereum Compatibility

What carries over, what doesn't · Estimated read time: 6 minutes

TL;DR

Asentum is JSON-RPC compatible, not bytecode compatible. Ethereum-ecosystem tooling that speaks JSON-RPC — MetaMask, ethers.js, viem, web3.js, Etherscan-style explorers — works against Asentum for reads and transaction broadcasts. But Solidity bytecode does not run. Contracts on Asentum are plain JavaScript. See Smart Contracts for the why.

What works out of the box

  • MetaMask — as a read-only chain. Add Asentum as a custom network and every page that shows balances, block numbers, and transaction history works.
  • ethers.js / viem / web3.js — all JSON-RPC methods in our reference are reachable. Use them for reads and for broadcasting pre-signed Asentum transactions.
  • Etherscan-style block explorers — the native explorer speaks the same JSON-RPC, so anyone writing a chain indexer against Ethereum can point it here.
  • Hardhat / Foundry network configs — for RPC reads, yes. For compiling and deploying, no (see below).

What does not work

  • Solidity contracts. Asentum does not have an EVM. Solidity bytecode will not deploy. Use JavaScript — see Writing Contracts.
  • MetaMask signing of Asentum transfers. MetaMask only produces secp256k1 ECDSA signatures; Asentum requires ML-DSA-65 (Dilithium3). For signing, use the Asentum Wallet or the SDK.
  • EVM opcodes and precompiles. There is no SHA256 opcode, no ECRECOVER, no CREATE2. All cryptography that needs to run inside a contract is provided by approved libraries.
  • Reentrancy-based patterns. Cross-contract calls are async message-passing. Reentrancy is structurally impossible. Ported Solidity patterns assuming synchronous calls will not translate 1:1.

Using MetaMask

Add Asentum as a custom network:

  • Network name — Asentum Testnet
  • RPC URLhttps://testnet.asentum.com
  • Chain ID1337
  • Currency symbol — ASE
  • Block explorerhttps://testnet.asentum.com

You'll see balances and chain data. To send transactions, use the Asentum Wallet extension alongside MetaMask.

Using ethers.js / viem

// viem — read-only is plug and play
import { createPublicClient, http } from 'viem';

const client = createPublicClient({
  transport: http('https://testnet.asentum.com'),
});

const block = await client.getBlockNumber();

For signing and writes, prefer @asentum/sdk — it does the Dilithium3 signing viem can't do.

Addresses

Asentum addresses are 20 bytes, rendered as 0x-prefixed hex with an EIP-55 mixed-case checksum — visually identical to Ethereum addresses. Derivation is different:

Ethereum:  keccak256(pubkey)[12:32]
Asentum:   BLAKE3(pubkey)[0:20]

An Ethereum address is not a valid Asentum address (different hash, different derivation). Do not reuse them across chains.

Signatures

  • Ethereum — 65-byte ECDSA signatures (secp256k1), quantum-breakable.
  • Asentum — ~3.3 KB ML-DSA-65 (Dilithium3) signatures, post-quantum.

This is the bedrock reason you can't use MetaMask to sign Asentum transactions — the cryptography is fundamentally different. See Post-Quantum Cryptography.

Events

Event logs follow the Ethereum format — indexed topics, data payload. eth_getLogs filters work the same way. The difference is the emit: contracts call emit('Name', { ... }) from JS, not emit Name(...) from Solidity.

Read next