Files
aitbc/apps/blockchain-node/init_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

54 lines
1.6 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Initialize genesis block for AITBC blockchain
"""
import sys
sys.path.insert(0, 'src')
from dataclasses import dataclass
from aitbc_chain.database import session_scope
from aitbc_chain.models import Block
from aitbc_chain.consensus.poa import PoAProposer, ProposerConfig
from datetime import datetime
def init_genesis():
"""Initialize the genesis block"""
print("Initializing genesis block...")
# Check if genesis already exists
with session_scope() as session:
existing = session.exec(select(Block).order_by(Block.height.desc()).limit(1)).first()
if existing:
print(f"Genesis block already exists: #{existing.height}")
return
# Create proposer config
config = ProposerConfig(
chain_id="ait-devnet",
proposer_id="ait-devnet-proposer",
interval_seconds=2,
)
# Create proposer and initialize genesis
proposer = PoAProposer(config=config, session_factory=session_scope)
# The _ensure_genesis_block method is called during proposer initialization
# but we need to trigger it manually
proposer._ensure_genesis_block()
print("Genesis block created successfully!")
# Verify
with session_scope() as session:
genesis = session.exec(select(Block).where(Block.height == 0)).first()
if genesis:
print(f"Genesis block: #{genesis.height}")
print(f"Hash: {genesis.hash}")
print(f"Proposer: {genesis.proposer}")
print(f"Timestamp: {genesis.timestamp}")
if __name__ == "__main__":
from sqlmodel import select
init_genesis()