eNAT
Connect
Live·ETH mainnet
block#25,958,626
·
finalized#25,958,562
lag0 blk

Mint a single block

First-is-first. The first valid mint of any unminted block in canonical order wins; everyone else's tx reverts but still pays gas. Before activation fee=0; after activation the target requires a capture fee in calldata.

Mint precheck

Checking whether this block can be minted…
Broadcast from this site

Sends the bytes above as `data:` calldata in a 0-ETH self-transfer. Your wallet pays gas; this site never holds the signed tx.

Checking whether this block can be minted…

Live calldata
65 bytesInvalid
data: payload
data:,{"p":"edmt","op":"emt-mint","tick":"enat","blk":"18765432"}

Preview updates as you type. Wrap with `cast --to-utf8` or `toUtf8Bytes` before sending — see CLI snippets below.

Plate X.B./CLI snippets

Send the calldata from anywhere.

These snippets only construct and send the calldata. They never read protocol state — keep an indexer endpoint open in another window if you want to verify the post-mint balance.

cast (foundry)
# self-send mint with raw calldata; replace <BLK>
cast send $YOUR_ADDR \
  --rpc-url $ETH_RPC \
  --private-key $PRIVATE_KEY \
  --value 0 \
  --gas-limit 30000 \
  $(cast --to-utf8 'data:,{"p":"edmt","op":"emt-mint","tick":"enat","blk":"<BLK>"}')
ethers.js v6
import { Wallet, JsonRpcProvider, toUtf8Bytes, hexlify } from "ethers";

const wallet = new Wallet(PRIVATE_KEY, new JsonRpcProvider(RPC_URL));
const payload = `data:,{"p":"edmt","op":"emt-mint","tick":"enat","blk":"${BLK}"}`;

const tx = await wallet.sendTransaction({
  to: wallet.address,    // self-send (protocol §5.2)
  value: 0n,
  data: hexlify(toUtf8Bytes(payload)),
});
console.log("submitted:", tx.hash);
viem
import { createWalletClient, http, toHex, stringToBytes } from "viem";
import { privateKeyToAccount } from "viem/accounts";
import { mainnet } from "viem/chains";

const account = privateKeyToAccount(PRIVATE_KEY);
const client = createWalletClient({ account, chain: mainnet, transport: http(RPC_URL) });

const payload = `data:,{"p":"edmt","op":"emt-mint","tick":"enat","blk":"${BLK}"}`;
const hash = await client.sendTransaction({
  to: account.address,
  value: 0n,
  data: toHex(stringToBytes(payload)),
});

All three snippets target Ethereum mainnet. Substitute your RPC URL and private key (or hardware-wallet signer) before running.

Plate X.C./How to broadcast

Four steps, no UI required.

  1. 01

    Compose

    Build the data: payload above, or by hand. The exact UTF-8 bytes are what the indexer reads — extra whitespace will cause your tx to be ignored.

  2. 02

    Encode

    Wrap the payload as hex bytes. cast `--to-utf8` does this; ethers.js uses `hexlify(toUtf8Bytes(...))`; viem uses `toHex(stringToBytes(...))`.

  3. 03

    Sign

    For mint, tx.to MUST equal tx.from (self-send). value can be 0. If the target requires capture fee, the fee comes from protocol-layer raw fragment balance, not ERC-20 bENAT allowance. Use a competitive priority fee for popular blocks; underbidding loses to other minters.

  4. 04

    Verify

    After inclusion, query any indexer endpoint (see Plate IX.E). Most public indexers re-derive state within seconds. Finality is reached after 64-96 PoS slots.