Skip to content

feat!: include init_hash in private initialization nullifier (backport #21427)#21736

Merged
nchamo merged 4 commits intobackport-to-v4-next-stagingfrom
claudebox/da2e780cdbdce797-2
Mar 18, 2026
Merged

feat!: include init_hash in private initialization nullifier (backport #21427)#21736
nchamo merged 4 commits intobackport-to-v4-next-stagingfrom
claudebox/da2e780cdbdce797-2

Conversation

@AztecBot
Copy link
Collaborator

Summary

Backport of #21427 to v4-next.

The private initialization nullifier was computed as just address.to_field(). Anyone who knows a contract's address can compute this nullifier and check for its existence in the nullifier tree, revealing whether the contract has been initialized. This is a privacy leak for fully private contracts.

The private initialization nullifier is now computed as poseidon2_hash(address, init_hash) with a dedicated domain separator (DOM_SEP__PRIVATE_INITIALIZATION_NULLIFIER). Since init_hash is not publicly available for fully private contracts, address knowledge alone is no longer sufficient to determine initialization status.

Cherry-pick conflicts resolved

  • migration_notes.md: Kept only the init_hash migration note, dropped unrelated next-only notes (epochNumber, L2ToL1 witness)
  • deployment_proofs.nr: Added new assert_contract_was_initialized_by_with_wrong_init_hash_fails test, updated error message for non-inclusion test
  • constants_tests.nr: Added DOM_SEP__PRIVATE_INITIALIZATION_NULLIFIER import, updated tester size from <51, 44> to <51, 45> (excluded DOM_SEP__SINGLE_USE_CLAIM_NULLIFIER which doesn't exist on v4-next)
  • private_execution.test.ts: Merged imports from both sides (kept v4-next's AppendOnlyTreeSnapshot, PartialStateReference, StateReference + added PR's randomContractInstanceWithAddress, MerkleTreeId, NativeWorldStateService)

ClaudeBox log: https://claudebox.work/s/da2e780cdbdce797?run=2

@AztecBot AztecBot added ci-draft Run CI on draft PRs. claudebox Owned by claudebox. it can push to this PR. labels Mar 18, 2026
@AztecBot AztecBot force-pushed the claudebox/da2e780cdbdce797-2 branch from b854e84 to f55ecc8 Compare March 18, 2026 13:33
nchamo and others added 2 commits March 18, 2026 13:46
…fier (PR #21427)

Cherry-pick of merge commit 1c9652a with conflicts.
Resolved conflicts in:
- migration_notes.md: kept only init_hash migration note
- constants_tests.nr: added DOM_SEP__PRIVATE_INITIALIZATION_NULLIFIER import, tester size <51, 45>
- private_execution.test.ts: merged imports from both sides
@AztecBot AztecBot force-pushed the claudebox/da2e780cdbdce797-2 branch from f55ecc8 to 6c9db81 Compare March 18, 2026 13:47
@nchamo nchamo marked this pull request as ready for review March 18, 2026 14:10
@nchamo nchamo enabled auto-merge (squash) March 18, 2026 14:29
@AztecBot
Copy link
Collaborator Author

Flakey Tests

🤖 says: This CI run detected 2 tests that failed, but were tolerated due to a .test_patterns.yml entry.

\033FLAKED\033 (8;;http://ci.aztec-labs.com/1fb23cf677c51593�1fb23cf677c515938;;�):  yarn-project/end-to-end/scripts/run_test.sh simple src/e2e_epochs/epochs_invalidate_block.parallel.test.ts "proposer invalidates previous block with shuffled attestations" (124s) (code: 0) group:e2e-p2p-epoch-flakes
\033FLAKED\033 (8;;http://ci.aztec-labs.com/63ba804a11fa2e39�63ba804a11fa2e398;;�):  yarn-project/end-to-end/scripts/run_test.sh simple src/e2e_p2p/duplicate_proposal_slash.test.ts (279s) (code: 0) group:e2e-p2p-epoch-flakes

@nchamo nchamo merged commit db2bdce into backport-to-v4-next-staging Mar 18, 2026
9 checks passed
@nchamo nchamo deleted the claudebox/da2e780cdbdce797-2 branch March 18, 2026 14:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci-draft Run CI on draft PRs. claudebox Owned by claudebox. it can push to this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants