You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Merge main into feat/signature-support and add signatureData to link.evm
- Merged latest main which includes app.certified.link.evm lexicon
- Added signatureData property to the new link.evm lexicon
- Installed viem dependency for link.evm tests
Copy file name to clipboardExpand all lines: SCHEMAS.md
+36Lines changed: 36 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -455,6 +455,42 @@ Certified lexicons are common/shared lexicons that can be used across multiple p
455
455
456
456
---
457
457
458
+
### `app.certified.link.evm`
459
+
460
+
**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.
|`proof`|`union`| ✅ | 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. ||
470
+
|`createdAt`|`string`| ✅ | Client-declared timestamp when this record was originally created. ||
471
+
|`signatureData`|`ref`| ❌ | Optional cryptographic signatures attesting to this record's content. ||
|`signature`|`string`| ✅ | ECDSA signature over the EIP-712 hash (hex-encoded with 0x prefix, 64 or 65 bytes). |
480
+
|`message`|`ref`| ✅ | 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. |
|`did`|`string`| ✅ | The ATProto DID being linked to the EVM address. |
487
+
|`evmAddress`|`string`| ✅ | The EVM wallet address (must match the top-level address field). |
488
+
|`chainId`|`string`| ✅ | 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. |
489
+
|`timestamp`|`string`| ✅ | Unix timestamp when the attestation was created (bigint serialized). |
"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.",
8
+
"key": "any",
9
+
"record": {
10
+
"type": "object",
11
+
"required": ["address", "proof", "createdAt"],
12
+
"properties": {
13
+
"address": {
14
+
"type": "string",
15
+
"description": "EVM wallet address (0x-prefixed, with EIP-55 checksum recommended).",
16
+
"minLength": 42,
17
+
"maxLength": 42
18
+
},
19
+
"proof": {
20
+
"type": "union",
21
+
"refs": ["#eip712Proof"],
22
+
"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."
23
+
},
24
+
"createdAt": {
25
+
"type": "string",
26
+
"format": "datetime",
27
+
"description": "Client-declared timestamp when this record was originally created."
28
+
},
29
+
"signatureData": {
30
+
"type": "ref",
31
+
"ref": "app.certified.signature.list",
32
+
"description": "Optional cryptographic signatures attesting to this record's content."
33
+
}
34
+
}
35
+
}
36
+
},
37
+
"eip712Proof": {
38
+
"type": "object",
39
+
"description": "EOA wallet ownership proof via EIP-712 typed data signature. Contains both the structured message that was signed and the resulting signature.",
40
+
"required": ["signature", "message"],
41
+
"properties": {
42
+
"signature": {
43
+
"type": "string",
44
+
"description": "ECDSA signature over the EIP-712 hash (hex-encoded with 0x prefix, 64 or 65 bytes).",
45
+
"minLength": 130,
46
+
"maxLength": 132
47
+
},
48
+
"message": {
49
+
"type": "ref",
50
+
"ref": "#eip712Message",
51
+
"description": "The EIP-712 structured message fields that were signed."
52
+
}
53
+
}
54
+
},
55
+
"eip712Message": {
56
+
"type": "object",
57
+
"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.",
"description": "The ATProto DID being linked to the EVM address.",
64
+
"maxLength": 256
65
+
},
66
+
"evmAddress": {
67
+
"type": "string",
68
+
"description": "The EVM wallet address (must match the top-level address field).",
69
+
"minLength": 42,
70
+
"maxLength": 42
71
+
},
72
+
"chainId": {
73
+
"type": "string",
74
+
"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.",
75
+
"minLength": 1,
76
+
"maxLength": 78
77
+
},
78
+
"timestamp": {
79
+
"type": "string",
80
+
"description": "Unix timestamp when the attestation was created (bigint serialized).",
0 commit comments