Files
aitbc/docs/12_issues/cross-site-sync-resolved.md
AITBC System b033923756 chore: normalize file permissions across repository
- Remove executable permissions from configuration files (.editorconfig, .env.example, .gitignore)
- Remove executable permissions from documentation files (README.md, LICENSE, SECURITY.md)
- Remove executable permissions from web assets (HTML, CSS, JS files)
- Remove executable permissions from data files (JSON, SQL, YAML, requirements.txt)
- Remove executable permissions from source code files across all apps
- Add executable permissions to Python
2026-03-08 11:26:18 +01:00

5.1 KiB

Current Issues

Cross-Site Synchronization - RESOLVED

Date

2026-01-29

Status

FULLY IMPLEMENTED - Cross-site sync is running on all nodes. Transaction propagation works. Block import endpoint works with transactions after database foreign key fix.

Description

Cross-site synchronization has been integrated into all blockchain nodes. The sync module detects height differences between nodes and can propagate transactions via RPC.

Components Affected

  • /src/aitbc_chain/main.py - Main blockchain node process
  • /src/aitbc_chain/cross_site.py - Cross-site sync module (implemented but not integrated)
  • All three blockchain nodes (localhost Node 1 & 2, remote Node 3)

What Was Fixed

  1. main.py integration: Removed problematic AbstractAsyncContextManager type annotation and simplified the code structure
  2. Cross-site sync module: Integrated into all three nodes and now starts automatically
  3. Config settings: Added cross_site_sync_enabled, cross_site_remote_endpoints, cross_site_poll_interval inside the ChainSettings class
  4. URL paths: Fixed RPC endpoint paths (e.g., /head instead of /rpc/head for remote endpoints that already include /rpc)

Current Status

  • All nodes: Running with cross-site sync enabled
  • Transaction sync: Working - mempool transactions can propagate between sites
  • Block sync: FULLY IMPLEMENTED - /blocks/import endpoint works with transactions
  • Height difference: Nodes maintain independent chains (local: 771153, remote: 40324)
  • Status: RESOLVED - Fixed database foreign key constraint issue (2026-01-29)

Database Fix Applied (2026-01-29)

  • Issue: Transaction and receipt tables had foreign key to block.height instead of block.id
  • Solution:
    1. Updated database schema to reference block.id
    2. Fixed import code in /src/aitbc_chain/rpc/router.py to use block.id
    3. Applied migration to existing databases
  • Result: Block import with transactions now works correctly

Resolved Issues

Block synchronization transaction import issue has been FIXED:

  • /blocks/import POST endpoint is functional and deployed on all nodes
  • Endpoint validates block hashes, parent blocks, and prevents conflicts
  • Can import blocks with and without transactions
  • Transaction data properly saved to database
  • Root cause: nginx was routing to wrong port (8082 instead of 8081)
  • Fix: Updated nginx config to route to correct blockchain-rpc-2 service

Block Sync Implementation Progress

  1. Block Import Endpoint Created - /src/aitbc_chain/rpc/router.py:

    • Added @router.post("/blocks/import") endpoint
    • Implemented block validation (hash, parent, existence checks)
    • Added transaction and receipt import logic
    • Returns status: "imported", "exists", or error details
  2. Cross-Site Sync Updated - /src/aitbc_chain/sync/cross_site.py:

    • Modified import_block() to call /rpc/blocks/import
    • Formats block data correctly for import
    • Handles import success/failure responses
  3. Runtime Error Fixed:

    • Moved inline imports (hashlib, datetime, config) to top of file
    • Added proper error logging and exception handling
    • Fixed indentation issues in the function
    • Endpoint now returns proper validation responses
  4. Transaction Import Fixed:

    • Root cause was nginx routing to wrong port (8082 instead of 8081)
    • Updated transaction creation to use constructor with all fields
    • Server rebooted to clear all caches
    • Nginx config fixed to route to blockchain-rpc-2 on port 8081
    • Verified transaction is saved correctly with all fields
  5. Future Enhancements:

    • Add proposer signature validation
    • Implement fork resolution for conflicting chains
    • Add authorized node list configuration

What Works Now

  • Cross-site sync loop runs every 10 seconds
  • Remote endpoint polling detects height differences
  • Transaction propagation between sites via mempool sync
  • Block import endpoint functional with validation
  • Blocks with and without transactions can be imported between sites via RPC
  • Transaction data properly saved to database
  • Logging shows sync activity in journalctl

Files Modified

  • /src/aitbc_chain/main.py - Added cross-site sync integration
  • /src/aitbc_chain/cross_site.py - Fixed URL paths, updated to use /blocks/import endpoint
  • /src/aitbc_chain/config.py - Added sync settings inside ChainSettings class (all nodes)
  • /src/aitbc_chain/rpc/router.py - Added /blocks/import POST endpoint with validation

Next Steps

  1. Monitor Block Synchronization:

    • Watch logs for successful block imports with transactions
    • Verify cross-site sync is actively syncing block heights
    • Monitor for any validation errors or conflicts
  2. Future Enhancements:

    • Add proposer signature validation for security
    • Implement fork resolution for conflicting chains
    • Add sync metrics and monitoring dashboard

Status: COMPLETE - Block import with transactions working Impact: Full cross-site block synchronization now available Resolution: Server rebooted, nginx routing fixed to port 8081