FC Buffer
Serialization library geared towards immutable data storage such as blockchains.
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, smaller blockchain sized objects are used
Example
Fcbuffer = require('fcbuffer')
assert = require('assert')
definitions = {
message_type: 'fixed_string16',
account_name: 'fixed_string32',
message: {
fields: {
from: 'account_name',
to: 'account_name',
cc: 'account_name[]',
type: 'message_type',
data: 'bytes'
}
}
}
fcbuffer = Fcbuffer(definitions, {defaults: true})
assert(fcbuffer.errors.length === 0, fcbuffer.errors)
var {message} = fcbuffer.structs
message.toObject()
msg = { from: 'jc', to: 'dan', cc: [ 'abc' ], type: '', data: '0f0f0f' }
buf = Fcbuffer.toBuffer(message, msg)
obj = Fcbuffer.fromBuffer(message, buf)
assert.deepEqual(msg, obj)
fcbuffer2 = fcbuffer.extend({
permission_name: 'fixed_string16',
account_permission: {
fields: {
account: 'account_name',
permission: 'permission_name'
}
}
})
assert(fcbuffer2.errors.length === 0, fcbuffer2.errors)
var {account_permission} = fcbuffer2.structs
account_permission.toObject()
References
Environment
Node 6+ and browser (browserify, webpack, etc)