GDP Version 0 to Version 2 Transition

This page gives general information about differences between Version 0 and Version 2 of the GDP. For information about converting code, see V2 Transition — Code. For information about converting data, see V2 Transition — Data.

There was no Version 1 released.

Emphasis Changed to Asynchronous Access

The primary interface in V0 was for single record, synchronous access based on record number. For example, to append a record an application called the gdp_gcl_append C function (gcl.append in Python), passing it the single record to be appended. When the function returned the append would be complete. This was very simple to use but not very efficient.

In V2 the primary interface is asynchronous and handles lists of records. For example, the C function gdp_gin_append_async will append multiple records and return the results after that function returns (either via a callback or using the event interface). This is also more efficient, since all the records passed in one call can be linked together in a hash chain, and only one digital signature need be computed. Since computing a signature is about 1000 times slower than computing a hash function, this difference can be considerable.

The same holds true on reads. Note that an event will be delivered once for each log entry on reads of multiple records. One nice property of this change is that the API is now consistent between asynchronous read and subscriptions.

The single record synchronous interfaces still exist for programs written in a declarative language that do not require especially high performance.

Record Signatures and Hashes Exposed

To get some of the security properties we want, the hash of a record datum and the corresponding signature need to be visible to the application. Applications that do not need particular control over the security properties can ignore these.