ceremonyclient/node/protobufs/data.proto
petricadaipegsp 1b78d758f5
Prefer connected peers for sync (#395)
* Add externally reachable data peer flag

* Announce node reachability

* Go through candidates based on reachability
2024-12-01 15:07:08 -06:00

131 lines
3.3 KiB
Protocol Buffer

syntax = "proto3";
package quilibrium.node.data.pb;
option go_package = "source.quilibrium.com/quilibrium/monorepo/node/protobufs";
import "google/protobuf/wrappers.proto";
import "channel.proto";
import "clock.proto";
import "keys.proto";
import "node.proto";
message DataPeerListAnnounce {
reserved 1;
reserved "peer_list";
DataPeer peer = 2;
}
message DataPeer {
bytes peer_id = 1;
string multiaddr = 2;
uint64 max_frame = 3;
int64 timestamp = 4;
bytes version = 5;
reserved 6;
reserved "signature";
reserved 7;
reserved "public_key";
bytes total_distance = 8;
bytes patch_version = 9;
google.protobuf.BoolValue externally_reachable = 10;
}
message DataCompressedSync {
uint64 from_frame_number = 1;
uint64 to_frame_number = 2;
repeated quilibrium.node.clock.pb.ClockFrame truncated_clock_frames = 3;
repeated InclusionProofsMap proofs = 4;
repeated InclusionSegmentsMap segments = 5;
}
message SyncRequestAuthentication {
bytes peer_id = 1;
bytes challenge = 2;
quilibrium.node.keys.pb.Ed448Signature response = 3;
}
message DataCompressedSyncRequestMessage {
oneof sync_message {
quilibrium.node.clock.pb.ClockFramesPreflight preflight = 1;
quilibrium.node.clock.pb.ClockFramesRequest request = 2;
SyncRequestAuthentication authentication = 3;
}
}
message DataCompressedSyncResponseMessage {
oneof sync_message {
quilibrium.node.clock.pb.ClockFramesPreflight preflight = 1;
DataCompressedSync response = 2;
}
}
message InclusionProofsMap {
bytes frame_commit = 1;
bytes proof = 2;
repeated InclusionCommitmentsMap commitments = 3;
}
message InclusionSegmentsMap {
bytes hash = 1;
bytes data = 2;
}
message InclusionCommitmentsMap {
bytes commitment = 1;
string type_url = 2;
repeated bytes segment_hashes = 3;
}
message GetDataFrameRequest {
uint64 frame_number = 1;
string peer_id = 2;
}
message DataFrameResponse {
quilibrium.node.clock.pb.ClockFrame clock_frame = 1;
bytes proof = 2;
}
message PreMidnightMintResponse {
bytes address = 1;
uint32 increment = 2;
}
message PreMidnightMintStatusRequest {
bytes owner = 1;
}
message FrameRebroadcast {
uint64 from = 1;
uint64 to = 2;
repeated quilibrium.node.clock.pb.ClockFrame clock_frames = 3;
bytes random = 4;
}
service DataService {
rpc GetCompressedSyncFrames (quilibrium.node.clock.pb.ClockFramesRequest) returns (stream DataCompressedSync);
rpc NegotiateCompressedSyncFrames (stream DataCompressedSyncRequestMessage) returns (stream DataCompressedSyncResponseMessage);
rpc GetPublicChannel (stream quilibrium.node.channel.pb.P2PChannelEnvelope) returns (stream quilibrium.node.channel.pb.P2PChannelEnvelope);
rpc GetDataFrame (GetDataFrameRequest) returns (DataFrameResponse);
rpc HandlePreMidnightMint (quilibrium.node.node.pb.MintCoinRequest) returns (PreMidnightMintResponse);
rpc GetPreMidnightMintStatus (PreMidnightMintStatusRequest) returns (PreMidnightMintResponse);
}
message ChallengeProofRequest {
bytes peer_id = 1;
uint32 core = 2;
quilibrium.node.clock.pb.ClockFrame clock_frame = 3;
bytes output = 4;
uint64 frame_number = 5;
uint32 difficulty = 6;
}
message ChallengeProofResponse {
bytes output = 1;
}
service DataIPCService {
rpc CalculateChallengeProof(ChallengeProofRequest) returns (ChallengeProofResponse);
}