Libbitcoin Protocol: Difference between revisions
No edit summary |
Updates for version3 incorporation of libbitcoin-protocl. |
||
Line 1: | Line 1: | ||
The [https://github.com/libbitcoin/libbitcoin-protocol libbitcoin-protocol] library is | The [https://github.com/libbitcoin/libbitcoin-protocol libbitcoin-protocol] library is new in '''version3''' and replaces the [https://github.com/zeromq/czmqpp zeromq/czmq++], [https://github.com/zeromq/czmq zeromq/czmq] and [https://github.com/jedisct1/libsodium libsodium] dependencies. The library provides a high level abstraction for [http://zeromq.org ØMQ] networking primitives used in the libbitcoin client-server interface. | ||
In '''version4''' (experimental) the library also defines a privacy-centric blockchain query language based on a simple and formally-defined messaging interface for the purpose of communicating with a [[Thin_Client_Security#Full_Node_vs._SPV|full chain or SPV]] blockchain server. The design is independent of network topology and supports in-process as well as wide area messaging. | |||
==Status== | ==Status== | ||
The '''version3''' library is integrated with the [[Libbitcoin_Build|Libbitcoin Build]] system<ref>[https://travis-ci.org/libbitcoin/libbitcoin-protocol Libbitcoin Protocol Travis-CI Report]</ref>, with regular build and test execution<ref>[https://coveralls.io/r/libbitcoin/libbitcoin-protocol Libbitcoin Protocol Coveralls Report]</ref>. | |||
A '''version4''' [https://github.com/libbitcoin/libbitcoin-protocol/tree/master/proto/bitcoin/protocol interface definition] based on [https://developers.google.com/protocol-buffers/ Protocol Buffers] has been published along with [https://github.com/libbitcoin/libbitcoin-protocol/tree/master/include/bitcoin C++], [https://github.com/libbitcoin/libbitcoin-protocol/tree/master/java/libbitcoin/protocol Java] and [https://github.com/libbitcoin/libbitcoin-protocol/tree/master/python/bitcoin/protocol Python] marshalling libraries. | |||
==Privacy First== | ==Privacy First== | ||
The focus of the protocol is not the wire encoding, but the messaging semantics<ref>[https://github.com/libbitcoin/libbitcoin-protocol#wire-encoding Libbitcoin Protocol Wire Encoding Statement]</ref>. The central tenet of the library is that the level of privacy in making queries must be controllable by the caller over public networks. As such all queries are prefix filtered on a bit-wise basis with the depth of the filter controlled by the caller. | The focus of the '''version4''' protocol is not the wire encoding, but the messaging semantics<ref>[https://github.com/libbitcoin/libbitcoin-protocol#wire-encoding Libbitcoin Protocol Wire Encoding Statement]</ref>. The central tenet of the library is that the level of privacy in making queries must be controllable by the caller over public networks. As such all queries are prefix filtered on a bit-wise basis with the depth of the filter controlled by the caller. | ||
==Objectives== | ==Protocol Objectives== | ||
* The server should not be required to maintain any session state. | * The server should not be required to maintain any session state. | ||
* The client should not be required to provide any identifying information. | * The client should not be required to provide any identifying information. | ||
Line 17: | Line 21: | ||
==Dependencies== | ==Dependencies== | ||
* [ | * [http://www.boost.org boost] | ||
* [ | * [https://github.com/bitcoin/secp256k1 secp256k1] | ||
* [https://github.com/zeromq/libzmq zmq] | |||
* [[Libbitcoin_Common|libbitcoin]] | |||
* [https://developers.google.com/protocol-buffers protobuf 2.6] (version4+ only) | |||
==See Also== | ==See Also== |
Revision as of 22:02, 27 May 2016
The libbitcoin-protocol library is new in version3 and replaces the zeromq/czmq++, zeromq/czmq and libsodium dependencies. The library provides a high level abstraction for ØMQ networking primitives used in the libbitcoin client-server interface.
In version4 (experimental) the library also defines a privacy-centric blockchain query language based on a simple and formally-defined messaging interface for the purpose of communicating with a full chain or SPV blockchain server. The design is independent of network topology and supports in-process as well as wide area messaging.
Status
The version3 library is integrated with the Libbitcoin Build system[1], with regular build and test execution[2].
A version4 interface definition based on Protocol Buffers has been published along with C++, Java and Python marshalling libraries.
Privacy First
The focus of the version4 protocol is not the wire encoding, but the messaging semantics[3]. The central tenet of the library is that the level of privacy in making queries must be controllable by the caller over public networks. As such all queries are prefix filtered on a bit-wise basis with the depth of the filter controlled by the caller.
Protocol Objectives
- The server should not be required to maintain any session state.
- The client should not be required to provide any identifying information.
- The protocol should allow client privacy, leaving trade-offs between privacy and performance to the caller.
- The protocol should be extensible while allowing backward and forward compatibility without version negotiation.
- The protocol should be defined in a formal interface definition language (IDL).
- The IDL should provide tooling for generation of client-server stubs in C/C++.
- The IDL tooling should implement marshalling in C/C++.
Dependencies
- boost
- secp256k1
- zmq
- libbitcoin
- protobuf 2.6 (version4+ only)