nostr-attestations 0.0.0-development → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -1
- package/dist/builders.d.ts.map +1 -1
- package/dist/builders.js +5 -0
- package/dist/builders.js.map +1 -1
- package/dist/parsers.d.ts.map +1 -1
- package/dist/parsers.js +2 -0
- package/dist/parsers.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/vectors/attestations.json +406 -106
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
One Nostr event kind for all attestations — credentials, endorsements, vouches, provenance, licensing, and trust.
|
|
4
4
|
|
|
5
|
+
**Nostr:** [`npub1mgvlrnf5hm9yf0n5mf9nqmvarhvxkc6remu5ec3vf8r0txqkuk7su0e7q2`](https://njump.me/npub1mgvlrnf5hm9yf0n5mf9nqmvarhvxkc6remu5ec3vf8r0txqkuk7su0e7q2)
|
|
6
|
+
|
|
5
7
|
## Install
|
|
6
8
|
|
|
7
9
|
```
|
|
@@ -122,9 +124,65 @@ const attestation = parseAttestation(event)
|
|
|
122
124
|
|
|
123
125
|
`vectors/attestations.json` contains 10 frozen conformance test vectors covering the full range of attestation types (credential, endorsement, vouch, verifier, provenance) and states (active, revoked, self-attestation). Any conformant implementation must produce identical parse results from these inputs. The vectors are pinned — if tests against them fail, the implementation is broken, not the vector.
|
|
124
126
|
|
|
127
|
+
## Attested on Nostr
|
|
128
|
+
|
|
129
|
+
This library's authorship is claimed on Nostr using the very protocol it implements — NIP-VA eating its own dog food.
|
|
130
|
+
|
|
131
|
+
A self-attestation alone only proves that the holder of a private key *claims* authorship — not that the claim is true. The real value comes from **third-party attestations**: other pubkeys independently publishing `type: endorsement` events that reference this repo.
|
|
132
|
+
|
|
133
|
+
But counting endorsements isn't enough either — anyone can create 50 throwaway npubs and endorse themselves. What matters is **who** endorses, not how many. A single endorsement from a pubkey with a verified NIP-05 domain, a history of notes, and followers you recognise is worth more than a thousand from anonymous keys. This is a web of trust, not a vote count. When verifying, ask: do I know this endorser? Do people I trust follow them? That's how you resist Sybil attacks without a centralised authority.
|
|
134
|
+
|
|
135
|
+
All verification uses [nak](https://github.com/fiatjaf/nak) (the Nostr Army Knife). Install with `go install github.com/fiatjaf/nak@latest` or `brew install fiatjaf/tap/nak`.
|
|
136
|
+
|
|
137
|
+
**1. GitHub → Nostr** — this README claims `npub1mgv...` (see header above)
|
|
138
|
+
|
|
139
|
+
**2. Nostr → GitHub** — the repo announcement points back here:
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
nak req -k 30617 \
|
|
143
|
+
-a $(nak decode npub1mgvlrnf5hm9yf0n5mf9nqmvarhvxkc6remu5ec3vf8r0txqkuk7su0e7q2) \
|
|
144
|
+
-d nostr-attestations \
|
|
145
|
+
wss://relay.damus.io
|
|
146
|
+
# Look for the "web" tag → github.com/forgesworn/nostr-attestations
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**3. Verify the authorship claim** — signed by the same key:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
nak req -k 31000 \
|
|
153
|
+
-a $(nak decode npub1mgvlrnf5hm9yf0n5mf9nqmvarhvxkc6remu5ec3vf8r0txqkuk7su0e7q2) \
|
|
154
|
+
-d authorship:nostr-attestations \
|
|
155
|
+
wss://relay.damus.io 2>/dev/null | nak verify \
|
|
156
|
+
&& echo "✓ Signature valid"
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**4. Check for third-party endorsements:**
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
nak req -k 31000 \
|
|
163
|
+
-t a=30617:da19f1cd34beca44be74da4b306d9d1dd86b6343cef94ce22c49c6f59816e5bd:nostr-attestations \
|
|
164
|
+
wss://relay.damus.io
|
|
165
|
+
# Returns all attestations referencing this repo — filter by pubkey or type client-side
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Same npub on both sides — you'd need to control both GitHub and the private key to fake it. Third-party endorsements add independent signatures that can't be faked by one person.
|
|
169
|
+
|
|
170
|
+
**Endorse it yourself:**
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
nak event -k 31000 \
|
|
174
|
+
--prompt-sec \
|
|
175
|
+
-d endorsement:da19f1cd34beca44be74da4b306d9d1dd86b6343cef94ce22c49c6f59816e5bd \
|
|
176
|
+
-t type=endorsement \
|
|
177
|
+
-p da19f1cd34beca44be74da4b306d9d1dd86b6343cef94ce22c49c6f59816e5bd \
|
|
178
|
+
-t a=30617:da19f1cd34beca44be74da4b306d9d1dd86b6343cef94ce22c49c6f59816e5bd:nostr-attestations \
|
|
179
|
+
-t summary="Reviewed and endorsed nostr-attestations" \
|
|
180
|
+
wss://relay.damus.io wss://nos.lol wss://relay.nostr.band
|
|
181
|
+
```
|
|
182
|
+
|
|
125
183
|
## NIP-VA
|
|
126
184
|
|
|
127
|
-
Full protocol specification: [NIP-VA.md](./NIP-VA.md)
|
|
185
|
+
Full protocol specification: [NIP-VA.md](./NIP-VA.md) | [NostrHub](https://nostrhub.io/npub1mgvlrnf5hm9yf0n5mf9nqmvarhvxkc6remu5ec3vf8r0txqkuk7su0e7q2)
|
|
128
186
|
|
|
129
187
|
## Licence
|
|
130
188
|
|
package/dist/builders.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../src/builders.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEpF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../src/builders.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEpF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,aAAa,CA6C1E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,aAAa,CAyBxE"}
|
package/dist/builders.js
CHANGED
|
@@ -30,6 +30,11 @@ export function createAttestation(params) {
|
|
|
30
30
|
throw new Error('expiration must be a finite number');
|
|
31
31
|
tags.push(['expiration', String(params.expiration)]);
|
|
32
32
|
}
|
|
33
|
+
if (params.validFrom != null) {
|
|
34
|
+
if (!Number.isFinite(params.validFrom))
|
|
35
|
+
throw new Error('validFrom must be a finite number');
|
|
36
|
+
tags.push(['valid_from', String(params.validFrom)]);
|
|
37
|
+
}
|
|
33
38
|
if (params.tags) {
|
|
34
39
|
for (const tag of params.tags) {
|
|
35
40
|
tags.push(tag);
|
package/dist/builders.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builders.js","sourceRoot":"","sources":["../src/builders.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"builders.js","sourceRoot":"","sources":["../src/builders.ts"],"names":[],"mappings":"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"}
|
package/dist/parsers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../src/parsers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAEzD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../src/parsers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAEzD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI,CA2BtE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAGpD"}
|
package/dist/parsers.js
CHANGED
|
@@ -14,6 +14,7 @@ export function parseAttestation(event) {
|
|
|
14
14
|
const dTag = findTag(event.tags, 'd');
|
|
15
15
|
const parsed = dTag ? parseDTag(dTag) : null;
|
|
16
16
|
const expirationStr = findTag(event.tags, 'expiration');
|
|
17
|
+
const validFromStr = findTag(event.tags, 'valid_from');
|
|
17
18
|
return {
|
|
18
19
|
kind: ATTESTATION_KIND,
|
|
19
20
|
type,
|
|
@@ -23,6 +24,7 @@ export function parseAttestation(event) {
|
|
|
23
24
|
subject: findTag(event.tags, 'p'),
|
|
24
25
|
summary: findTag(event.tags, 'summary'),
|
|
25
26
|
expiration: expirationStr ? Number(expirationStr) : null,
|
|
27
|
+
validFrom: validFromStr ? Number(validFromStr) : null,
|
|
26
28
|
revoked: findTag(event.tags, 'status') === 'revoked',
|
|
27
29
|
reason: findTag(event.tags, 'reason'),
|
|
28
30
|
tags: event.tags,
|
package/dist/parsers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parsers.js","sourceRoot":"","sources":["../src/parsers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAGxC;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAiB;IAChD,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB;QAAE,OAAO,IAAI,CAAA;IAEhD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACxC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IAEtB,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACrC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAE5C,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"parsers.js","sourceRoot":"","sources":["../src/parsers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAGxC;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAiB;IAChD,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB;QAAE,OAAO,IAAI,CAAA;IAEhD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACxC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IAEtB,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACrC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAE5C,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;IACvD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;IAEtD,OAAO;QACL,IAAI,EAAE,gBAAyB;QAC/B,IAAI;QACJ,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,KAAK,CAAC,UAAU;QAC3B,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,IAAI;QACtC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC;QACjC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;QACvC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI;QACxD,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;QACrD,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,SAAS;QACpD,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC;QACrC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,KAAiB;IACzC,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB;QAAE,OAAO,KAAK,CAAA;IACjD,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,SAAS,CAAA;AACpD,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -27,6 +27,8 @@ export interface AttestationParams {
|
|
|
27
27
|
summary?: string;
|
|
28
28
|
/** Unix timestamp for attestation expiry (NIP-40). */
|
|
29
29
|
expiration?: number;
|
|
30
|
+
/** Unix timestamp for deferred activation (valid_from). */
|
|
31
|
+
validFrom?: number;
|
|
30
32
|
/** Additional application-specific tags. */
|
|
31
33
|
tags?: string[][];
|
|
32
34
|
/** Event content: empty string, human-readable text, or JSON. */
|
|
@@ -59,6 +61,8 @@ export interface Attestation {
|
|
|
59
61
|
subject: string | null;
|
|
60
62
|
summary: string | null;
|
|
61
63
|
expiration: number | null;
|
|
64
|
+
/** Earliest time the attestation is valid (deferred activation). */
|
|
65
|
+
validFrom: number | null;
|
|
62
66
|
revoked: boolean;
|
|
63
67
|
reason: string | null;
|
|
64
68
|
/** All tags from the original event (for application-specific access). */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,EAAE,EAAE,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,6DAA6D;AAC7D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,EAAE,EAAE,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,oDAAoD;AACpD,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAA;IACZ,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAA;IACjB,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,kDAAkD;AAClD,MAAM,WAAW,gBAAgB;IAC/B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAA;IACZ,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAA;IAClB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,KAAK,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAA;IACd,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAA;IACjB,uDAAuD;IACvD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,uDAAuD;IACvD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,0EAA0E;IAC1E,IAAI,EAAE,MAAM,EAAE,EAAE,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,uCAAuC;AACvC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,oDAAoD;AACpD,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,iCAAiC;AACjC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -7,13 +7,34 @@
|
|
|
7
7
|
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
8
8
|
"created_at": 1700000000,
|
|
9
9
|
"tags": [
|
|
10
|
-
[
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
[
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
[
|
|
11
|
+
"d",
|
|
12
|
+
"credential:def456"
|
|
13
|
+
],
|
|
14
|
+
[
|
|
15
|
+
"type",
|
|
16
|
+
"credential"
|
|
17
|
+
],
|
|
18
|
+
[
|
|
19
|
+
"p",
|
|
20
|
+
"def456"
|
|
21
|
+
],
|
|
22
|
+
[
|
|
23
|
+
"expiration",
|
|
24
|
+
"1735689600"
|
|
25
|
+
],
|
|
26
|
+
[
|
|
27
|
+
"summary",
|
|
28
|
+
"Professional credential verified"
|
|
29
|
+
],
|
|
30
|
+
[
|
|
31
|
+
"profession",
|
|
32
|
+
"attorney"
|
|
33
|
+
],
|
|
34
|
+
[
|
|
35
|
+
"jurisdiction",
|
|
36
|
+
"US-NY"
|
|
37
|
+
]
|
|
17
38
|
],
|
|
18
39
|
"content": "{\"proof\":\"ring-sig-abc\"}",
|
|
19
40
|
"id": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
@@ -31,15 +52,37 @@
|
|
|
31
52
|
"revoked": false,
|
|
32
53
|
"reason": null,
|
|
33
54
|
"tags": [
|
|
34
|
-
[
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
[
|
|
39
|
-
|
|
40
|
-
|
|
55
|
+
[
|
|
56
|
+
"d",
|
|
57
|
+
"credential:def456"
|
|
58
|
+
],
|
|
59
|
+
[
|
|
60
|
+
"type",
|
|
61
|
+
"credential"
|
|
62
|
+
],
|
|
63
|
+
[
|
|
64
|
+
"p",
|
|
65
|
+
"def456"
|
|
66
|
+
],
|
|
67
|
+
[
|
|
68
|
+
"expiration",
|
|
69
|
+
"1735689600"
|
|
70
|
+
],
|
|
71
|
+
[
|
|
72
|
+
"summary",
|
|
73
|
+
"Professional credential verified"
|
|
74
|
+
],
|
|
75
|
+
[
|
|
76
|
+
"profession",
|
|
77
|
+
"attorney"
|
|
78
|
+
],
|
|
79
|
+
[
|
|
80
|
+
"jurisdiction",
|
|
81
|
+
"US-NY"
|
|
82
|
+
]
|
|
41
83
|
],
|
|
42
|
-
"content": "{\"proof\":\"ring-sig-abc\"}"
|
|
84
|
+
"content": "{\"proof\":\"ring-sig-abc\"}",
|
|
85
|
+
"validFrom": null
|
|
43
86
|
},
|
|
44
87
|
"valid": true
|
|
45
88
|
},
|
|
@@ -51,9 +94,18 @@
|
|
|
51
94
|
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
52
95
|
"created_at": 1700000000,
|
|
53
96
|
"tags": [
|
|
54
|
-
[
|
|
55
|
-
|
|
56
|
-
|
|
97
|
+
[
|
|
98
|
+
"d",
|
|
99
|
+
"verifier:notary"
|
|
100
|
+
],
|
|
101
|
+
[
|
|
102
|
+
"type",
|
|
103
|
+
"verifier"
|
|
104
|
+
],
|
|
105
|
+
[
|
|
106
|
+
"summary",
|
|
107
|
+
"Identity verification service"
|
|
108
|
+
]
|
|
57
109
|
],
|
|
58
110
|
"content": "",
|
|
59
111
|
"id": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
@@ -71,11 +123,21 @@
|
|
|
71
123
|
"revoked": false,
|
|
72
124
|
"reason": null,
|
|
73
125
|
"tags": [
|
|
74
|
-
[
|
|
75
|
-
|
|
76
|
-
|
|
126
|
+
[
|
|
127
|
+
"d",
|
|
128
|
+
"verifier:notary"
|
|
129
|
+
],
|
|
130
|
+
[
|
|
131
|
+
"type",
|
|
132
|
+
"verifier"
|
|
133
|
+
],
|
|
134
|
+
[
|
|
135
|
+
"summary",
|
|
136
|
+
"Identity verification service"
|
|
137
|
+
]
|
|
77
138
|
],
|
|
78
|
-
"content": ""
|
|
139
|
+
"content": "",
|
|
140
|
+
"validFrom": null
|
|
79
141
|
},
|
|
80
142
|
"valid": true
|
|
81
143
|
},
|
|
@@ -87,12 +149,30 @@
|
|
|
87
149
|
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
88
150
|
"created_at": 1700000000,
|
|
89
151
|
"tags": [
|
|
90
|
-
[
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
[
|
|
95
|
-
|
|
152
|
+
[
|
|
153
|
+
"d",
|
|
154
|
+
"endorsement:def456"
|
|
155
|
+
],
|
|
156
|
+
[
|
|
157
|
+
"type",
|
|
158
|
+
"endorsement"
|
|
159
|
+
],
|
|
160
|
+
[
|
|
161
|
+
"p",
|
|
162
|
+
"def456"
|
|
163
|
+
],
|
|
164
|
+
[
|
|
165
|
+
"summary",
|
|
166
|
+
"Reliable provider"
|
|
167
|
+
],
|
|
168
|
+
[
|
|
169
|
+
"context",
|
|
170
|
+
"plumbing"
|
|
171
|
+
],
|
|
172
|
+
[
|
|
173
|
+
"confidence",
|
|
174
|
+
"high"
|
|
175
|
+
]
|
|
96
176
|
],
|
|
97
177
|
"content": "",
|
|
98
178
|
"id": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
@@ -110,14 +190,33 @@
|
|
|
110
190
|
"revoked": false,
|
|
111
191
|
"reason": null,
|
|
112
192
|
"tags": [
|
|
113
|
-
[
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
[
|
|
118
|
-
|
|
193
|
+
[
|
|
194
|
+
"d",
|
|
195
|
+
"endorsement:def456"
|
|
196
|
+
],
|
|
197
|
+
[
|
|
198
|
+
"type",
|
|
199
|
+
"endorsement"
|
|
200
|
+
],
|
|
201
|
+
[
|
|
202
|
+
"p",
|
|
203
|
+
"def456"
|
|
204
|
+
],
|
|
205
|
+
[
|
|
206
|
+
"summary",
|
|
207
|
+
"Reliable provider"
|
|
208
|
+
],
|
|
209
|
+
[
|
|
210
|
+
"context",
|
|
211
|
+
"plumbing"
|
|
212
|
+
],
|
|
213
|
+
[
|
|
214
|
+
"confidence",
|
|
215
|
+
"high"
|
|
216
|
+
]
|
|
119
217
|
],
|
|
120
|
-
"content": ""
|
|
218
|
+
"content": "",
|
|
219
|
+
"validFrom": null
|
|
121
220
|
},
|
|
122
221
|
"valid": true
|
|
123
222
|
},
|
|
@@ -129,12 +228,30 @@
|
|
|
129
228
|
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
130
229
|
"created_at": 1700000000,
|
|
131
230
|
"tags": [
|
|
132
|
-
[
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
[
|
|
137
|
-
|
|
231
|
+
[
|
|
232
|
+
"d",
|
|
233
|
+
"provenance:evt123"
|
|
234
|
+
],
|
|
235
|
+
[
|
|
236
|
+
"type",
|
|
237
|
+
"provenance"
|
|
238
|
+
],
|
|
239
|
+
[
|
|
240
|
+
"e",
|
|
241
|
+
"evt123"
|
|
242
|
+
],
|
|
243
|
+
[
|
|
244
|
+
"summary",
|
|
245
|
+
"Authenticity verified"
|
|
246
|
+
],
|
|
247
|
+
[
|
|
248
|
+
"origin",
|
|
249
|
+
"Sheffield, UK"
|
|
250
|
+
],
|
|
251
|
+
[
|
|
252
|
+
"method",
|
|
253
|
+
"physical-inspection"
|
|
254
|
+
]
|
|
138
255
|
],
|
|
139
256
|
"content": "{\"chain_of_custody\":[\"maker\",\"distributor\",\"retailer\"]}",
|
|
140
257
|
"id": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
@@ -152,14 +269,33 @@
|
|
|
152
269
|
"revoked": false,
|
|
153
270
|
"reason": null,
|
|
154
271
|
"tags": [
|
|
155
|
-
[
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
[
|
|
160
|
-
|
|
272
|
+
[
|
|
273
|
+
"d",
|
|
274
|
+
"provenance:evt123"
|
|
275
|
+
],
|
|
276
|
+
[
|
|
277
|
+
"type",
|
|
278
|
+
"provenance"
|
|
279
|
+
],
|
|
280
|
+
[
|
|
281
|
+
"e",
|
|
282
|
+
"evt123"
|
|
283
|
+
],
|
|
284
|
+
[
|
|
285
|
+
"summary",
|
|
286
|
+
"Authenticity verified"
|
|
287
|
+
],
|
|
288
|
+
[
|
|
289
|
+
"origin",
|
|
290
|
+
"Sheffield, UK"
|
|
291
|
+
],
|
|
292
|
+
[
|
|
293
|
+
"method",
|
|
294
|
+
"physical-inspection"
|
|
295
|
+
]
|
|
161
296
|
],
|
|
162
|
-
"content": "{\"chain_of_custody\":[\"maker\",\"distributor\",\"retailer\"]}"
|
|
297
|
+
"content": "{\"chain_of_custody\":[\"maker\",\"distributor\",\"retailer\"]}",
|
|
298
|
+
"validFrom": null
|
|
163
299
|
},
|
|
164
300
|
"valid": true
|
|
165
301
|
},
|
|
@@ -171,12 +307,30 @@
|
|
|
171
307
|
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
172
308
|
"created_at": 1700000000,
|
|
173
309
|
"tags": [
|
|
174
|
-
[
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
[
|
|
179
|
-
|
|
310
|
+
[
|
|
311
|
+
"d",
|
|
312
|
+
"credential:def456"
|
|
313
|
+
],
|
|
314
|
+
[
|
|
315
|
+
"type",
|
|
316
|
+
"credential"
|
|
317
|
+
],
|
|
318
|
+
[
|
|
319
|
+
"p",
|
|
320
|
+
"def456"
|
|
321
|
+
],
|
|
322
|
+
[
|
|
323
|
+
"status",
|
|
324
|
+
"revoked"
|
|
325
|
+
],
|
|
326
|
+
[
|
|
327
|
+
"reason",
|
|
328
|
+
"license-expired"
|
|
329
|
+
],
|
|
330
|
+
[
|
|
331
|
+
"summary",
|
|
332
|
+
"Credential revoked"
|
|
333
|
+
]
|
|
180
334
|
],
|
|
181
335
|
"content": "",
|
|
182
336
|
"id": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
@@ -194,14 +348,33 @@
|
|
|
194
348
|
"revoked": true,
|
|
195
349
|
"reason": "license-expired",
|
|
196
350
|
"tags": [
|
|
197
|
-
[
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
[
|
|
202
|
-
|
|
351
|
+
[
|
|
352
|
+
"d",
|
|
353
|
+
"credential:def456"
|
|
354
|
+
],
|
|
355
|
+
[
|
|
356
|
+
"type",
|
|
357
|
+
"credential"
|
|
358
|
+
],
|
|
359
|
+
[
|
|
360
|
+
"p",
|
|
361
|
+
"def456"
|
|
362
|
+
],
|
|
363
|
+
[
|
|
364
|
+
"status",
|
|
365
|
+
"revoked"
|
|
366
|
+
],
|
|
367
|
+
[
|
|
368
|
+
"reason",
|
|
369
|
+
"license-expired"
|
|
370
|
+
],
|
|
371
|
+
[
|
|
372
|
+
"summary",
|
|
373
|
+
"Credential revoked"
|
|
374
|
+
]
|
|
203
375
|
],
|
|
204
|
-
"content": ""
|
|
376
|
+
"content": "",
|
|
377
|
+
"validFrom": null
|
|
205
378
|
},
|
|
206
379
|
"valid": true
|
|
207
380
|
},
|
|
@@ -213,12 +386,30 @@
|
|
|
213
386
|
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
214
387
|
"created_at": 1700000000,
|
|
215
388
|
"tags": [
|
|
216
|
-
[
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
[
|
|
221
|
-
|
|
389
|
+
[
|
|
390
|
+
"d",
|
|
391
|
+
"credential:ghi789"
|
|
392
|
+
],
|
|
393
|
+
[
|
|
394
|
+
"type",
|
|
395
|
+
"credential"
|
|
396
|
+
],
|
|
397
|
+
[
|
|
398
|
+
"p",
|
|
399
|
+
"ghi789"
|
|
400
|
+
],
|
|
401
|
+
[
|
|
402
|
+
"status",
|
|
403
|
+
"revoked"
|
|
404
|
+
],
|
|
405
|
+
[
|
|
406
|
+
"reason",
|
|
407
|
+
"compromised"
|
|
408
|
+
],
|
|
409
|
+
[
|
|
410
|
+
"effective",
|
|
411
|
+
"1704067200"
|
|
412
|
+
]
|
|
222
413
|
],
|
|
223
414
|
"content": "",
|
|
224
415
|
"id": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
@@ -236,14 +427,33 @@
|
|
|
236
427
|
"revoked": true,
|
|
237
428
|
"reason": "compromised",
|
|
238
429
|
"tags": [
|
|
239
|
-
[
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
[
|
|
244
|
-
|
|
430
|
+
[
|
|
431
|
+
"d",
|
|
432
|
+
"credential:ghi789"
|
|
433
|
+
],
|
|
434
|
+
[
|
|
435
|
+
"type",
|
|
436
|
+
"credential"
|
|
437
|
+
],
|
|
438
|
+
[
|
|
439
|
+
"p",
|
|
440
|
+
"ghi789"
|
|
441
|
+
],
|
|
442
|
+
[
|
|
443
|
+
"status",
|
|
444
|
+
"revoked"
|
|
445
|
+
],
|
|
446
|
+
[
|
|
447
|
+
"reason",
|
|
448
|
+
"compromised"
|
|
449
|
+
],
|
|
450
|
+
[
|
|
451
|
+
"effective",
|
|
452
|
+
"1704067200"
|
|
453
|
+
]
|
|
245
454
|
],
|
|
246
|
-
"content": ""
|
|
455
|
+
"content": "",
|
|
456
|
+
"validFrom": null
|
|
247
457
|
},
|
|
248
458
|
"valid": true
|
|
249
459
|
},
|
|
@@ -255,10 +465,22 @@
|
|
|
255
465
|
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
256
466
|
"created_at": 1700000000,
|
|
257
467
|
"tags": [
|
|
258
|
-
[
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
468
|
+
[
|
|
469
|
+
"d",
|
|
470
|
+
"vouch:def456"
|
|
471
|
+
],
|
|
472
|
+
[
|
|
473
|
+
"type",
|
|
474
|
+
"vouch"
|
|
475
|
+
],
|
|
476
|
+
[
|
|
477
|
+
"p",
|
|
478
|
+
"def456"
|
|
479
|
+
],
|
|
480
|
+
[
|
|
481
|
+
"expiration",
|
|
482
|
+
"1735689600"
|
|
483
|
+
]
|
|
262
484
|
],
|
|
263
485
|
"content": "",
|
|
264
486
|
"id": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
@@ -276,12 +498,25 @@
|
|
|
276
498
|
"revoked": false,
|
|
277
499
|
"reason": null,
|
|
278
500
|
"tags": [
|
|
279
|
-
[
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
501
|
+
[
|
|
502
|
+
"d",
|
|
503
|
+
"vouch:def456"
|
|
504
|
+
],
|
|
505
|
+
[
|
|
506
|
+
"type",
|
|
507
|
+
"vouch"
|
|
508
|
+
],
|
|
509
|
+
[
|
|
510
|
+
"p",
|
|
511
|
+
"def456"
|
|
512
|
+
],
|
|
513
|
+
[
|
|
514
|
+
"expiration",
|
|
515
|
+
"1735689600"
|
|
516
|
+
]
|
|
283
517
|
],
|
|
284
|
-
"content": ""
|
|
518
|
+
"content": "",
|
|
519
|
+
"validFrom": null
|
|
285
520
|
},
|
|
286
521
|
"valid": true
|
|
287
522
|
},
|
|
@@ -293,11 +528,27 @@
|
|
|
293
528
|
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
294
529
|
"created_at": 1700000000,
|
|
295
530
|
"tags": [
|
|
296
|
-
[
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
[
|
|
531
|
+
[
|
|
532
|
+
"d",
|
|
533
|
+
"credential:def456"
|
|
534
|
+
],
|
|
535
|
+
[
|
|
536
|
+
"type",
|
|
537
|
+
"credential"
|
|
538
|
+
],
|
|
539
|
+
[
|
|
540
|
+
"p",
|
|
541
|
+
"def456"
|
|
542
|
+
],
|
|
543
|
+
[
|
|
544
|
+
"L",
|
|
545
|
+
"example.com/identity"
|
|
546
|
+
],
|
|
547
|
+
[
|
|
548
|
+
"l",
|
|
549
|
+
"verified",
|
|
550
|
+
"example.com/identity"
|
|
551
|
+
]
|
|
301
552
|
],
|
|
302
553
|
"content": "",
|
|
303
554
|
"id": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
@@ -315,13 +566,30 @@
|
|
|
315
566
|
"revoked": false,
|
|
316
567
|
"reason": null,
|
|
317
568
|
"tags": [
|
|
318
|
-
[
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
[
|
|
569
|
+
[
|
|
570
|
+
"d",
|
|
571
|
+
"credential:def456"
|
|
572
|
+
],
|
|
573
|
+
[
|
|
574
|
+
"type",
|
|
575
|
+
"credential"
|
|
576
|
+
],
|
|
577
|
+
[
|
|
578
|
+
"p",
|
|
579
|
+
"def456"
|
|
580
|
+
],
|
|
581
|
+
[
|
|
582
|
+
"L",
|
|
583
|
+
"example.com/identity"
|
|
584
|
+
],
|
|
585
|
+
[
|
|
586
|
+
"l",
|
|
587
|
+
"verified",
|
|
588
|
+
"example.com/identity"
|
|
589
|
+
]
|
|
323
590
|
],
|
|
324
|
-
"content": ""
|
|
591
|
+
"content": "",
|
|
592
|
+
"validFrom": null
|
|
325
593
|
},
|
|
326
594
|
"valid": true
|
|
327
595
|
},
|
|
@@ -333,8 +601,14 @@
|
|
|
333
601
|
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
334
602
|
"created_at": 1700000000,
|
|
335
603
|
"tags": [
|
|
336
|
-
[
|
|
337
|
-
|
|
604
|
+
[
|
|
605
|
+
"d",
|
|
606
|
+
"credential"
|
|
607
|
+
],
|
|
608
|
+
[
|
|
609
|
+
"type",
|
|
610
|
+
"credential"
|
|
611
|
+
]
|
|
338
612
|
],
|
|
339
613
|
"content": "",
|
|
340
614
|
"id": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
@@ -352,10 +626,17 @@
|
|
|
352
626
|
"revoked": false,
|
|
353
627
|
"reason": null,
|
|
354
628
|
"tags": [
|
|
355
|
-
[
|
|
356
|
-
|
|
629
|
+
[
|
|
630
|
+
"d",
|
|
631
|
+
"credential"
|
|
632
|
+
],
|
|
633
|
+
[
|
|
634
|
+
"type",
|
|
635
|
+
"credential"
|
|
636
|
+
]
|
|
357
637
|
],
|
|
358
|
-
"content": ""
|
|
638
|
+
"content": "",
|
|
639
|
+
"validFrom": null
|
|
359
640
|
},
|
|
360
641
|
"valid": true
|
|
361
642
|
},
|
|
@@ -367,9 +648,18 @@
|
|
|
367
648
|
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
368
649
|
"created_at": 1700000000,
|
|
369
650
|
"tags": [
|
|
370
|
-
[
|
|
371
|
-
|
|
372
|
-
|
|
651
|
+
[
|
|
652
|
+
"d",
|
|
653
|
+
"credential:def456"
|
|
654
|
+
],
|
|
655
|
+
[
|
|
656
|
+
"type",
|
|
657
|
+
"credential"
|
|
658
|
+
],
|
|
659
|
+
[
|
|
660
|
+
"p",
|
|
661
|
+
"def456"
|
|
662
|
+
]
|
|
373
663
|
],
|
|
374
664
|
"content": "{\"signatures\":[{\"type\":\"schnorr\",\"value\":\"deadbeef\"}],\"merkle_root\":\"cafebabe\"}",
|
|
375
665
|
"id": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
|
@@ -387,11 +677,21 @@
|
|
|
387
677
|
"revoked": false,
|
|
388
678
|
"reason": null,
|
|
389
679
|
"tags": [
|
|
390
|
-
[
|
|
391
|
-
|
|
392
|
-
|
|
680
|
+
[
|
|
681
|
+
"d",
|
|
682
|
+
"credential:def456"
|
|
683
|
+
],
|
|
684
|
+
[
|
|
685
|
+
"type",
|
|
686
|
+
"credential"
|
|
687
|
+
],
|
|
688
|
+
[
|
|
689
|
+
"p",
|
|
690
|
+
"def456"
|
|
691
|
+
]
|
|
393
692
|
],
|
|
394
|
-
"content": "{\"signatures\":[{\"type\":\"schnorr\",\"value\":\"deadbeef\"}],\"merkle_root\":\"cafebabe\"}"
|
|
693
|
+
"content": "{\"signatures\":[{\"type\":\"schnorr\",\"value\":\"deadbeef\"}],\"merkle_root\":\"cafebabe\"}",
|
|
694
|
+
"validFrom": null
|
|
395
695
|
},
|
|
396
696
|
"valid": true
|
|
397
697
|
}
|