On-chain anchoring
Every registration is a real on-chain transaction. The registrant's wallet calls VerityAssetRegistrationV2 (or the legacy VerityRegistrationAnchor for older listings) on the chain they selected in the header. The contract records a (assetId → payloadHash) mapping, mints the ERC-721 NFT to the registrant, and emits a RegistrationAnchored event — all in one transaction.
The payload hash is deterministic and reproducible off-chain:
payloadHash = keccak256(utf8(canonicalRegistrationMessage))
The canonical message is what the register form builds from the fields you enter. Anyone can rebuild the exact string from the row, hash it, and confirm it matches the event's payloadHash — no trust in Verity required.
In addition, transfers can be anchored via the separate VerityAnchor contract, which records the keccak of both parties' signed messages:
transferHash = keccak256(concat(outgoingSignature, incomingSignature))
Both contracts are unowned, have no admin, no fees, and no upgrade path. See Contracts & addresses for the deployed addresses and ABI.

