@clearproof/content 0.5.0
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/content/explainers/pilot-proof-public-signals.md +80 -0
- package/content/explainers/portable-evidence-review.md +103 -0
- package/content/explainers/usd-cents-without-a-price-feed.md +106 -0
- package/content/explainers/verify-independently.md +106 -0
- package/content/explainers/what-clearproof-does.md +92 -0
- package/content/explainers/who-verifies-what.md +86 -0
- package/content/recipes/deploy-contracts.md +45 -0
- package/content/recipes/full-walkthrough.md +84 -0
- package/content/recipes/generate-proof.md +43 -0
- package/content/recipes/update-sanctions.md +35 -0
- package/content/recipes/verify-onchain.md +41 -0
- package/content/recipes/verify-proof.md +36 -0
- package/content/signals.yaml +128 -0
- package/content/topics/api.md +61 -0
- package/content/topics/architecture.md +50 -0
- package/content/topics/circuits.md +66 -0
- package/content/topics/contracts.md +60 -0
- package/content/topics/gdpr.md +36 -0
- package/content/topics/quickstart.md +77 -0
- package/content/topics/sdk.md +56 -0
- package/content/topics/security.md +33 -0
- package/content/topics/troubleshooting.md +109 -0
- package/content/updates/2026-09-09-adoption-roadmap.md +27 -0
- package/content/updates/2026-09-12-full-walkthrough.md +31 -0
- package/content/updates/2026-09-12-npm-status.md +27 -0
- package/content/updates/2026-09-12-proof-boundaries.md +40 -0
- package/content/updates/2026-09-21-sanctions-schedule.md +43 -0
- package/content/updates/2026-09-25-pilot-transfer-v3.md +60 -0
- package/dist/explainers.d.ts +29 -0
- package/dist/explainers.d.ts.map +1 -0
- package/dist/explainers.js +71 -0
- package/dist/explainers.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/parser.d.ts +25 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +97 -0
- package/dist/parser.js.map +1 -0
- package/dist/recipes.d.ts +28 -0
- package/dist/recipes.d.ts.map +1 -0
- package/dist/recipes.js +103 -0
- package/dist/recipes.js.map +1 -0
- package/dist/signals.d.ts +18 -0
- package/dist/signals.d.ts.map +1 -0
- package/dist/signals.js +34 -0
- package/dist/signals.js.map +1 -0
- package/dist/topics.d.ts +18 -0
- package/dist/topics.d.ts.map +1 -0
- package/dist/topics.js +41 -0
- package/dist/topics.js.map +1 -0
- package/dist/updates.d.ts +27 -0
- package/dist/updates.d.ts.map +1 -0
- package/dist/updates.js +69 -0
- package/dist/updates.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Quick Start
|
|
3
|
+
category: getting-started
|
|
4
|
+
order: 1
|
|
5
|
+
cli-topic: quickstart
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Quick Start
|
|
9
|
+
|
|
10
|
+
This is a development setup guide, checked September 25, 2026. Use synthetic data and testnet funds. There is no guaranteed setup or proving time.
|
|
11
|
+
|
|
12
|
+
## Public package access
|
|
13
|
+
|
|
14
|
+
The [main source repository](https://github.com/repfigit/clearproof) is public. Public npm packages are available at version 0.3.0:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install @clearproof/proof@0.3.0
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Proof generation requires compatible circuit WASM and proving-key files. Verification requires the matching verification key. Inspect package contents before relying on exported artifact paths; installing the SDK alone does not create a complete proving environment.
|
|
21
|
+
|
|
22
|
+
The 0.3.0 packages predate the pilot and cover the legacy 16-signal profile only. The source checkout (0.4.0, unpublished) contains the pilot. Do not assume they are the same.
|
|
23
|
+
|
|
24
|
+
The published CLI currently cannot be installed from the public registry because its `@clearproof/content` dependency is unavailable. The standalone proof SDK installation was verified. Use a source checkout for CLI evaluation. The source setup below was verified from a clean clone of `main` on September 15, 2026 at commit `1c8d385` (locked workspace install, workspace build, built-CLI `--help`, Python sync and the Python unit suite); it covers the documented commands, not the circuit compilation path shown later, which additionally requires circom and Powers of Tau inputs.
|
|
25
|
+
|
|
26
|
+
## Source setup for the unreleased pilot
|
|
27
|
+
|
|
28
|
+
Prerequisites: Git, Python 3.11+ with uv (the locked install uses 3.12), Node.js 20+ with npm, Circom 2.2.2 and PostgreSQL 18 for the pilot acceptance run.
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
git clone --branch main https://github.com/repfigit/clearproof.git
|
|
32
|
+
cd clearproof
|
|
33
|
+
npm exec --yes --package=npm@11.9.0 -- npm ci
|
|
34
|
+
uv sync --frozen --extra dev --python 3.12
|
|
35
|
+
npm run build
|
|
36
|
+
node packages/cli/dist/index.js --help
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
To generate development artifacts for both proof profiles and run the pilot end to end, follow the [local acceptance guide](https://github.com/repfigit/clearproof/blob/main/docs/operations/local-pilot-acceptance.md):
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
curl --fail -L -o /absolute/ppot_0080_17.ptau \
|
|
43
|
+
https://pse-trusted-setup-ppot.s3.eu-central-1.amazonaws.com/pot28_0080/ppot_0080_17.ptau
|
|
44
|
+
.venv/bin/python scripts/test_development_circuits.py /absolute/new-development-artifacts \
|
|
45
|
+
--prepared-ptau /absolute/ppot_0080_17.ptau
|
|
46
|
+
.venv/bin/python scripts/test_pilot_local.py /absolute/new-development-artifacts/pilot \
|
|
47
|
+
/absolute/new-pilot-run --postgres-bin /usr/lib/postgresql/18/bin
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Check the file's SHA-256 against the one pinned in the guide before using it. Locally generated development keys are not production keys. `bash scripts/compile_circuits.sh` still builds the legacy profile on its own.
|
|
51
|
+
|
|
52
|
+
## API exploration
|
|
53
|
+
|
|
54
|
+
For a disposable local evaluation:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
export AUTH_MODE=api-key
|
|
58
|
+
export API_KEY="$(openssl rand -hex 32)"
|
|
59
|
+
export PII_MASTER_KEY="$(openssl rand -hex 32)"
|
|
60
|
+
uv run uvicorn src.api.main:app --reload --host 127.0.0.1 --port 8000
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Open [the local OpenAPI UI](http://localhost:8000/docs). Protected requests use `X-API-Key` in this mode. Keep keys stable and protected for any evaluation whose encrypted records need to survive restart.
|
|
64
|
+
|
|
65
|
+
Starting the server does not establish a working proof workflow. The pilot routes need PostgreSQL, storage keys, tenant trust configuration and compatible artifacts; `/health` reports process liveness only. Do not treat synthetic output as a live transfer authorization.
|
|
66
|
+
|
|
67
|
+
## Checks
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
make test
|
|
71
|
+
npm run test:ts
|
|
72
|
+
npm run build
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
At this checkout, root `npm test` runs Python tests; `npm run test:ts` runs the TypeScript workspaces. Database integration tests need an isolated PostgreSQL instance. Real circuit checks have additional artifact/toolchain requirements.
|
|
76
|
+
|
|
77
|
+
See [project status](/docs/status) before planning an integration.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: TypeScript SDK
|
|
3
|
+
category: reference
|
|
4
|
+
order: 6
|
|
5
|
+
cli-topic: sdk
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# TypeScript SDK
|
|
9
|
+
|
|
10
|
+
`@clearproof/proof` provides proof generation, cryptographic verification and counterparty discovery. Published version: **0.3.0**, checked September 25, 2026. That release predates the pilot: it covers the legacy 16-signal profile only. The pilot functions described below exist in the source checkout (0.4.0, unpublished). Confirm the installed version before using its types.
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install @clearproof/proof@0.3.0
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Legacy proof API (in the published 0.3.0 package)
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import { generateProof, verifyProof, type ComplianceInput } from '@clearproof/proof';
|
|
22
|
+
|
|
23
|
+
// Supply a complete, authenticated input with witnesses matching your circuit.
|
|
24
|
+
async function evaluate(input: ComplianceInput, wasm: string, zkey: string, vkey: string) {
|
|
25
|
+
const generated = await generateProof(input, wasm, zkey);
|
|
26
|
+
const verified = await verifyProof(generated.proof, generated.publicSignals, vkey);
|
|
27
|
+
return { generated, verified };
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The caller supplies compatible artifacts. The SDK maps camelCase fields to Circom signal names; it does not create issuer or sanctions witnesses for you. Field encodings, amount units and public-signal ordering must match the exact proof version.
|
|
32
|
+
|
|
33
|
+
`verified.valid` describes cryptographic verification. `isCompliant` and `sarReviewFlag` interpret circuit outputs; they do not establish full registry acceptance, current policy authorization or legal compliance. Additional trust, freshness, revocation, domain and replay checks remain necessary.
|
|
34
|
+
|
|
35
|
+
## Pilot functions (source checkout)
|
|
36
|
+
|
|
37
|
+
| Function | Purpose |
|
|
38
|
+
| --- | --- |
|
|
39
|
+
| `inspectCurrentProof` | Read-only inspection of a `pilot-transfer-v3` proof through the authenticated API |
|
|
40
|
+
| `authorizeCurrentProof` | Request consumption of one authorization; returns the receipt |
|
|
41
|
+
| `createObservation`, `readObservation`, `listObservations`, `reportObservationCohort` | Non-authorizing observations and cohort reports |
|
|
42
|
+
| `requestReport`, `reportEndpoint` | Authenticated report requests |
|
|
43
|
+
| `canonicalBytes`, `recordDigest` | Canonical encoding and domain-separated digests, matching the Python implementation |
|
|
44
|
+
| `walletOwnershipSigningMessage` | Build the exact EIP-191 message for the wallet ownership challenge |
|
|
45
|
+
|
|
46
|
+
These use server-selected trust: the API owns current roots, policy and consumption. The client validates response shape and profile (`pilot-transfer-v3`) but does not independently establish current state.
|
|
47
|
+
|
|
48
|
+
## Discovery
|
|
49
|
+
|
|
50
|
+
`discoverVASP(domain)` and `supportsChain(domain, chainId)` read self-declared well-known metadata. A domain response is not independent issuer/VASP authorization. Python and TypeScript discovery compatibility and destination/key validation are active hardening work.
|
|
51
|
+
|
|
52
|
+
## Input and privacy limitations
|
|
53
|
+
|
|
54
|
+
The current SDK validates selected fields, including proof expiry relative to the transfer timestamp and a nonzero credential nullifier. A zero domain chain ID currently emits a warning; it is not a safe production configuration.
|
|
55
|
+
|
|
56
|
+
Do not log complete witnesses or sensitive proof metadata. Use the installed package's declarations for exact types and dependencies, and review [status](/docs/status) before integration.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Security
|
|
3
|
+
category: operations
|
|
4
|
+
order: 7
|
|
5
|
+
cli-topic: security
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Security and assurance
|
|
9
|
+
|
|
10
|
+
Last reviewed: September 25, 2026.
|
|
11
|
+
|
|
12
|
+
clearproof is **pre-production, pilot-stage software**. Independent circuit and contract audits have not been completed. Current proving artifacts use a development-only trusted setup. Testnet deployment and passing tests do not establish production safety.
|
|
13
|
+
|
|
14
|
+
## Current boundaries
|
|
15
|
+
|
|
16
|
+
- A cryptographically valid proof is not an accepted transfer. In the pilot, the authorization service checks current roots, revocation, policy and signed facts before consuming an authorization in PostgreSQL. Pairing alone checks none of these.
|
|
17
|
+
- Credential, holder, jurisdiction and transfer binding are enforced by the `pilot-transfer-v3` statement and the authorization service, tested locally. They rely on trusted issuers, root publishers and a trusted registry publisher; the contract cannot detect a publisher that lies about private records.
|
|
18
|
+
- Recipient HPKE envelopes are the default; the legacy shared-key AES-256-GCM mode is only used when an operator selects it. Key rotation and altered-envelope rejection are tested locally. Live key discovery between institutions is not yet validated.
|
|
19
|
+
- Current proofs publish eight values (commitments, roots, a nullifier, times and the chain and registry binding) but no amount, tier, jurisdiction or review flag. Those values can still be correlated with other records. The legacy 16-signal demo profile publishes more, including a review flag.
|
|
20
|
+
- Domain, expiry, root and replay checks depend on correct configuration of the authorization service and registry. The site does not claim that replay is universally impossible.
|
|
21
|
+
- Tenant-scoped encrypted storage, restart recovery and retry isolation are tested locally with PostgreSQL. They have not been independently reviewed.
|
|
22
|
+
|
|
23
|
+
## Controls to evaluate
|
|
24
|
+
|
|
25
|
+
Use synthetic records and testnet funds. Check approved issuer/root/artifact provenance, recipient identity, key purpose, freshness, revocation, transfer binding and duplicate handling. Confirm that sensitive inputs remain inside authorized encrypted data flows and do not appear in logs or exports.
|
|
26
|
+
|
|
27
|
+
`PII_MASTER_KEY` startup validation checks accepted encoding and minimum length. It cannot establish that a supplied value has adequate randomness. Generate secrets securely and manage retention, backup and rotation deliberately.
|
|
28
|
+
|
|
29
|
+
## Vulnerability reporting
|
|
30
|
+
|
|
31
|
+
The repository security policy lists **security@clearproof.dev** as its reporting address. Share reproduction steps and impact privately; do not post sensitive exploit details or personal information in a public issue. This documentation does not verify mailbox operation or promise a response-time SLA.
|
|
32
|
+
|
|
33
|
+
No active paid bug-bounty program is announced here. See [project status](/docs/status) for the implementation and assurance work that remains.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Troubleshooting
|
|
3
|
+
category: operations
|
|
4
|
+
order: 8
|
|
5
|
+
cli-topic: troubleshooting
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Troubleshooting
|
|
9
|
+
|
|
10
|
+
Common issues and fixes for clearproof development and deployment.
|
|
11
|
+
|
|
12
|
+
## Circuit compilation fails
|
|
13
|
+
|
|
14
|
+
**Symptom:** `bash scripts/compile_circuits.sh` exits with a circom error.
|
|
15
|
+
|
|
16
|
+
**Fix:** Ensure circom 2.2.2+ is installed and on your PATH:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
circom --version
|
|
20
|
+
# Expected: circom compiler 2.2.2 or higher
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
If you see `command not found`, follow the [circom install guide](https://docs.circom.io/getting-started/installation/).
|
|
24
|
+
|
|
25
|
+
## `PII_MASTER_KEY` validation error at startup
|
|
26
|
+
|
|
27
|
+
**Symptom:** API startup rejects a missing or insufficiently long `PII_MASTER_KEY`.
|
|
28
|
+
|
|
29
|
+
**Fix:** Supply 64 hex characters or at least 32 UTF-8 bytes. Generate a random value for a disposable local evaluation:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
export PII_MASTER_KEY="$(openssl rand -hex 32)"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The startup check validates encoding and length, not randomness. Protect and retain the key when encrypted records must survive restart; changing it can prevent decryption of existing records.
|
|
36
|
+
|
|
37
|
+
## Proof generation returns 500
|
|
38
|
+
|
|
39
|
+
**Symptom:** `POST /proof/generate` fails because runtime state or proving artifacts are unavailable.
|
|
40
|
+
|
|
41
|
+
Check that the requested credential, trusted issuer root, sanctions witnesses and compatible artifacts are available to the running process. Starting the API, issuing one development credential or building an offline sanctions tree does not alone establish a complete generation workflow. See the quickstart and current project status.
|
|
42
|
+
|
|
43
|
+
## Sanctions oracle is stale
|
|
44
|
+
|
|
45
|
+
**Symptom:** On-chain `verifyAndRecord()` reverts with `SanctionsOracleStale`.
|
|
46
|
+
|
|
47
|
+
**Fix:** The oracle's grace period defaults to 24 hours. Update the sanctions root:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
python scripts/relay_sanctions_root.py --network sepolia
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Check the configured grace period and actual root update time on each intended chain. Test fixtures may deliberately exercise stale state; do not bypass freshness checks to authorize a transfer.
|
|
54
|
+
|
|
55
|
+
## Nullifier already spent
|
|
56
|
+
|
|
57
|
+
**Symptom:** The development `verifyAndRecord()` path reverts with `ProofAlreadyUsed` or `TransferAlreadyRecorded`.
|
|
58
|
+
|
|
59
|
+
**Cause:** The nullifier or transfer reference has already been recorded in the target registry.
|
|
60
|
+
|
|
61
|
+
**Fix:** Inspect the original transaction and transfer state before retrying. Preserve the same transfer identity across retries; do not create a new idempotency key just to bypass duplicate protection. API/registry transfer-hash consistency remains planned work.
|
|
62
|
+
|
|
63
|
+
## WASM prover not found
|
|
64
|
+
|
|
65
|
+
**Symptom:** `@clearproof/proof` throws `ENOENT: no such file or directory` for `compliance.wasm`.
|
|
66
|
+
|
|
67
|
+
**Fix:** Compile circuits first:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
bash scripts/compile_circuits.sh
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Pass the actual compatible WASM, proving-key and verification-key paths to the SDK. The repository's development build writes the WASM under `artifacts/compliance_js/`; public package installation alone is not a complete proving setup.
|
|
74
|
+
|
|
75
|
+
## Hardhat tests fail with `HH700`
|
|
76
|
+
|
|
77
|
+
**Symptom:** `npx hardhat test` errors with `HH700: Artifact not found`.
|
|
78
|
+
|
|
79
|
+
**Fix:** Compile contracts before running tests:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
cd packages/contracts
|
|
83
|
+
npx hardhat compile
|
|
84
|
+
npx hardhat test
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## CORS errors in browser
|
|
88
|
+
|
|
89
|
+
**Symptom:** Browser console shows `Access-Control-Allow-Origin` errors when calling the API.
|
|
90
|
+
|
|
91
|
+
**Fix:** Set `CORS_ALLOWED_ORIGINS` to your frontend origin:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
export CORS_ALLOWED_ORIGINS="http://localhost:3000"
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Using `*` with credentials enabled will trigger a startup warning and may not work in all browsers.
|
|
98
|
+
|
|
99
|
+
## TypeScript build errors after pulling
|
|
100
|
+
|
|
101
|
+
**Symptom:** `npm run build` fails with type errors after `git pull`.
|
|
102
|
+
|
|
103
|
+
**Fix:** Clean install and rebuild:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
rm -rf node_modules packages/*/dist
|
|
107
|
+
npm install
|
|
108
|
+
npm run build
|
|
109
|
+
```
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: UP-2026-001
|
|
3
|
+
title: Adoption roadmap and documentation split published
|
|
4
|
+
date: 2026-09-09
|
|
5
|
+
publishAfter: 2026-09-09T00:00:00Z
|
|
6
|
+
sourceCommit: d57aac12493ea585ad38e85d070385e9fa34d905
|
|
7
|
+
claimRefs:
|
|
8
|
+
- docs/ADOPTION_ROADMAP.md
|
|
9
|
+
- docs/PUBLISHING.md
|
|
10
|
+
- README.md
|
|
11
|
+
status: approved
|
|
12
|
+
summary: The repository now carries a public adoption roadmap and publishing boundaries; internal commercial planning moved out of the public tree.
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
The main repository now includes [docs/ADOPTION_ROADMAP.md](https://github.com/repfigit/clearproof/blob/main/docs/ADOPTION_ROADMAP.md),
|
|
16
|
+
which describes how teams can evaluate Clearproof as pilot-stage software: what
|
|
17
|
+
the circuits and contracts check today, what stays outside that scope, and what
|
|
18
|
+
a careful evaluation record looks like.
|
|
19
|
+
|
|
20
|
+
A companion [docs/PUBLISHING.md](https://github.com/repfigit/clearproof/blob/main/docs/PUBLISHING.md)
|
|
21
|
+
states the project's publication boundaries: source-backed claims, verified
|
|
22
|
+
project-owned destinations, and no unsupported audit, customer or compliance
|
|
23
|
+
statements.
|
|
24
|
+
|
|
25
|
+
Clearproof remains pilot-stage software. Circuits and contracts have not
|
|
26
|
+
completed an independent audit, and current proving artifacts use a
|
|
27
|
+
development-only trusted setup. Use synthetic data and testnet funds.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: UP-2026-002
|
|
3
|
+
title: A complete transfer walkthrough exists in the source docs
|
|
4
|
+
date: 2026-09-12
|
|
5
|
+
publishAfter: 2026-09-12T14:30:00Z
|
|
6
|
+
sourceCommit: 57222b0bcad7e8dc06796fb870105a41ac87b844
|
|
7
|
+
claimRefs:
|
|
8
|
+
- packages/content/content/recipes/full-walkthrough.md
|
|
9
|
+
- packages/content/content/topics/quickstart.md
|
|
10
|
+
- README.md
|
|
11
|
+
status: approved
|
|
12
|
+
summary: The merged pilot source includes a documented end-to-end walkthrough, from building the sanctions tree through issuing a credential, generating a proof and recording it on a testnet registry.
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
The source repository includes a [full end-to-end walkthrough](https://github.com/repfigit/clearproof/blob/main/packages/content/content/recipes/full-walkthrough.md)
|
|
16
|
+
covering the complete pilot flow: build the sanctions tree, issue a zkKYC
|
|
17
|
+
credential, generate a Groth16 compliance proof, verify it off-chain, and record
|
|
18
|
+
the verified result on a Sepolia [ComplianceRegistry](https://github.com/repfigit/clearproof/blob/main/packages/contracts/contracts/)
|
|
19
|
+
where a `ProofVerified` event can be checked with the bundled script.
|
|
20
|
+
|
|
21
|
+
Running it requires a local setup: the API with API-key auth, compiled circuit
|
|
22
|
+
artifacts, deployed contracts and a Sepolia RPC endpoint. The
|
|
23
|
+
[quickstart](https://github.com/repfigit/clearproof/blob/main/packages/content/content/topics/quickstart.md)
|
|
24
|
+
documents the prerequisites honestly — there is no guaranteed setup or proving
|
|
25
|
+
time, and the workflow uses synthetic data and testnet funds.
|
|
26
|
+
|
|
27
|
+
This walkthrough is a development pilot, not a production transfer
|
|
28
|
+
authorization. Circuits and contracts have not completed an independent audit,
|
|
29
|
+
and local proving artifacts use a development-only trusted setup. If you want to
|
|
30
|
+
see exactly what a Travel-Rule transfer-evidence flow looks like before
|
|
31
|
+
evaluating the cryptography, the walkthrough is the shortest supported path.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: UP-2026-003
|
|
3
|
+
title: What npm can install today, and what it cannot
|
|
4
|
+
date: 2026-09-12
|
|
5
|
+
publishAfter: 2026-09-12T14:30:00Z
|
|
6
|
+
sourceCommit: 57222b0bcad7e8dc06796fb870105a41ac87b844
|
|
7
|
+
claimRefs:
|
|
8
|
+
- packages/content/content/topics/quickstart.md
|
|
9
|
+
- README.md
|
|
10
|
+
status: approved
|
|
11
|
+
summary: Public @clearproof packages exist at 0.3.0, but the CLI cannot install from the registry and the development checkout is already 0.4.0. Here is what each path supports.
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
Clearproof's public npm packages are at **0.3.0** while the development checkout
|
|
15
|
+
is **0.4.0** — they are not the same thing. Verified against the npm registry on
|
|
16
|
+
September 12, 2026:
|
|
17
|
+
|
|
18
|
+
- [`@clearproof/proof`](https://www.npmjs.com/package/@clearproof/proof) 0.3.0 — SDK install verified, but proof generation still requires matching circuit WASM and proving-key files supplied by the caller.
|
|
19
|
+
- [`@clearproof/circuits`](https://www.npmjs.com/package/@clearproof/circuits) 0.3.0 — inspect package contents; installation alone is not a proving setup.
|
|
20
|
+
- [`@clearproof/cli`](https://www.npmjs.com/package/@clearproof/cli) 0.3.0 — public install is currently blocked because its `@clearproof/content` dependency is unavailable on the registry (confirmed returning "Not found").
|
|
21
|
+
- `@clearproof/content` — not published at all.
|
|
22
|
+
|
|
23
|
+
The practical path for evaluating current capabilities is a
|
|
24
|
+
[source checkout](https://github.com/repfigit/clearproof/blob/main/packages/content/content/topics/quickstart.md):
|
|
25
|
+
clone, build, and run the documented checks. The README's installation table is
|
|
26
|
+
kept current with what each package actually supports; nothing there claims a
|
|
27
|
+
one-command production install, because that does not exist yet.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: UP-2026-004
|
|
3
|
+
title: What the compliance proof actually verifies
|
|
4
|
+
date: 2026-09-12
|
|
5
|
+
publishAfter: 2026-09-12T14:30:00Z
|
|
6
|
+
sourceCommit: 57222b0bcad7e8dc06796fb870105a41ac87b844
|
|
7
|
+
claimRefs:
|
|
8
|
+
- packages/content/content/topics/circuits.md
|
|
9
|
+
- packages/content/content/recipes/verify-proof.md
|
|
10
|
+
- packages/content/content/topics/security.md
|
|
11
|
+
status: approved
|
|
12
|
+
summary: The Groth16 circuit checks sanctions non-membership, credential validity and the amount tier — and it is worth being precise about what stays outside that boundary.
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
> **Correction, September 25, 2026:** this post described the legacy 16-signal
|
|
16
|
+
> `compliance.circom` demo circuit as if it were current. The current pilot
|
|
17
|
+
> profile, `pilot-transfer-v3`, publishes eight values with no public amount
|
|
18
|
+
> tier or review flag, and screens both wallets. See the
|
|
19
|
+
> [circuits page](https://docs.clearproof.world/docs/circuits).
|
|
20
|
+
|
|
21
|
+
[The circuit documentation](https://github.com/repfigit/clearproof/blob/main/packages/content/content/topics/circuits.md)
|
|
22
|
+
describes the three checks the legacy Groth16 circuit enforces:
|
|
23
|
+
|
|
24
|
+
1. **Sanctions non-membership** — a sorted-tree gap construction shows the queried value lies between neighboring leaves. This establishes a fact about the supplied tree; authenticity, completeness and freshness of the screening source are separate requirements.
|
|
25
|
+
2. **Credential validity** — checks performed against the credential commitment and issuer tree supplied to the circuit.
|
|
26
|
+
3. **Amount tier** — the amount is compared against three ordered public thresholds and the claimed tier is checked.
|
|
27
|
+
|
|
28
|
+
The public-signal array exposes all sixteen signals, including an advisory
|
|
29
|
+
`sar_review_flag` that is tier-derived — it is not a suspicious-activity
|
|
30
|
+
determination or filing instruction.
|
|
31
|
+
|
|
32
|
+
What the proof does not do: a cryptographically valid proof is not an accepted
|
|
33
|
+
transfer. Registry acceptance checks, credential authenticity, holder authority,
|
|
34
|
+
actual transfer binding and replay/expiry handling depend on the verifier and
|
|
35
|
+
its configuration — see the
|
|
36
|
+
[security boundaries](https://github.com/repfigit/clearproof/blob/main/packages/content/content/topics/security.md)
|
|
37
|
+
page. These components are unaudited development work, and the
|
|
38
|
+
[off-chain verification recipe](https://github.com/repfigit/clearproof/blob/main/packages/content/content/recipes/verify-proof.md)
|
|
39
|
+
shows exactly which four checks a verify call performs so you can compare them
|
|
40
|
+
against what your own acceptance policy needs.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: UP-2026-005
|
|
3
|
+
title: Sanctions-tree refresh now runs on a daily schedule with a change gate
|
|
4
|
+
date: 2026-09-21
|
|
5
|
+
publishAfter: 2026-09-22T15:30:00Z
|
|
6
|
+
sourceCommit: 4a58f129e8640c65ad37074a37dd49114ce9db74
|
|
7
|
+
claimRefs:
|
|
8
|
+
- .github/workflows/sanctions-update.yml
|
|
9
|
+
- scripts/build_sanctions_tree.py
|
|
10
|
+
- packages/content/content/recipes/update-sanctions.md
|
|
11
|
+
status: approved
|
|
12
|
+
summary: The sanctions dataset behind on-chain proof checks is refreshed daily by a scheduled workflow, with a leaf-count sanity gate and a reviewable PR when the tree changes — but the on-chain relay stays a deliberate operator step.
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
Clearproof proofs commit to a Merkle root of a sanctions dataset that the
|
|
16
|
+
on-chain `SanctionsOracle` stores. Keeping that root current is an operational
|
|
17
|
+
contract of the project — after any root update, all deployed chains must be
|
|
18
|
+
re-relayed consistently. The repository now runs the dataset refresh on a
|
|
19
|
+
schedule instead of leaving it entirely manual.
|
|
20
|
+
|
|
21
|
+
What the workflow does:
|
|
22
|
+
|
|
23
|
+
- `Update Sanctions Tree` runs daily at 06:00 UTC in GitHub Actions (scheduled
|
|
24
|
+
just after the OFAC SDN list typically updates), with a manual
|
|
25
|
+
`workflow_dispatch` trigger kept for operator use.
|
|
26
|
+
- Each run fetches the public sanctions sources and rebuilds the deterministic
|
|
27
|
+
Poseidon Merkle tree with `scripts/build_sanctions_tree.py`.
|
|
28
|
+
- A change gate compares the built tree against the committed baseline.
|
|
29
|
+
- A safety check aborts the run if the leaf count drops by more than 50% — a
|
|
30
|
+
guard against silently building from a broken or partial data source.
|
|
31
|
+
- When the tree actually changed, the workflow opens a reviewable branch and
|
|
32
|
+
pull request showing the previous and new leaf counts, rather than pushing
|
|
33
|
+
anything straight to the default branch.
|
|
34
|
+
|
|
35
|
+
What the workflow deliberately does not do: it does not relay a new root to
|
|
36
|
+
deployed chains on its own. The relay job runs on explicit `workflow_dispatch`,
|
|
37
|
+
so an operator still drives the on-chain update after reviewing the tree PR —
|
|
38
|
+
matching the documented rule that the sanctions relay is never skipped after a
|
|
39
|
+
root update. The [sanctions update recipe](https://github.com/repfigit/clearproof/blob/main/packages/content/content/recipes/update-sanctions.md)
|
|
40
|
+
walks through that operator flow.
|
|
41
|
+
|
|
42
|
+
The workflow source is readable in full in the repository at
|
|
43
|
+
`.github/workflows/sanctions-update.yml`.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: UP-2026-006
|
|
3
|
+
title: Circuit profile pilot-transfer-v3 replaces v2 with production-scale tree depths
|
|
4
|
+
date: 2026-09-25
|
|
5
|
+
publishAfter: 2026-09-25T12:00:00Z
|
|
6
|
+
sourceCommit: a67caef
|
|
7
|
+
claimRefs:
|
|
8
|
+
- specs/pilot-transfer-v3.md
|
|
9
|
+
- docs/adr/0011-production-tree-depths.md
|
|
10
|
+
- src/registry/pilot_tree.py
|
|
11
|
+
- tests/unit/test_registrar_depths.py
|
|
12
|
+
status: approved
|
|
13
|
+
summary: The pilot circuit now fixes Merkle tree depths at 32/20/20 (issuance, authorized issuers, sanctions), raising capacity from 256 leaves per tree to production-scale sizes. Groth16 verification cost is unchanged; the keys are still development-only.
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
The development circuit profile for the pilot, `pilot-transfer-v2`, fixed every
|
|
17
|
+
Merkle tree at depth 8: at most 256 leaves per tree. That ceiling is irrelevant
|
|
18
|
+
for a demo but unusable for the deployments the pilot profile models — a large
|
|
19
|
+
custodial VASP issues credentials to tens of millions of customers, a global
|
|
20
|
+
authorized-issuer set has thousands of issuers, and consolidated sanctions
|
|
21
|
+
address lists run to hundreds of thousands of EVM addresses.
|
|
22
|
+
|
|
23
|
+
`pilot-transfer-v3` (merged this week, PR #49) fixes the depths at
|
|
24
|
+
`PilotCompliance(32, 20, 20)` in the Circom circuit itself:
|
|
25
|
+
|
|
26
|
+
| Tree | v2 depth | v3 depth | v3 capacity |
|
|
27
|
+
| --- | --- | --- | --- |
|
|
28
|
+
| Issuance (credentials under an issuance root) | 8 | 32 | 2^32 credentials per issuance root |
|
|
29
|
+
| Authorized issuers | 8 | 20 | 2^20 issuer leaves |
|
|
30
|
+
| Sanctions (raw EVM addresses) | 8 | 20 | 2^20 − 2 addresses (two leaves are the `0` and `2^160` sentinels) |
|
|
31
|
+
|
|
32
|
+
Depths live in one place, `src/registry/pilot_tree.py`, and every consumer —
|
|
33
|
+
witness builder, registrar, proof preparation, issuance tree service and root
|
|
34
|
+
verification — reads them from there. Signed root snapshots must state the exact
|
|
35
|
+
depth for their kind; any other depth rejects.
|
|
36
|
+
|
|
37
|
+
Because tree depth is fixed by the circuit and therefore by the proving and
|
|
38
|
+
verification keys, the profile name changes even though the public signal order
|
|
39
|
+
and meaning are unchanged from v2. Keys are profile-specific: a v2 manifest
|
|
40
|
+
cannot be proved or verified with v3 keys. Current artifact and context checks
|
|
41
|
+
reject v1 and v2 as historical profiles; read-only pairing inspection can still
|
|
42
|
+
use independently pinned v1/v2 keys and reports the profile explicitly.
|
|
43
|
+
|
|
44
|
+
What changed in practice: constraints grow from 51,728 (v2) to 95,408 (v3), the
|
|
45
|
+
local development setup now uses a `2^17` powers-of-tau, and the development
|
|
46
|
+
zkey grows from roughly 23 MB to 44 MB. Groth16 verification cost is unchanged —
|
|
47
|
+
it depends only on the public signal count, which is identical to v2.
|
|
48
|
+
|
|
49
|
+
Two honest boundaries, stated plainly in [ADR 0011](https://github.com/repfigit/clearproof/blob/main/docs/adr/0011-production-tree-depths.md):
|
|
50
|
+
|
|
51
|
+
- The v3 keys remain development-unapproved — no audit or production setup has
|
|
52
|
+
approved this circuit, and no existing Sepolia deployment implements v3.
|
|
53
|
+
- Depth is only one of the production-scaling limits. The registrar still
|
|
54
|
+
configures 1–16 issuers, issuance-tree construction scans at most 256
|
|
55
|
+
enrollments per refresh, and the in-memory sparse tree builds at roughly
|
|
56
|
+
210 µs per hash — production scale needs an incremental persisted tree
|
|
57
|
+
service. Those are ordinary software, upgradeable without new keys.
|
|
58
|
+
|
|
59
|
+
Read the full public statement at
|
|
60
|
+
[specs/pilot-transfer-v3.md](https://github.com/repfigit/clearproof/blob/main/specs/pilot-transfer-v3.md).
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface ExplainerMeta {
|
|
2
|
+
id: string;
|
|
3
|
+
slug: string;
|
|
4
|
+
title: string;
|
|
5
|
+
date: string;
|
|
6
|
+
/** UTC timestamp after which the explainer may be published. */
|
|
7
|
+
publishAfter: string;
|
|
8
|
+
/** Source revision the claims were validated against. */
|
|
9
|
+
sourceCommit: string;
|
|
10
|
+
claimRefs: string[];
|
|
11
|
+
status: 'draft' | 'validated' | 'approved' | 'published';
|
|
12
|
+
summary: string;
|
|
13
|
+
/** Canonical site path for this explainer, e.g. /explainers/what-clearproof-does. */
|
|
14
|
+
canonical: string;
|
|
15
|
+
/** Editorial template version; approval is bound to template + body. */
|
|
16
|
+
templateVersion: string;
|
|
17
|
+
}
|
|
18
|
+
export interface Explainer extends ExplainerMeta {
|
|
19
|
+
body: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* List all explainers with metadata (no body), sorted newest first by ISO date.
|
|
23
|
+
*/
|
|
24
|
+
export declare function listExplainers(): ExplainerMeta[];
|
|
25
|
+
/**
|
|
26
|
+
* Get a single explainer by slug, including the markdown body.
|
|
27
|
+
*/
|
|
28
|
+
export declare function getExplainer(slug: string): Explainer | null;
|
|
29
|
+
//# sourceMappingURL=explainers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explainers.d.ts","sourceRoot":"","sources":["../src/explainers.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,CAAC;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,qFAAqF;IACrF,SAAS,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,SAAU,SAAQ,aAAa;IAC9C,IAAI,EAAE,MAAM,CAAC;CACd;AA2CD;;GAEG;AACH,wBAAgB,cAAc,IAAI,aAAa,EAAE,CAShD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAQ3D"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.listExplainers = listExplainers;
|
|
4
|
+
exports.getExplainer = getExplainer;
|
|
5
|
+
const parser_js_1 = require("./parser.js");
|
|
6
|
+
const EXPLAINER_FIELDS = [
|
|
7
|
+
'id',
|
|
8
|
+
'title',
|
|
9
|
+
'date',
|
|
10
|
+
'publishAfter',
|
|
11
|
+
'sourceCommit',
|
|
12
|
+
'status',
|
|
13
|
+
'summary',
|
|
14
|
+
'canonical',
|
|
15
|
+
'templateVersion',
|
|
16
|
+
];
|
|
17
|
+
function requiredStringFields(frontmatter) {
|
|
18
|
+
return EXPLAINER_FIELDS.filter((field) => typeof frontmatter[field] !== 'string' || frontmatter[field] === '');
|
|
19
|
+
}
|
|
20
|
+
function normalizeStatus(value) {
|
|
21
|
+
return ['draft', 'validated', 'approved', 'published'].includes(value)
|
|
22
|
+
? value
|
|
23
|
+
: 'draft';
|
|
24
|
+
}
|
|
25
|
+
function toMeta(slug, frontmatter) {
|
|
26
|
+
const missing = requiredStringFields(frontmatter);
|
|
27
|
+
if (missing.length > 0)
|
|
28
|
+
return null;
|
|
29
|
+
const claimRefs = frontmatter['claimRefs'];
|
|
30
|
+
return {
|
|
31
|
+
id: frontmatter['id'],
|
|
32
|
+
slug,
|
|
33
|
+
title: frontmatter['title'],
|
|
34
|
+
date: frontmatter['date'],
|
|
35
|
+
publishAfter: frontmatter['publishAfter'],
|
|
36
|
+
sourceCommit: frontmatter['sourceCommit'],
|
|
37
|
+
claimRefs: Array.isArray(claimRefs) ? claimRefs.filter((ref) => typeof ref === 'string') : [],
|
|
38
|
+
status: normalizeStatus(frontmatter['status']),
|
|
39
|
+
summary: frontmatter['summary'],
|
|
40
|
+
canonical: frontmatter['canonical'],
|
|
41
|
+
templateVersion: frontmatter['templateVersion'],
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* List all explainers with metadata (no body), sorted newest first by ISO date.
|
|
46
|
+
*/
|
|
47
|
+
function listExplainers() {
|
|
48
|
+
const slugs = (0, parser_js_1.listContentSlugs)('explainers');
|
|
49
|
+
const explainers = [];
|
|
50
|
+
for (const slug of slugs) {
|
|
51
|
+
const { frontmatter } = (0, parser_js_1.readContentFile)(`explainers/${slug}.md`);
|
|
52
|
+
const meta = toMeta(slug, frontmatter);
|
|
53
|
+
if (meta)
|
|
54
|
+
explainers.push(meta);
|
|
55
|
+
}
|
|
56
|
+
return explainers.sort((a, b) => (a.date < b.date ? 1 : a.date > b.date ? -1 : a.slug.localeCompare(b.slug)));
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get a single explainer by slug, including the markdown body.
|
|
60
|
+
*/
|
|
61
|
+
function getExplainer(slug) {
|
|
62
|
+
try {
|
|
63
|
+
const { frontmatter, body } = (0, parser_js_1.readContentFile)(`explainers/${slug}.md`);
|
|
64
|
+
const meta = toMeta(slug, frontmatter);
|
|
65
|
+
return meta ? { ...meta, body } : null;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=explainers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explainers.js","sourceRoot":"","sources":["../src/explainers.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { parseFrontmatter, readContentFile, listContentSlugs, CONTENT_DIR } from './parser.js';
|
|
2
|
+
export type { Frontmatter, ParsedFile } from './parser.js';
|
|
3
|
+
export { listTopics, getTopic } from './topics.js';
|
|
4
|
+
export type { TopicMeta, Topic } from './topics.js';
|
|
5
|
+
export { listRecipes, getRecipe, getRecipeSteps } from './recipes.js';
|
|
6
|
+
export type { RecipeMeta, Recipe, RecipeStep } from './recipes.js';
|
|
7
|
+
export { listSignals, getSignal } from './signals.js';
|
|
8
|
+
export type { Signal } from './signals.js';
|
|
9
|
+
export { listUpdates, getUpdate } from './updates.js';
|
|
10
|
+
export type { UpdateMeta, Update } from './updates.js';
|
|
11
|
+
export { listExplainers, getExplainer } from './explainers.js';
|
|
12
|
+
export type { ExplainerMeta, Explainer } from './explainers.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/F,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACtE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACtD,YAAY,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACtD,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/D,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
|