# Data Integrity

<figure><img src="/files/S5r1qmNnIGjEoxqo2RVp" alt="" width="563"><figcaption></figcaption></figure>

An organisation wants to be assured about the data integrity (accuracy and authenticity) of their user account balances (or any other data) in their database. To achieve that, the organisation wants to easily verify the user account balances.

Verification and validation are often seen as an important part of Data Integrity (for instance see [here](https://en.wikipedia.org/wiki/Data_integrity)). The solution includes these steps:

* Item registration – the user account balance is hidden but registered on the blockchain
* Item verification – the user account balance is compared with the blockchain to determine validity

Please be aware that verification always requires the original item.

We will use this class wrapper around the Independent Record REST API (described [here](/nchain-event/independent-records/api-workflow.md)):

```typescript
Class Event(aUrl, aApiKey) {

  write(record, salt) // write a fingerprint on the blockchain and return location

  verify(record, salt, location) // verify on blockchain, return match/mismatch/error

}
```

## **Item Registration**

Every time that the user account balance is updated in the application's database, this procedure is performed to register a fingerprint of the new balance on the blockchain:

```typescript
  aRecord = "get the user account balance for the userId"

  aSalt = time.now()

  aLocation = event.write(aRecord, aSalt) // Register the record on the blockchain

  // ensure that you persist aSalt, aLocation for the userId
```

"aRecord" contains whatever fields you want to register, e.g. a single field, a set of fields such as id, balance, dates, indices, a complete record, a set of records, or even complete tables or datasets.

## **Item Verification**

At any arbitrary time later, the organisation can verify the original user account balance with this procedure:

```typescript
  aRecord = "get the user account balance for the userId"

  aSalt, aLocation = "load the stored salt and location for the userId"

  result = event.verify(aRecord, aSalt, aLocation) // Compare with the blockchain

  if result = match // aRecord is verified as valid
  if result = mismatch // aRecord is verified as invalid
  if result = error // try again later
```

"aRecord" must contain identical fields to those that were originally registered to the blockchain.

Normally, you can expect that the result will be "match".

If you encounter a "mismatch", then you know that either there is something wrong with your process or the local record. These will need further investigation on your part. Maybe an updated record was not written to the blockchain or your local copy of the record location has become corrupted?

If you encounter an "error", you can try again later. If the error persists for more than an hour or so, then this is unlikely to simply be a delay in writing to the blockchain and again there appears to be something seriously wrong with the process which will need further investigation on your part. Maybe your local copy of the record location has become corrupted?

The actual syntax is shown in [Verify Record ](/nchain-event/independent-records/api-workflow/verify-record-+.md)below.

## Benefits

* Provides high confidence of the validity of verified data for the organisation.
* Provides high confidence to data auditors/users who have access to the original data of its validity.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.teranode.group/nchain-event/independent-records/tutorials/data-integrity.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
