Skip to content

L2PS executor — canonicalise amount across the osDenomination fork #922

@linear

Description

@linear

What

The L2PS transaction executor processes the inner amount of an L2PS native transfer through raw BigInt(amount) arithmetic. There is no fork-aware canonicalisation: the L1 native path goes through canonicalizeAmountToOs, the L2PS executor does not.

Why this matters

After the osDenomination fork, every L2PS native transfer moves the wrong amount of value — about one part in a billion of what the sender intended — because the executor treats a post-fork OS string the same way a pre-fork DEM number was treated. A post-fork OS string amount is also rejected by the executor's number-only validation, so some transfers fail outright.

Fix

Mirror the L1 native path inside the L2PS executor: pass the amount and the fee through canonicalizeAmountToOs, emit OS-string GCR edits post-fork, and keep the exact bigint path for pre-fork strings. The L2PS_TX_FEE value stays the same; only the arithmetic is canonicalised (1 DEM becomes 10⁹ OS).

Source

Surfaced by the PATH-OS L2PS hardening report. Their patch + 17-vector test harness ("tombstone") is ready to submit; this ticket tracks whether we apply that patch or replicate the fix in our own PR.

Status

Todo.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions