Contract Development
Contract Development
Prerequisites
- Foundry (forge, cast, anvil)
- Node.js (for frontend integration)
Setup
git clone <repo-url>
cd doman-contracts
forge install
Create a .env file:
PRIVATE_KEY=your_private_key
BASE_RPC_URL=https://sepolia.base.org
Development Workflow
graph LR
Write["Write Solidity<br/>src/ScamReporter.sol"]
Build["forge build"]
Test["forge test -vv"]
Snapshot["forge snapshot"]
Deploy["forge script<br/>--broadcast"]
Write --> Build --> Test --> Snapshot --> Deploy
Build
forge build
Test
forge test -vv
Deploy
forge script script/ScamReporter.s.sol:ScamReporterScript \
--rpc-url base-sepolia \
--private-key $PRIVATE_KEY \
--broadcast
Deployment Flow
sequenceDiagram
participant Dev as Developer
participant Foundry as Foundry CLI
participant RPC as Base Sepolia RPC
participant Chain as Base Sepolia
Dev->>Foundry: forge script --broadcast
Foundry->>Foundry: Compile & simulate
Foundry->>RPC: Send deployment tx
RPC->>Chain: Include in block
Chain-->>RPC: Contract address + tx hash
RPC-->>Foundry: Receipt
Foundry->>Foundry: Save to broadcast/
Foundry-->>Dev: Deployed at 0x6553...237a
Gas Snapshot
forge snapshot
Foundry CLI Reference
$ forge --help
$ anvil --help
$ cast --help
Tech Stack
| Layer | Technology |
|---|---|
| Smart Contracts | Solidity ^0.8.13 |
| Framework | Foundry |
| Blockchain | Base Chain (Sepolia testnet) |
| Off-chain DB | PostgreSQL (Supabase) |
| Indexer | Ponder |
| Frontend | Next.js 16, React 19, Wagmi v3, Viem |
Architecture Overview
graph TD
subgraph Foundry["Foundry Project"]
Src["src/<br/>ScamReporter.sol"]
Test["test/<br/>ScamReporter.t.sol"]
Script["script/<br/>ScamReporter.s.sol"]
end
subgraph Deploy["Deployment Target"]
BaseSepolia["Base Sepolia<br/>Chain ID: 84532"]
end
subgraph Consumers["Consumers"]
Frontend["DOMAN Frontend<br/>(Wagmi / Viem)"]
Indexer["Ponder Indexer"]
end
Script -->|"forge script --broadcast"| BaseSepolia
Src --> BaseSepolia
BaseSepolia -->|"Events"| Indexer
Frontend -->|"submitVote()"| BaseSepolia