Ethernal Journal

Thoughts preserved on Ethereum, forever

Write a new entry
Step 1 — Connect your wallet

You need an Ethereum wallet (like MetaMask) to write entries. Reading is free and open to everyone.

Not connected
Step 2 — Write your entry
0 bytes Est. gas: 21,000
Contract:
How this works

What this does

Stores UTF-8 text permanently on Ethereum by encoding it in the data field of zero-value transactions sent to a receiver contract. The text lives in transaction calldata forever — immutable and publicly readable.

This page's contract

This page reads and writes to a verified Solidity contract (EthernalReceiver.sol, solc 0.8.28, optimizer 200 runs). It accepts any call via fallback() and receive(), and lets the deployer withdraw any accidentally sent ETH.

View verified source on Etherscan

To use a different contract, change the CONTRACT_ADDRESS constant at the top of this page's JavaScript.

Encoding (write)

Convert your text to UTF-8 bytes, then hex-encode it into the transaction data field:

data = ethers.hexlify(ethers.toUtf8Bytes("your text here"))

Send a 0-value transaction to the receiver contract address with this data. Gas: 21000 + 16/byte (non-zero) + 4/byte (zero) + 200.

Decoding (read)

Fetch transactions via Etherscan API V2:

GET https://api.etherscan.io/v2/api?chainid={CHAIN_ID}&module=account&action=txlist&address={CONTRACT}&sort=desc&apikey={KEY}

Filter: value == "0", input != "0x", isError == "0". Decode the input field:

text = ethers.toUtf8String(tx.input)

Chain IDs

Sepolia testnet: 11155111  |  Ethereum mainnet: 1

No dependencies

You only need an Ethereum wallet and an RPC endpoint (or Etherscan API) to read and write. This page is one possible interface — the protocol is open and anyone can build another.

Select Wallet