Saltar al contenido principal

Deploying Identity Contracts on BlockDAG testnet

Zikuani requires the iden3 and some of the ZK Passport libraries to manage the identity related operations. iden3 is a next-generation private access control based on self-sovereign identity, designed for decentralised and trust-minimised environments. ZK Passport is a novel solution that turns a regular biometric passport into a flexible digital identity credential for Web3. Importantly, this is done without compromising the security of your sensitive data by using zero-knowledge proofs.

This guide explains how to install and deploy the iden3-contracts and the zk-passport on a BlockDAG EVM-compatible network.

List of Iden3 Smart Contracts deployed in BlockDag testnet​

If you don't want to deploy the contracts yourself, just use the already available in BlockDag testnet, at the following addresses:

Smart contractAddress
State0x769671b481BA59414733BA95fe8aD2731d6652E6
Validator MTP0x3998e052431e7008687ACEd665795dB4d33B1a10
Validator SIG0x1Cd67dE5790B7612BB5787fFaB319191fb90EDE7
Validator V30xD3622eC51837a46C7979A4742Db81A647cd4EC14
Universal Verifier0x1df35a82599809BEEa7f3c1Ce24e10d1F0a26914
Universal Verifier V20x1df35a82599809BEEa7f3c1Ce24e10d1F0a26914
Identity Tree Store0x5c9Ab5CFB628034987f8f083E3BC39dB09bb8DD1

List of Rarimo's ZK Passport Smart Contracts deployed in BlockDag testnet​

Smart contractAddress
PoseidonT30xb8b9878dD82b60A5e682525484366188838B8181
PoseidonUnit2L0x22bcd73CB4caAB3fd019061A08d66b1cCF0317A8
PoseidonT40x4DdA2CdaaCBaea59F23976bA08041094F2115B10
PoseidonUnit3L0xea0c42239213C2f31FF09373133650F615E33cbF
RegistrationSMT0x9C01fc3f623DD7290868a27aC97e0C2B20C7C475

Prerequisites​

1. Clone the Repository​

git clone https://github.com/iden3/contracts.git iden3-contracts
cd iden3-contracts

2. Install Dependencies​

yarn install

Or with npm:

npm install

3. Configure Hardhat for BlockDAG​

Edit or create hardhat.config.ts or hardhat.config.js, for instance:

import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";

const config: HardhatUserConfig = {
solidity: "0.8.20",
networks: {
localhost: {
url: "http://127.0.0.1:8545",
accounts: [privateKey]
},
amoy: {
url: "https://rpc-amoy.polygon.technology/",
accounts: [privateKey]
},
"blockdag-testnet": {
chainId: 1043,
url: "https://test-rpc.primordial.bdagscan.com/",
accounts: [privateKey],
gasPrice: 1_000_000_000, // 1 gwei in wei,
},
}
};

export default config;

4. Then run the deployment scripts:​

  1. Deploy create2AnchorAddress that we use for unified addresses
    npx hardhat run scripts/deploy/deployCreate2AddressAnchor.ts --network blockdag-testnet
  2. Deploy libraries contracts
    npx hardhat run scripts/deploy/deployLibraries.ts --network blockdag-testnet
  3. Deploy State contract
    npx hardhat run scripts/deploy/deployState.ts --network blockdag-testnet
  4. Deploy Identity Tree Store contract
    npx hardhat run scripts/deploy/deployIdentityTreeStore.ts --network blockdag-testnet
  5. Deploy Validators contracts
    npx hardhat run scripts/deploy/deployValidators.ts --network blockdag-testnet
  6. Deploy Universal Verifier contract
    npx hardhat run scripts/deploy/deployUniversalVerifier.ts --network blockdag-testnet
  7. Add validators to whitelisted validators in Universal Verifier
    npx hardhat run scripts/maintenance/addValidatorsToUniversalVerifier.ts --network blockdag-testnet

Install Rarimo's ZK Passport​

First configure Hardhat in a similar way as done with iden3:

import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";

const config: HardhatUserConfig = {
solidity: "0.8.20",
networks: {
localhost: {
url: "http://127.0.0.1:8545",
accounts: [privateKey]
},
amoy: {
url: "https://rpc-amoy.polygon.technology/",
accounts: [privateKey]
},
"blockdag-testnet": {
chainId: 1043,
url: "https://test-rpc.primordial.bdagscan.com/",
accounts: [privateKey],
gasPrice: 1_000_000_000, // 1 gwei in wei,
},
}
};

And then run:

```bash
npx hardhat migrate --network blockdag-testnet --verify

6. Troubleshooting​

Replacement Transaction Underpriced​

You may need to set a higher gasPrice:

gasPrice: 1000000000 // or higher

7. Notes​

  • BlockDAG uses a custom EVM-compatible chain (Chain ID 1043).
  • Most tooling works the same as Ethereum, but some verification features may be unsupported.

8. Resources​