An ERC20 token with a built-in multi-category vesting wallet, written in Solidity and built with Brownie.
This project implements a fixed-supply ERC20 token where all allocations are distributed to stakeholder wallets at deployment. Vesting begins automatically at construction. Each category has a cliff period followed by linear token release over the defined duration.
contracts/Token.sol- ERC20 token entry point; mints the full supply and distributes it to allocation wallets on construction.contracts/VestingWallet.sol- Core vesting logic: cliff periods, linear release calculations, and transfer restrictions on locked tokens.contracts/Addresses.sol- Registry of the eight stakeholder wallet addresses used during initial allocation.interfaces/IVestingWallet.sol- Interface for vesting query and release functions.
- Python 3.8+
- Brownie
- Node.js and npm
Install Node dependencies:
npm install
brownie run scripts/deploy.py --network <network-name>
brownie run scripts/verifySmartContract.py --network <network-name>
brownie test
Total supply: 100,000,000
| Category | Amount | Initial Unlock | Cliff | Vesting Duration |
|---|---|---|---|---|
| Seed | 10,000,000 | 1,000,000 | 12 months | 36 months |
| Private | 5,000,000 | 500,000 | 6 months | 30 months |
| Team | 20,000,000 | 0 | 12 months | 36 months |
| Advisors | 5,000,000 | 0 | 12 months | 24 months |
| Partners | 7,500,000 | 0 | 12 months | 12 months |
| Marketing | 7,500,000 | 500,000 | 0 months | 36 months |
| Ecosystem | 30,000,000 | 0 | 0 months | 48 months |
| Liquidity | 15,000,000 | 1,000,000 | 0 months | 48 months |
All tokens are distributed to their respective wallets at deployment. Token holders call releaseBalance()
to claim vested tokens. The balanceOf() function returns only the unlocked balance, so locked tokens
cannot be transferred.
MIT