Skip to content

Tari payout address gets no checksum validation — a mistyped address is caught only at merge-mine time #845

Description

@VijitSingh97

The gap

#829 closed the Monero half: a well-shaped but checksum-invalid monero.wallet_address is now rejected host-side (block-wise base58 decode + legacy-Keccak checksum) before anything launches.

tari.wallet_address still has no equivalent. The host gate checks only for whitespace and the untouched template placeholder — deliberately, because Tari addresses come in base58 AND emoji forms, single/dual, with optional payment IDs (RFC-0155), so a shape regex would false-reject valid addresses. But both Tari forms carry a real checksum (DammSum), so the same class of failure as #829 exists: one mistyped character sails through validation, and the first honest verdict comes from the Tari node at merge-mine time — or never visibly at all.

Why it wasn't folded into #829

Monero's check was one vendored hash (~60 lines of legacy Keccak) at a choke point every config path already routes through. Tari's needs DammSum plus the dual/single address layouts plus the 256-emoji alphabet mapping for the emoji form — a materially bigger vendored surface that deserves its own tests and its own review.

Suggested direction

Same shape as the Monero gate: validate in monero_address_type's Tari sibling inside the pithead script (python3 does the math there already), reject at parse_and_validate_config with a "re-copy the address from your wallet" message, and let the wizard/dashboard inherit the verdict through the existing error round-trips. Emoji-form support can decode via the published emoji↔byte table; if that table is judged too heavy to vendor, gating the base58 form alone still closes most of the surface honestly — say so in the doc row either way.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingsetuppithead, config.json, first-run setup

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions