Difference between revisions of "Libbitcoin Protocol"

From Bitcoin Wiki
Jump to: navigation, search
(stub)
 
(initial content.)
Line 1: Line 1:
This page is a stub.
+
The [https://github.com/libbitcoin/libbitcoin-protocol libbitcoin-protocol] library is experimental and not currently used by any other [[Libbitcoin]] library. The library 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.
 +
 
 +
==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++.
 +
 
 +
==Privacy First Design==
 +
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.
 +
 
 +
==Status==
 +
An [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. The library is integrated with the [[Libbitcoin_Build|Libbitcoin Build]] system, with regular build and test execution, including a moderate level of unit test coverage<ref>[https://coveralls.io/r/libbitcoin/libbitcoin-protocol Libbitcoin Protocol Coveralls Report]</ref>.
 +
 
 +
==History==
 +
The protocol design was the work product of a [[Libbitcoin]] team meeting in San Diego in August, 2014.

Revision as of 00:50, 20 May 2015

The libbitcoin-protocol library is experimental and not currently used by any other Libbitcoin library. The library 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.

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++.

Privacy First Design

The focus of the protocol is not the wire encoding, but the messaging semantics[1]. 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.

Status

An interface definition based on Protocol Buffers has been published along with C++, Java and Python marshalling libraries. The library is integrated with the Libbitcoin Build system, with regular build and test execution, including a moderate level of unit test coverage[2].

History

The protocol design was the work product of a Libbitcoin team meeting in San Diego in August, 2014.