Proto commits in input-output-hk/chain-libs

These 47 commits are when the Protocol Buffers files have changed:

Commit:cba00cd
Author:Mikhail Zabaluev

network: Reworded the doc on SyncMultiverseRequest Avoid unclear use of "below".

The documentation is generated from this commit.

Commit:86a0749
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

Document a special case of SyncMultiverse In case there are no checkpoint blocks known by the server, it will stream blocks from the genesis, as a way to do full sync.

Commit:0912d6c
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

Change parameter fields for SyncMultiverseRequest Use block ID checkpoints instead of a single starting length.

Commit:986f255
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

Reorg watch proto in chain-network Reuse protobuf message types between the node and watch protocols: share the definitions of common message types in protobuf package iohk.chain.types, shared between node and watch service packages. Change the namespacing of the code generated by tonic-build to allow reuse in the Rust module system.

Commit:7d41b57
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

Remove mempool subscription from watch.proto No need for this functionality right now.

Commit:be6264f
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

Renamed the client subscription service to Watch The SubscriptionService name is a bit generic and makes stupid generated module names for the service and client implementations of the protocol.

Commit:982a9e3
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

Moved the watch protocol to chain-network Removed chain-watch as a separate crate.

Commit:a4419b8
Author:Enzo Cioppettini
Committer:Mikhail Zabaluev

setup basic PoC watch.proto

Commit:c51fba7
Author:Enzo Cioppettini
Committer:Enzo Cioppettini

setup basic PoC watch.proto

Commit:b0e7136
Author:Giacomo Pasini
Committer:Giacomo Pasini

Change PeersResponse format

Commit:2ee7abf
Author:Yevhenii Babichenko
Committer:Yevhenii Babichenko

chain-network: use checkpoints mechanism in PullBlocks similar to PullBlocksToTip

Commit:85dd915
Author:Yevhenii Babichenko
Committer:Yevhenii Babichenko

chain-network: add PullBlocks endpoint to request a range of blocks

Commit:4d270cc
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

Added client side node ID auth to protocol Added RPC method ClientAuth to provide authenticated node ID also from the client side. The server's HandshakeResponse now features a nonce that the client signs to create a signature for its node ID.

Commit:770c385
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

Add node ID authentication to protocol handshake

Commit:712545a
Author:Mikhail Zabaluev

Remove folders network-core and network-grpc Clean up the code for old tokio 0.1 crates.

Commit:538843a
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

Begin porting network to tonic and tokio 0.2 Replacing network-core and network-grpc with a single crate, chain-network. It combines the functionality of two (the protocol abstraction layer in mod core, the gRPC implementation in mod grpc, common data type definitions and error types), ported to tokio 0.2 APIs and tonic/hyper as the gRPC stack.

Commit:6ac0462
Author:Yevhenii Babichenko

bottle in sea network service

Commit:b1b9d2e
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

Begin porting network to tonic and tokio 0.2 Replacing network-core and network-grpc with a single crate, chain-network. It combines the functionality of two (the protocol abstraction layer in mod core, the gRPC implementation in mod grpc, common data type definitions and error types), ported to tokio 0.2 APIs and tonic/hyper as the gRPC stack.

Commit:076c586
Author:Vincent Hanquez
Committer:Vincent Hanquez

add peers message in protobuf

Commit:044f713
Author:Mikhail Zabaluev

network: Rename Content to Fragment In service type name and the subscription method name of what was named "content" use "fragment" for consistency with other naming.

Commit:1a8c2b0
Author:Mikhail Zabaluev

network: Add Handshake method The Handshake RPC method is a way to query the server for the supported protocol and the genesis block hash, so that the client can detect a wrong chain or an incompatible peer.

Commit:bebe7ac
Author:Mikhail Zabaluev

chain-core, network: Rename Message to Fragment

Commit:90b9d77
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

network: PushHeaders and missing blocks event Add a new BlockEvent variant, missing, with a PullHeadersRequest structure that the service can use as a reverse PullHeaders request. Add method PushHeaders to respond to this solicitation by sending up a chain of headers.

Commit:bdba264
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

network: Added method PullHeaders Reusing some NTT prior art, add a method that pulls blockchain headers between one of the checkpoint IDs of blocks present at the requester, and the ID of a block up to which the chain needs to be retrieved.

Commit:8bc3fd8
Author:Mikhail Zabaluev

network: Redesign block subscription for upload Block subscription stream now can retrieve solicitations for blocks from the client, which can fulfill the solictitation with client streaming method UploadBlocks.

Commit:5d3207e
Author:Mikhail Zabaluev

Rename repeated field in protobuf type BlockIds Rename id to ids so that it looks more natural in generated code.

Commit:1a19ca3
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

network: pass node ID along with subscriptions Change the gRPC protocol and network-core abstractions to pass the subscriber's node ID along with subscription requests. Currently this is to be implemented via gRPC metadata (an HTTP header); later on the ID may need to be verifiable with the connection's TLS certificate. Start with the server side, not yet supported on the client. Drop the sender ID field from Gossip.

Commit:cb3dab0
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

network: Restore Gossip as batch message For Poldercast to work as per the paper, it's important to receive gossip updates in batches of node messages.

Commit:21b7975
Author:Mikhail Zabaluev

Rework the node gossip protocol Make node gossip propagated bidirectionally, like blocks and transactions. Each gossip message carries information on a single node.

Commit:6b9c39d
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

network: Renamed TransactionService To ContentService, serving messages.

Commit:b2f3bf7
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

network-grpc: Remove a disused protobuf type BlockSubscriptionRequest is no more.

Commit:4fee4b4
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

network: Introduce bidirectional subscriptions Added bidirectional subscription methods to gRPC protobuf definitions and network-core client API (server support pending).

Commit:bb0b27f
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

network-grpc: remove announce response types

Commit:90cc3c5
Author:Mikhail Zabaluev

Consolidate protobuf in network-grpc Remove codes.proto and move node.proto under network-grpc as the only user of the protobuf files.

Commit:9705d32
Author:Alexander Vershilov

Drop redundant methods.

Commit:871a4e3
Author:Alexander Vershilov
Committer:Alexander Vershilov

Support announce transactions method.

Commit:69a2226
Author:Alexander Vershilov
Committer:Alexander Vershilov

Implement block announcement protocol.

Commit:dc56c44
Author:Alexander Vershilov
Committer:Alexander Vershilov

Gossip protocol implementation.

Commit:83a359a
Author:Alexander Vershilov
Committer:Alexander Vershilov

Add get transactions support in grpc.

Commit:7844120
Author:Alexander Vershilov
Committer:Alexander Vershilov

Introduce protocol conformant API in the network service.

Commit:939a931
Author:Alexander Vershilov
Committer:Alexander Vershilov

Convert TipRequest to return Header instead of (id,date).

Commit:22d1ddb
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

network: Added gRPC method SubscribeToBlocks Designed the subscription API for the block service and its network-core counterpart.

Commit:92d2ebf
Author:Mikhail Zabaluev

network: Rename StreamBlocksTo* to PullBlocksTo* "Stream" looks redundant in protobuf, especially in generated names like StreamBlocksToTipStream; "Pull" better reflects the use case.

Commit:2d99761
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

Crate network-core Moved the abstract network interface definitions, incubated in network-grpc, to a new dedicated crate network-core. The interfaces rely on enum types generated from protobuf descriptions. For this, the protobuf declarations of enums have been split out into a dedicated package codes.proto which is used by the build script of network-core to generate the types and make them available as module codes.

Commit:e0a02b8
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

network-grpc: Flatten and simplify the protocol The named wrapper types are redundant, both for their intended purpose and in the wire format. Field ids in a message sufficiently identify the purpose and format of the field value. Therefore, the type definitions in types.proto have been removed. The proto package name has been changed to iohk.chain.node to reflect the now-generic nature of the protocol.

Commit:e466769
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

network-grpc: Redesign for abstract network serialization We cannot rely on From impls to convert between chain types associated with the Node impl and protobuf data types, as these would have to be defined somewhere that is gnostic of both the gRPC network protocol and the concrete chain implementation. Part of the solution is changing the protobuf definitions for basic chain data types to allow opaque serialization. Thankfully, the only such message type that sported specific fields was BlockDate, so this is redefined to carry opaque bytes. At the same time HeaderHash is renamed to BlockId to match the naming used by the chain abstraction traits.

Commit:831db9b
Author:Mikhail Zabaluev
Committer:Mikhail Zabaluev

Initial code for network-grpc server Moved from the internal project and adapted to chain-core definitions. The abstract interface is defined in network_core, to be moved to its own crate.