FC Buffer
Serialization library geared towards immutable data storage such as blockchains.
Project status: Beta. FC Buffer is a recent refactor from serialization code used in
Bitshares and Steem. Some of the serialization code was reduced and the definitions
language added. The definition format may change.
Features
- Validation and error reporting
- Concise and intuitive binary format
- Compatible with the FC library used in Graphene blockchains
- Extendable JSON structure definitions
- Binary and JSON string serialization
- Unit testing and code coverage
Non Features
- Consider Cap'n Proto or Protocol Buffers if your data structures need to be extended
at the serialization layer.
- No streams, usually smaller objects will work
Example
Fcbuffer = require('fcbuffer')
assert = require('assert')
const definitions = {
MessageType: 'FixedString16',
AccountName: 'FixedString32',
Message: {
fields: {
from: 'AccountName',
to: 'AccountName',
cc: 'AccountName[]',
type: 'MessageType',
data: 'Bytes'
}
}
}
fcbuffer = Fcbuffer(definitions, {defaults: true})
assert(fcbuffer.errors.length === 0, fcbuffer.errors)
var {Message} = fcbuffer.structs
Message.toObject()
msg = { from: 'jc', to: 'charles', cc: [ 'abc' ], type: '', data: '0f0f0f' }
buf = Fcbuffer.toBuffer(Message, msg)
obj = Fcbuffer.fromBuffer(Message, buf)
assert.deepEqual(msg, obj)
fcbuffer2 = fcbuffer.extend({
PermissionName: 'FixedString16',
AccountPermission: {
fields: {
account: 'AccountName',
permission: 'PermissionName'
}
}
})
assert(fcbuffer2.errors.length === 0, fcbuffer2.errors)
var {AccountPermission} = fcbuffer2.structs
AccountPermission.toObject()
References
Environment
Node 6+ and browser (browserify, webpack, etc)