Skip to content

Validation Rules

Proposed specification areas for ordering, supply and balance validation.

Open design

Validation rules decide which ELC-20 operations change state. They are the most consequential part of the standard: two indexers with different rules will report different balances from the same chain.

This page lists the proposed rules by specification area and marks every area that remains open.

Processing model

An indexer maintains a state for each ticker and processes every ELC-20 Sigil in canonical order. Each operation is either applied, changing state, or rejected, changing nothing. A rejected operation is still a valid Sigil; it is simply ineffective under the standard.

The outcome of each operation should be recorded with a reason, so that users and applications can see why an operation had no effect.

Canonical ordering

RuleStatus
Operations are ordered by block number, then transaction index, then intra-transaction indexProposed
Only transactions with a successful receipt are consideredProposed
Ordering is evaluated over finalized blocks onlyOpen

Elysium produces fast sequencer confirmations that precede settlement to HyperEVM. Whether indexers should report state at sequencer confirmation, at settlement or both is an open question with direct consequences for user experience and reorg risk.

Ticker rules

RuleStatus
Tickers are compared case-insensitivelyProposed
The first valid deploy of a ticker defines it; later deploys are rejectedProposed
Allowed characters and length boundsOpen
Reserved or protected tickersOpen

Supply rules

RuleStatus
A mint for an undeployed ticker is rejectedProposed
A mint with amt greater than lim is rejectedProposed
A mint is rejected once total minted equals maxProposed
A mint that would exceed max is truncated to the remaining supply, or rejectedOpen

Balance rules

RuleStatus
A transfer with amt greater than the signer's balance is rejectedProposed
Balances are computed in base units with arbitrary precision integersProposed
Transfers to the signer's own addressOpen
Transfers to the zero address, and whether they constitute a burnOpen

Numeric rules

RuleStatus
Quantities must match the pattern of a positive decimal integer without leading zerosProposed
Any non-conforming quantity rejects the operationProposed
Upper bound on quantities, such as 2^256 - 1Open

Reorganizations

Before a block is final, it can in principle be replaced. An indexer must be able to roll back state to a previous block and reapply operations. The rules above are defined over a single canonical history; how far an indexer must be prepared to roll back depends on the finality policy chosen above.

Test vectors

Before ELC-20 is considered stable, each rule will be accompanied by test vectors: an ordered list of Sigils with their expected outcomes and resulting balances. Two indexers are conforming only if they reproduce every vector exactly.

vector-001.json

Draft Example — Not Finalized

JSON
{
  "name": "mint beyond limit is rejected",
  "sigils": [
    { "from": "0xA", "body": { "op": "deploy", "tick": "demo", "max": "100", "lim": "10" } },
    { "from": "0xB", "body": { "op": "mint", "tick": "demo", "amt": "11" } },
    { "from": "0xB", "body": { "op": "mint", "tick": "demo", "amt": "10" } }
  ],
  "expect": {
    "outcomes": ["applied", "rejected:exceeds-limit", "applied"],
    "balances": { "0xB": "10" },
    "minted": "10"
  }
}