Upgradeable ERC20 token with ERC20Permit and Timelock-controlled governance.
- Symbol: BILL
- Total Supply: 10,000,000,000 (10 billion)
- Decimals: 18
- Pattern: Transparent Proxy
- Governance: TimelockController (2-day delay)
npm install
cp .env.example .env # Add your keysUpdate scripts/deployToken/input.json with your multisig address:
{
"MULTISIG": "0xYourMultisigAddress"
}npm run token:generateThis creates scripts/deployToken/output.json with deployment transactions that use CREATE2 for deterministic addresses:
- TimelockController: starts with
0x00ad - Implementation: starts with
0x001b - Proxy: starts with
0xb1110
npm run token:deploy:sepolia # Sepolia testnet
npm run token:deploy:mainnet # Ethereum mainnetnpm run token:verify:sepolia # Verify on Sepolia
npm run token:verify:mainnet # Verify on MainnetThis verifies all contracts on Etherscan and validates deployment parameters.
- TimelockController - Governance contract with 2-day delay
- BillionsNetworkToken - Token implementation
- TransparentUpgradeableProxy - Proxy pointing to implementation
- ProxyAdmin - Owned by TimelockController (deployed by proxy constructor)
Update scripts/deployStakingRewards/input.json:
{
"MULTISIG": "0xYourMultisigAddress",
"BILLIONS_TOKEN": "0xBillionsTokenAddress",
"REWARDS_DURATION": 604800,
"TIMELOCK_MIN_DELAY": 172800
}| Parameter | Description |
|---|---|
MULTISIG |
Address that controls the staking contract |
BILLIONS_TOKEN |
BILL token address (used for staking & rewards) |
REWARDS_DURATION |
Reward period in seconds (default: 7 days) |
TIMELOCK_MIN_DELAY |
Upgrade delay in seconds (default: 2 days) |
npm run staking:deploy:sepolia # Sepolia testnet
npm run staking:deploy:mainnet # Ethereum mainnetnpm run staking:verify:sepolia # Verify on Sepolia
npm run staking:verify:mainnet # Verify on Mainnet- TimelockController - Controls upgrades (2-day delay)
- StakingRewards - Staking implementation
- TransparentUpgradeableProxy - Proxy pointing to implementation
- ProxyAdmin - Owned by TimelockController
Multisig
├── Owner of StakingRewards (pause, setRewardsDuration, recoverERC20)
├── RewardsDistribution (notifyRewardAmount)
└── Proposer/Executor/Admin of Timelock
TimelockController (2-day delay)
└── Owner of ProxyAdmin (controls upgrades)
- Transfer reward tokens to the StakingRewards proxy address
- Call
notifyRewardAmount(amount)from the Multisig to start the reward period - Users can now stake tokens and earn rewards
All upgrades go through the Timelock (2-day minimum delay):
- Deploy new implementation contract
- Propose upgrade transaction via Timelock (call
ProxyAdmin.upgradeAndCall) - Wait 2 days (minimum delay)
- Execute upgrade transaction
✅ ERC20 Standard
✅ ERC20Permit (Gasless approvals)
✅ Upgradeable (Transparent Proxy)
✅ Timelock-controlled upgrades
✅ Fixed supply (no mint/burn)
✅ Deterministic deployment addresses (CREATE2)
✅ Stake tokens to earn rewards
✅ Time-locked staking (optional lock for users)
✅ Upgradeable (Transparent Proxy)
✅ Timelock-controlled upgrades
✅ Pausable (owner can pause staking)
✅ ERC20 recovery (owner can recover stuck tokens)
- Upgrades require 2-day timelock
- ProxyAdmin controlled by Timelock
- Multisig controls day-to-day operations
- Reentrancy protection on all mutative functions
- Pausable staking in case of emergency
| Network | Address |
|---|---|
| Ethereum | 0xb1110919016846972056ab995054d65560d5f05e |
| Billions Mainnet | 0xb060E40C3B053C33D458f7105F95DA52741CAb62 |
| Network | Address |
|---|---|
| Billions Mainnet | 0xddF68B9b379617528b37437Ab201ED9AF60A0E1C |
- HALBORN has performed a security audit of
BillionsNetworkTokensmart contract and compiled report on Dec 5, 2025: billions-token-7661d8. - HALBORN has performed a security audit of
StakingRewardssmart contract and compiled report on Jan 5, 2026: staking-rewards-0b472f.