Deployment Addresses

Contract Addresses

The proxy address is the canonical entry point for all interactions on each network.

Networks

Network
Chain ID
Virtual Chain ID
Nullmask Proxy

Ethereum Mainnet

1

43615

0x88888888Eb71E1D68aD0C471C6893EdEEa00B026

Arbitrum One

42161

43617

0x8888888838DFf5A522118E461a2B926bB8Bfb4A2

Base

8453

43618

0x8888888838DFf5A522118E461a2B926bB8Bfb4A2

BSC

56

43619

0x8888888838DFf5A522118E461a2B926bB8Bfb4A2

MegaETH

4326

43616

0x8888888838DFf5A522118E461a2B926bB8Bfb4A2

Ethereum Sepolia

11155111

43611

0x8D7E5c312eFeb54124C4966005F923D3A3b0E04D

Deployed Contracts per Network

Each deployment consists of:

Contract
Purpose

NullmaskProxy

Main entry point (ERC1967 proxy)

Nullmask (implementation)

Logic contract behind proxy

ShieldedTransferVerifier

Transfer proof verification

ShieldedWithdrawalVerifier

Withdrawal proof verification

ShieldedSwapVerifier

Swap proof verification

AdminUpgradeController

Upgrade authorization

Poseidon2T4Unrolled

Hash function library

ZKTranscriptLib

Shared verifier library

Verifying Contracts

Verifier contracts are generated from compiled Noir circuits. They are symlinked from circuits/*/target/ to contracts/contracts/. When circuits are recompiled, the verifiers update automatically.

To deploy with new verifiers:

Alternatively, update verifiers without redeploying the full contract:

Last updated