Human-Readable Identity Infrastructure for Tokenized Real World Assets
RWA ID is a non-custodial identity layer that enables RWA platforms to issue human-readable, soulbound ENS subdomains for clients, tokenized assets, and issuers. Built on proven Web3 standards (ENS + EIP-3668 CCIP-Read), RWA ID provides universal identity resolution across wallets and dApps.
joe.test.rwa-id.eth
RWA platforms today face critical identity infrastructure challenges:
- Opaque wallet addresses create poor user experience
- Fragmented identities across chains hinder interoperability
- No shared infrastructure forces every platform to build internally
- Poor legibility for assets and participants reduces institutional trust
Result: Every platform builds identity systems independently. Nothing interoperates.
RWA ID provides neutral, shared identity infrastructure that:
- ✅ Issues human-readable names (e.g.,
joe.test.rwa-id.eth) - ✅ Resolves in all major wallets (MetaMask, Trust, Rainbow, Uniswap)
- ✅ USDC claim fees with automatic 70/30 platform/protocol split on-chain
- ✅ Soulbound or transferable — configurable per project
- ✅ Requires no custody or personal data collection
- ✅ Uses proven standards (ENS + EIP-3668 CCIP-Read)
v2 is live on Ethereum mainnet
- ✅ Production contracts deployed and verified on Etherscan
- ✅ 25 top RWA platform slugs reserved
- ✅ CCIP-Read gateway live at
gateway.rwa-id.com - ✅ ENS wildcard resolver active — names resolve in MetaMask & Trust Wallet
- ✅ Platform console and client claim portal operational
-
Create Project Namespace
- Platform connects wallet at rwa-id.com
- Registers namespace (e.g.,
test.rwa-id.eth) — free to create - Optionally sets a USDC claim fee (70% goes to platform treasury 30% to RWA ID)
-
Upload Allowlist
- Submit CSV mapping names to wallet addresses
- System computes Merkle root, commits it on-chain, and uploads proofs to IPFS via Pinata
- A shareable claim URL is generated automatically:
rwa-id.com/claim/[projectId]/[cid]
-
Clients Claim Identities
- Platform shares the claim URL with clients (email, dashboard, etc.)
- Client opens the URL — their wallet is auto-detected from the proof file, no manual input needed
- Client approves USDC and confirms the claim in two wallet steps
- Identity NFT minted — resolves immediately across all ENS wallets
- Format:
client.yourplatform.rwa-id.eth
Every claim pays a USDC fee — always split 70/30 on-chain between the platform treasury and RWA ID. The fee amount depends on whether the platform set one:
| Scenario | Effective Fee | Platform (70%) | RWA ID (30%) |
|---|---|---|---|
| Platform sets no fee | $0.50 minimum enforced by contract | $0.35 | $0.15 |
| Platform sets $1.00 | $1.00 | $0.70 | $0.30 |
| Platform sets $5.00 | $5.00 | $3.50 | $1.50 |
The $0.50 minimum is enforced at the contract level — it cannot be bypassed. If a platform sets claimFee = 0, the contract automatically applies the minimum and distributes it with the same 70/30 split.
| Contract | Address |
|---|---|
| RWAIDv2 | 0xD0B565C7134bDB16Fc3b8A9Cb5fdA003C37930c2 |
| Wildcard Resolver v2 | 0x765FB675AC33a85ccb455d4cb0b5Fb1f2D345eb1 |
| USDC | 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 |
| Contract | Address |
|---|---|
| RWAIDv2 | 0xb0b023c9eD18dCD573B8befC851974f20126ab92 |
| Wildcard Resolver v2 | 0xE591Cbe3802e3E4908731E3D4B056cd8b08AE520 |
| MockUSDC | 0x4CcF36b273dA06D70B235d605639b3f8a6CA6B03 |
Gateway URL: https://gateway.rwa-id.com/{sender}/{data}.json
The resolver implements EIP-3668 (CCIP-Read) to enable off-chain resolution lookups with on-chain signature verification.
┌─────────────┐
│ Wallet │
│ (User) │
└──────┬──────┘
│ Resolve: joe.test.rwa-id.eth
↓
┌──────────────────┐
│ ENS Registry │
│ (Ethereum) │
└──────┬───────────┘
│ Wildcard Resolver → 0x765F...
↓
┌──────────────────┐
│ CCIP-Read │
│ Gateway │
│ gateway.rwa-id.com│
└──────┬───────────┘
│ Looks up nodeToTokenId + ownerOf in RWAIDv2
│ Returns signed (node, address, hash, sig)
↓
┌──────────────────┐
│ resolveWithProof │
│ verifies sig │
│ returns address │
└──────────────────┘
git clone https://github.com/RWA-ID/RWA-ID.git
cd RWA-ID
npm install
cp .env.example .env # fill in your keysnpx hardhat test68 tests — all passing.
npx hardhat run scripts/deploy-sepolia.js --network sepolianpx hardhat run scripts/deploy-mainnet.js --network mainnetcontracts/
RWAIDv2.sol — Main v2 registry (ERC-721 + USDC fees + Merkle allowlist)
RwaIdWildcardResolverV2.sol — ENSIP-10 wildcard resolver (CCIP-Read / EIP-3668)
mocks/MockUSDC.sol — Test USDC (Sepolia only)
RwaIdRegistry.sol — v1 contract (legacy)
RwaIdWildcardResolver.sol — v1 resolver (legacy)
scripts/
deploy-mainnet.js — Deploy to Ethereum mainnet
deploy-sepolia.js — Deploy to Sepolia testnet
reserve-slugs.js — Propose slug reservations via Safe multisig
verify-reservations.js — Verify reserved slugs on-chain
set-trusted-signer.js — Update gateway signer via Safe multisig
test/
RWAIDv2.test.js — 68 contract tests
RWA ID operates as infrastructure only with minimal regulatory surface area:
| What RWA ID Does | What RWA ID Does NOT Do |
|---|---|
| ✅ Provide identity references | ❌ Collect personal data |
| ✅ Enable human-readable names | ❌ Perform KYC/verification |
| ✅ Facilitate on-chain resolution | ❌ Assert identity claims |
| ✅ Support platform operations | ❌ Custody funds or assets |
Founder: Hector Morel Email: partner@rwa-id.com Website: rwa-id.com
MIT
RWA ID — Identity Infrastructure for the Tokenized Economy