every fire on Ethereum started as one.

One contract.
A billion sparks.
Zero excuses.

$SPARK is an ERC-20 with no owner, no tax and no way to mint more. Built at 2am by people who were tired of waiting for permission.

no owner ◆no tax ◆no mint ◆1,000,000,000 $SPARK ◆new erc standard ◆metadata on-chain ◆be the spark ◆no owner ◆no tax ◆no mint ◆1,000,000,000 $SPARK ◆new erc standard ◆metadata on-chain ◆be the spark ◆no owner ◆no tax ◆no mint ◆1,000,000,000 $SPARK ◆new erc standard ◆metadata on-chain ◆be the spark ◆no owner ◆no tax ◆no mint ◆1,000,000,000 $SPARK ◆new erc standard ◆metadata on-chain ◆be the spark ◆

chapter 01 · the origin

It started on a Tuesday, around 2am.

No fund. No advisors. No “Q3 roadmap”. Just a group chat, a cold coffee and one question that wouldn’t go away: why does everything on-chain need a committee?

So we wrote the smallest honest token we could. Fixed supply, no admin keys, metadata living on Ethereum itself. Then we lit it.

What happens next isn’t up to us. That’s kind of the point.

▶ spark_origin.mp4 — 16s, made with Remotion

A hand striking a match that burns with blue cubes
“You don’t need a bonfire. You need one match and a little wind.”

— pinned in the group chat since day one

chapter 02 · the token

New ERC standard. ERC-20 + ERC-7572 + ERC-2612, in one clean contract.

Supply

1,000,000,000

minted once in the constructor

Buy / sell tax

0%

it's a plain ERC-20 transfer

Owner

none

no Ownable, nobody to renounce

Mint function

doesn't exist

read the code below, ctrl+F “mint”

Don’t trust us. Read it.

This is the entire token, minus the imports from OpenZeppelin. If a function isn’t in here, the contract can’t do it.

contract SparkToken is ERC20, ERC20Permit {
    using Strings for string;

    uint256 public constant TOTAL_SUPPLY = 1_000_000_000 ether;

    string private _description;
    string private _image;
    string private _externalLink;

    /// @dev ERC-7572
    event ContractURIUpdated();

    constructor(address recipient, string memory description_, string memory image_, string memory externalLink_)
        ERC20("Spark ERC", "SPARK")
        ERC20Permit("Spark ERC")
    {
        _description = description_;
        _image = image_;
        _externalLink = externalLink_;
        _mint(recipient, TOTAL_SUPPLY);
        emit ContractURIUpdated();
    }

    /// @notice ERC-7572 contract-level metadata.
    function contractURI() external view returns (string memory) {
        string memory json = string.concat(
            '{"name":"',
            name().escapeJSON(),
            '","symbol":"',
            symbol().escapeJSON(),
            '","description":"',
            _description.escapeJSON(),
            '","image":"',
            _image.escapeJSON(),
            '","external_link":"',
            _externalLink.escapeJSON(),
            '"}'
        );
        return string.concat("data:application/json;base64,", Base64.encode(bytes(json)));
    }
}
Late-night desk with a laptop and a glowing blue cube

the actual desk. the coffee was cold.

chapter 03 · get some

Four steps. No sign-up.

  1. 01

    Get a wallet

    Rabby, MetaMask, Coinbase Wallet — anything that speaks Ethereum.

  2. 02

    Load some ETH

    Buy on an exchange and send it to your wallet on Ethereum mainnet.

  3. 03

    Swap for $SPARK

    Open Uniswap from our app, paste the contract address, check it twice.

  4. 04

    Add it & post

    One click in the app adds $SPARK to your wallet. Then tell the timeline.

Friends gathered at night around a glowing blue cube

chapter 04 · the people

Not a community.
A group chat that got out of hand.

Questions people actually asked

What makes $SPARK different?+

It's built on the new ERC standards: ERC-7572 contractURI puts its name, logo and description on Ethereum itself, and ERC-2612 permit allows gasless approvals. No owner, no tax, no mint.

Where do I find the real contract?+

Pinned on @Spark_ERC and shown in the app. If an address doesn't match both, it's not us.

Can the team mint more or freeze my tokens?+

No. There is no owner, no mint, no blacklist, no pause. The contract is ~50 lines — it's printed further up this page.

What's contractURI?+

An ERC-7572 function that returns the token's name, logo and description straight from the chain, so wallets and explorers can show $SPARK properly.