EIP-191: Signed Data Standard
EIP-191 introduces the \x19 prefix that disambiguates signed messages from transactions: a wallet signing personal_sign of an arbitrary string actually signs keccak256("\x19Ethereum Signed Message:\n" + len + message). This prevents a malicious dApp from tricking a user into signing a transaction by presenting it as a "message".
Versions
0x00— data with intended validator (a specific contract address).0x01— structured data (extended by EIP-712).0x45(E) —personal_sign(the canonical "Sign in with Ethereum" prefix).
Neo Equivalent
Neo wallets distinguish between signing transactions and signing arbitrary messages at the wallet level — there's no need for an in-band byte prefix because the signing API exposes them as separate calls (signTransaction vs signMessage). The Neo C# tab shows the native signature-verification helper used for a signMessage-produced signature; the deployed parity test covers the shared EIP-191 prefix surface.
Live on Neo TestNet
Both implementations are deployed on Neo N3 TestNet (network magic 894710606).
| Implementation | Contract Hash | Deploy Tx |
|---|---|---|
Solidity (neo-solc) | 0x64d3b4d2e0ce6b26cf0dedad9a5c2d0bf96ddeb1 | (reused — see 0x64d3b4d2e0ce6b26cf0dedad9a5c2d0bf96ddeb1) |
Neo C# (nccs) | 0xd06071f84b917cde1d16c23110f501b9dc3e914e | (reused — see 0xd06071f84b917cde1d16c23110f501b9dc3e914e) |
Checked-in snapshot records the deployed admin identity; the manifest now also asserts the shared EIP-191 prefix length. Source pairs under docs/standards-mirror/deployments/eip-191/.
