did:cow, a proposal for an ID resolution method with most of the convenience of did:plc/did:web and the robustness of a public blockchain
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

clean up resolved json doc

+20 -25
+20 -25
README.md
··· 184 184 185 185 ## 10. Example DID Document 186 186 187 + This example shows a did:cow ID wrapping a did:plc identity. The resolved document is the underlying did:plc document with three modifications: the `id` is replaced with the did:cow identifier, and a `did:cow` block is added carrying the Ethereum controller address (as a did:pkh DID) and the wrapped DID for client validation. 188 + 187 189 Given: 188 190 ``` 189 - did:cow:8BC101ABF5BcF8b6209FaaAD4D761C1ED14999Be:web:example.com 191 + did:cow:8BC101ABF5BcF8b6209FaaAD4D761C1ED14999Be:plc:pyzlzqt6b2nyrha7smfry6rv 190 192 ``` 191 193 192 194 Wrapping: 193 195 ``` 194 - did:web:example.com 196 + did:plc:pyzlzqt6b2nyrha7smfry6rv 195 197 ``` 196 198 197 199 Resolved DID Document: ··· 199 201 { 200 202 "@context": [ 201 203 "https://www.w3.org/ns/did/v1", 202 - "https://w3id.org/security/suites/jws-2020/v1" 204 + "https://w3id.org/security/multikey/v1" 205 + ], 206 + "id": "did:cow:8BC101ABF5BcF8b6209FaaAD4D761C1ED14999Be:plc:pyzlzqt6b2nyrha7smfry6rv", 207 + "did:cow": { 208 + "controller": "did:pkh:eip155:1:0x8BC101ABF5BcF8b6209FaaAD4D761C1ED14999Be", 209 + "wrappedDid": "did:plc:pyzlzqt6b2nyrha7smfry6rv" 210 + }, 211 + "alsoKnownAs": [ 212 + "at://user.bsky.social" 203 213 ], 204 - "id": "did:cow:8BC101ABF5BcF8b6209FaaAD4D761C1ED14999Be:web:example.com", 205 - "controller": "0x8BC101ABF5BcF8b6209FaaAD4D761C1ED14999Be", 206 214 "verificationMethod": [ 207 215 { 208 - "id": "did:web:example.com#key-1", 209 - "type": "JsonWebKey2020", 210 - "controller": "did:cow:8BC101ABF5BcF8b6209FaaAD4D761C1ED14999Be:web:example.com", 211 - "publicKeyJwk": { 212 - "kty": "EC", 213 - "crv": "secp256k1", 214 - "x": "...", 215 - "y": "..." 216 - } 216 + "id": "did:plc:pyzlzqt6b2nyrha7smfry6rv#atproto", 217 + "type": "Multikey", 218 + "controller": "did:plc:pyzlzqt6b2nyrha7smfry6rv", 219 + "publicKeyMultibase": "zQ3shRQWmWxEtxRa317rpYnVo7nWxYAsDS4mBwdDLgLfkkDtR" 217 220 } 218 - ], 219 - "authentication": [ 220 - "did:web:example.com#key-1" 221 221 ], 222 222 "service": [ 223 223 { 224 - "id": "#wrapper-metadata", 225 - "type": "COWWrapper", 226 - "serviceEndpoint": { 227 - "wrapped_did": "did:web:example.com", 228 - "wrapper_controller": "0x8BC101ABF5BcF8b6209FaaAD4D761C1ED14999Be", 229 - "on_chain_state": true, 230 - "last_updated": "2026-02-16T10:30:00Z" 231 - } 224 + "id": "#atproto_pds", 225 + "type": "AtprotoPersonalDataServer", 226 + "serviceEndpoint": "https://bsky.social" 232 227 } 233 228 ] 234 229 }