ZK Passport on Gnosis Chain
The ZK Passport registry runs natively on Gnosis Chain (chain ID 100) with its own StateKeeper, Sparse Merkle Trees and Registration2. Contracts that verify query proofs on Gnosis read the registration root directly, so no cross-chain replication is needed.
The deployment supports every document type registered on Rarimo L2, and adds the NoAARecovery module for documents without Active Authentication. See the smart contracts reference for the interfaces.
Registration and query proofs must be generated with the circuits the verifiers were built from:
- Register proofs: passport-zk-circuits-noir v0.2.7 (SHA-256 full-modulus certificate leaf);
- Query proofs: passport-zk-circuits-noir v0.2.6 (
query_identity,query_identity_td1).
Proofs from older circuit releases are rejected.
Registry
| Name | Address |
|---|---|
| StateKeeper | 0x5228826C38D322302470463346dc60341F52b6b9 |
| RegistrationSMT | 0xF8432966Cc9e34673f707F85cB30789d227FCF2a |
| CertificatesSMT | 0x1CF1D4f237e2b92E8EC1eC705b556e6841125dC4 |
| Registration2 | 0x31002550646F755A5BCcC2b45150524fC9675e34 |
| NoAARecovery | 0xd7190aad9B6F1b9fdB2dd527A202A4557e89258a |
| NoirKeyPossession | 0x2821fc8c55023d5Fe70623c0225Ac83DE54Eb76E |
| EvidenceRegistry | 0xb919966581cfb63a5a8C4A686910a946347c240b |
| EvidenceDB | 0x2dD609280A1DE3884adB13B64FFd98CD68716DC2 |
The registry is owned by the Safe 0x87f89d2BAc98F54969488cBbf676d4b6822D4958: StateKeeper.isOwner gates StateKeeper, Registration2, both trees and NoAARecovery.
Configuration:
- ICAO master tree root:
0x490355b1c9cca56d89c180780c5ea66c1766d57cf22670c7a9a07dc18b835a4f, the same as on Rarimo L2; - Tree height: 80;
NoAARecovery: recovery delay 3 days, lock duration 30 days.
Libraries
Poseidon libraries with the circomlibjs bytecode, linked by the trees and by the Poseidon-based dispatchers.
| Library | Address |
|---|---|
| PoseidonUnit1L | 0xC7F2Fb0b229a29d3E5D204212f81ac75C9Db5888 |
| PoseidonUnit2L | 0xCAF0A58380e1e11f8a5b6A4E40Cc80254ca61077 |
| PoseidonUnit3L | 0xAAfc6100d638C6a0d1C0633c27bae6aB03A50550 |
| PoseidonUnit4L | 0x00C3e1dfBF6e5DF4b5B8074c7080d356CCed08C9 |
| PoseidonUnit5L | 0x0553bc2395dF5780D516869a16b38F8C25Cc7159 |
Certificate dispatchers
Verify the signature of a document signer certificate (DSC) by its country signing certificate (CSCA). The type name encodes the CSCA signature and the DSC key size.
Notes:
C_ECDSA_BRAINPOOLP384R1_SHA384_768andC_ECDSA_BRAINPOOLP512R1_SHA512_1024: verifying a brainpool-384 or brainpool-512 ECDSA signature in Solidity costs more gas than a Gnosis block can hold (17M), so certificates signed by such CSCAs are valid but can not be registered on Gnosis;- 14 types have never been used on Rarimo L2:
C_RSA_SHA1_4096,C_RSA_SHA512_2048,C_RSA_SHA512_4096,C_RSAPSS_SHA2_4096,C_RSAPSS_SHA512_2048,C_RSAPSS_SHA512_4096,C_RSAPSS_SHA384_2048,C_ECDSA_SECP256R1_SHA1_256,C_ECDSA_SECP384R1_SHA2_512,C_ECDSA_SECP384R1_SHA384_512,C_ECDSA_BRAINPOOLP384R1_SHA2_512,C_ECDSA_BRAINPOOLP384R1_SHA384_512,C_ECDSA_BRAINPOOLP384R1_SHA384_768,C_ECDSA_BRAINPOOLP512R1_SHA512_1024.
Signers
Verify the CSCA signature for the certificate dispatchers.
Passport dispatchers
Verify Active Authentication (AA) of a document, or skip it for documents without AA.
| Type | Dispatcher |
|---|---|
P_NO_AA | 0xd77ee3b6Ba39027B88D171C376c115B4BAe86939 |
P_RSA_SHA1_2688 | 0x5Bda24a73428699100867b8b181Daf8BC88C140B |
P_RSA_SHA1_2688_3 | 0x09B0D041B54bf477954d8d86de9606260C615C66 |
P_ECDSA_SHA1_2704 | 0xE625210e51Ae281816A0BB5E8c97B94313d723BE |
P_RSA_SHA256_2688 | 0x3784Fb896D3e4F57CC4abD7338DDF66f1182c38a |
Authenticators
Verify the AA signature for the passport dispatchers: PRSASHAAuthenticator for the RSA types and PECDSASHA1Authenticator for P_ECDSA_SHA1_2704. P_NO_AA has no authenticator.
| Type | Parameters | Address |
|---|---|---|
P_RSA_SHA1_2688 | e = 65537, SHA-1 | 0x81d70c0B14F07838aD8b486b7BFE12D5676362De |
P_RSA_SHA1_2688_3 | e = 3, SHA-1 | 0x366113e10A19B15d9ec65A5618dbeD35cAF3d8b5 |
P_ECDSA_SHA1_2704 | brainpoolP256r1, SHA-1 | 0xF782175da72EAE1fbb1d2CB96be9BC5689b26940 |
P_RSA_SHA256_2688 | e = 65537, SHA-256 | 0x9D67Dc8af21ec16Ee53059aaa339718D1A58344b |
Register verifiers
Verify the register proof of a document type. A circuit name encodes the document parameters:
<signature type>_<hash size>_<document type>_<encapsulated content chunks>_<encapsulated content shift>_<DG1 shift>_<AA>
where the document type is 3 for passports (TD3) and 1 for ID cards (TD1), and <AA> is NA for documents without Active Authentication or <AA signature type>_<DG15 shift>_<DG15 chunks>_<AA key shift> otherwise.
Noir (77)
Noir (UltraPlonk) verifiers, used by the current app. The type of a verifier in Registration2 is Z_NOIR_PASSPORT_ followed by the circuit name, for example Z_NOIR_PASSPORT_1_256_3_5_576_248_NA. Types without Active Authentication (..._NA) are also accepted by NoAARecovery.
Circom (45)
Groth16 verifiers used by older app versions.
Per-passport circuits (35). The type is Z_PER_PASSPORT_ followed by the circuit name.
Universal and ID card circuits (10):
| Type | Address |
|---|---|
Z_UNIVERSAL_4096 | 0x92FE5c243Ca53b4617C30578Aea0c5D508050C3d |
Z_UNIVERSAL_2048 | 0x0F7160821b42734EE948326E8C00b0DA8Ab80285 |
Z_UNIVERSAL_2048_V2 | 0x6623073EE974b807D3c6fEc17c7C693d7C051631 |
Z_UNIVERSAL_PSS_2048_S32_E2 | 0x959F964aE49d3Afa1eE1aa22dEc0fB2478A75cDe |
Z_UNIVERSAL_PSS_2048_S32_E17 | 0xDD568bB5e529D12d8E1a7F38834eca34781A8968 |
Z_UNIVERSAL_PSS_2048_S64_E17 | 0xb2bCfD68DB6cB551DF783e87F5FB36624a1cfBB2 |
Z_INTERNAL | 0xa4eFb783389C35046D2f8Bce81F4668bF603a112 |
Z_INTERNAL_OPT | 0x3aae75a002F52802f6f44a9a30733FC05cC0645B |
Z_MNE_OPT | 0x6501f9AAC888bCbEA53b178FC0143754298F9784 |
Z_MNE_OPT_2 | 0x1403EB3469F261CACE3E68e5aF78e610D34c1CAA |
Voting
See the Freedom Tool smart contracts reference for ProposalsState and the voting contracts on Gnosis.