diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 0652cf6..df31b3e 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -26,7 +26,7 @@ permissions:
env:
CARGO_TERM_COLOR: always
NOIR_VERSION: 1.0.0-rc.3
- NOIR_ZK_VERSION: 0.3.0
+ NOIR_ZK_VERSION: 0.3.3
jobs:
commitlint:
diff --git a/Cargo.lock b/Cargo.lock
index 344edff..e541944 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -152,15 +152,15 @@ dependencies = [
[[package]]
name = "alloc-no-stdlib"
-version = "2.0.4"
+version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
+checksum = "c2fb6cfd47bf496ff64095c20eaba0c201404ee38714d4142fcfa1dc334fcc7a"
[[package]]
name = "alloc-stdlib"
-version = "0.2.4"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0e76a019e91224d279006ff972f1e984179a6e9feb050adba6ce8274aef23195"
+checksum = "0b5c1865780388bfa186411ab5f247819487fc4864c6e9c3106611fa347586e1"
dependencies = [
"alloc-no-stdlib",
]
@@ -794,7 +794,7 @@ dependencies = [
"alloy-serde",
"alloy-sol-types",
"alloy-trie",
- "itertools 0.13.0",
+ "itertools 0.14.0",
"serde",
"serde_json",
"serde_with",
@@ -991,7 +991,7 @@ checksum = "df948f2f9530ed0325d789ad98aa08403aaeaf55ddd6eeaf0cda143e02afab39"
dependencies = [
"alloy-json-rpc",
"alloy-transport",
- "itertools 0.13.0",
+ "itertools 0.14.0",
"reqwest",
"serde_json",
"tower",
@@ -1112,7 +1112,7 @@ version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
dependencies = [
- "windows-sys 0.60.2",
+ "windows-sys 0.61.2",
]
[[package]]
@@ -1123,7 +1123,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
dependencies = [
"anstyle",
"once_cell_polyfill",
- "windows-sys 0.60.2",
+ "windows-sys 0.61.2",
]
[[package]]
@@ -1592,9 +1592,9 @@ checksum = "4858a9d740c5007a9069007c3b4e91152d0506f13c1b31dd49051fd537656156"
[[package]]
name = "async-compression"
-version = "0.4.48"
+version = "0.4.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb61aea1a7def73ee7c350a184f0e70b32c182344e2e75bf70c9b621b83417fd"
+checksum = "ee19bd99b43e3691acbad4e840420a4881cea6c0b66a208125a824f8fd53f5a1"
dependencies = [
"compression-codecs",
"compression-core",
@@ -2074,9 +2074,9 @@ dependencies = [
[[package]]
name = "brotli"
-version = "8.0.4"
+version = "9.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5cc91aac060a7a1e25823bdccbfb6af1875b88f17c6daac97894eed8207166b3"
+checksum = "f8b851b75c23ca7873623d612fe49bd1989aeb03d08fb9432187eb253d3d4c6b"
dependencies = [
"alloc-no-stdlib",
"alloc-stdlib",
@@ -2085,9 +2085,9 @@ dependencies = [
[[package]]
name = "brotli-decompressor"
-version = "5.0.3"
+version = "6.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3a32acac15fe1967bc3986b2a6347dffc965602354ea6f450ad07e8bfd253583"
+checksum = "941cd9bd4ddab83cb46fa5a2d428f1c857b24ac78cb876cf7beb710840934bd7"
dependencies = [
"alloc-no-stdlib",
"alloc-stdlib",
@@ -2429,9 +2429,9 @@ dependencies = [
[[package]]
name = "compression-codecs"
-version = "0.4.43"
+version = "0.4.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bef16c47ba2797aa6a909cc37d39911f3a6743811fe7408ac0b0cc0276b656e9"
+checksum = "98fc98460ba0ad5317075d3632b8dfc45d0be8c4a49347c2a38272019717614a"
dependencies = [
"brotli",
"compression-core",
@@ -2913,7 +2913,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c54e03a951783e8b327515db3f2a2fd0e3bed362a96b066f341ce66ed49b4ead"
dependencies = [
"data-encoding",
- "syn 1.0.109",
+ "syn 3.0.6",
]
[[package]]
@@ -3251,8 +3251,8 @@ dependencies = [
[[package]]
name = "eid-circuits"
-version = "0.8.0"
-source = "git+https://github.com/zk-experiments/eid-circuits?tag=v0.8.0#7289e47a4056a5229b6eaedc03fbf48d8bf35af9"
+version = "0.8.2"
+source = "git+https://github.com/zk-experiments/eid-circuits?tag=v0.8.2#a4a5fe4acd365da4d5947120eac3ee7b1e1bf305"
dependencies = [
"hex",
"noir-zk-backend",
@@ -3265,8 +3265,8 @@ dependencies = [
[[package]]
name = "eid-prover"
-version = "0.8.0"
-source = "git+https://github.com/zk-experiments/eid-circuits?tag=v0.8.0#7289e47a4056a5229b6eaedc03fbf48d8bf35af9"
+version = "0.8.2"
+source = "git+https://github.com/zk-experiments/eid-circuits?tag=v0.8.2#a4a5fe4acd365da4d5947120eac3ee7b1e1bf305"
dependencies = [
"anyhow",
"csca-registry",
@@ -3415,7 +3415,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
dependencies = [
"libc",
- "windows-sys 0.59.0",
+ "windows-sys 0.61.2",
]
[[package]]
@@ -4857,9 +4857,9 @@ dependencies = [
[[package]]
name = "jsonrpsee"
-version = "0.26.0"
+version = "0.26.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f3f48dc3e6b8bd21e15436c1ddd0bc22a6a54e8ec46fedd6adf3425f396ec6a"
+checksum = "4826d5921c90b936eae1b0c09fef26697c4d7269ba5d6bb976f762a870a5ed82"
dependencies = [
"jsonrpsee-client-transport",
"jsonrpsee-core",
@@ -4875,9 +4875,9 @@ dependencies = [
[[package]]
name = "jsonrpsee-client-transport"
-version = "0.26.0"
+version = "0.26.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf36eb27f8e13fa93dcb50ccb44c417e25b818cfa1a481b5470cd07b19c60b98"
+checksum = "844daecf918f7dfb45ae84aa4ac1f07b514e9369bdfe0352d5369809e2c0827a"
dependencies = [
"base64 0.22.1",
"futures-channel",
@@ -4900,9 +4900,9 @@ dependencies = [
[[package]]
name = "jsonrpsee-core"
-version = "0.26.0"
+version = "0.26.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "316c96719901f05d1137f19ba598b5fe9c9bc39f4335f67f6be8613921946480"
+checksum = "ba6e425d1828eb60a9e054f77b60e375fbf46aabff72c46b5ea24406566f7e91"
dependencies = [
"async-trait",
"bytes",
@@ -4928,9 +4928,9 @@ dependencies = [
[[package]]
name = "jsonrpsee-http-client"
-version = "0.26.0"
+version = "0.26.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "790bedefcec85321e007ff3af84b4e417540d5c87b3c9779b9e247d1bcc3dab8"
+checksum = "6218c2612920ed6d1d230d60669c9c0ad9ee502f20b83cc43cac1807e681ddc4"
dependencies = [
"base64 0.22.1",
"http-body",
@@ -4951,9 +4951,9 @@ dependencies = [
[[package]]
name = "jsonrpsee-proc-macros"
-version = "0.26.0"
+version = "0.26.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2da3f8ab5ce1bb124b6d082e62dffe997578ceaf0aeb9f3174a214589dc00f07"
+checksum = "9cc1f1d4a2ed7619d08e9e86fa1759b16da756c5d8b02d62e98664417f3ac25d"
dependencies = [
"heck",
"proc-macro-crate",
@@ -4964,9 +4964,9 @@ dependencies = [
[[package]]
name = "jsonrpsee-server"
-version = "0.26.0"
+version = "0.26.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c51b7c290bb68ce3af2d029648148403863b982f138484a73f02a9dd52dbd7f"
+checksum = "c01a2a627365144221ad5883ce2ea3953e152e29d102f2eeca8cbfc1be4bb286"
dependencies = [
"futures-util",
"http",
@@ -4991,9 +4991,9 @@ dependencies = [
[[package]]
name = "jsonrpsee-types"
-version = "0.26.0"
+version = "0.26.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc88ff4688e43cc3fa9883a8a95c6fa27aa2e76c96e610b737b6554d650d7fd5"
+checksum = "e6e6de48c2fb8ba2773f4429c28349576f98d73a3b1d647d963f96df53210312"
dependencies = [
"http",
"serde",
@@ -5003,9 +5003,9 @@ dependencies = [
[[package]]
name = "jsonrpsee-wasm-client"
-version = "0.26.0"
+version = "0.26.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7902885de4779f711a95d82c8da2d7e5f9f3a7c7cfa44d51c067fd1c29d72a3c"
+checksum = "b8096f1f4377796f964be336eb21210b08ab979243c52c343c2e5e2f99e31fd8"
dependencies = [
"jsonrpsee-client-transport",
"jsonrpsee-core",
@@ -5015,9 +5015,9 @@ dependencies = [
[[package]]
name = "jsonrpsee-ws-client"
-version = "0.26.0"
+version = "0.26.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b6fceceeb05301cc4c065ab3bd2fa990d41ff4eb44e4ca1b30fa99c057c3e79"
+checksum = "06cd5b8daf2d7c0730731a97f96c0d1d0dd38def07001ff80df1cf6063442235"
dependencies = [
"http",
"jsonrpsee-client-transport",
@@ -5107,10 +5107,11 @@ dependencies = [
[[package]]
name = "keccak-asm"
-version = "0.1.8"
+version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd5dc2c0d691cbf7595cde551ced329cca99c2387c2cbc97754c5d0cd045d3ee"
+checksum = "f32890f646914a263e39064295005972f0e95b928254061b2aca98445f304ee9"
dependencies = [
+ "cfg-if",
"digest 0.10.7",
"sha3-asm",
]
@@ -5708,9 +5709,9 @@ checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
[[package]]
name = "noir-zk-backend"
-version = "0.3.0"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4eb67f284245690f87732dc983dc86b302339bb2e55c3e1cfe6520c5d2eb536d"
+checksum = "edc2f00dac0942afb6dd6281857101adbed6d8a39c78562f40edc21a557f04a6"
dependencies = [
"acir",
"acvm",
@@ -5732,23 +5733,27 @@ dependencies = [
[[package]]
name = "noir-zk-codegen"
-version = "0.3.0"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6b989d788696e32fe71dc56c628d44355149d5f6ff14f8c5a524e59d377c72b"
+checksum = "ee1717923eea8c2bf18568f79908fc4ddeffa1aa8235220e1e657b074d41cdc0"
dependencies = [
"hex",
"noir-zk-core",
"noir-zk-kernels",
+ "prettyplease",
+ "proc-macro2",
+ "quote",
"serde_json",
"sha2 0.10.9",
+ "syn 3.0.6",
"toml 0.9.12+spec-1.1.0",
]
[[package]]
name = "noir-zk-core"
-version = "0.3.0"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c9362e048fb6615f247bd3990c06f3d3489ba7319dcb657efa25250918195540"
+checksum = "de4caf35cd5ff9f2ad255a03e932099ac12eda64dcffffdca61ba7126be9713f"
dependencies = [
"ark-bn254",
"ark-ff 0.6.0",
@@ -5757,9 +5762,9 @@ dependencies = [
[[package]]
name = "noir-zk-kernels"
-version = "0.3.0"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49f65e1f4c4add7de04e57af2eb7f1ee573cb6a5d9a4496f3a032998855aba4f"
+checksum = "c426962f3d5ad568094e46288f13cc2c78f3a77e2f12152ad041f5fc8ef48b73"
dependencies = [
"hex",
"noir-zk-core",
@@ -5827,7 +5832,7 @@ version = "0.50.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
dependencies = [
- "windows-sys 0.59.0",
+ "windows-sys 0.61.2",
]
[[package]]
@@ -6694,7 +6699,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf"
dependencies = [
"anyhow",
- "itertools 0.10.5",
+ "itertools 0.14.0",
"proc-macro2",
"quote",
"syn 2.0.119",
@@ -6757,9 +6762,9 @@ dependencies = [
[[package]]
name = "quinn-proto"
-version = "0.11.18"
+version = "0.11.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9746dbde176634f4f2f1faf2404e30a31b2bc1e9cafb5329c95d8177a18c9fc"
+checksum = "0e750cca55fe4f0439a15d0bb529da9651e79993e8e72c61a899a36d462befbe"
dependencies = [
"aws-lc-rs",
"bytes",
@@ -6780,16 +6785,16 @@ dependencies = [
[[package]]
name = "quinn-udp"
-version = "0.5.15"
+version = "0.5.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694"
+checksum = "af66907df18639dcf4db56ca65490cabc4b27a97dbadd96f2926cca73298f016"
dependencies = [
"cfg_aliases",
"libc",
"once_cell",
"socket2",
"tracing",
- "windows-sys 0.59.0",
+ "windows-sys 0.61.2",
]
[[package]]
@@ -10230,7 +10235,7 @@ dependencies = [
"errno",
"libc",
"linux-raw-sys",
- "windows-sys 0.59.0",
+ "windows-sys 0.61.2",
]
[[package]]
@@ -10310,7 +10315,7 @@ dependencies = [
"security-framework",
"security-framework-sys",
"webpki-root-certs 1.0.9",
- "windows-sys 0.59.0",
+ "windows-sys 0.61.2",
]
[[package]]
@@ -10738,9 +10743,9 @@ dependencies = [
[[package]]
name = "sha3-asm"
-version = "0.1.8"
+version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6287fd675f713484342a89cbf0a386abef5f15919cfad607e5e1f19e1e15331"
+checksum = "471668161349031e3d415412f996b030c477488eec267cc3cadae3d06c0a367f"
dependencies = [
"cc",
"cfg-if",
@@ -10901,7 +10906,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4"
dependencies = [
"libc",
- "windows-sys 0.60.2",
+ "windows-sys 0.61.2",
]
[[package]]
@@ -11162,7 +11167,7 @@ dependencies = [
"getrandom 0.4.3",
"once_cell",
"rustix",
- "windows-sys 0.59.0",
+ "windows-sys 0.61.2",
]
[[package]]
@@ -12231,7 +12236,7 @@ version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
dependencies = [
- "windows-sys 0.59.0",
+ "windows-sys 0.61.2",
]
[[package]]
@@ -12705,9 +12710,9 @@ dependencies = [
[[package]]
name = "yoke-derive"
-version = "0.8.3"
+version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33811428bee40dbceb6d545e95754741d17a6aef9a4849f0fd62e2ba4f412a78"
+checksum = "ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71"
dependencies = [
"proc-macro2",
"quote",
@@ -12812,7 +12817,7 @@ dependencies = [
[[package]]
name = "zk-encryption"
version = "0.1.0"
-source = "git+https://github.com/zk-experiments/zk-encryption?tag=v0.1.1#82f95938b23b12fd02a9c869f1d097d41a31899b"
+source = "git+https://github.com/zk-experiments/zk-encryption?tag=v0.1.3#89d8d4bc45238c74366a9f2266e7017fbf4eb661"
dependencies = [
"ark-bn254",
"ark-ec",
@@ -12830,7 +12835,7 @@ dependencies = [
[[package]]
name = "zk-encryption-circuits"
version = "0.1.0"
-source = "git+https://github.com/zk-experiments/zk-encryption?tag=v0.1.1#82f95938b23b12fd02a9c869f1d097d41a31899b"
+source = "git+https://github.com/zk-experiments/zk-encryption?tag=v0.1.3#89d8d4bc45238c74366a9f2266e7017fbf4eb661"
dependencies = [
"ark-ff 0.6.0",
"hex",
diff --git a/Cargo.toml b/Cargo.toml
index b1c0259..2355ea7 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -10,18 +10,19 @@ license = "MIT"
publish = false
[workspace.dependencies]
-# noir-zk 0.3.0 (crates.io): layered registries, the generic pipeline kernels, Chonk via bb's FFI.
-# Every layer below is bound with the same release.
-noir-zk-core = "=0.3.0"
-noir-zk-backend = { version = "=0.3.0", features = ["packs", "http"] }
-noir-zk-codegen = "=0.3.0"
-# The identity layer: eid-circuits v0.8.0 (noir-zk 0.3.0; families eid/dsc, eid/sod, eid/document).
-eid-circuits = { git = "https://github.com/zk-experiments/eid-circuits", tag = "v0.8.0", features = ["packs", "http"] }
-eid-prover = { git = "https://github.com/zk-experiments/eid-circuits", tag = "v0.8.0" }
+# noir-zk 0.3.3 (crates.io): layered registries, the generic pipeline kernels (the key hash a
+# witness bb constrains), Chonk via bb's FFI. Every layer below is bound with the same release.
+noir-zk-core = "=0.3.3"
+noir-zk-backend = { version = "=0.3.3", features = ["packs", "http"] }
+noir-zk-codegen = "=0.3.3"
+# The identity layer: eid-circuits v0.8.2 (noir-zk 0.3.3; families eid/dsc, eid/sod, eid/document;
+# RSA steps with a 2-bit windowed exponentiation since v0.8.1).
+eid-circuits = { git = "https://github.com/zk-experiments/eid-circuits", tag = "v0.8.2", features = ["packs", "http"] }
+eid-prover = { git = "https://github.com/zk-experiments/eid-circuits", tag = "v0.8.2" }
csca-registry = { git = "https://github.com/zk-experiments/csca-registry", tag = "v0.3.1" }
-# The channel layer: zk-encryption v0.1.1 (on noir-zk 0.3.0; its frozen registry is still
-# zk-encryption@0.1.0's: the circuits, their pins and family roots unchanged; bytecode bundled).
-zk-encryption-circuits = { git = "https://github.com/zk-experiments/zk-encryption", tag = "v0.1.1", features = ["serde"] }
+# The channel layer: zk-encryption v0.1.3 (noir-zk 0.3.3; frozen as zk-encryption@0.1.3, the session
+# 6% smaller since v0.1.2; bytecode bundled).
+zk-encryption-circuits = { git = "https://github.com/zk-experiments/zk-encryption", tag = "v0.1.3", features = ["serde"] }
emit-devnet-circuits = { path = "crates/circuits" }
ark-ff = "0.6"
hex = "0.4"
diff --git a/README.md b/README.md
index 3d393c4..c99e9dc 100644
--- a/README.md
+++ b/README.md
@@ -13,8 +13,8 @@ flowchart TB
subgraph circuits["crates/circuits: the combining registry"]
direction LR
- eid["eid-circuits 0.8.0
eid/dsc, eid/sod, eid/document"]
- chan["zk-encryption 0.1.1
session, envelope, note_envelope"]
+ eid["eid-circuits 0.8.2
eid/dsc, eid/sod, eid/document"]
+ chan["zk-encryption 0.1.3
session, envelope, note_envelope"]
own["emit-devnet@0.2.0 (own)
transfer_holder,
register, identity_member"]
pl["pipelines
fold, verify, DEPLOYMENT_ROOT"]
eid --> pl
@@ -77,7 +77,7 @@ flowchart LR
end
```
-Setup: the eid DSC/SOD/document bytecode comes from the packs on circuits.zk-eid.dev (catalog SHA-256 pinned, pack SHA-256 from the catalog, every file checked against eid's registry pins); the channel layer's release is v0.1.1, whose frozen library identity is still `zk-encryption@0.1.0`.
+Setup: the eid DSC/SOD/document bytecode comes from the packs on circuits.zk-eid.dev (catalog SHA-256 pinned, pack SHA-256 from the catalog, every file checked against eid's registry pins); the channel layer is release v0.1.3, frozen as `zk-encryption@0.1.3`.
```
crates/circuits/ build.rs (codegen), circuits/manifest.toml (own and wrapped families, pipelines),
@@ -100,13 +100,13 @@ pins.toml
| what | version / pin | from | checked |
|---|---|---|---|
-| noir-zk (core, backend, codegen, kernels) | `=0.3.0` | crates.io | kernels family root `0x0eb7f815…937f` and version |
+| noir-zk (core, backend, codegen, kernels) | `=0.3.3` | crates.io | kernels family root `0x297133fa…ae43` and version |
| this repository's layers (emit: transfer_holder; identity_cache: register, member) | `emit-devnet@0.2.0`, family roots `transfer_holder` `0x2a50870b…e27a`, `register` `0x127dc46e…6c41`, `member` `0x03f6f187…64be` | this repository (`crates/circuits/noir`, frozen with `noir-zk freeze`, bytecode bundled) | library and every family root; bytecode against its pin when loaded |
-| channel layer | release `v0.1.1` (library `zk-encryption@0.1.0`, on noir-zk 0.3.0 from crates.io) | bytecode bundled in `zk-encryption-circuits`; catalog `https://circuits.zk-experiments.dev/zk-encryption/0.1.1/catalog.json` | catalog SHA-256 `d0ff52a1…43b5`; its families' roots equal the compiled-in ones |
-| identity layer | `eid-circuits@0.8.0`, git tag `v0.8.0` (`eid-circuits`, `eid-prover`) | DSC, SOD and document steps: packs on `https://circuits.zk-eid.dev`, catalog `catalog@0.8.0.json` | catalog SHA-256 `f9119063…e092`, its version and its DSC/SOD/document labels in eid's registry; each pack's SHA-256 against the catalog; every unpacked `.b64` / `.vk` against eid's registry pins |
+| channel layer | release `v0.1.3` (library `zk-encryption@0.1.3`, on noir-zk 0.3.3 from crates.io) | bytecode bundled in `zk-encryption-circuits`; catalog `https://circuits.zk-experiments.dev/zk-encryption/0.1.3/catalog.json` | catalog SHA-256 `5bb7d1b5…b2c5`; its families' roots equal the compiled-in ones |
+| identity layer | `eid-circuits@0.8.2`, git tag `v0.8.2` (`eid-circuits`, `eid-prover`) | DSC, SOD and document steps: packs on `https://circuits.zk-eid.dev`, catalog `catalog@0.8.2.json` | catalog SHA-256 `4de0e4f0…53eb`, its version and its DSC/SOD/document labels in eid's registry; each pack's SHA-256 against the catalog; every unpacked `.b64` / `.vk` against eid's registry pins |
| CSCA registry | tag `registry-20260928-1039`, root `0x27bef40a…02a2` | `https://registry.zk-eid.dev//registry.json` | file SHA-256 `17a21c0f…4444` and `commitment.root` |
-| deployment | root `0x0f5a24c0…d8a2`; `identity_register` `0x12bb22de…c445` (4); `member_transfer` `0x23410103…606a` (5) | computed by the codegen | equal to the generated constants |
-| toolchain | nargo 1.0.0-rc.3, bb 7.0.0-nightly.20260927 (via `barretenberg-rs`), reth v2.6.0, solc 0.8.30 | noirup / `cargo install`, crates.io, git tag | nargo 1.0.0-rc.3 and noir-zk-cli 0.3.0 only to refreeze this repo's layers: `nargo compile --workspace` in `crates/circuits/noir`, then `noir-zk freeze --target noir/target --out . --assets assets --library emit-devnet@0.2.0` in `crates/circuits` (CI runs it with `--check`) |
+| deployment | root `0x26c8ef80…9bf5`; `identity_register` `0x25bcf960…5730` (4); `member_transfer` `0x0bb7cc32…0d54` (5) | computed by the codegen | equal to the generated constants |
+| toolchain | nargo 1.0.0-rc.3, bb 7.0.0-nightly.20260927 (via `barretenberg-rs`), reth v2.6.0, solc 0.8.30 | noirup / `cargo install`, crates.io, git tag | nargo 1.0.0-rc.3 and noir-zk-cli 0.3.3 only to refreeze this repo's layers: `nargo compile --workspace` in `crates/circuits/noir`, then `noir-zk freeze --target noir/target --out . --assets assets --library emit-devnet@0.2.0` in `crates/circuits` (CI runs it with `--check`) |
Caches: `~/.cache/emit-devnet` (`$EMIT_DEVNET_CACHE`): the pinned files, eid's unpacked packs (the demo needs common, rsa4096, rsa2048, bp384, bp256: about 300 MB). The prover reads bb's CRS from `~/.bb-crs` (`$BB_CRS_PATH`), checked against noir-zk's pinned hashes; `scripts/srs.sh` provisions it.
@@ -171,9 +171,9 @@ Starts `emit-node node --dev` on `genesis.json` (datadir `.devnet/chain`, http 8
```
pins: ok emit-devnet layers emit-devnet@0.2.0 family roots (transfer_holder, register, member)
-pins: ok deployment root 0x0f5a24c063ff3490d08432c86662afdaa1b248977102429e2d7a30e35d02d8a2
-pins: ok pipeline identity_register root 0x12bb22def4df1c088cf5398a371ac04796fb5565680983ad9f44a9446c91c445 length 4
-pins: ok pipeline member_transfer root 0x2341010328d0e285ed1710198b0dd25810cae336839901ac8d7641dd4b07606a length 5
+pins: ok deployment root 0x26c8ef8078714da209ce35c2012a5f91a87aa8de58546937c0ceb68bd8c49bf5
+pins: ok pipeline identity_register root 0x25bcf9604364971c2f6d153e68114723a12f0a5bfe72d0f930bfd13769d45730 length 4
+pins: ok pipeline member_transfer root 0x0bb7cc32fbc09ac1b3235bb7a38af8b4c5d1f68864a0fecb16d070a8b8200d54 length 5
…
precompiles: ZK_VERIFY at 0x0000000000000000000000000000000000000100 (1200000 gas + 3/word), POSEIDON2 at 0x0000000000000000000000000000000000000101 (60 + 360/permutation)
node pid …, rpc http://127.0.0.1:8545, EmitV2Pool 0x5FbDB2315678afecb367f032d93F642f64180aa3
@@ -227,8 +227,8 @@ zkpool -w bob identity register
Proves `identity_register` (eid's DSC, SOD and document steps for the passport, with the document in this epoch's registration scope read from the pool, then `register`), with a fresh blinding `r`, verifies it locally and sends `register(proof)`. The expiry is the epoch's last second or the passport's expiry, whichever is first. In the epoch's last day (`RENEWAL_WINDOW`) the wallet registers for the next epoch instead, valid at once and until that epoch ends, so a registration never lasts less than a day. A wallet with no live registration can't transact: `deposit`, `transfer` and the rest refuse with a pointer to `identity register`.
```
-alice: registered (identity leaf 0, valid until …): identity_register proved in ≈1.9 s (40192 B proof, verified locally in 17 ms), gas 2575636 (40260 B calldata), block 2, tx 0x…
-bob: registered (identity leaf 1, valid until …): identity_register proved in ≈4.0 s (40192 B proof, verified locally in 16 ms), gas 2008077 (40260 B calldata), block 3, tx 0x…
+alice: registered (identity leaf 0, valid until …): identity_register proved in ≈1.7 s (40192 B proof, verified locally in 17 ms), gas 2574707 (40260 B calldata), block 2, tx 0x…
+bob: registered (identity leaf 1, valid until …): identity_register proved in ≈3.9 s (40192 B proof, verified locally in 16 ms), gas 2007304 (40260 B calldata), block 3, tx 0x…
```
On-chain: `register(bytes proof)`, calldata the proof alone. `ZK_VERIFY` returns 6 slots: `registry_root, date, scope, nullifier, leaf, expiry`. The pool checks the registry root is accepted, the date is within a day of the block time, `scope = registrationScope(date / 7 days)` (or, in the epoch's last day, the next epoch's), the document's nullifier is unused and `date ≤ expiry` < that epoch's end; then writes `documentRegistered[nullifier]`, appends the leaf to the identity tree (its new root joins the known roots) and emits `IdentityRegistered(leaf, index, expiry)`. Alice's is the first insert and writes the tree's filled subtrees, hence 2.58M gas against Bob's 2.01M. An observer sees the leaf, its index and expiry, the scoped nullifier, the date and the sending EOA, but the leaf is blinded: Bob, who knows Alice's address and will read her MRZ, can't tell which registration is hers. The wallet stores the leaf, index, DG1 salt, expiry and `r`.
@@ -250,7 +250,7 @@ zkpool -w alice deposit --amount 100
Every transaction proves `member_transfer`: `identity_member` (her leaf under the current identity root, today's date, a fresh DG1 commitment, the holder tag), the channel session, the DG1 envelope, `transfer_holder` and the note envelope. The inputs are two dummy notes of her own key (fresh nullifiers), the outputs a 100 ETH note and a zero note to herself (every output is 0 or at least 1/3 ETH, which `transfer_holder` checks); the channel is a throwaway (nobody can open the envelopes); fee 0.
```
-alice: deposit 100 ETH: member_transfer proved in ≈1.5 s (40192 B proof, verified locally in 17 ms), gas 3307982 (42180 B calldata), block 4, tx 0x…
+alice: deposit 100 ETH: member_transfer proved in ≈1.3 s (40192 B proof, verified locally in 17 ms), gas 3307982 (42180 B calldata), block 4, tx 0x…
```
On-chain: `transact(pipeline = member_transfer root, root, nullifiers[2], commitments[2], vPubIn = 100 ETH, vPubOut = 0, fee = 0, payout = 0, pqCiphertext (1,536 B), proof (40,192 B))` with `msg.value = 100 ETH`. `ZK_VERIFY` returns 31 slots: `identity_root, date, holder_tag`; the session's `ctx, C_t, E.x, E.y, tag, ct_commitment`; the DG1 envelope's `c_id0..5`; the transfer's `cid, root, N₀, N₁, C₀, C₁, v_in, v_out, fee, payout`; the note envelope's `c_note0..5`. The pool checks the identity root is one the identity tree had, the date, every transfer field against the calldata, `ctx = H("emit-v2/ctx", cid, N₀, N₁, C₀, C₁)`, `ct_commitment = H(pqCiphertext)`, the note root one the note tree had, the nullifiers unspent and distinct, and `msg.value = vPubIn`. It marks both nullifiers spent, appends both commitments (note tree leaves 0 and 1, each new root known from then on) and emits `NewNullifier` ×2, `NewCommitment(commitment, leafIndex)` ×2 and `Envelope(cT, e, tag, ct, pqCiphertext, cNote, cId)`. The first deposit pays for the note tree's first writes (3.31M gas; later transactions ≈2.77-2.78M). An observer sees 100 ETH enter from Alice's EOA (`vPubIn` is public); who owns the result and how it's split between the two commitments are hidden.
@@ -264,7 +264,7 @@ zkpool -w alice transfer --to bob --amount 60
The first transfer to a contact is the handshake: the session encapsulates to Bob's Grumpkin and ML-KEM keys, the DG1 envelope seals Alice's MRZ and the note envelope output 0's opening (value and randomness) under the new chain key. Inputs: her 100 note and a dummy; outputs: 60 to Bob's `pk`, 39.99 change to herself; fee 0.01 (the default).
```
-alice: transfer 60 ETH to bob (handshake): member_transfer proved in ≈1.5 s (40192 B proof, verified locally in 18 ms), gas 2772153 (42180 B calldata), block 5, tx 0x…
+alice: transfer 60 ETH to bob (handshake): member_transfer proved in ≈1.3 s (40192 B proof, verified locally in 16 ms), gas 2772309 (42180 B calldata), block 5, tx 0x…
```
On-chain: `transact` as in step 6 with `vPubIn = vPubOut = 0`, `fee = 0.01 ETH`, paid from the shielded value to `block.coinbase`. Note tree leaves 2 and 3; `NewNullifier` ×2, `NewCommitment` ×2, `Envelope`. An observer sees a member transfer with a 0.01 ETH fee from Alice's EOA and nothing of its receiver or amount. Bob's `Receiver::scan` first looks each Envelope's `C_t` up in the chain-key windows he holds, then tests its tag against his bundle's keys; this one matches the tag, so he derives the channel's first chain key from `E` and the lattice ciphertext (his ML-KEM key), opens `c_note` (checking it opens `C₀` for his `pk`) and `c_id` (Alice's MRZ), and keeps the note.
@@ -278,7 +278,7 @@ zkpool -w alice transfer --to bob --amount 5
The second transfer to Bob advances the channel's ratchet (the session encapsulates to a throwaway key: every transfer has one shape). Inputs: the 39.99 change; outputs: 5 to Bob, 34.98 to herself.
```
-alice: transfer 5 ETH to bob (ratchet index 1): member_transfer proved in ≈1.5 s (40192 B proof, verified locally in 18 ms), gas 2772481 (42180 B calldata), block 6, tx 0x…
+alice: transfer 5 ETH to bob (ratchet index 1): member_transfer proved in ≈1.3 s (40192 B proof, verified locally in 16 ms), gas 2772325 (42180 B calldata), block 6, tx 0x…
```
On-chain: `transact` as in step 7. Note tree leaves 4 and 5; the same events. An observer can't tell a handshake from a ratchet. Bob finds it by `C_t` in the window of chain keys he holds for the channel.
@@ -321,9 +321,9 @@ zkpool -w bob withdraw --amount 30 --to 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293
Three `member_transfer` transactions to himself, each on a throwaway channel with the default 0.01 fee: the 60 note into 10 + 49.99; the two smallest (5 and 10) into 14.99; 30 out of the 49.99 note to his EOA (`vPubOut = 30 ETH`, `payout` = his address), 19.98 back to himself.
```
-bob: split 1 -> 2 (10 + 49.99 ETH): member_transfer proved in ≈1.4 s (40192 B proof, verified locally in 17 ms), gas 2769131 (42180 B calldata), block 7, tx 0x…
-bob: merge 2 -> 1 (14.99 ETH): member_transfer proved in ≈1.5 s (40192 B proof, verified locally in 18 ms), gas 2772437 (42180 B calldata), block 8, tx 0x…
-bob: withdraw 30 ETH to 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC: member_transfer proved in ≈1.5 s (40192 B proof, verified locally in 18 ms), gas 2776676 (42180 B calldata), block 9, tx 0x…
+bob: split 1 -> 2 (10 + 49.99 ETH): member_transfer proved in ≈1.3 s (40192 B proof, verified locally in 17 ms), gas 2769539 (42180 B calldata), block 7, tx 0x…
+bob: merge 2 -> 1 (14.99 ETH): member_transfer proved in ≈1.3 s (40192 B proof, verified locally in 17 ms), gas 2772065 (42180 B calldata), block 8, tx 0x…
+bob: withdraw 30 ETH to 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC: member_transfer proved in ≈1.3 s (40192 B proof, verified locally in 17 ms), gas 2776772 (42180 B calldata), block 9, tx 0x…
0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC: 999999999.99657… -> 1000000029.99572… ETH
```
@@ -367,14 +367,14 @@ Alice: 100 − 60 − 5 − 2 × 0.01. Bob: 65 − 30 − 3 × 0.01. The pool ho
| step | call | pipeline | prove | gas | calldata | events | state written |
|---|---|---|---:|---:|---:|---|---|
-| Alice registers | `register` | `identity_register` | ≈1.9 s | 2,575,636 | 40,260 B | `IdentityRegistered` | `documentRegistered`, identity leaf 0 (first insert: filled subtrees), its root known |
-| Bob registers | `register` | `identity_register` | ≈4.0 s | 2,008,077 | 40,260 B | `IdentityRegistered` | `documentRegistered`, identity leaf 1, its root known |
-| Alice deposits 100 | `transact` | `member_transfer` | ≈1.5 s | 3,307,982 | 42,180 B | `NewNullifier` ×2, `NewCommitment` ×2, `Envelope` | 2 nullifiers, note leaves 0-1 (first insert: filled subtrees), 2 roots known; +100 ETH to the pool |
-| Alice → Bob 60 (handshake) | `transact` | `member_transfer` | ≈1.5 s | 2,772,153 | 42,180 B | the same | 2 nullifiers, note leaves 2-3, 2 roots known; fee to coinbase |
-| Alice → Bob 5 (ratchet) | `transact` | `member_transfer` | ≈1.5 s | 2,772,481 | 42,180 B | the same | 2 nullifiers, note leaves 4-5, 2 roots known; fee to coinbase |
-| Bob splits | `transact` | `member_transfer` | ≈1.4 s | 2,769,131 | 42,180 B | the same | 2 nullifiers, note leaves 6-7, 2 roots known; fee to coinbase |
-| Bob merges | `transact` | `member_transfer` | ≈1.5 s | 2,772,437 | 42,180 B | the same | 2 nullifiers, note leaves 8-9, 2 roots known; fee to coinbase |
-| Bob withdraws 30 | `transact` | `member_transfer` | ≈1.5 s | 2,776,676 | 42,180 B | the same | 2 nullifiers, note leaves 10-11, 2 roots known; fee to coinbase, 30 ETH to payout |
+| Alice registers | `register` | `identity_register` | ≈1.7 s | 2,574,707 | 40,260 B | `IdentityRegistered` | `documentRegistered`, identity leaf 0 (first insert: filled subtrees), its root known |
+| Bob registers | `register` | `identity_register` | ≈3.9 s | 2,007,304 | 40,260 B | `IdentityRegistered` | `documentRegistered`, identity leaf 1, its root known |
+| Alice deposits 100 | `transact` | `member_transfer` | ≈1.3 s | 3,307,982 | 42,180 B | `NewNullifier` ×2, `NewCommitment` ×2, `Envelope` | 2 nullifiers, note leaves 0-1 (first insert: filled subtrees), 2 roots known; +100 ETH to the pool |
+| Alice → Bob 60 (handshake) | `transact` | `member_transfer` | ≈1.3 s | 2,772,309 | 42,180 B | the same | 2 nullifiers, note leaves 2-3, 2 roots known; fee to coinbase |
+| Alice → Bob 5 (ratchet) | `transact` | `member_transfer` | ≈1.3 s | 2,772,325 | 42,180 B | the same | 2 nullifiers, note leaves 4-5, 2 roots known; fee to coinbase |
+| Bob splits | `transact` | `member_transfer` | ≈1.3 s | 2,769,539 | 42,180 B | the same | 2 nullifiers, note leaves 6-7, 2 roots known; fee to coinbase |
+| Bob merges | `transact` | `member_transfer` | ≈1.3 s | 2,772,065 | 42,180 B | the same | 2 nullifiers, note leaves 8-9, 2 roots known; fee to coinbase |
+| Bob withdraws 30 | `transact` | `member_transfer` | ≈1.3 s | 2,776,772 | 42,180 B | the same | 2 nullifiers, note leaves 10-11, 2 roots known; fee to coinbase, 30 ETH to payout |
## The precompiles
@@ -422,16 +422,16 @@ Each transaction is proven in-process: identity_member proves the wallet's leaf
| transaction | passport | pipeline | prove | gas |
|---|---|---|---:|---:|
-| Alice registers | US: RSA-4096 → RSA-2048 | `identity_register` | 1.89 s | 2,575,636 |
-| Bob registers | DE: brainpoolP384 → brainpoolP256 | `identity_register` | 4.05 s | 2,008,077 |
-| Alice deposits 100 | US | `member_transfer` | 1.47 s | 3,307,982 |
-| Alice → Bob 60 (handshake) | US | `member_transfer` | 1.45 s | 2,772,153 |
-| Alice → Bob 5 (ratchet) | US | `member_transfer` | 1.45 s | 2,772,481 |
-| Bob splits 60 → 10 + 49.99 | DE | `member_transfer` | 1.43 s | 2,769,131 |
-| Bob merges 5 + 10 → 14.99 | DE | `member_transfer` | 1.49 s | 2,772,437 |
-| Bob withdraws 30 | DE | `member_transfer` | 1.49 s | 2,776,676 |
+| Alice registers | US: RSA-4096 → RSA-2048 | `identity_register` | 1.68 s | 2,574,707 |
+| Bob registers | DE: brainpoolP384 → brainpoolP256 | `identity_register` | 3.86 s | 2,007,304 |
+| Alice deposits 100 | US | `member_transfer` | 1.26 s | 3,307,982 |
+| Alice → Bob 60 (handshake) | US | `member_transfer` | 1.27 s | 2,772,309 |
+| Alice → Bob 5 (ratchet) | US | `member_transfer` | 1.27 s | 2,772,325 |
+| Bob splits 60 → 10 + 49.99 | DE | `member_transfer` | 1.27 s | 2,769,539 |
+| Bob merges 5 + 10 → 14.99 | DE | `member_transfer` | 1.27 s | 2,772,065 |
+| Bob withdraws 30 | DE | `member_transfer` | 1.27 s | 2,776,772 |
-A member transfer proves in about 1.45 s (1.43-1.49 s) whatever the passport. Its cost is the fold: the ML-KEM session app (53,381 gates) and the kernels (one step kernel per app, each verifying two folded proofs). A registration costs a proof verification (1.2M), its calldata (40,260 B) and one identity-tree insert (the first one writes the tree's filled subtrees: 2.58M, later ones about 2.0M).
+A member transfer proves in about 1.27 s (1.26-1.27 s) whatever the passport. Its cost is the fold: the ML-KEM session app (50,127 gates) and the kernels (one step kernel per app, each verifying two folded proofs: `kernel_init` 12,369, `kernel_step` 25,878, `kernel_hiding` 37,233 gates). A registration costs a proof verification (1.2M), its calldata (40,260 B) and one identity-tree insert (the first one writes the tree's filled subtrees: 2.57M, later ones about 2.0M). The proving process (the wallet) peaks at about 1.0 GB for a transfer or the US registration and 1.39 GB for the DE one (`/usr/bin/time -l`).
Every proof is 40,192 bytes and verifies in 16-18 ms. A transfer's 2.77M gas: 564k calldata (EIP-7623's floor, 1.38M, isn't binding), 1.20M `ZK_VERIFY`, 34k for 66 `POSEIDON2` calls (64 tree nodes, ctx, the ciphertext commitment), about 545k decoding and packing the ML-KEM ciphertext in Solidity, and the rest storage (nullifiers, tree, known roots), the Envelope event and the payments. The first deposit pays about 540k more for the tree's first writes. The known-roots mapping costs a new slot per insert (20k more than overwriting a ring slot) and saves the ring's scan (up to 32 cold reads, 67k) on every root check: transfers cost 10-30k less than with the ring. The whole demo takes about 30 s with the packs cached (first run: about 300 MB of packs).
@@ -447,7 +447,7 @@ The passport is proved once per registration (eid's DSC, SOD and document steps:
| `identity_member` | `identity_cache/member`: link out 0 (`PayloadCommitment`), public `identity_root`, `date`, `holder_tag` | `[payload_commitment, identity_root, date, holder_tag]` | 4,729 |
| `transfer_holder` | `emit/transfer_holder`: binds `ctx` (0) and `holder_tag` (1), link out 12, the rest public | `[ctx, holder_tag, cid, root, N₀, N₁, C₀, C₁, v_in, v_out, fee, payout, note_commitment]` | 6,870 |
-- `register(payload_salt, dg1, sk, expiry, r)` parses the DG1 bytes with eid's own `parse_dg1` (eid-circuits v0.8.0's `eid_steps`), rebuilds the payload with eid's `plaintext` and recomputes `commit(payload_salt, payload)`, which the kernel checks equals the document step's link; asserts `expiry ≤` the passport's date of expiry (the MRZ's, last second, UTC); publishes the leaf `L = H(IDENTITY, H(PK, sk), H(payload), expiry, r)` (`IDENTITY = "emit-v2/identity/v2"`; the holder's shielded address, the six-field DG1 payload hashed, the expiry, and `r`, a uniform random blinding the wallet draws and keeps) and `expiry`. The blinding is what keeps the registration private: the holder hands the shielded address to anyone who pays them, and a payee reads the MRZ from their envelopes, so without `r` either could recompute `L` and find the registration. It is the fifth input, which costs one gate: Poseidon2 absorbs three per permutation, so four inputs and five both take two.
+- `register(payload_salt, dg1, sk, expiry, r)` parses the DG1 bytes with eid's own `parse_dg1` (eid-circuits v0.8.2's `eid_steps`), rebuilds the payload with eid's `plaintext` and recomputes `commit(payload_salt, payload)`, which the kernel checks equals the document step's link; asserts `expiry ≤` the passport's date of expiry (the MRZ's, last second, UTC); publishes the leaf `L = H(IDENTITY, H(PK, sk), H(payload), expiry, r)` (`IDENTITY = "emit-v2/identity/v2"`; the holder's shielded address, the six-field DG1 payload hashed, the expiry, and `r`, a uniform random blinding the wallet draws and keeps) and `expiry`. The blinding is what keeps the registration private: the holder hands the shielded address to anyone who pays them, and a payee reads the MRZ from their envelopes, so without `r` either could recompute `L` and find the registration. It is the fifth input, which costs one gate: Poseidon2 absorbs three per permutation, so four inputs and five both take two.
- `identity_member(identity_root, date, sk, payload, payload_salt, expiry, r, index, path, ctx)` recomputes the leaf (a wrong `r` gives another leaf, not in the tree), checks its depth-32 path to `identity_root` and `date ≤ expiry`, and returns a fresh `commit(payload_salt, payload)` as its link (the DG1 envelope continues it unchanged) and the holder tag `H(HOLDER, sk, ctx)` (`HOLDER = "emit-v2/holder"`).
- `transfer_holder` is the JoinSplit (`emit::transfer`) with `ins[0].sk = ins[1].sk` (dummies included), every output value 0 or at least `MIN_NOTE_VALUE` (1/3 ETH in wei, 104 gates), and `holder_tag = H(HOLDER, ins[0].sk, ctx)` in its record; the kernel binds it to the member's published tag, and `ctx` to the session's.
diff --git a/crates/circuits/circuits/manifest.toml b/crates/circuits/circuits/manifest.toml
index ff8a084..9d8dfbd 100644
--- a/crates/circuits/circuits/manifest.toml
+++ b/crates/circuits/circuits/manifest.toml
@@ -74,7 +74,7 @@ slots = ["identity_root", "date", "holder_tag"]
# ------------------------------------------------------------ wrapped layers (build.rs: noir_zk_codegen::wrapped)
-# The identity layer: eid-circuits v0.8.0 (DSC, SOD and document steps).
+# The identity layer: eid-circuits v0.8.2 (DSC, SOD and document steps).
[[family]]
layer = "eid"
name = "dsc"
@@ -90,7 +90,7 @@ layer = "eid"
name = "document"
source = "eid-circuits"
-# The channel layer: zk-encryption v0.1.1 (its frozen library zk-encryption@0.1.0).
+# The channel layer: zk-encryption v0.1.3 (frozen as zk-encryption@0.1.3).
[[family]]
layer = "channel"
name = "session"
diff --git a/crates/circuits/noir/circuits/register/Nargo.toml b/crates/circuits/noir/circuits/register/Nargo.toml
index 3ae86e2..d66653b 100644
--- a/crates/circuits/noir/circuits/register/Nargo.toml
+++ b/crates/circuits/noir/circuits/register/Nargo.toml
@@ -6,4 +6,4 @@ compiler_version = ">=1.0.0"
[dependencies]
identity_cache = { path = "../../lib/identity_cache" }
-eid_steps = { git = "https://github.com/zk-experiments/eid-circuits", tag = "v0.8.0", directory = "noir/lib/steps" }
+eid_steps = { git = "https://github.com/zk-experiments/eid-circuits", tag = "v0.8.2", directory = "noir/lib/steps" }
diff --git a/crates/circuits/noir/lib/emit/Nargo.toml b/crates/circuits/noir/lib/emit/Nargo.toml
index 90c404a..5d0365e 100644
--- a/crates/circuits/noir/lib/emit/Nargo.toml
+++ b/crates/circuits/noir/lib/emit/Nargo.toml
@@ -5,5 +5,5 @@ authors = ["zk-experiments"]
compiler_version = ">=1.0.0"
[dependencies]
-channel = { git = "https://github.com/zk-experiments/zk-encryption", tag = "v0.1.1", directory = "noir/lib/channel" }
+channel = { git = "https://github.com/zk-experiments/zk-encryption", tag = "v0.1.3", directory = "noir/lib/channel" }
poseidon = { tag = "v0.3.0", git = "https://github.com/noir-lang/poseidon" }
diff --git a/crates/circuits/noir/lib/identity_cache/Nargo.toml b/crates/circuits/noir/lib/identity_cache/Nargo.toml
index 5be025a..c1d450e 100644
--- a/crates/circuits/noir/lib/identity_cache/Nargo.toml
+++ b/crates/circuits/noir/lib/identity_cache/Nargo.toml
@@ -6,6 +6,6 @@ compiler_version = ">=1.0.0"
[dependencies]
emit = { path = "../emit" }
-channel = { git = "https://github.com/zk-experiments/zk-encryption", tag = "v0.1.1", directory = "noir/lib/channel" }
-# The document step's DG1 parsing and payload (eid-circuits v0.8.0, the release the pipelines fold).
-eid_steps = { git = "https://github.com/zk-experiments/eid-circuits", tag = "v0.8.0", directory = "noir/lib/steps" }
+channel = { git = "https://github.com/zk-experiments/zk-encryption", tag = "v0.1.3", directory = "noir/lib/channel" }
+# The document step's DG1 parsing and payload (eid-circuits v0.8.2, the release the pipelines fold).
+eid_steps = { git = "https://github.com/zk-experiments/eid-circuits", tag = "v0.8.2", directory = "noir/lib/steps" }
diff --git a/crates/cli/src/document.rs b/crates/cli/src/document.rs
index 7cd81cd..932a7db 100644
--- a/crates/cli/src/document.rs
+++ b/crates/cli/src/document.rs
@@ -1,6 +1,6 @@
//! The six synthetic passports (`fixtures/documents.json`, from the experiments repository: a
//! mock CSCA, the complete EF.SOD with its DSC, and DG1 each), the csca-registry of their CSCAs
-//! the devnet accepts, and the inputs of their registration's eid steps (eid-prover v0.8.0).
+//! the devnet accepts, and the inputs of their registration's eid steps (eid-prover v0.8.2).
use csca_registry::output::Registry;
use zk_encryption_circuits::wallet::Fr;
diff --git a/pins.toml b/pins.toml
index 0a89bdd..22b3f5e 100644
--- a/pins.toml
+++ b/pins.toml
@@ -5,9 +5,9 @@
[noir-zk]
# From crates.io; every layer is bound with it.
-version = "0.3.0"
+version = "0.3.3"
# noir-zk-kernels/kernels/step: the last leaf of every pipeline root.
-kernels_family_root = "0x0eb7f8157a5b52a81ce181f7dca9e0190e738dc5cb41dde4d3fdde618b84937f"
+kernels_family_root = "0x297133fa2fe6ee1897087e26d3c5e6d6a1316195d7fad3d34809c182a341ae43"
[emit]
# This repository's layers (crates/circuits/noir), frozen by `noir-zk freeze`: the transfer app
@@ -19,19 +19,18 @@ register = "0x127dc46e65a5b323265eab1bd7eb35f5291cebbda35a56d35252c8af63846c41"
member = "0x03f6f1875f4202a360af7b6cc88c52d3cee772896e97181466c8f9bcd15864be"
[zk-encryption]
-# Release v0.1.1 (git tag, on noir-zk 0.3.0). Its frozen registry is still zk-encryption@0.1.0's
-# (the [library] its family roots commit to): the release's catalog lists the same roots.
-release = "0.1.1"
-library = "zk-encryption@0.1.0"
-catalog = "https://circuits.zk-experiments.dev/zk-encryption/0.1.1/catalog.json"
-catalog_sha256 = "d0ff52a1dce5d4db7cdea92c2398a3c8ce28f67f4b8ae77bf9cb2bfae66643b5"
+# Release v0.1.3 (git tag, on noir-zk 0.3.3), frozen as zk-encryption@0.1.3.
+release = "0.1.3"
+library = "zk-encryption@0.1.3"
+catalog = "https://circuits.zk-experiments.dev/zk-encryption/0.1.3/catalog.json"
+catalog_sha256 = "5bb7d1b5d253d49c8ba0c4d974b73270a58c4535ef4dc9861f2be9214e9bb2c5"
[eid]
-# The identity layer, v0.8.0: its DSC, SOD and document steps from the release's packs.
-library = "eid-circuits@0.8.0"
+# The identity layer, v0.8.2 (on noir-zk 0.3.3): its DSC, SOD and document steps from the release's packs.
+library = "eid-circuits@0.8.2"
packs = "https://circuits.zk-eid.dev"
-catalog = "https://circuits.zk-eid.dev/catalog@0.8.0.json"
-catalog_sha256 = "f91190637a0845061649f7935872e2070468c7bd7b7d9ebe99510178b917e092"
+catalog = "https://circuits.zk-eid.dev/catalog@0.8.2.json"
+catalog_sha256 = "4de0e4f0a6a03e64e7cdcf0c724901c6b2cb0f742184a46d750f935c856753eb"
[csca]
# The published CSCA registry release (the devnet also accepts the synthetic fixtures' root).
@@ -41,6 +40,6 @@ registry = "https://registry.zk-eid.dev/registry-20260928-1039/registry.json"
registry_sha256 = "17a21c0f7997de83a7ebc9296b6a041dc84286e4805374037faac6dd8bcf4444"
[deployment]
-root = "0x0f5a24c063ff3490d08432c86662afdaa1b248977102429e2d7a30e35d02d8a2"
-identity_register = { root = "0x12bb22def4df1c088cf5398a371ac04796fb5565680983ad9f44a9446c91c445", length = 4 }
-member_transfer = { root = "0x2341010328d0e285ed1710198b0dd25810cae336839901ac8d7641dd4b07606a", length = 5 }
+root = "0x26c8ef8078714da209ce35c2012a5f91a87aa8de58546937c0ceb68bd8c49bf5"
+identity_register = { root = "0x25bcf9604364971c2f6d153e68114723a12f0a5bfe72d0f930bfd13769d45730", length = 4 }
+member_transfer = { root = "0x0bb7cc32fbc09ac1b3235bb7a38af8b4c5d1f68864a0fecb16d070a8b8200d54", length = 5 }