A compliant, on-chain security token for real-world seed reserves
SeedVault (SVLT) is an ERC-3643 (T-REX) security token representing fractional ownership of real-world agricultural seed reserves. It is a permissioned token: every transfer, mint and forced-transfer is gated on-chain by a modular compliance engine and an ONCHAINID identity check, so shares can only ever move between KYC-verified, allow-listed holders. Deployed and source-verified on Base mainnet.
What I owned
- Built the full ERC-3643 (T-REX) token suite — the SVLT token delegates every transfer/mint to a ModularCompliance engine and a triple identity registry, so compliance is enforced by the contract itself, not by a trusted backend.
- Implemented on-chain KYC with ONCHAINID: each investor gets a digital-passport identity contract holding claims signed by a trusted issuer, and IdentityRegistry.isVerified() gates every transfer.
- Wrote the modular compliance layer with a plug-and-play country-allowlist module (ISO country codes) — new rules can be bound without redeploying the token.
- Added a NAV oracle (NAVStore, 8-decimal net asset value per token) and an append-only, IPFS-backed DocumentsRegistry for on-chain document provenance.
- Built an ONCHAINID factory on EIP-1167 minimal-proxy clones with deterministic CREATE2 addresses — cheap identity issuance at scale.
- Designed the V2 'burn-disabled' token: supply is immutable, and redemptions or enforcement run through a treasury forced-transfer pattern instead of ever destroying shares.
- Shipped the whole system to Base mainnet with a 6-phase Hardhat Ignition deployment, then handed every owner/admin role to the client via Ownable2Step + AccessControl — the deployer ends with zero privilege.
- Built the admin dashboard (Next.js 16 · Wagmi · Viem · RainbowKit) — 12 pages to manage identities, compliance, NAV, documents and minting, with a 7-role access model and batched on-chain reads.
- Standard ERC-3643 (T-REX) · ONCHAINID
- Network Base mainnet · source-verified
- Compliance On-chain KYC · country allowlist
- Handover All roles to client · Ownable2Step
◆ BASE MAINNET · chain 8453 13 contracts · source-verified on BaseScan
- SVLT Token ERC-3643 security token 0x8437…065B ↗
- ModularCompliance canTransfer() engine 0xbEDe…1254 ↗
- CountryAllowModule ISO country allowlist 0x59fA…1704 ↗
- IdentityRegistry isVerified() gate 0x46be…e609 ↗
- IdentityRegistryStorage wallet → ONCHAINID 0xA6aE…67C5 ↗
- ClaimTopicsRegistry required claims 0x2707…00bF ↗
- TrustedIssuersRegistry authorised KYC issuers 0xc8e8…48E1 ↗
- ClaimIssuer signs KYC claims 0xaa09…9f14 ↗
- TokenOnchainId token's ONCHAINID 0x6088…5693 ↗
- ONCHAINIDFactory EIP-1167 clones 0x45ef…4dE3 ↗
- IdentityImplementation clone template 0x7518…dd7E ↗
- NAVStore NAV oracle · 8 dp 0x42AF…A0c3 ↗
- DocumentsRegistry IPFS · append-only 0x7d12…3927 ↗
▶ WALKTHROUGH
Loom walkthrough of the admin dashboard: create an ONCHAINID identity, register a KYC-verified investor, update the NAV, and mint SVLT. Record it and drop the embed URL into caseStudies.ts.