A guide for auditors, compliance officers, insurers, and regulators
This document walks a third party — someone with no chainNode account and no access to the customer's systems — through verifying that a chainNode compliance report has not been altered since it was generated. You need nothing but a web browser.
chainNode writes a cryptographic fingerprint of every asset configuration to the Polygon public blockchain. Polygon is an independent, public ledger — chainNode cannot edit, delete, or backdate entries on it. If the customer ever altered their database after a report was generated, the re-computed fingerprint would no longer match the one on-chain, and the tamper would be immediately visible to you.
This guide shows you how to perform that match in under two minutes per record.
You do not need:
Every row in a chainNode compliance report — asset, change event, or alert — includes these fields relevant to verification:
| Field | What it is |
|---|---|
| Asset ID | chainNode's stable identifier for the device |
| Hostname / IP | The device's network identity at the time of the event |
| Asset Type | Classification (server, PLC, sensor, etc.) |
| Config Hash | A 64-character SHA-256 fingerprint of the full configuration |
| TX Hash | The Polygon transaction that recorded the fingerprint |
| Block Number | The Polygon block containing the transaction |
| Logged At | The timestamp of the on-chain write (ISO-8601 UTC) |
The TX Hash is the key. It is your independent pointer into the public ledger.
Open the report and choose any row. You should repeat this for a representative sample — for a typical audit, verifying 5 to 10 randomly selected rows is sufficient to establish confidence in the full report.
Copy the TX Hash from that row. It looks like:
0x7f3a8e2d1c4b5a6e9f0d1c2b3a4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e
Paste the TX hash into the search bar at https://polygonscan.com and press Enter. You will see a public page like this:
Transaction Details
─────────────────────────────────────────
Transaction Hash: 0x7f3a8e2d...
Status: Success
Block: 54,123,456
Timestamp: 5 mins ago (2026-04-08 14:32:11 UTC)
From: 0x9a... (chainNode contract caller)
To: 0xB3... (chainNodeProofOfExistence)
Method: logData
If the page loads successfully, this transaction is real, public, and immutable. No one — not chainNode, not the customer, not even Polygon itself — can alter or delete it.
On the Polygonscan page, check:
If either disagrees significantly, flag the row.
Scroll to the Input Data section and click Decode Input Data. You will see the function call:
Function: logData(
string sensorId,
uint256 value,
string unit,
string metadata
)
sensorId: "chainnode_asset"
value: 0
unit: "sha256_hash:a3f7e1b2c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1"
metadata: {
"product": "chainnode",
"organization_id": "5c3f...",
"chainnode_asset_id": "cn_line1-plc-01",
"hostname": "line1-plc-01",
"ip_address": "10.1.4.22",
"asset_type": "iot_controller",
"config_hash": "a3f7e1b2c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1",
"change_type": "discovered",
"timestamp": "2026-04-08T14:32:09Z"
}
Confirm every one of the following matches between the report row and the on-chain metadata:
| Check | Report says… | On-chain says… | Match? |
|---|---|---|---|
| Config hash | a3f7e1b2… |
a3f7e1b2… (in both unit and metadata.config_hash) |
✓ / ✗ |
| Asset ID | cn_line1-plc-01 |
metadata.chainnode_asset_id |
✓ / ✗ |
| Hostname | line1-plc-01 |
metadata.hostname |
✓ / ✗ |
| Organization ID | (matches customer's tenant UUID) | metadata.organization_id |
✓ / ✗ |
If all four fields match, the row is verified. The customer cannot have altered that asset's recorded configuration — the evidence is frozen on a public ledger and the hash in the report is demonstrably the same hash that was written on-chain.
If any field does not match, the row has either been edited after the fact or the report is referencing the wrong transaction. Flag it and request explanation.
When every sampled row passes the check in §4, you have cryptographically established that:
organization_id in the on-chain metadata ties the record to a specific tenant UUID — it cannot be "borrowed" from another customer's records.This is stronger than a notary stamp, stronger than a timestamped PDF, and stronger than a vendor's internal audit log, all of which rely on trusting the entity that produced them.
To be precise about what a chainNode report is and isn't:
A chainNode report establishes a tamper-evident, time-anchored record of what the customer's network looked like to the agent at the moment each scan ran. That is what the blockchain layer gives you, and it is enough for every common compliance regime.
chainNode uses a hash-anchor architecture. The blockchain stores a cryptographic fingerprint plus a small metadata envelope; the rich, human-readable data stays in the customer's chainNode database, linked to the on-chain proof by the transaction hash.
On-chain (per transaction):
product identifier ("chainnode")organization_id (tenant UUID)chainnode_asset_idhostnameip_addressasset_typeconfig_hash (SHA-256 fingerprint of the full configuration)change_type (discovered / modified / removed / reinstated)timestamp (ISO-8601)Plus the Polygon-supplied block number and transaction hash.
Off-chain in the chainNode database (joined via blockchain_tx_hash):
This split is intentional. Writing every field to the blockchain would be expensive and unnecessary; the hash alone is enough to detect any tampering with the off-chain copy. You get the same audit property at a fraction of the cost and complexity.
For a typical compliance review, the following sampling plan is defensible:
| Report size | Rows to verify |
|---|---|
| ≤ 50 rows | All rows |
| 51 – 500 rows | 10% random sample, minimum 10 rows |
| 501 – 5,000 rows | 5% random sample, minimum 50 rows |
| > 5,000 rows | 1% random sample, minimum 100 rows, plus all rows marked as anomalies |
Always include:
Any single failed verification should trigger a full review of that asset's change history.
If any row fails the verification described in §4:
A cryptographic mismatch is not an accounting disagreement — it is a binary result.
You need only a web browser, only the chainNode report, and only Polygonscan to establish that a chainNode compliance report is exactly what the customer claims it is. The trust model does not depend on chainNode the company, on the customer's goodwill, or on any private infrastructure. Every claim in the report is anchored to a public ledger that the customer does not control.
That is the guarantee chainNode was built to provide. This document is how you collect it.
chainNode is a trademark of its respective owner. Polygon is a trademark of Polygon Labs. This guide corresponds to chainNode platform version 1.0 and applies to all reports generated on or after the platform's first production deployment.