forge
AI-assisted ERC-3643 Real World Asset tokenization scaffolder.
Turn a natural language asset description into a deployment-ready ERC-3643 token in minutes, not weeks.
Table of Contents
- What is forge?
- The Problem
- How It Works
- Installation
- Quick Start
- CLI Reference
- Python API
- Asset Types
- Architecture
- ERC-3643 Explained
- Configuration Reference
- Contributing
- Roadmap
- License
What is forge?
forge is a CLI tool and Python library that uses AI (Claude/GPT-4) to analyze natural language descriptions of real-world assets and generate deployment-ready ERC-3643 (T-REX) compliant token contracts.
For beginners: ERC-3643 is the Ethereum standard for tokenizing real-world assets like real estate, bonds, or art. Unlike regular ERC-20 tokens (which anyone can send to anyone), ERC-3643 tokens enforce compliance rules — you must be KYC-verified, an accredited investor, or meet other legal requirements before you can hold or transfer them.
The Problem
Setting up a compliant RWA token from scratch takes weeks:
Week 1: Research which ERC standard to use
Week 2: Figure out compliance rules for your jurisdiction
Week 3: Write smart contracts from scratch
Week 4: Deploy to testnet and fix bugs
Week 5: Legal review of compliance configuration
Week 6: Mainnet deployment
Getting these wrong isn't a UX problem — it's a legal problem. An incorrect compliance configuration can mean your protocol violates securities law.
How It Works
┌─────────────────────────────────────────────────────────────┐
│ YOUR INPUT (Natural Language) │
│ │
│ "Grade A office building in Singapore CBD, │
│ fractional ownership, accredited investors only, │
│ quarterly rental yield distribution" │
└──────────────────────────┬──────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ LLM ANALYSIS (Claude / GPT-4) │
│ │
│ • Detects asset type: real_estate │
│ • Detects jurisdiction: SG (Singapore) │
│ • Maps compliance rules: KYC + accredited + lock period │
│ • Recommends oracle: Chainlink NAV feed │
│ • Configures dividends: quarterly USDC distribution │
└──────────────────────────┬──────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ ASSET CONFIG (JSON) │
│ │
│ { │
│ "asset_type": "real_estate", │
│ "token": { "name": "SCOT", "symbol": "SCOT" }, │
│ "compliance": { "kyc_required": true, ... }, │
│ "oracle": { "provider": "chainlink", ... }, │
│ "dividend": { "frequency": "quarterly", ... } │
│ } │
└──────────────┬──────────────────────┬───────────────────────┘
│ │
▼ ▼
┌──────────────────────┐ ┌──────────────────────────────────┐
│ VALIDATOR │ │ SCAFFOLDER │
│ │ │ │
│ • ERC-3643 rules │ │ • Token.sol (ERC-3643) │
│ • Jurisdiction │ │ • Compliance.sol │
│ • Lock periods │ │ • IdentityRegistry.sol │
│ • Score 0-100 │ │ • deploy.js (Hardhat) │
│ │ │ • hardhat.config.js │
└──────────────────────┘ └──────────────────────────────────┘
Installation
# With Anthropic Claude (recommended)
pip install forge-rwa[anthropic]
export ANTHROPIC_API_KEY=sk-ant-...
# With OpenAI GPT-4
pip install forge-rwa[openai]
export OPENAI_API_KEY=sk-...
# Both providers
pip install forge-rwa[all]
# Development tools
pip install forge-rwa[dev]
Quick Start
1. Analyze an asset
forge analyze "US Treasury 10-year bond, retail investors eligible, semi-annual coupon" --output bond.json
2. Validate the config
forge check bond.json
3. Generate contracts
forge scaffold bond.json --output-dir ./my-token
cd my-token && npm install && npx hardhat compile
CLI Reference
| Command | Description | Example |
|---|---|---|
forge analyze |
LLM-powered asset analysis | forge analyze "real estate in Dubai" |
forge check |
Validate compliance config | forge check config.json |
forge scaffold |
Generate Solidity contracts | forge scaffold config.json -o ./token |
forge demo |
Run without API key | forge demo |
Python API
from forge import AssetAnalyzer, ComplianceValidator, Scaffolder
# Analyze
analyzer = AssetAnalyzer()
config = analyzer.analyze("US Treasury bond, retail eligible, quarterly coupon")
# Validate
validator = ComplianceValidator()
result = validator.validate(config)
print(f"Score: {result.compliance_score}/100")
# Scaffold
if result.is_valid:
scaffolder = Scaffolder()
scaffolder.generate(config, output_dir="./my-token")
Asset Types
| Type | KYC | Accredited Only | Lock Period | Oracle | Dividends |
|---|---|---|---|---|---|
real_estate |
✅ | Often | 90-180 days | NAV | Rental yield |
treasury_bond |
✅ | No | Short | Price | Coupon |
private_equity |
✅ | Yes | 1+ year | NAV | Dividends |
invoice |
✅ | Institutional | Until maturity | Price | Interest |
carbon_credit |
Optional | No | None | Price | None |
art |
Optional | No | None | NAV | None |
Architecture
forge/
├── forge/
│ ├── __init__.py # Package exports
│ ├── cli.py # CLI entry point
│ ├── models.py # AssetConfig, TokenConfig, ComplianceRules
│ ├── analyzer.py # LLM-powered asset analysis
│ ├── validator.py # Compliance validation engine
│ ├── scaffolder.py # Solidity contract generator
│ └── py.typed # PEP 561 marker
├── tests/
│ └── test_forge.py # 14 tests
├── pyproject.toml
├── LICENSE
└── CHANGELOG.md
ERC-3643 Explained
ERC-3643 (also called T-REX — Token for Regulated EXchanges) is the standard for compliant security tokens on EVM chains.
The 4 Core Components
- ONCHAINID (Identity) — Every token holder needs an on-chain identity linked to their KYC
- Identity Registry — Maps wallet addresses → verified identities
- Compliance Module — Enforces rules (max holders, lock periods, jurisdictions) on every transfer
- Token Contract — ERC-3643 token that checks compliance before every transfer
Why Not ERC-20?
ERC-20 has no compliance hooks — anyone can transfer to anyone. RWA tokens represent regulated securities requiring:
- KYC before receiving tokens
- Accredited investor verification
- Lock periods enforced on-chain
- Max holder counts (Reg D limits)
- Transfer restrictions (sanctioned countries blocked)
Configuration Reference
{
"asset_type": "real_estate",
"asset_name": "Singapore CBD Office Tower",
"jurisdiction": "SG",
"token": {
"name": "Singapore CBD Office Tower Token",
"symbol": "SCOT",
"decimals": 18,
"max_supply": 1000000,
"transferable": true,
"pausable": true
},
"compliance": {
"kyc_required": true,
"accredited_investor_only": true,
"max_investors": 500,
"lock_period_days": 180,
"jurisdictions_blocked": ["KP", "IR", "CU", "SY"]
},
"oracle": {
"enabled": true,
"provider": "chainlink",
"update_frequency_hours": 24
},
"dividend": {
"enabled": true,
"payment_token": "USDC",
"distribution_frequency": "quarterly"
}
}
Contributing
git clone https://github.com/shubhamdusane/forge
cd forge
pip install -e ".[dev]"
pytest tests/
Roadmap
- v0.1 — analyze / check / scaffold (CLI + Python API)
- v0.2 — ONCHAINID integration
- v0.3 — Dividend distribution contracts
- v0.4 — Multi-jurisdiction templates (US/EU/UAE/SG)
- v0.5 — Testnet deployment wizard
- v1.0 — Full production suite
License
MIT © 2026 Shubham Dusane
Metadata
Release files for forge-rwa 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| forge_rwa-0.1.0.tar.gz | 34.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| forge_rwa-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 56.1 kB
Release files / forge_rwa-0.1.0.tar.gz
| Download URL | forge_rwa-0.1.0.tar.gz |
|---|---|
| Size | 34.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0a0b81f5e5622d44a5ad38045a3fb6639c0017264a507bdffe90b4f57ef34e87
|
|
BLAKE2b-256 checksum How to use checksums |
301eb02e514c9457e05ea7d559f6805329ae0f07d865a0c2ac085bee5ca26975
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.4
|
Release files / forge_rwa-0.1.0-py3-none-any.whl
| Download URL | forge_rwa-0.1.0-py3-none-any.whl |
|---|---|
| Size | 22.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
00faa19eeb406a691c536dee3b9779731aad59372122d452a471c36fd8b914eb
|
|
BLAKE2b-256 checksum How to use checksums |
bf3e697987b0f838ef4504bf810771201766d7069338c5a75e8a0811fc77a52d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.4
|