Skip to content

Verifying Blockchain Records

This guide explains how to verify that a record has been anchored to the blockchain and has not been tampered with.

What is Verification?

Verification confirms that:

  1. A record's content hash exists in a Merkle tree
  2. That Merkle root was submitted to the Polygon blockchain
  3. The transaction was confirmed with sufficient block confirmations
  4. The record content matches its original hash

Verification Methods

Web Interface

Visit /audit_trail/verify to use the verification tool:

  1. By Content Hash - Enter the SHA-256 hash of the record content
  2. By Record Reference - Select the record type and ID

API Verification

POST /api/v1/audit/verify
Content-Type: application/json
Authorization: Bearer <api_token>

{
  "content_hash": "0x1234abcd..."
}

Response:

{
  "verified": true,
  "anchor": {
    "id": 123,
    "merkle_root": "0xdef456...",
    "tx_hash": "0x789abc...",
    "block_number": 12345678,
    "confirmed_at": "2026-01-15T10:30:00Z",
    "network": "polygon_mainnet",
    "explorer_url": "https://polygonscan.com/tx/0x789abc..."
  },
  "proof": {
    "leaf_index": 42,
    "proof_path": ["0xaaa...", "0xbbb...", "0xccc..."]
  }
}

Independent Verification

You can verify proofs independently without trusting Kiket:

  1. Get the proof data from the API or compliance export
  2. Recompute the Merkle root using the content hash and proof path
  3. Check the blockchain for the anchor transaction
  4. Verify the Merkle root in the transaction matches your computation
// Example: Independent Merkle proof verification
const crypto = require('crypto');

function verifyProof(contentHash, proofPath, expectedRoot) {
  let current = contentHash;

  for (const sibling of proofPath) {
    // Sort hashes for consistent ordering
    const pair = [current, sibling].sort();
    current = crypto
      .createHash('sha256')
      .update(Buffer.from(pair[0] + pair[1], 'hex'))
      .digest('hex');
  }

  return current === expectedRoot;
}

Understanding Verification Results

Verified (Success)

The record is confirmed on the blockchain. You'll see:

  • Anchor ID - Internal reference for the Merkle tree batch
  • Merkle Root - The root hash submitted to blockchain
  • Transaction Hash - Polygon transaction containing the anchor
  • Block Number - Where the transaction was confirmed
  • Explorer Link - Direct link to view on Polygonscan

Not Found

Possible reasons:

  • Record hasn't been anchored yet (check pending status)
  • Invalid content hash format
  • Record doesn't exist in the system

Verification Failed

The Merkle proof doesn't match. This could indicate:

  • Data corruption (rare)
  • Incorrect proof data
  • Contact support if this occurs unexpectedly

Verification for Compliance

For compliance audits, you may need to demonstrate:

  1. Chain of custody - Export the full audit trail with proofs
  2. Independent verification - Auditors can verify proofs themselves
  3. Blockchain transparency - All transactions are public on Polygon

Export Verification Package

Generate a compliance report that includes:

  • All audit records for a date range
  • Merkle proofs for each record
  • QR codes linking to blockchain transactions
  • Instructions for independent verification

See [Compliance Reports(../compliance/blockchain-reports.md) for details.

Troubleshooting

"Record not found"

  • Ensure the content hash is correctly formatted (64 hex characters)
  • Check if the record type and ID are valid
  • The record may be pending anchoring

"Anchor not confirmed"

  • The transaction is submitted but awaiting confirmations
  • Wait 5-10 minutes and retry
  • Check network status on Polygonscan

"Verification failed"

  • Contact support - this indicates a potential data integrity issue
  • Provide the content hash and anchor ID for investigation
  • [Blockchain Audit Trail(blockchain-audit-trail.md) - Overview of the anchoring system
  • [Blockchain API(../api/blockchain.md) - Programmatic verification
  • [EU AI Act Compliance(../compliance/eu-ai-act.md) - AI-specific audit requirements