Skip to main content

Identity

EWP uses Ethereum addresses as the sole identity primitive. Identity is proved by signing, not by registration.

Key Concepts​

Ethereum Address as Identity​

Every node has an Ethereum address (e.g., 0x742d35Cc6634C0532925a3b844Bc9e7595f3aB1d). This address:

  • Is derived from a secp256k1 keypair
  • Follows EIP-55 checksummed format
  • Remains stable across node migrations and URL changes

No Registration Required​

There is no on-chain registration, no identity registry, and no central coordinator. A node proves its identity by:

  1. Signing messages with its private key
  2. Including its address in the signed message payload
  3. Publishing its public profile at /ewp/profile

Authentication​

All cross-node write operations use EIP-712 structured data signatures:

{
"domain": {
"name": "epress world",
"version": "1",
"chainId": 1
},
"types": { ... },
"primaryType": "CreateConnection",
"message": { ... }
}

The receiver:

  1. Recovers the signer address via ecrecover
  2. Compares it to the identity field in the message
  3. Validates the signature cryptographically

Profile Endpoint​

GET /ewp/profile returns:

{
"address": "0x742d35Cc6634C0532925a3b844Bc9e7595f3aB1d",
"url": "https://alice.example.com",
"title": "Alice's Node",
"description": "Personal publishing node",
"ewpVersion": "1",
"createdAt": "2024-01-01T00:00:00.000Z",
"updatedAt": "2024-06-15T12:30:00.000Z"
}

When description is not set, its value MUST be null (not absent, not "").

URL Changes​

A node may change its canonical URL. The NodeProfileUpdate message type allows a node owner to broadcast URL changes to followers:

{
"ownerAddress": "0x...",
"url": "https://new-url.example.com",
"title": "Updated Title",
"description": "Updated description",
"timestamp": 1735000000
}

The timestamp must be strictly greater than the previously accepted value to prevent rollback attacks.

When a NodeProfileUpdate carries a new URL, followers MUST fetch GET /ewp/profile from the new URL and confirm the returned address equals ownerAddress. This prevents URL hijacking attacks.