BASIS/CHAIN

CHAIN Layer

Anchor proofs to blockchain (optional)

Overview

The CHAIN layer is an optional component that anchors proof records to an external blockchain or distributed ledger. This provides independent verification that proof records existed at a specific time and have not been tampered with.

Note: CHAIN layer is required for BASIS Complete conformance but optional for BASIS Core.

Responsibilities

  • Batch proofsAggregate multiple proof records for efficient anchoring
  • Create anchorSubmit Merkle root or aggregate hash to blockchain
  • Store referenceRecord blockchain transaction ID with proof records
  • Verify anchorsProvide verification that proofs were anchored at claimed time

Requirements

MUSTAnchor proof batches within 24 hours of creation
MUSTStore blockchain transaction reference with anchored proofs
MUSTProvide API to verify anchor for any proof
SHOULDUse established blockchain (Ethereum, Polygon, etc.)
MAYSupport multiple blockchain targets

Anchoring Process

┌─────────────────────────────────────────────────────────────┐
│                     Proof Records                            │
│  prf_001  prf_002  prf_003  prf_004  prf_005  ...           │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼ Batch (e.g., every hour)
┌─────────────────────────────────────────────────────────────┐
│                     Merkle Tree                              │
│                                                              │
│                         ROOT                                 │
│                        /    \                                │
│                    H(01+02)  H(03+04)                        │
│                    /    \    /    \                          │
│                 H(01)  H(02) H(03) H(04)                     │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼ Submit Merkle root
┌─────────────────────────────────────────────────────────────┐
│                     Blockchain                               │
│  Transaction: 0xabc123...                                   │
│  Data: Merkle root hash                                     │
│  Timestamp: Block #12345678                                 │
└─────────────────────────────────────────────────────────────┘

AnchorRecord Schema

{
  "anchor_id": "anc_def456ghi",
  "timestamp": "2026-01-15T11:00:00Z",
  "proof_ids": [
    "prf_xyz789abc",
    "prf_uvw456def",
    "prf_rst123jkl"
  ],
  "merkle_root": "sha256:b3c4d5e6f7g8...",
  "blockchain": {
    "network": "polygon",
    "chain_id": 137,
    "transaction_hash": "0x1a2b3c4d5e6f...",
    "block_number": 52345678,
    "block_timestamp": "2026-01-15T11:00:15Z"
  },
  "verification_url": "https://polygonscan.com/tx/0x1a2b3c..."
}

Supported Blockchains

NetworkChain IDCostFinality
Ethereum Mainnet1~$5-50/tx~15 minutes
Polygon137~$0.01/tx~2 minutes
Arbitrum One42161~$0.10/tx~1 minute
Base8453~$0.01/tx~2 minutes

Verification Process

To verify a proof was anchored:

  1. Retrieve the proof record and its anchor reference
  2. Fetch the Merkle proof (path from proof to root)
  3. Recompute the Merkle root using the proof and path
  4. Fetch the blockchain transaction
  5. Verify the transaction contains the expected Merkle root
  6. Verify the block timestamp matches expected anchor time

Failure Handling

Blockchain unavailable

Impact: Non-critical — proofs remain valid in PROOF layer

Action: Queue for later anchoring, retry with backoff

Transaction fails

Impact: Anchoring delayed, proofs unaffected

Action: Retry with adjusted gas, alert if persistent

Verification fails

Impact: Potential tampering or data corruption

Action: Security alert, do not trust affected proofs