Source: pcoc sdk/ at the released tags. Rust, C, Go, and Java are 2.3.1. The tags are cut.
SDKs
What it is
The SDKs are the libraries and the pcoc command that produce and verify a PCOC. There are four: Rust, C, Go, and Java. They follow the specification at tag spec-2.3.0. Errata 1 and 2 are folded into that file.
Status. Rust, C, Go, and Java are 2.3.1. The specification tag is spec-2.3.0. The release tags are cut.
A performance table is not on this page. No timing run is published with these tags.
How it works
Verify reads a PCOC and writes a measurement record. The record measures. It does not admit anyone. Produce makes a PCOC. Bitcoin's blocks pace the making.
pcoc quickstart checks that this tree matches the pack pin, then checks the O1-S1 object, the six-leg measurement, the thirteen permanent negatives, and the pinned production leg. It does not time that leg.
Quickstart
The fixed lines are the same in every language. The first line names the language. The second line names the SHA-256 backend on the machine that ran it. This example is reference system 3 (AMD Ryzen 5 7430U, Linux Mint 22.3), 23 October 2026, backend sha-ni.
pcoc 2.3.1 (rust) spec-2.3.0 pack 91ded57e5c05b7cb: pin match
kernel scalar, sha256 sha-ni
O1-S1 object sha256 800ad07a87a567c835f539617b61ccddc96a0a984425675a5ece971162dfd246
O1-S1 six_leg match, checkpoints match, waypoints match
negatives 13 non-match
PROD leg 0 legs_le_hex 88a04ac5beacb8a7
| Language | Command, from a clone checked out at that language's tag |
|---|---|
| Rust | git checkout sdk-rust-v2.3.1, then cd sdk/rust, then cargo run -p pcoc-cli --release --quiet -- quickstart |
| C | git checkout sdk-c-v2.3.1, then cd sdk/c, then make -j4 build/pcoc and ./build/pcoc quickstart |
| Go | git checkout sdk/go/v2.3.1, then cd sdk/go, then go run ./cmd/pcoc quickstart |
| Java | git checkout sdk-java-v2.3.1, then cd sdk/java, then ./gradlew run --args=quickstart |
Java reports sha-ni when the process is started with -XX:+UnlockDiagnosticVMOptions. The Gradle run task sets that flag.
What runs on them
- The desktop app and the admission gate build on the Rust SDK in the same repository. Each reports the SDK version it was built with.
- The Android app builds on the Rust SDK tag sdk-rust-v2.3.1. The current demonstrator is primal-pcoc 3.5.50, commit 5a1d4f5f3. Its build guide is that repository's README.
Get them
| Language | Release | Read |
|---|---|---|
| Rust | sdk-rust-v2.3.1, crate pcoc, Rust 1.99.0 |
sdk/rust/README.md |
| C | sdk-c-v2.3.1 | sdk/c/README.md |
| Go | sdk/go/v2.3.1 | sdk/go/README.md |
| Java | sdk-java-v2.3.1, JDK 21 | sdk/java/README.md |
The specification release is spec-2.3.0. The SDK tags are not that commit. Rust and Go 2.3.1 are commit be0d5b8. C and Java 2.3.1 are tags sdk-c-v2.3.1 / sdk-java-v2.3.1. spec-2.3.0 is commit 7189a6d.
Checked against the same bytes
- The specification and the conformance pack are the source of truth. The pack manifest SHA-256 is
91ded57e5c05b7cb4cd74d313a51d83d2373fa86dc625df41faed9586e9032af. Status iscomplete. Every value was written only when Rust, C, Go, and Java agreed. - O1-S1 is
800ad07a87a567c835f539617b61ccddc96a0a984425675a5ece971162dfd246. O2-S2 is6bfc769b831b62de86165d290b8cb8b4fc872d7759183ebbad4c0ab94c0be5e0. O3-PROD isb16ecdaa13ad6df28ae62ba84e653b90cbcc3b163af90b62a0db836ff6f3bea7. The production leg is88a04ac5beacb8a7. - Where an SDK and the specification disagree, the specification wins and the SDK has a bug.
Policy and evidence
Admission is groundinglab policy, not a rule of the specification. The live testing floor is 0.1 legs/s (gl-admit-v12). verify_cap_per_door_session is unset on that policy (no door-session cap).
- Policy
- Evidence for the six-build comparison and the floor calibration
- gl-admit-v12.toml
From pcoc sdk/ at the released tags. Rust, C, Go, and Java are 2.3.1. The tags are cut. Raw markdown.