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. Contracts get no cryptographic helpers today. The transaction signature is checked before your contract runs, so msg.sender is already authenticated. Library approval, which was meant to add shared helpers, is disabled.
  • Reentrancy-based patterns. Cross-contract calls via E() have a VM-enforced call-stack reentrancy guard. Reentrancy is structurally impossible — no modifier required. Ported Solidity patterns that rely on reentrancy will not work.

Using MetaMask

Add Asentum as a custom network:

  • Network name — Asentum Testnet
  • RPC URL - https://explorer.asentum.com
  • Chain ID — 1423
  • Currency symbol — ASE
  • Block explorer - https://explorer.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://explorer.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, shown as ase1 bech32 strings with a built-in checksum, so they never look like an Ethereum address. 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