Files
aitbc/apps/blockchain-node/scripts/create_bootstrap_genesis.py
oib 15427c96c0 chore: update file permissions to executable across repository
- Change file mode from 644 to 755 for all project files
- Add chain_id parameter to get_balance RPC endpoint with default "ait-devnet"
- Rename Miner.extra_meta_data to extra_metadata for consistency
2026-03-06 22:17:54 +01:00

111 lines
3.6 KiB
Python
Executable File

#!/usr/bin/env python3
"""Generate a genesis file with initial distribution for the exchange economy."""
import json
import time
from pathlib import Path
# Genesis configuration with initial token distribution
GENESIS_CONFIG = {
"chain_id": "ait-mainnet",
"timestamp": None, # populated at runtime
"params": {
"mint_per_unit": 1000,
"coordinator_ratio": 0.05,
"base_fee": 10,
"fee_per_byte": 1,
},
"accounts": [
# Exchange Treasury - 10 million AITBC for liquidity
{
"address": "aitbcexchange00000000000000000000000000000000",
"balance": 10_000_000_000_000, # 10 million AITBC (in smallest units)
"nonce": 0,
},
# Community Faucet - 1 million AITBC for airdrop
{
"address": "aitbcfaucet0000000000000000000000000000000000",
"balance": 1_000_000_000_000, # 1 million AITBC
"nonce": 0,
},
# Team/Dev Fund - 2 million AITBC
{
"address": "aitbcteamfund00000000000000000000000000000000",
"balance": 2_000_000_000_000, # 2 million AITBC
"nonce": 0,
},
# Early Investor Fund - 5 million AITBC
{
"address": "aitbcearlyinvest000000000000000000000000000000",
"balance": 5_000_000_000_000, # 5 million AITBC
"nonce": 0,
},
# Ecosystem Fund - 3 million AITBC
{
"address": "aitbecosystem000000000000000000000000000000000",
"balance": 3_000_000_000_000, # 3 million AITBC
"nonce": 0,
}
],
"authorities": [
{
"address": "aitbcvalidator00000000000000000000000000000000",
"weight": 1,
}
],
}
def create_genesis_with_bootstrap():
"""Create genesis file with initial token distribution"""
# Set timestamp
GENESIS_CONFIG["timestamp"] = int(time.time())
# Calculate total initial distribution
total_supply = sum(account["balance"] for account in GENESIS_CONFIG["accounts"])
print("=" * 60)
print("AITBC GENESIS BOOTSTRAP DISTRIBUTION")
print("=" * 60)
print(f"Total Initial Supply: {total_supply / 1_000_000:,.0f} AITBC")
print("\nInitial Distribution:")
for account in GENESIS_CONFIG["accounts"]:
balance_aitbc = account["balance"] / 1_000_000
percent = (balance_aitbc / 21_000_000) * 100
print(f" {account['address']}: {balance_aitbc:,.0f} AITBC ({percent:.1f}%)")
print("\nPurpose of Funds:")
print(" - Exchange Treasury: Provides liquidity for trading")
print(" - Community Faucet: Airdrop to early users")
print(" - Team Fund: Development incentives")
print(" - Early Investors: Initial backers")
print(" - Ecosystem Fund: Partnerships and growth")
print("=" * 60)
return GENESIS_CONFIG
def write_genesis_file(genesis_data, output_path="data/genesis_with_bootstrap.json"):
"""Write genesis to file"""
path = Path(output_path)
path.parent.mkdir(parents=True, exist_ok=True)
with open(path, 'w') as f:
json.dump(genesis_data, f, indent=2, sort_keys=True)
print(f"\nGenesis file written to: {path}")
return path
if __name__ == "__main__":
# Create genesis with bootstrap distribution
genesis = create_genesis_with_bootstrap()
# Write to file
genesis_path = write_genesis_file(genesis)
print("\nTo apply this genesis:")
print("1. Stop the blockchain node")
print("2. Replace the genesis.json file")
print("3. Reset the blockchain database")
print("4. Restart the node")