app.certified.link.evm

certified.app

Documentation

A verifiable link between an ATProto DID and an EVM wallet address, proven via a cryptographic signature. Currently supports EOA wallets via EIP-712 typed data signatures; the proof field is an open union to allow future signature methods.

main record

A verifiable link between an ATProto DID and an EVM wallet address, proven via a cryptographic signature. Currently supports EOA wallets via EIP-712 typed data signatures; the proof field is an open union to allow future signature methods.

Record Key any Any valid record key

Properties

address string Required

EVM wallet address (0x-prefixed, with EIP-55 checksum recommended).

maxLength: 42 bytesminLength: 42 bytes
createdAt string datetime Required

Client-declared timestamp when this record was originally created.

proof union Required

Cryptographic proof of wallet ownership. The union is open to allow future proof methods (e.g. ERC-1271, ERC-6492). Each variant bundles its signature with the corresponding message format.

Known types:
signatures ref app.certified.signature.defs#list Optional

Optional cryptographic signatures attesting to this record's content. The EIP-712 `proof` field proves wallet consent (orthogonal trust statement); `signatures` proves record provenance (e.g. that a platform UI minted this record).

View raw schema
{
  "key": "any",
  "type": "record",
  "record": {
    "type": "object",
    "required": [
      "address",
      "proof",
      "createdAt"
    ],
    "properties": {
      "proof": {
        "refs": [
          "#eip712Proof"
        ],
        "type": "union",
        "description": "Cryptographic proof of wallet ownership. The union is open to allow future proof methods (e.g. ERC-1271, ERC-6492). Each variant bundles its signature with the corresponding message format."
      },
      "address": {
        "type": "string",
        "maxLength": 42,
        "minLength": 42,
        "description": "EVM wallet address (0x-prefixed, with EIP-55 checksum recommended)."
      },
      "createdAt": {
        "type": "string",
        "format": "datetime",
        "description": "Client-declared timestamp when this record was originally created."
      },
      "signatures": {
        "ref": "app.certified.signature.defs#list",
        "type": "ref",
        "description": "Optional cryptographic signatures attesting to this record's content. The EIP-712 `proof` field proves wallet consent (orthogonal trust statement); `signatures` proves record provenance (e.g. that a platform UI minted this record)."
      }
    }
  },
  "description": "A verifiable link between an ATProto DID and an EVM wallet address, proven via a cryptographic signature. Currently supports EOA wallets via EIP-712 typed data signatures; the proof field is an open union to allow future signature methods."
}
eip712Message object

The EIP-712 typed data message that was signed by the wallet. Contains the fields binding an ATProto DID to an EVM address on a specific chain.

Properties

chainId string Required

EVM chain ID as string (bigint serialized). Identifies which chain was used for signing; for EOA wallets the identity link applies across all EVM-compatible chains.

maxLength: 78 bytesminLength: 1 bytes
did string did Required

The ATProto DID being linked to the EVM address.

maxLength: 256 bytes
evmAddress string Required

The EVM wallet address (must match the top-level address field).

maxLength: 42 bytesminLength: 42 bytes
nonce string Required

Replay-protection nonce (bigint serialized).

maxLength: 78 bytesminLength: 1 bytes
timestamp string Required

Unix timestamp when the attestation was created (bigint serialized).

maxLength: 78 bytesminLength: 1 bytes
View raw schema
{
  "type": "object",
  "required": [
    "did",
    "evmAddress",
    "chainId",
    "timestamp",
    "nonce"
  ],
  "properties": {
    "did": {
      "type": "string",
      "format": "did",
      "maxLength": 256,
      "description": "The ATProto DID being linked to the EVM address."
    },
    "nonce": {
      "type": "string",
      "maxLength": 78,
      "minLength": 1,
      "description": "Replay-protection nonce (bigint serialized)."
    },
    "chainId": {
      "type": "string",
      "maxLength": 78,
      "minLength": 1,
      "description": "EVM chain ID as string (bigint serialized). Identifies which chain was used for signing; for EOA wallets the identity link applies across all EVM-compatible chains."
    },
    "timestamp": {
      "type": "string",
      "maxLength": 78,
      "minLength": 1,
      "description": "Unix timestamp when the attestation was created (bigint serialized)."
    },
    "evmAddress": {
      "type": "string",
      "maxLength": 42,
      "minLength": 42,
      "description": "The EVM wallet address (must match the top-level address field)."
    }
  },
  "description": "The EIP-712 typed data message that was signed by the wallet. Contains the fields binding an ATProto DID to an EVM address on a specific chain."
}
eip712Proof object

EOA wallet ownership proof via EIP-712 typed data signature. Contains both the structured message that was signed and the resulting signature.

Properties

message ref #eip712Message Required

The EIP-712 structured message fields that were signed.

signature string Required

ECDSA signature over the EIP-712 hash (hex-encoded with 0x prefix, 64 or 65 bytes).

maxLength: 132 bytesminLength: 130 bytes
View raw schema
{
  "type": "object",
  "required": [
    "signature",
    "message"
  ],
  "properties": {
    "message": {
      "ref": "#eip712Message",
      "type": "ref",
      "description": "The EIP-712 structured message fields that were signed."
    },
    "signature": {
      "type": "string",
      "maxLength": 132,
      "minLength": 130,
      "description": "ECDSA signature over the EIP-712 hash (hex-encoded with 0x prefix, 64 or 65 bytes)."
    }
  },
  "description": "EOA wallet ownership proof via EIP-712 typed data signature. Contains both the structured message that was signed and the resulting signature."
}

Lexicon Garden

@