]> git.ardis.lu - minimal-eth-burner/summary
 
descriptionMinimal EVM bytecode to irreversibly destroy ETH.
last changeSun, 4 Oct 2026 03:25:57 +0000 (20:25 -0700)
readme

minimal-eth-burner

Important

EIP-8246 (scheduled for inclusion in Glamsterdam, targeting December 2026) will disable this method of burning ETH.

On Ethereum, it's common to "burn" (destroy) ETH by sending it to a "burner address" like 0x000000000000000000000000000000000000dead.

However, ETH sent to burner addresses is theoretically recoverable if private keys associated with the burner addresses are ever discovered. The only way to actually destroy ETH is by either:

This repository contains the minimal amount of code to create a new smart contract that immediately calls SELFDESTRUCT and sends its ETH to itself. All ETH sent to the smart contract creation transaction will be irreversibly destroyed.

Code repository mirrors: GitHub, Codeberg, git.ardis.lu

Usage

See example JavaScript below. Copy this code into the DevTools console in any web browser where you have an EIP-1193 wallet (e.g., MetaMask) installed.

Caution

All ETH sent in this transaction will be irreversibly destroyed.

const addr = (await ethereum.request({ method: 'eth_requestAccounts' }))[0]; // Current address
const deployer = '0x696130ff5f526002601ef35f525f5f5f5f5f600a601634f05af1'; // See deployer.eas
const burn = '100000000000000000'; // Amount of ETH to burn (in wei)

// Irreversibly destroys all ETH sent
await ethereum.request({
  method: 'eth_sendTransaction',
  params: [{
    from: addr,
    data: deployer,
    value: `0x${BigInt(burn).toString(16)}`
  }]
});

Multiple wallets

If you have multiple wallets installed, use the EIP-6963 events to select which wallet you want to use:

const wallets = [];
window.addEventListener('eip6963:announceProvider', e => wallets.push(e.detail));
window.dispatchEvent(new Event('eip6963:requestProvider'));
console.table(wallets.map(w => w.info.name));
const { provider } = wallets[0]; // Replace 0 with the index of the wallet you want to use

// The remainder is the same as above except using `provider` instead of `ethereum`
const addr = (await provider.request({ method: 'eth_requestAccounts' }))[0]; // Current address
const deployer = '0x696130ff5f526002601ef35f525f5f5f5f5f600a601634f05af1'; // See deployer.eas
const burn = '100000000000000000'; // Amount of ETH to burn (in wei)

// Irreversibly destroys all ETH sent
await provider.request({
  method: 'eth_sendTransaction',
  params: [{
    from: addr,
    data: deployer,
    value: `0x${BigInt(burn).toString(16)}`
  }]
});

EIP-6780

EIP-6780 (which went live in the Dencun upgrade in March 2024) updates the behavior of the SELFDESTRUCT opcode so that a smart contract calling SELFDESTRUCT will only delete itself when it's called in the same transaction that created it.

Since the deployer.eas bytecode creates a new smart contract and then immediately calls it in the same transaction, its behavior is not changed by EIP-6780.

Assembly

Use geas to assemble the files:

geas burner.eas
geas deployer.eas

References

shortlog
2026-10-04 Ardis LuBump target date main
2026-09-13 Ardis LuMove EIP-8246 notice to top
2026-08-18 Ardis LuAdd Glamsterdam target month
2026-08-12 Ardis LuUpdate status of EIP-8246
2026-07-23 Ardis LuDelete manual break in admonition
2026-07-10 Ardis LuDocument full post-instruction stack instead of single arg
2026-06-04 Ardis LuGas golf 3 gas by removing `DUP6`
2026-06-04 Ardis LuFollow `geas` comment convention
2026-05-09 Ardis LuAdd reference to EIP-8246
2026-02-05 Ardis LuAdd code repository mirrors
2026-02-04 Ardis LuAdd MIT license
2025-06-21 Ardis LuShorten lines to avoid horizontal scroll
2025-06-18 Ardis LuAdd assembler guidance
2025-06-18 Ardis LuUse `.eas` file extension instead of `.evm` for EVM...
2025-06-18 Ardis LuRefresh language and links
2024-11-29 Ardis LuSplit EIP-6963 example to dedicated section
...
heads
2 weeks ago main
This page took 0.057032 seconds and 7 git commands to generate.