Add human verification to your dApp with a single contract call. No SDKs, no APIs, no databases.
IdentityRegistry
Monad TestnetCore contract for identity verification and ZK proof storage
MonadHumanToken
Monad TestnetERC-721 soulbound token minted upon verification
MonadIDSubscription
Monad TestnetB2B subscription management with on-chain payments
Choose your preferred language or framework. All examples show how to check if a wallet is verified.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;
interface IMonadID {
function isHuman(address wallet) external view returns (bool);
function isOver18(address wallet) external view returns (bool);
function isUnique(address wallet) external view returns (bool);
}
contract MyDApp {
IMonadID public monadId;
constructor() {
monadId = IMonadID(0x2541a918E3274048b18e9841D6391b64CDdCC4b0);
}
modifier onlyHumans() {
require(monadId.isHuman(msg.sender), "Not verified");
_;
}
modifier onlyAdults() {
require(monadId.isOver18(msg.sender), "Must be 18+");
_;
}
function protectedAction() external onlyHumans {
// Only verified humans can call this
}
function adultOnlyAction() external onlyAdults {
// Only verified adults can call this
}
}Returns true if the wallet has completed identity verification.
returns bool
Returns true if the wallet owner proved they are 18 or older.
returns bool
Returns true if the wallet has a unique, non-duplicate identity commitment.
returns bool
Returns the full identity struct: isHuman, isOver18, commitmentHash, tokenId, verifiedAt.
returns Identity