DEV Community

Cover image for Record Templates file descriptors
Davi Ortega for DDX-Project

Posted on

Record Templates file descriptors

Record templates are the records in the DDX ecosystem that defines the schema of a particular table.

Following the Open Index Protocol (OIP), when we publish a record template, the protocol builds a file descriptor.

We can use the OIP public API to get a file descriptor of an existing record template.

Organization template

The recommended DDX template for organizations, institutions, groups and etc resides on the FLO blockchain here:

05e5eea349e2d2788f835b3cd46843e08e5acf6664f764297fe806f7e9198b57

And we can use the OIP API to get the info already assembled and decoded here:

https://api.oip.io/oip/o5/template/get/05E5EEA3

If you want to know more about the OIP API check this documentation

One of the fields is the file_descriptor_set.

For the organization template the file_descriptor_set is:

CncKB3AucHJvdG8SEm9pcFByb3RvLnRlbXBsYXRlcyJQCgFQEhAKCGxvY2F0aW9uGAEgASgJEiQKFnBhcmVudE9yZ2FuaXphdGlvbkxpc3QYAiADKAsyBFR4aWQaEwoEVHhpZBILCgNyYXcYASABKAxiBnByb3RvMw
Enter fullscreen mode Exit fullscreen mode

How do we get the info about the template from here?

The hard answer is a combination of protobuf and base64 decoding, but the easy answer is to use the package:

oip-protobufjs

Using oip-protobufjs to read a file descriptor

Let's assume we already have node and npm installed.

First, we create a project

mkdir oip-read-template
cd oip-read-template
npm init
Enter fullscreen mode Exit fullscreen mode

Now let's install the packages:

npm install @babel/runtime oip-protobufjs
Enter fullscreen mode Exit fullscreen mode

Let's make a file called app.js

touch app.js
Enter fullscreen mode Exit fullscreen mode

The contents of app.js should be:

const { decodeDescriptor } = require('oip-protobufjs/lib/builders')
const descriptor = "CncKB3AucHJvdG8SEm9pcFByb3RvLnRlbXBsYXRlcyJQCgFQEhAKCGxvY2F0aW9uGAEgASgJEiQKFnBhcmVudE9yZ2FuaXphdGlvbkxpc3QYAiADKAsyBFR4aWQaEwoEVHhpZBILCgNyYXcYASABKAxiBnByb3RvMw"
const info = decodeDescriptor(descriptor)
console.log(info)
Enter fullscreen mode Exit fullscreen mode

That's it, 4 lines. Save it and run.

node app.js
Enter fullscreen mode Exit fullscreen mode

If everything went ok, it should have shown a bunch of info regarding the organization template, for example its fields, the data type that is supposed to be in each field and etc.

Final considerations

We can use the OIP API and the oip-protobufjs to get information on the fly about how to read and write records of any template in the DDX system.

We could run an instance of the FLO blockchain and the OIP daemon locally and we would have full interrupted access to the data in the DDX system, as long as we have an Internet connection, completely independent from anyone.

Also, the template 05E5EEA3 for organizations is a recommended template. Nobody is obligated to use it and anyone can build another one if they wish or use this one. Another option is to extend this template which will be the subject of another post where we cover the concept of Hierarchical Templates.

Stay tuned for the next posts!
☀️ + ⚜️ = 🚀🚀🚀

Top comments (0)