Skip to main content

EIP-712 Types

All EWP signed messages use EIP-712 structured data format.

Domain Separator

All EWP messages share the same domain:

{
"name": "epress world",
"version": "1",
"chainId": 1
}
FieldValueNote
name"epress world"Protocol namespace. Prevents cross-application signature reuse.
version"1"Domain schema version. Verifiers MUST reject mismatched versions.
chainId1Retained for full EVM tooling compatibility.

Primary Types

CreateConnection

Initiates a follow relationship. Signed by follower.

FieldTypeDescription
followerAddressaddressFollower's Ethereum address
followeeAddressaddressFollowee's Ethereum address
followeeUrlstringFollowee's canonical URL
followerUrlstringFollower's canonical URL
timestampuint64Unix seconds

Signer: follower. Recovered address MUST equal followerAddress.

DestroyConnection

Terminates a connection. Signed by either party.

FieldTypeDescription
followerAddressaddressThe follower in the connection
followeeAddressaddressThe followee in the connection
timestampuint64Unix seconds

Signer: either party. Operation inferred from recovered signer:

  • Recovered = followerAddress → Unfollow
  • Recovered = followeeAddress → RemoveFollower
  • Recovered = neither → MUST reject
Field Ordering

followerAddress is listed first for consistency. Field order matters for EIP-712 typeHash computation; implementations MUST preserve this ordering.

NodeProfileUpdate

Broadcasts profile changes. Signed by node owner.

FieldTypeDescription
ownerAddressaddressNode owner's Ethereum address
urlstringUpdated canonical URL
titlestringDisplay name
descriptionstringNode description; MUST be "" when not set
timestampuint64Must be strictly greater than prior accepted value

Signer: node owner. Recovered address MUST equal ownerAddress.

StatementOfSource

Content provenance. Signed by publisher.

FieldTypeDescription
contentHashbytes32SHA-256 of content
publisherAddressaddressPublisher's address
timestampuint64Publication time; used for ordering and deduplication

Signer: publisher. Recovered address MUST equal publisherAddress.

The StatementOfSource is an immutable record.

Encoding Rules

bytes32 (contentHash): In JSON, contentHash is a 0x-prefixed 64-character lowercase hex string. For EIP-712 encoding, decode to raw 32 bytes. SHA-256 output is exactly 32 bytes; no truncation or padding needed. bytes32 values are encoded as raw bytes directly — not keccak256-hashed.

string: Encoded as keccak256(UTF-8(value)) per EIP-712.

address: 20 bytes, left-padded with 12 zero bytes to form a 32-byte word.

uint64: 8-byte unsigned integer, left-padded with 24 zero bytes to form a 32-byte word.

Timestamp Field Semantics

All timestamp fields use Unix epoch seconds encoded as uint64.

FieldSemanticFreshness Check
CreateConnection.timestampRequest timeREQUIRED: receiver's clock ± 1 hour
DestroyConnection.timestampRequest timeREQUIRED: receiver's clock ± 1 hour
NodeProfileUpdate.timestampProfile versionNO freshness; MUST be > prior accepted value
StatementOfSource.timestampPublication timeNO freshness; deduplication only

JSON Schemas

Machine-readable JSON schemas are available in the schemas/ directory.