@xfuel/verify 0.3.0 → 0.3.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 +22 -11
- package/dist/anchor-witness.d.ts +20 -3
- package/dist/anchor-witness.d.ts.map +1 -1
- package/dist/anchor-witness.js +80 -14
- package/dist/anchor-witness.js.map +1 -1
- package/dist/cli.js +171 -11
- package/dist/cli.js.map +1 -1
- package/dist/epoch.d.ts +109 -0
- package/dist/epoch.d.ts.map +1 -0
- package/dist/epoch.js +209 -0
- package/dist/epoch.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +58 -23
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -31,9 +31,14 @@ console.log(fullResult.receipt_lane.freeze); // unsigned; does not change overal
|
|
|
31
31
|
### CLI
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
# Local binding verification
|
|
34
|
+
# Local binding verification.
|
|
35
|
+
# Issuer history is fetched unless you pass --issuer-history-file or --no-issuer-history.
|
|
36
|
+
# A payload v10 receipt fails offline (exit 1) when that fetch cannot run.
|
|
35
37
|
npx xfuel-verify receipt.json
|
|
36
38
|
|
|
39
|
+
# Explicit offline. --no-issuer-history skips the kid window.
|
|
40
|
+
npx xfuel-verify receipt.json --no-issuer-history
|
|
41
|
+
|
|
37
42
|
# Hash the canonical object (must match signed payload_hash) and read not_after
|
|
38
43
|
# from a pinned issuer-history snapshot. Both flags are offline.
|
|
39
44
|
npx xfuel-verify receipt.json --canonical-preimage preimage.json --issuer-history-file issuer-history.json
|
|
@@ -67,7 +72,7 @@ npx xfuel-verify receipt.json inclusion.json head.json --rpc
|
|
|
67
72
|
| Nullifier anchor | Yes | Query ZKVerifierSP1 contract |
|
|
68
73
|
| Anchored receipt root | Yes, with `--rpc` | Inclusion proof, then Solana memo and Base calldata for that root |
|
|
69
74
|
| Canonical preimage | No | SHA-256 of `--canonical-preimage`, or the stored canonical object, matches signed `payload_hash` |
|
|
70
|
-
| Issuer history |
|
|
75
|
+
| Issuer history | Yes, unless `--no-issuer-history` or `--issuer-history-file` | `iat` is inside the kid's `not_before` / `not_after`. A payload v10 pin must match the snapshot hash. Offline v10 fails if the fetch cannot run |
|
|
71
76
|
|
|
72
77
|
## Issuer Signature Verification (ES256)
|
|
73
78
|
|
|
@@ -81,20 +86,26 @@ counts only when the verifying key is trusted:
|
|
|
81
86
|
production kid `IvFpmC-vPhkY_v0vidsrWVT9uzlE5XWKZgAEOeJTq1Q`. Override with
|
|
82
87
|
`--trusted-kid`, or disable with `--no-trusted-kid`.
|
|
83
88
|
|
|
89
|
+
The epoch record checked by `xfuel-verify receipt.json inclusion.json head.json --rpc` uses those same sources. An embedded epoch key still has to match the trusted-kid pin.
|
|
90
|
+
|
|
84
91
|
`issuer_jwk` on the receipt is not a trust root. A copy re-signed with an
|
|
85
92
|
arbitrary P-256 key reports `key untrusted` (`issuer_signature.valid === false`),
|
|
86
93
|
including when `--jwks-file` points at the real JWKS.
|
|
87
94
|
|
|
88
95
|
```bash
|
|
89
|
-
#
|
|
90
|
-
npx xfuel-verify receipt.json
|
|
91
|
-
|
|
92
|
-
# Recompute published
|
|
93
|
-
#
|
|
94
|
-
|
|
95
|
-
curl -
|
|
96
|
-
curl -
|
|
97
|
-
|
|
96
|
+
# Explicit offline. The default command fetches issuer history.
|
|
97
|
+
npx xfuel-verify receipt.json --no-issuer-history
|
|
98
|
+
|
|
99
|
+
# Recompute a published canonical preimage and check the kid window.
|
|
100
|
+
# curl -f stops on HTTP errors. Most receipts have no /preimage (a 404).
|
|
101
|
+
# A missing preimage is not a verification failure: omit --canonical-preimage.
|
|
102
|
+
curl -fsS "https://api.chit402.com/receipt/RECEIPT_ID?format=json" -o receipt.json
|
|
103
|
+
curl -fsS "https://api.chit402.com/.well-known/issuer-history.json?version=1" -o issuer-history.json
|
|
104
|
+
if curl -fsS "https://api.chit402.com/receipt/RECEIPT_ID/preimage" -o preimage.json; then
|
|
105
|
+
npx xfuel-verify receipt.json --canonical-preimage preimage.json --issuer-history-file issuer-history.json
|
|
106
|
+
else
|
|
107
|
+
npx xfuel-verify receipt.json --issuer-history-file issuer-history.json
|
|
108
|
+
fi
|
|
98
109
|
|
|
99
110
|
# Trust the published JWKS instead of (or in addition to) the pin
|
|
100
111
|
curl -o issuer-jwks.json https://api.chit402.com/.well-known/jwks.json
|
package/dist/anchor-witness.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
import { type EpochRecord } from './epoch.js';
|
|
1
2
|
export declare const MEMO_PROGRAM_ID = "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr";
|
|
2
3
|
export declare const MEMO_PROGRAM_ID_V1 = "Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo";
|
|
3
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Full `getGenesisHash` values. CAIP-2 references keep only the first 32
|
|
6
|
+
* characters, and `getGenesisHash` returns the whole base58 hash. A prefix
|
|
7
|
+
* compare never matches mainnet-beta.
|
|
8
|
+
*/
|
|
4
9
|
export declare const SOLANA_GENESIS: Record<string, string>;
|
|
5
10
|
export declare const BASE_MAINNET_CHAIN_ID = 8453;
|
|
6
11
|
export declare const ANCHOR_PROVES: string[];
|
|
@@ -28,6 +33,9 @@ export interface AnchorInclusion {
|
|
|
28
33
|
export interface AnchorHead {
|
|
29
34
|
root: string;
|
|
30
35
|
tree_size?: number;
|
|
36
|
+
epoch?: number | null;
|
|
37
|
+
prev_epoch_root?: string | null;
|
|
38
|
+
prev_epoch_size?: number | null;
|
|
31
39
|
anchor_tx?: string | null;
|
|
32
40
|
anchor?: {
|
|
33
41
|
tx?: string | null;
|
|
@@ -111,12 +119,19 @@ export declare function leafHash(bytes: Uint8Array): Buffer;
|
|
|
111
119
|
export declare function normalizeRoot(root: string | null | undefined): string | null;
|
|
112
120
|
/** RFC 6962-style inclusion. Same rule as the gateway tree. */
|
|
113
121
|
export declare function verifyMerkleInclusion(leaf: Buffer, index: number, treeSize: number, rootHex: string, proof: InclusionStep[]): boolean;
|
|
114
|
-
export
|
|
122
|
+
export interface ParsedAnchorMemo {
|
|
123
|
+
version?: 1 | 2;
|
|
115
124
|
scope: string;
|
|
116
125
|
day: string;
|
|
117
126
|
root: string;
|
|
118
127
|
prev: string;
|
|
119
|
-
|
|
128
|
+
epoch?: number;
|
|
129
|
+
prev_epoch_root?: string;
|
|
130
|
+
prev_epoch_size?: number;
|
|
131
|
+
bundle_index_hash?: string;
|
|
132
|
+
}
|
|
133
|
+
/** v1 memos stay valid. v2 adds epoch, prev_epoch_root, prev_epoch_size, and the bundle index hash. */
|
|
134
|
+
export declare function parseAnchorMemo(memo: string): ParsedAnchorMemo | null;
|
|
120
135
|
export declare function extractMemos(tx: SolanaAnchorTx | null | undefined): string[];
|
|
121
136
|
export declare function fetchSolanaGenesisHash(rpcUrl: string): Promise<string>;
|
|
122
137
|
export declare function fetchBaseAnchorTransaction(txHash: string, rpcUrl: string): Promise<BaseAnchorTx | null>;
|
|
@@ -129,6 +144,8 @@ export interface VerifyAnchoredRootInput {
|
|
|
129
144
|
fetchSolanaTx?: (signature: string, rpcUrl: string) => Promise<SolanaAnchorTx | null>;
|
|
130
145
|
fetchGenesis?: (rpcUrl: string) => Promise<string>;
|
|
131
146
|
fetchBaseTx?: (txHash: string, rpcUrl: string) => Promise<BaseAnchorTx | null>;
|
|
147
|
+
epochRecord?: EpochRecord | null;
|
|
148
|
+
verifyEpochSignature?: (jws: string) => boolean;
|
|
132
149
|
}
|
|
133
150
|
/**
|
|
134
151
|
* Verify inclusion, then the Solana memo and the Base calldata for that root.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anchor-witness.d.ts","sourceRoot":"","sources":["../src/anchor-witness.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"anchor-witness.d.ts","sourceRoot":"","sources":["../src/anchor-witness.ts"],"names":[],"mappings":"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"}
|
package/dist/anchor-witness.js
CHANGED
|
@@ -19,12 +19,17 @@ exports.verifyAnchoredRoot = verifyAnchoredRoot;
|
|
|
19
19
|
*/
|
|
20
20
|
const node_crypto_1 = require("node:crypto");
|
|
21
21
|
const base_payer_js_1 = require("./base-payer.js");
|
|
22
|
+
const epoch_js_1 = require("./epoch.js");
|
|
22
23
|
const solana_payer_js_1 = require("./solana-payer.js");
|
|
23
24
|
exports.MEMO_PROGRAM_ID = 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr';
|
|
24
25
|
exports.MEMO_PROGRAM_ID_V1 = 'Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo';
|
|
25
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* Full `getGenesisHash` values. CAIP-2 references keep only the first 32
|
|
28
|
+
* characters, and `getGenesisHash` returns the whole base58 hash. A prefix
|
|
29
|
+
* compare never matches mainnet-beta.
|
|
30
|
+
*/
|
|
26
31
|
exports.SOLANA_GENESIS = {
|
|
27
|
-
'mainnet-beta': '
|
|
32
|
+
'mainnet-beta': '5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d',
|
|
28
33
|
devnet: 'EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG',
|
|
29
34
|
testnet: '4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsNY',
|
|
30
35
|
};
|
|
@@ -67,16 +72,7 @@ function verifyMerkleInclusion(leaf, index, treeSize, rootHex, proof) {
|
|
|
67
72
|
}
|
|
68
73
|
return Buffer.from(hash).toString('hex') === String(rootHex).replace(/^0x/, '').toLowerCase();
|
|
69
74
|
}
|
|
70
|
-
function
|
|
71
|
-
const parts = String(memo || '').split(':');
|
|
72
|
-
if (parts.length !== 7)
|
|
73
|
-
return null;
|
|
74
|
-
if (parts[0] !== 'chit402' || parts[1] !== 'root' || parts[2] !== 'v1')
|
|
75
|
-
return null;
|
|
76
|
-
const scope = parts[3];
|
|
77
|
-
const day = parts[4];
|
|
78
|
-
const root = parts[5];
|
|
79
|
-
const prev = parts[6];
|
|
75
|
+
function memoIdentity(scope, day, root, prev) {
|
|
80
76
|
if (!/^[A-Za-z0-9_-]{1,64}$/.test(scope))
|
|
81
77
|
return null;
|
|
82
78
|
if (!/^\d{4}-\d{2}-\d{2}$/.test(day))
|
|
@@ -85,6 +81,40 @@ function parseAnchorMemo(memo) {
|
|
|
85
81
|
return null;
|
|
86
82
|
return { scope, day, root, prev };
|
|
87
83
|
}
|
|
84
|
+
/** v1 memos stay valid. v2 adds epoch, prev_epoch_root, prev_epoch_size, and the bundle index hash. */
|
|
85
|
+
function parseAnchorMemo(memo) {
|
|
86
|
+
const parts = String(memo || '').split(':');
|
|
87
|
+
if (parts[0] !== 'chit402' || parts[1] !== 'root')
|
|
88
|
+
return null;
|
|
89
|
+
if (parts.length === 7 && parts[2] === 'v1') {
|
|
90
|
+
const base = memoIdentity(parts[3], parts[4], parts[5], parts[6]);
|
|
91
|
+
return base ? { version: 1, ...base } : null;
|
|
92
|
+
}
|
|
93
|
+
if (parts.length === 11 && parts[2] === 'v2') {
|
|
94
|
+
const base = memoIdentity(parts[3], parts[4], parts[5], parts[6]);
|
|
95
|
+
if (!base)
|
|
96
|
+
return null;
|
|
97
|
+
const epoch = Number(parts[7]);
|
|
98
|
+
const prevEpoch = parts[8];
|
|
99
|
+
const size = Number(parts[9]);
|
|
100
|
+
const bundle = parts[10];
|
|
101
|
+
if (!Number.isInteger(epoch) || epoch < 1)
|
|
102
|
+
return null;
|
|
103
|
+
if (!/^[0-9a-f]{64}$/.test(prevEpoch) || !/^[0-9a-f]{64}$/.test(bundle))
|
|
104
|
+
return null;
|
|
105
|
+
if (!Number.isInteger(size) || size < 0)
|
|
106
|
+
return null;
|
|
107
|
+
return {
|
|
108
|
+
version: 2,
|
|
109
|
+
...base,
|
|
110
|
+
epoch,
|
|
111
|
+
prev_epoch_root: prevEpoch,
|
|
112
|
+
prev_epoch_size: size,
|
|
113
|
+
bundle_index_hash: bundle,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
88
118
|
function isMemoIx(ix) {
|
|
89
119
|
const program = ix.program || '';
|
|
90
120
|
const programId = ix.programId || '';
|
|
@@ -187,7 +217,11 @@ async function verifyAnchoredRoot(input) {
|
|
|
187
217
|
let inclusionValid = false;
|
|
188
218
|
let inclusionReason;
|
|
189
219
|
const taskId = input.receipt?.task_id ? String(input.receipt.task_id) : '';
|
|
190
|
-
|
|
220
|
+
const inclusionError = input.inclusion?.error;
|
|
221
|
+
if (inclusionError === 'not_in_tree') {
|
|
222
|
+
inclusionReason = 'not_in_tree';
|
|
223
|
+
}
|
|
224
|
+
else if (!taskId) {
|
|
191
225
|
inclusionReason = 'missing_task_id';
|
|
192
226
|
}
|
|
193
227
|
else if (input.inclusion?.task_id && String(input.inclusion.task_id) !== taskId) {
|
|
@@ -230,6 +264,38 @@ async function verifyAnchoredRoot(input) {
|
|
|
230
264
|
}
|
|
231
265
|
if (!inclusionValid && inclusionReason)
|
|
232
266
|
errors.push(inclusionReason);
|
|
267
|
+
let epochReason;
|
|
268
|
+
if (input.head?.epoch == null) {
|
|
269
|
+
const link = (0, epoch_js_1.verifyEpochLink)(input.head, null);
|
|
270
|
+
if (!link.ok)
|
|
271
|
+
epochReason = link.reason || 'epoch_missing';
|
|
272
|
+
}
|
|
273
|
+
const needsEpoch = input.head?.epoch != null || input.epochRecord != null;
|
|
274
|
+
if (!epochReason && needsEpoch) {
|
|
275
|
+
if (!input.epochRecord)
|
|
276
|
+
epochReason = 'epoch_record_missing';
|
|
277
|
+
else {
|
|
278
|
+
const checked = (0, epoch_js_1.verifyEpochRecord)(input.epochRecord, { verifySignature: input.verifyEpochSignature });
|
|
279
|
+
if (!checked.ok)
|
|
280
|
+
epochReason = checked.reason || 'epoch_record';
|
|
281
|
+
else if (input.head?.epoch != null && Number(input.head.epoch) > 1) {
|
|
282
|
+
const prev = (input.epochRecord.epochs || []).find((row) => Number(row.epoch) === Number(input.head.epoch) - 1);
|
|
283
|
+
const link = (0, epoch_js_1.verifyEpochLink)(input.head, prev ? {
|
|
284
|
+
root: prev.final_root || prev.opening_root || null,
|
|
285
|
+
tree_size: prev.final_size ?? prev.opening_size ?? null,
|
|
286
|
+
} : null);
|
|
287
|
+
if (!link.ok)
|
|
288
|
+
epochReason = link.reason || 'epoch_link';
|
|
289
|
+
}
|
|
290
|
+
else if (input.head) {
|
|
291
|
+
const link = (0, epoch_js_1.verifyEpochLink)(input.head, null);
|
|
292
|
+
if (!link.ok)
|
|
293
|
+
epochReason = link.reason || 'epoch_link';
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
if (epochReason)
|
|
298
|
+
errors.push(epochReason);
|
|
233
299
|
const solanaRpc = input.solanaRpcUrl || process.env.SOLANA_RPC_URL || solana_payer_js_1.SOLANA_RPC_URL;
|
|
234
300
|
const baseRpc = input.baseRpcUrl || base_payer_js_1.BASE_RPC_URL;
|
|
235
301
|
const signature = root && inclusionValid ? solanaSignature(input.head) : null;
|
|
@@ -345,7 +411,7 @@ async function verifyAnchoredRoot(input) {
|
|
|
345
411
|
}
|
|
346
412
|
}
|
|
347
413
|
let overall;
|
|
348
|
-
if (!inclusionValid || (solana.checked && !solana.valid) || (base.checked && !base.valid))
|
|
414
|
+
if (!inclusionValid || epochReason || (solana.checked && !solana.valid) || (base.checked && !base.valid))
|
|
349
415
|
overall = 'failed';
|
|
350
416
|
else if (solana.valid && base.valid)
|
|
351
417
|
overall = 'verified';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anchor-witness.js","sourceRoot":"","sources":["../src/anchor-witness.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"anchor-witness.js","sourceRoot":"","sources":["../src/anchor-witness.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -20,6 +20,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
20
20
|
const node_fs_1 = require("node:fs");
|
|
21
21
|
const index_js_1 = require("./index.js");
|
|
22
22
|
const anchor_witness_js_1 = require("./anchor-witness.js");
|
|
23
|
+
const jws_js_1 = require("./jws.js");
|
|
23
24
|
const preimage_js_1 = require("./preimage.js");
|
|
24
25
|
const issuer_history_js_1 = require("./issuer-history.js");
|
|
25
26
|
const canonical_preimage_js_1 = require("./canonical-preimage.js");
|
|
@@ -52,9 +53,13 @@ Options:
|
|
|
52
53
|
--solana-rpc <url> Solana RPC URL (default: https://api.mainnet-beta.solana.com or SOLANA_RPC_URL)
|
|
53
54
|
--rpc <url> Base RPC URL (default: https://mainnet.base.org)
|
|
54
55
|
--rpc With a receipt, an inclusion proof, and a tree head: check the
|
|
55
|
-
leaf, then the Solana memo and the Base calldata for that root
|
|
56
|
+
leaf, then the Solana memo and the Base calldata for that root.
|
|
57
|
+
A v2 head also needs the signed epoch record.
|
|
58
|
+
--epoch-record <f> Signed epoch record JSON. Skips the network fetch.
|
|
59
|
+
--epoch-url <url> GET this epoch record. Default: the receipt verify_url
|
|
60
|
+
origin plus /v1/receipts/tree/epoch
|
|
56
61
|
--inclusion <file> Inclusion proof JSON (chit402.inclusion.v1)
|
|
57
|
-
--head <file> Signed tree head JSON (chit402.tree_head.v1)
|
|
62
|
+
--head <file> Signed tree head JSON (chit402.tree_head.v1 or v2)
|
|
58
63
|
--json Output JSON instead of human-readable
|
|
59
64
|
--quiet Only output errors
|
|
60
65
|
--strict-issuer-history
|
|
@@ -82,11 +87,17 @@ Trust:
|
|
|
82
87
|
with the unsigned outer payment / caller_binding copy is a failure.
|
|
83
88
|
|
|
84
89
|
Network behavior:
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
- --
|
|
88
|
-
|
|
89
|
-
-
|
|
90
|
+
JWKS, nullifiers, and anchors are not fetched unless you pass a flag.
|
|
91
|
+
Issuer history is fetched by default when the receipt names a history URL
|
|
92
|
+
and neither --issuer-history-file nor --no-issuer-history is set. A payload
|
|
93
|
+
v10 receipt fails (exit 1) when that fetch cannot run. Offline mode is
|
|
94
|
+
--issuer-history-file <snapshot>, or --no-issuer-history to skip the window.
|
|
95
|
+
Other network uses:
|
|
96
|
+
- --fetch-jwks or --jwks-url
|
|
97
|
+
- --check-nullifier (Base RPC)
|
|
98
|
+
- --check-payer (Base or Solana RPC)
|
|
99
|
+
- --rpc with a receipt, an inclusion proof, and a tree head
|
|
100
|
+
- a v2 head, which fetches GET /v1/receipts/tree/epoch unless --epoch-record
|
|
90
101
|
|
|
91
102
|
Solana payer verify uses SOLANA_RPC_URL when set, else the public mainnet RPC.
|
|
92
103
|
|
|
@@ -116,8 +127,8 @@ Receipt lane (unsigned, beside book_seq):
|
|
|
116
127
|
88201, 88403, and 88596).
|
|
117
128
|
|
|
118
129
|
Examples:
|
|
119
|
-
#
|
|
120
|
-
xfuel-verify my-receipt.json
|
|
130
|
+
# Skip the issuer-history fetch. A v10 receipt otherwise needs that network call.
|
|
131
|
+
xfuel-verify my-receipt.json --no-issuer-history
|
|
121
132
|
|
|
122
133
|
# Verify issuer signature with JWKS file
|
|
123
134
|
xfuel-verify my-receipt.json --jwks-file issuer-jwks.json
|
|
@@ -144,6 +155,8 @@ function parseArgs(args) {
|
|
|
144
155
|
anchorFlag: false,
|
|
145
156
|
inclusionFile: null,
|
|
146
157
|
headFile: null,
|
|
158
|
+
epochRecordFile: null,
|
|
159
|
+
epochUrl: null,
|
|
147
160
|
positionals: [],
|
|
148
161
|
json: false,
|
|
149
162
|
quiet: false,
|
|
@@ -195,6 +208,12 @@ function parseArgs(args) {
|
|
|
195
208
|
else if (arg === '--head' && args[i + 1]) {
|
|
196
209
|
result.headFile = args[++i];
|
|
197
210
|
}
|
|
211
|
+
else if (arg === '--epoch-record' && args[i + 1]) {
|
|
212
|
+
result.epochRecordFile = args[++i];
|
|
213
|
+
}
|
|
214
|
+
else if (arg === '--epoch-url' && args[i + 1]) {
|
|
215
|
+
result.epochUrl = args[++i];
|
|
216
|
+
}
|
|
198
217
|
else if (arg === '--solana-rpc' && args[i + 1]) {
|
|
199
218
|
result.solanaRpcUrl = args[++i];
|
|
200
219
|
}
|
|
@@ -250,6 +269,15 @@ function readJson(file) {
|
|
|
250
269
|
const content = file === '-' ? (0, node_fs_1.readFileSync)(0, 'utf8') : (0, node_fs_1.readFileSync)(file, 'utf8');
|
|
251
270
|
return JSON.parse(content);
|
|
252
271
|
}
|
|
272
|
+
function headStatus(file) {
|
|
273
|
+
try {
|
|
274
|
+
const doc = readJson(file);
|
|
275
|
+
return typeof doc?.status === 'string' ? doc.status : null;
|
|
276
|
+
}
|
|
277
|
+
catch {
|
|
278
|
+
return null;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
253
281
|
function printLane(lane) {
|
|
254
282
|
const bit = (value) => (value == null ? 'unknown' : (value ? 'true' : 'false'));
|
|
255
283
|
console.log(` Receipt lane (unsigned)`);
|
|
@@ -318,11 +346,77 @@ function printAnchor(result, json, quiet) {
|
|
|
318
346
|
console.log(` Errors: ${result.errors.join(', ')}`);
|
|
319
347
|
console.log('');
|
|
320
348
|
}
|
|
349
|
+
function headNeedsEpochRecord(head) {
|
|
350
|
+
const schema = head.schema;
|
|
351
|
+
const version = head.payload_version;
|
|
352
|
+
return head.epoch != null || schema === 'chit402.tree_head.v2' || version === 2;
|
|
353
|
+
}
|
|
354
|
+
function epochUrlFromReceipt(receipt) {
|
|
355
|
+
const raw = receipt?.verify_url;
|
|
356
|
+
if (!raw)
|
|
357
|
+
return null;
|
|
358
|
+
try {
|
|
359
|
+
return `${new URL(raw).origin}/v1/receipts/tree/epoch`;
|
|
360
|
+
}
|
|
361
|
+
catch {
|
|
362
|
+
return null;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
async function loadEpochRecord(args, receipt) {
|
|
366
|
+
if (args.epochRecordFile) {
|
|
367
|
+
return JSON.parse((0, node_fs_1.readFileSync)(args.epochRecordFile, 'utf8'));
|
|
368
|
+
}
|
|
369
|
+
const url = args.epochUrl || epochUrlFromReceipt(receipt);
|
|
370
|
+
if (!url)
|
|
371
|
+
return null;
|
|
372
|
+
const res = await fetch(url);
|
|
373
|
+
if (!res.ok)
|
|
374
|
+
return null;
|
|
375
|
+
const body = await res.json();
|
|
376
|
+
if (!body?.issuer_signature?.jws)
|
|
377
|
+
return null;
|
|
378
|
+
return body;
|
|
379
|
+
}
|
|
380
|
+
function epochSignatureOk(record, jws, jwks, trustedKids) {
|
|
381
|
+
const sig = record.issuer_signature;
|
|
382
|
+
const embedded = sig && 'issuer_jwk' in sig
|
|
383
|
+
? sig.issuer_jwk
|
|
384
|
+
: undefined;
|
|
385
|
+
const kid = (0, jws_js_1.readJwsHeader)(jws)?.kid;
|
|
386
|
+
const keys = [];
|
|
387
|
+
for (const key of jwks?.keys || []) {
|
|
388
|
+
if (!key || key.kty !== 'EC')
|
|
389
|
+
continue;
|
|
390
|
+
const jwk = key;
|
|
391
|
+
if (kid && jwk.kid !== kid)
|
|
392
|
+
continue;
|
|
393
|
+
keys.push(jwk);
|
|
394
|
+
}
|
|
395
|
+
if (embedded && trustedKids?.includes((0, jws_js_1.jwkThumbprint)(embedded)))
|
|
396
|
+
keys.push(embedded);
|
|
397
|
+
for (const key of keys) {
|
|
398
|
+
const verified = (0, jws_js_1.verifyIssuerJws)(jws, key);
|
|
399
|
+
if (!verified.valid || !verified.payload)
|
|
400
|
+
continue;
|
|
401
|
+
const payload = verified.payload;
|
|
402
|
+
if (JSON.stringify(payload.epochs ?? null) !== JSON.stringify(record.epochs ?? null))
|
|
403
|
+
return false;
|
|
404
|
+
if (JSON.stringify(payload.orphans ?? []) !== JSON.stringify(record.orphans ?? []))
|
|
405
|
+
return false;
|
|
406
|
+
return true;
|
|
407
|
+
}
|
|
408
|
+
return false;
|
|
409
|
+
}
|
|
321
410
|
async function runAnchor(args) {
|
|
322
411
|
const receiptPath = args.file;
|
|
323
412
|
const inclusionPath = args.inclusionFile || args.positionals[1] || null;
|
|
324
413
|
const headPath = args.headFile || (args.inclusionFile ? null : args.positionals[2]) || null;
|
|
325
414
|
if (!receiptPath || !inclusionPath || !headPath) {
|
|
415
|
+
const candidates = [args.headFile, headPath, ...args.positionals];
|
|
416
|
+
if (candidates.some((file) => file && headStatus(file) === 'not_yet_published')) {
|
|
417
|
+
console.error('Tree head is not_yet_published.');
|
|
418
|
+
return 3;
|
|
419
|
+
}
|
|
326
420
|
console.error('Anchor check needs a receipt, an inclusion proof, and a tree head.');
|
|
327
421
|
console.error(' xfuel-verify receipt.json inclusion.json head.json --rpc');
|
|
328
422
|
return 3;
|
|
@@ -339,12 +433,45 @@ async function runAnchor(args) {
|
|
|
339
433
|
console.error(`Error reading anchor inputs: ${err instanceof Error ? err.message : String(err)}`);
|
|
340
434
|
return 3;
|
|
341
435
|
}
|
|
436
|
+
let epochRecord = null;
|
|
437
|
+
let verifyEpochSignature;
|
|
438
|
+
if (headNeedsEpochRecord(head)) {
|
|
439
|
+
try {
|
|
440
|
+
epochRecord = await loadEpochRecord(args, receipt);
|
|
441
|
+
}
|
|
442
|
+
catch {
|
|
443
|
+
epochRecord = null;
|
|
444
|
+
}
|
|
445
|
+
if (epochRecord?.issuer_signature?.jws) {
|
|
446
|
+
let fileJwks;
|
|
447
|
+
if (args.jwksFile) {
|
|
448
|
+
try {
|
|
449
|
+
fileJwks = JSON.parse((0, node_fs_1.readFileSync)(args.jwksFile, 'utf8'));
|
|
450
|
+
}
|
|
451
|
+
catch (err) {
|
|
452
|
+
console.error(`Error reading JWKS file: ${err instanceof Error ? err.message : String(err)}`);
|
|
453
|
+
return 3;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
const loaded = await (0, index_js_1.loadIssuerJwks)(receipt, {
|
|
457
|
+
jwks: fileJwks,
|
|
458
|
+
jwksUri: args.jwksUrl || undefined,
|
|
459
|
+
fetchJwks: args.fetchJwks,
|
|
460
|
+
});
|
|
461
|
+
const trustedKids = args.noTrustedKid
|
|
462
|
+
? []
|
|
463
|
+
: (args.trustedKids ?? [...index_js_1.DEFAULT_TRUSTED_ISSUER_KIDS]);
|
|
464
|
+
verifyEpochSignature = (jws) => epochSignatureOk(epochRecord, jws, loaded.jwks, trustedKids);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
342
467
|
const result = await (0, anchor_witness_js_1.verifyAnchoredRoot)({
|
|
343
468
|
receipt,
|
|
344
469
|
inclusion,
|
|
345
470
|
head,
|
|
346
471
|
baseRpcUrl: args.rpcUrl || undefined,
|
|
347
472
|
solanaRpcUrl: args.solanaRpcUrl || undefined,
|
|
473
|
+
epochRecord,
|
|
474
|
+
verifyEpochSignature,
|
|
348
475
|
});
|
|
349
476
|
const verified = await (0, index_js_1.verifyReceipt)(receipt, { head });
|
|
350
477
|
const lane = verified.receipt_lane;
|
|
@@ -661,10 +788,43 @@ async function main() {
|
|
|
661
788
|
return 1;
|
|
662
789
|
}
|
|
663
790
|
}
|
|
791
|
+
/**
|
|
792
|
+
* Node's fetch keeps its undici agent on this symbol after the first request.
|
|
793
|
+
* There is no public handle for that pool. Closing it lets the loop drain.
|
|
794
|
+
*/
|
|
795
|
+
const UNDICI_GLOBAL_DISPATCHER = Symbol.for('undici.globalDispatcher.1');
|
|
796
|
+
function fetchDispatcher() {
|
|
797
|
+
const bag = globalThis;
|
|
798
|
+
return bag[UNDICI_GLOBAL_DISPATCHER];
|
|
799
|
+
}
|
|
800
|
+
/**
|
|
801
|
+
* process.exit() while a fetch keep-alive socket is already CLOSING aborts
|
|
802
|
+
* on Windows: Assertion failed: !(handle->flags & UV_HANDLE_CLOSING)
|
|
803
|
+
* (src/win/async.c). Set the code and close the pool so the loop can drain.
|
|
804
|
+
*/
|
|
805
|
+
async function finish(code) {
|
|
806
|
+
process.exitCode = code;
|
|
807
|
+
const dispatcher = fetchDispatcher();
|
|
808
|
+
if (!dispatcher)
|
|
809
|
+
return;
|
|
810
|
+
try {
|
|
811
|
+
const closing = dispatcher.close?.();
|
|
812
|
+
if (closing)
|
|
813
|
+
await closing;
|
|
814
|
+
}
|
|
815
|
+
catch {
|
|
816
|
+
try {
|
|
817
|
+
await dispatcher.destroy?.();
|
|
818
|
+
}
|
|
819
|
+
catch {
|
|
820
|
+
// The verification result is already the exit code.
|
|
821
|
+
}
|
|
822
|
+
}
|
|
823
|
+
}
|
|
664
824
|
main()
|
|
665
|
-
.then((code) =>
|
|
825
|
+
.then((code) => finish(code))
|
|
666
826
|
.catch((err) => {
|
|
667
827
|
console.error('Unexpected error:', err);
|
|
668
|
-
|
|
828
|
+
return finish(3);
|
|
669
829
|
});
|
|
670
830
|
//# sourceMappingURL=cli.js.map
|