LogoLogo
  • Introduction
  • Quick Start
  • ⭕HollowDB
    • Usage
    • Supported Wallets
    • Modes of Operation
    • Usage with Bundlr
    • Contract Operations
    • Caching Options
    • HollowDB-as-a-Service
  • 🔐Zero-Knowledge Proofs
    • Background
    • HollowDB Authentication
    • HollowDB Prover
    • Usage with Proofs
    • Proofs from Signatures
  • ⚒️Use-Cases
    • 👀Overview
    • 📆Calendar
    • 🔓Anonymous Authentication
    • 👤Persona
Powered by GitBook
On this page
  • Using Proofs
  • Using Whitelisting
  1. HollowDB

Modes of Operation

Proofs & whitelisting.

PreviousSupported WalletsNextUsage with Bundlr

Last updated 1 year ago

HollowDB has two modus operandi: proofs and whitelisting; both can be enabled together, or separately.

Mode
Put
Update
Remove
Get

Proofs

-

Zero-Knowledge Proof

Zero-Knowledge Proof

-

Whitelisting

PUT whitelist

UPDATE whitelist

UPDATE whitelist

-

Using Proofs

Using zero-knowledge proofs gives full control to the users on updating the value at their key. When proofs are enabled:

  • Anyone can read and put.

  • To update or remove a value at some key, user must provide a zero-knowledge proof (ZKP) of preimage knowledge of that key.

HollowDB makes use of a circuit that we call "HollowDB Authentication" circuit, to which you can find more information at:

You can enable or disable proof checking with the following Admin command:

const isProofRequired = true; // or false
await admin.updateProofRequirement("auth", isProofRequired);

If you are deploying your own contract, you must also provide the verification key that the proof verifier will use. You can find HollowDB's keys . You can either provide the key in the initial state, or use the Admin to update the verification key at a later time:

await admin.updateVerificationKey("auth", newVerificationKey);

Using Whitelisting

Whitelisting is an alternative authorization mechanism that can be used within HollowDB. It can provide a fine-grained control over who can put, update, or remove a value to the database. When whitelisting is enabled:

  • Anyone can read.

  • To put, the user must have been put-whitelisted by the contract owner.

  • To update or remove, the user must have been update-whitelisted by the contract owner.

There is a separate whitelist for put and update/remove. You can enable/disable them with the Admin:

const isPutWhitelistRequired = true; // or false
const isUpdateWhitelistRequired = true; // or false
await admin.updateWhitelistRequirement('put', isPutWhitelistRequired);
await admin.updateWhitelistRequirement('update', isUpdateWhitelistRequired);

You can add & remove users from the whitelist using the Admin:

const whitelistType = "put"; // or "update"

// add some users
const addressesToAdd = [address1, address2 /*, ... */];
await admin.updateWhitelist(addressesToAdd, whitelistType, 'add');

// remove some users
const addressesToRemove = [address3, address4 /*, ... */];
await admin.updateWhitelist(addressesToRemove, whitelistType, 'remove');
⭕
HollowDB Authentication
here