Real-World Assets (RWAs)—such as private credit funds, commercial real estate, structured debt, and treasuries—cannot be legally represented by standard ERC-20 tokens. Global regulatory frameworks require strict on-chain guarantees:
AssetGate brings institutional-grade RWA infrastructure to BOT Chain. Built on the battle-tested ERC-3643 (T-REX) standard, it establishes a turnkey B2B platform with on-chain compliance gates, resilient PostgreSQL event indexing, zero-gas preflight simulations, and specialized Issuer/Investor portals.
To meet global security token regulations, standard ERC-20 transfers are strictly forbidden. In AssetGate, every asset movement (transfer, transferFrom, mint) must pass through two independent, sequential on-chain verification gates before balances can update:
Sender (Verified) ────────── transfer(to, amount) ──────────► Recipient
│
▼
┌─────────────────────────────────────────────────────────────┐
│ GATE 1: Identity Registry (IdentityRegistry.sol) │
│ • Is recipient registered in the Identity Registry? │
│ • Does recipient hold a valid ONCHAINID contract? │
│ • Does ONCHAINID hold a valid KYC Claim (Topic 1) │
│ cryptographically signed by a Trusted Claim Issuer? │
└──────────────────────────────┬──────────────────────────────┘
│
[Passes Gate 1]
│
▼
┌─────────────────────────────────────────────────────────────┐
│ GATE 2: Modular Compliance (ModularCompliance.sol) │
│ • Country Restriction: Is recipient's country allowed? │
│ • Balance Cap: Does amount exceed single-wallet limit? │
│ • Holder Threshold: Does transfer exceed max holder cap? │
└──────────────────────────────┬──────────────────────────────┘
│
┌─────────────┴─────────────┐
▼ ▼
[Both Gates Pass] [Either Fails]
│ │
Tokens Move On-Chain Revert
Event Emitted & Indexed Zero Balance Change
Core Architectural Guarantees:
IdentityRegistry.isVerified(recipient), confirming that an authorized claim issuer signed their KYC claim off-chain.ModularCompliance.canTransfer(). If the transfer breaches country restrictions, holding limits, or maximum investor caps, execution halts immediately.All smart contracts below have been compiled via Foundry, orchestrated with DeployAll.s.sol, and deployed on BOT Chain Mainnet (Chain ID 677), with core contracts verified on-chain and auxiliary modules pending explorer source verification (see Section 9 for status breakdown):
| Contract | Architectural Responsibility |
|---|---|
| Token.sol (AGT) | Permissioned ERC-3643 asset token. Overrides transfers to enforce Gate 1 + 2 and holds administrative controls (mint, burn, freeze, pause, recovery). |
| IdentityRegistry.sol | On-chain registry mapping investor wallets to their ONCHAINID contract and country code. Answers isVerified(address). |
| IdentityRegistryStorage.sol | Decoupled storage contract separating identity data from execution logic, allowing future logic upgrades without migrating investor state. |
| ModularCompliance.sol | Compliance rule engine. Binds active modules and dynamically verifies transfers via canTransfer(from, to, amount). |
| ClaimTopicsRegistry.sol | Registry of mandatory verification topics. Configured for Topic 1 = KYC. |
| TrustedIssuersRegistry.sol | Whitelist of authorized identity attestation providers, preventing forged or self-signed claims. |
| ClaimIssuer.sol | Trusted ONCHAINID claim signer contract holding authorized ECDSA public keys for KYC attestations. |
CountryRestrictModule.sol: Enforces investor jurisdiction eligibility (e.g., permitting ISO 840 US investors while blocking sanctioned nations).BalanceCapModule.sol: Prevents token concentration by capping maximum holdings per single investor.MaxHolderCountModule.sol: Automatically enforces private placement limits (e.g. maximum 500 holders).We designed the identity layer to guarantee institutional compliance without exposing sensitive investor data on a public ledger:
keccak256(identityAddress, TOPIC_KYC, "PASSED_KYC"). The smart contract validates only this signature, keeping verification instantaneous and gas-minimal.AssetGate maintains a live, zero-latency Cap Table backed by Fastify, Prisma ORM, and Neon PostgreSQL without overloading BOT Chain's RPC nodes:
BATCH_SIZE = 100 against https://rpc.botchain.ai as recommended by the BOT Chain engineering team, eliminating RPC timeouts.lastBlock) are committed inside prisma.$transaction alongside event inserts.lastBlock strictly unchanged. On restart, the indexer resumes from lastBlock + 1 with zero duplicate records (enforced by txHash_logIndex unique keys).On public blockchains, compliance failures revert on-chain and burn real gas fees. AssetGate eliminates this friction with its Preflight Shield (/api/v1/transfer-preflight):
The production DApp is deployed live at https://asset-gate.vercel.app/ on BOT Chain Mainnet (Chain ID 677). The platform operates seamlessly across two standard user personas:
677 · RPC: https://rpc.botchain.ai · Currency: BOT · Standard Transfer Gas: ~0.003 BOT.
840 (United States ISO numeric) and click Complete KYC.IdentityRegistry.sol.🔒 X AGT locked in regulatory escrow. Only Y AGT is transferable.
0x000000000000000000000000000000000000dEaD), amount 5, and click Send.0x97C8110ed08cc87207f72d71FaBF8B9E98844658), amount 1, and click Send.1 (Funded with 50 mUSDC) and click Claim./api/v1/dividends/merkle-proof. Fastify computes your Merkle tree proof against the on-chain root and executes DividendDistributor.claim().Token.addAgent(operatorAddress). Grants administrative permissions to mint, freeze, and manage compliance.0x4aE806D2331854Ba4aEc184645d3B8E57F5C8114 and click Look up.50, and click Mint.20, and click Freeze partial.From, verified wallet in To, and amount. Click Force transfer.Paused(); all token transfers immediately revert on-chain.
50 in Total payout (mUSDC). Click 1 · Prepare (snapshot cap table). Shows: Recipients: 2, root: 0xf025…To ensure high institutional security while making corporate administration frictionless, AssetGate combines strict smart contract RBAC with an interactive dashboard permission manager:
mint, freeze, forcedTransfer, pause) strictly require the AGENT_ROLE on both the Token and Identity Registry contracts. Unauthorized calls revert immediately.// Operator permissions can be granted or revoked directly from the web UI: token.addAgent(operatorAddress); identityRegistry.addAgent(operatorAddress);Simply input the target operator's wallet address, click Grant agent, and that account is immediately authorized on-chain to execute minting, compliance freezes, and emergency halts.
The entire AssetGate protocol suite is deployed and live on BOT Chain Mainnet (Chain ID 677). All smart contracts are open for public audit and verification on scan.botchain.ai:
| Contract Name | Mainnet Address (Chain 677) | Verification Status |
|---|---|---|
| Token (AGT) | 0x130ae863F28E1D990a975F700F536DDFc793dcf2 ↗ | ✓ Verified |
| IdentityRegistry | 0x99C4Aca6Bd389458A27a299Ef5Ccea34905c9d69 ↗ | ✓ Verified |
| IdentityRegistryStorage | 0x94d483cF70988b2651beC420Ae1dE27b2627E287 ↗ | Pending Explorer Source |
| ModularCompliance | 0x8725ECe13cFfa069Aaae7A30d3b1e742F830c14E ↗ | Pending Explorer Source |
| ClaimTopicsRegistry | 0x351b9E14C42848E6f41E06b09d755A242a4B8Ed0 ↗ | Pending Explorer Source |
| TrustedIssuersRegistry | 0x64600121a9f8e33Cd0cE21ff57C7Bc8B59515b70 ↗ | Pending Explorer Source |
| ClaimIssuer | 0xa7a76b528e6E740a8AE0B036FCAaE8Be0b233ad1 ↗ | Pending Explorer Source |
| CountryRestrictModule | 0xCa5957CD989088b6F4d51BD8AC5199c2188b9515 ↗ | Pending Explorer Source |
| BalanceCapModule | 0xefc25232Cde06B57C3ee38C15c82554FB2396d0b ↗ | Pending Explorer Source |
| MaxHolderCountModule | 0x7E52c782f510274F76b83DB4d925d94486e6E6bC ↗ | Pending Explorer Source |
| MockUSDC (Dividend Payout Token) | 0x16F7975FEba6F69b52D896858581d75010446E4E ↗ | Pending Explorer Source |
| DividendDistributor (Merkle Payouts) | 0x50D17b36F8d0D28D343fFF298bd4958CFEFEEDC1 ↗ | Pending Explorer Source |
| Component / Genesis Proof | Verified Endpoint / Transaction Reference |
|---|---|
| Live DApp Dashboard | https://asset-gate.vercel.app/ ↗ |
| AGT Token on Explorer | https://scan.botchain.ai/token/0x130ae863F28E1D990a975F700F536DDFc793dcf2 ↗ |
| Live Indexer & Backend Health API | https://assetgate.onrender.com/api/v1/health ↗ |
| Live Cap Table REST API | https://assetgate.onrender.com/api/v1/captable ↗ |
| Token Genesis Deployment Tx | 0xc449747a8a1b34196d303891f494a57792f7ada4b1fda7835d42b8e7e2bf8215 ↗ |
| Genesis Bootstrap Mint (1,000 AGT) | 0x89528152678240c9cf2f1d67f8f065c47473cc0f7c15fb26907b7d1f4fa4a1ca ↗ |
| Reference Investor ONCHAINID | 0x78E175a0005AA5D386BF9c01c9b91A79472B7803 ↗ |