Merge central-config-and-blockchain-enhancements from gitea
This commit is contained in:
@@ -303,6 +303,29 @@ def template_info(ctx, template_name, output):
|
||||
error(f"Error getting template info: {str(e)}")
|
||||
raise click.Abort()
|
||||
|
||||
@genesis.command(name="init-production")
|
||||
@click.option('--chain-id', default='ait-mainnet', show_default=True, help='Chain ID to initialize')
|
||||
@click.option('--genesis-file', default='data/genesis_prod.yaml', show_default=True, help='Path to genesis YAML (copy to /opt/aitbc/genesis_prod.yaml if needed)')
|
||||
@click.option('--force', is_flag=True, help='Overwrite existing DB (removes file if present)')
|
||||
@click.pass_context
|
||||
def init_production(ctx, chain_id, genesis_file, force):
|
||||
"""Initialize production chain DB using genesis allocations."""
|
||||
db_path = Path("/opt/aitbc/data") / chain_id / "chain.db"
|
||||
if db_path.exists() and force:
|
||||
db_path.unlink()
|
||||
python_bin = Path(__file__).resolve().parents[3] / 'apps' / 'blockchain-node' / '.venv' / 'bin' / 'python3'
|
||||
cmd = [
|
||||
str(python_bin),
|
||||
str(Path(__file__).resolve().parents[3] / 'scripts' / 'init_production_genesis.py'),
|
||||
'--chain-id', chain_id,
|
||||
]
|
||||
try:
|
||||
subprocess.run(cmd, check=True)
|
||||
success(f"Initialized production genesis for {chain_id} at {db_path}")
|
||||
except subprocess.CalledProcessError as e:
|
||||
error(f"Genesis init failed: {e}")
|
||||
raise click.Abort()
|
||||
|
||||
@genesis.command()
|
||||
@click.argument('chain_id')
|
||||
@click.option('--format', type=click.Choice(['json', 'yaml']), default='json', help='Export format')
|
||||
|
||||
58
cli/aitbc_cli/commands/sync.py
Normal file
58
cli/aitbc_cli/commands/sync.py
Normal file
@@ -0,0 +1,58 @@
|
||||
"""Sync management commands for AITBC."""
|
||||
|
||||
import asyncio
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
import click
|
||||
|
||||
from ..utils import success, error, run_subprocess
|
||||
|
||||
|
||||
@click.group()
|
||||
def sync():
|
||||
"""Blockchain synchronization utilities."""
|
||||
pass
|
||||
|
||||
|
||||
@sync.command()
|
||||
@click.option('--source', default='http://10.1.223.40:8006', help='Source RPC URL (leader)')
|
||||
@click.option('--import-url', default='http://127.0.0.1:8006', help='Local RPC URL for import')
|
||||
@click.option('--batch-size', type=int, default=100, help='Blocks per batch')
|
||||
@click.option('--poll-interval', type=float, default=0.2, help='Seconds between batches')
|
||||
def bulk(source, import_url, batch_size, poll_interval):
|
||||
"""Bulk import blocks from a leader to catch up quickly."""
|
||||
try:
|
||||
# Resolve paths
|
||||
blockchain_dir = Path(__file__).resolve().parents[3] / 'apps' / 'blockchain-node'
|
||||
src_dir = blockchain_dir / 'src'
|
||||
venv_python = blockchain_dir / '.venv' / 'bin' / 'python3'
|
||||
sync_cli = src_dir / 'aitbc_chain' / 'sync_cli.py'
|
||||
|
||||
if not sync_cli.exists():
|
||||
error("sync_cli.py not found. Ensure bulk sync feature is deployed.")
|
||||
raise click.Abort()
|
||||
|
||||
cmd = [
|
||||
str(venv_python),
|
||||
str(sync_cli),
|
||||
'--source', source,
|
||||
'--import-url', import_url,
|
||||
'--batch-size', str(batch_size),
|
||||
'--poll-interval', str(poll_interval),
|
||||
]
|
||||
|
||||
# Prepare environment
|
||||
env = {
|
||||
'PYTHONPATH': str(src_dir),
|
||||
}
|
||||
|
||||
success(f"Running bulk sync from {source} to {import_url} (batch size: {batch_size})")
|
||||
result = run_subprocess(cmd, env=env, capture_output=False)
|
||||
if result.returncode != 0:
|
||||
error("Bulk sync failed. Check logs for details.")
|
||||
raise click.Abort()
|
||||
success("Bulk sync completed.")
|
||||
except Exception as e:
|
||||
error(f"Error during bulk sync: {e}")
|
||||
raise click.Abort()
|
||||
@@ -68,6 +68,7 @@ try:
|
||||
except ImportError:
|
||||
enterprise_integration_group = None
|
||||
|
||||
from .commands.sync import sync
|
||||
from .commands.explorer import explorer
|
||||
from .plugins import plugin, load_plugins
|
||||
|
||||
@@ -270,6 +271,7 @@ cli.add_command(advanced_analytics_group)
|
||||
cli.add_command(ai_surveillance_group)
|
||||
if enterprise_integration_group is not None:
|
||||
cli.add_command(enterprise_integration_group)
|
||||
cli.add_command(sync)
|
||||
cli.add_command(explorer)
|
||||
cli.add_command(plugin)
|
||||
load_plugins(cli)
|
||||
|
||||
Reference in New Issue
Block a user