Skip to main content

Native Groth16 BN254 verification primitives for the Xian stack

Project description

xian-tech-zk

Small native zero-knowledge verification and proving primitives for the Xian workspace.

Purpose

  • This package exposes the narrow verifier surface used by the Xian runtime.
  • It also now exposes the first external proving toolkit for the shielded-note-token development flow.
  • It is still intentionally small. It is not a general-purpose zk framework.

Current Scope

  • Groth16 verification
  • BN254
  • Python bindings for runtime integration
  • A pure Rust verifier core for cargo-level testing and fixtures
  • Shielded-note proving circuits and proof generation helpers
  • Deterministic dev bundle generation for local shielded-note workflows
  • Note math helpers for commitments, nullifiers, asset ids, and Merkle roots
  • Trusted local prover-service support for note, command, and relay proof generation
flowchart LR
  Wallet["Shielded wallet"] --> Request["Proof request"]
  Request --> Prover["xian-zk prover toolkit"]
  Prover --> Proof["Groth16 proof and public inputs"]
  Proof --> Contract["Shielded contract"]
  Contract --> Registry["zk_registry verifying key"]
  Contract --> Bridge["contract-side zk bridge"]
  Bridge --> Verifier["xian-zk verifier"]

API

Python module xian_zk exposes:

  • raw and prepared Groth16 BN254 verification
  • native public-input, payload-hash, tree, and command digest helpers
  • shielded note request/result/prover/wallet types
  • shielded command request/result/prover/wallet types
  • shielded relay transfer request/result/prover/wallet types
  • registry manifest helpers for note, command, and relay verifying keys
  • note encryption/decryption, discovery-tag, sync-hint, and wallet sync helpers
  • local prover service clients and ShieldedZkProverService

CLI entrypoints:

  • uv run xian-zk-shielded-bundle generate-note --output-dir ...
  • uv run xian-zk-shielded-bundle generate-command --output-dir ...
  • uv run xian-zk-shielded-bundle import-note --bundle ... --output-dir ...
  • uv run xian-zk-shielded-bundle import-command --bundle ... --output-dir ...
  • uv run xian-zk-shielded-bundle validate-note --bundle ...
  • uv run xian-zk-shielded-bundle validate-command --bundle ...
  • uv run xian-zk-prover-service --host 127.0.0.1 --port 8787 ...

The Rust crate exposes the verifier core, shielded fixture builders, and proof generation helpers used by the Python bindings and tests.

Encoding

  • Verifying keys: compressed canonical bytes as 0x-prefixed hex
  • Proofs: compressed canonical bytes as 0x-prefixed hex
  • Public inputs: 32-byte big-endian field elements as 0x-prefixed hex

Validation

  • cargo test --manifest-path packages/xian-zk/Cargo.toml --no-default-features
  • cargo run --manifest-path packages/xian-zk/Cargo.toml --no-default-features --example generate_test_vector
  • cargo run --manifest-path packages/xian-zk/Cargo.toml --no-default-features --example generate_shielded_note_fixture
  • cd packages/xian-zk && uv sync --group dev && uv run maturin develop && uv run pytest -q
  • cd packages/xian-zk && uv run pytest -q -m slow

Notes

  • The runtime-facing verifier surface is still intentionally narrow.
  • The shielded-note proving helpers are the first external proving toolkit slice, not a broad proving framework.
  • The shielded-note circuits now use Merkle auth paths instead of witnessing the whole leaf set, and the shipped dev bundle / fixture ids are v2.
  • Shielded outputs are now addressed to owner_public, not to the recipient's spending secret. That lets senders create recipient outputs without learning the recipient's private shielded spend key.
  • The Python toolkit now separates spending and viewing authority. A wallet can disclose note contents by sharing only a viewing key or by adding explicit extra viewers to an encrypted note payload without exposing the spend key.
  • The Python toolkit now also ships a first-class ShieldedWallet abstraction for seed backup, state snapshots, record sync, note selection, and request planning for deposit / transfer / withdraw flows.
  • The package now also ships a deployment CLI that generates a random shielded-note proving bundle plus a public registry manifest. Keep the bundle private; only the manifest should be used for zk_registry registration.
  • The encrypted payload format now supports owner delivery plus optional disclosed viewers inside a single on-chain payload blob.
  • The encrypted payload format uses anonymous per-viewer discovery tags and ephemeral keys for new payloads, so recipient viewing keys are no longer embedded in cleartext.
  • ShieldedWallet.sync_records(...) now prefilters candidate payloads before full decryption, and note records now expose payload_tags so indexers can persist discovery metadata for later selective queries.
  • xian-zk-prover-service is a trusted local proving companion, not a true split-prover protocol. It improves deployability and wallet ergonomics, but the service still sees witness material.
  • Exact withdraws no longer need a forced change note. A withdraw can spend a note set down to zero shielded outputs when value conservation closes exactly.
  • The proving requests separate old_root from append_state, which lets a client prove against a recent accepted root while still projecting the canonical post-state from the current append frontier.
  • Python pytest now excludes the slow proof-generation tests by default. Run pytest -m slow explicitly when you want the proving-toolkit path.
  • The contract runtime prefers registry-backed verification by vk_id; this package exposes the lower-level raw and prepared-key verifier primitives that runtime builds on.
  • ShieldedNoteProver.build_insecure_dev_bundle() is for local development and tests only. Its deterministic setup seed exposes toxic waste and must never be used for a real network.
  • ShieldedNoteProver.build_random_bundle(...) and xian-zk-shielded-bundle generate-note generate a single-party random trusted setup. That is appropriate for deployment tooling, but it is still not an MPC ceremony.
  • Proof generation uses real randomness even when the proving bundle is a deterministic dev bundle.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xian_tech_zk-0.1.6.tar.gz (68.5 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

xian_tech_zk-0.1.6-cp314-abi3-win_amd64.whl (860.5 kB view details)

Uploaded CPython 3.14+Windows x86-64

xian_tech_zk-0.1.6-cp314-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.14+manylinux: glibc 2.17+ x86-64

xian_tech_zk-0.1.6-cp314-abi3-macosx_11_0_arm64.whl (967.0 kB view details)

Uploaded CPython 3.14+macOS 11.0+ ARM64

xian_tech_zk-0.1.6-cp314-abi3-macosx_10_12_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.14+macOS 10.12+ x86-64

File details

Details for the file xian_tech_zk-0.1.6.tar.gz.

File metadata

  • Download URL: xian_tech_zk-0.1.6.tar.gz
  • Upload date:
  • Size: 68.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xian_tech_zk-0.1.6.tar.gz
Algorithm Hash digest
SHA256 79d9a7e56e4eecabe6ce900fda6560eea4e34c6013b7dc649b31da1d92a6920a
MD5 f5f5937d24a52493e1a97eee8ed2a31a
BLAKE2b-256 b51dbcdfd556072a62bf3cae28db946af816b402880107fe7ebf041bd2ce8a32

See more details on using hashes here.

Provenance

The following attestation bundles were made for xian_tech_zk-0.1.6.tar.gz:

Publisher: release.yml on xian-technology/xian-contracting

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xian_tech_zk-0.1.6-cp314-abi3-win_amd64.whl.

File metadata

  • Download URL: xian_tech_zk-0.1.6-cp314-abi3-win_amd64.whl
  • Upload date:
  • Size: 860.5 kB
  • Tags: CPython 3.14+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xian_tech_zk-0.1.6-cp314-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 89aacfe653daf6b23b51756dac45ff13360675f3259a206f4f2875b88a11e110
MD5 17f174f78b6a44fc1657d3aeba70c4a2
BLAKE2b-256 6ed6eb5fa8da37be804ea5b04beffbebef319b0182945dee5e47a3ba86e6a2b1

See more details on using hashes here.

Provenance

The following attestation bundles were made for xian_tech_zk-0.1.6-cp314-abi3-win_amd64.whl:

Publisher: release.yml on xian-technology/xian-contracting

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xian_tech_zk-0.1.6-cp314-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for xian_tech_zk-0.1.6-cp314-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e272553938182fc5e7a7d0888f3b07a6b6cb838c2641eb8a2c1ea0f4765ba638
MD5 d8b91a60e7c7e6a432049977d4fc681b
BLAKE2b-256 8d85d43e47c3554d191bfb5129a785b921a8ef1709caecc7600ffeb8a5313350

See more details on using hashes here.

Provenance

The following attestation bundles were made for xian_tech_zk-0.1.6-cp314-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on xian-technology/xian-contracting

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xian_tech_zk-0.1.6-cp314-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for xian_tech_zk-0.1.6-cp314-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 af336339990ff6bebf3cb5d27ae2e68e4b4e0a4f8b480091db08437d4decac06
MD5 37d58b9c0db98c92914f6d678f13b1fc
BLAKE2b-256 7cbaeb770bd972e0c30ea4d8559248683e6950c304df8f4217d1583577374f37

See more details on using hashes here.

Provenance

The following attestation bundles were made for xian_tech_zk-0.1.6-cp314-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on xian-technology/xian-contracting

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xian_tech_zk-0.1.6-cp314-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for xian_tech_zk-0.1.6-cp314-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6f92cc1f5b84ee0248ce123c3083db35a13bc278de45b65e418094ca6809453c
MD5 eb8e56e403e7c85d7972906c93788bb3
BLAKE2b-256 e2c5a0d0225ec59161ac7e0fe8e1a7e0f36a115d697e3c9b9bd0c83c7342c632

See more details on using hashes here.

Provenance

The following attestation bundles were made for xian_tech_zk-0.1.6-cp314-abi3-macosx_10_12_x86_64.whl:

Publisher: release.yml on xian-technology/xian-contracting

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page