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](spec.md) at tag [`spec-2.3.0`](https://github.com/groundinglab/pcoc/releases/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](https://github.com/groundinglab/primal-pcoc/commit/5a1d4f5f3c06cd92cfc1ae758418a47122853d3a). Its build guide is that repository's README. ## Get them | Language | Release | Read | |---|---|---| | Rust | [sdk-rust-v2.3.1](https://github.com/groundinglab/pcoc/releases/tag/sdk-rust-v2.3.1), crate `pcoc`, Rust 1.99.0 | [sdk/rust/README.md](https://github.com/groundinglab/pcoc/blob/sdk-rust-v2.3.1/sdk/rust/README.md) | | C | [sdk-c-v2.3.1](https://github.com/groundinglab/pcoc/releases/tag/sdk-c-v2.3.1) | [sdk/c/README.md](https://github.com/groundinglab/pcoc/blob/sdk-c-v2.3.1/sdk/c/README.md) | | Go | [sdk/go/v2.3.1](https://github.com/groundinglab/pcoc/releases/tag/sdk/go/v2.3.1) | [sdk/go/README.md](https://github.com/groundinglab/pcoc/blob/sdk/go/v2.3.1/sdk/go/README.md) | | Java | [sdk-java-v2.3.1](https://github.com/groundinglab/pcoc/releases/tag/sdk-java-v2.3.1), JDK 21 | [sdk/java/README.md](https://github.com/groundinglab/pcoc/blob/sdk-java-v2.3.1/sdk/java/README.md) | The specification release is [spec-2.3.0](https://github.com/groundinglab/pcoc/releases/tag/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](spec.md) and the [conformance pack](https://github.com/groundinglab/pcoc/tree/spec-2.3.0/spec/conformance/pack) are the source of truth. The pack manifest SHA-256 is `91ded57e5c05b7cb4cd74d313a51d83d2373fa86dc625df41faed9586e9032af`. Status is `complete`. Every value was written only when Rust, C, Go, and Java agreed. - O1-S1 is `800ad07a87a567c835f539617b61ccddc96a0a984425675a5ece971162dfd246`. O2-S2 is `6bfc769b831b62de86165d290b8cb8b4fc872d7759183ebbad4c0ab94c0be5e0`. O3-PROD is `b16ecdaa13ad6df28ae62ba84e653b90cbcc3b163af90b62a0db836ff6f3bea7`. The production leg is `88a04ac5beacb8a7`. - 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](/admission-gate/policy/) - [Evidence](https://github.com/groundinglab/pcoc/tree/sdk-rust-v2.3.1/spec/conformance/interop) for the six-build comparison and the floor calibration - [gl-admit-v12.toml](https://github.com/groundinglab/pcoc/blob/main/policy/groundinglab-admission/gl-admit-v12.toml)