53 lines
1.5 KiB
Protocol Buffer
53 lines
1.5 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package gossip.v1;
|
|
|
|
option go_package = "proto/gossip/v1;gossipv1";
|
|
|
|
message GossipMessage {
|
|
oneof message {
|
|
Heartbeat heartbeat = 1;
|
|
LockupObservation lockup_observation = 2;
|
|
}
|
|
}
|
|
|
|
// P2P gossip heartbeats for network introspection purposes.
|
|
message Heartbeat {
|
|
// The node's arbitrarily chosen, untrusted nodeName.
|
|
string node_name = 1;
|
|
// A monotonic counter that resets to zero on startup.
|
|
int64 counter = 2;
|
|
// UNIX wall time.
|
|
int64 timestamp = 3; // TODO: use this
|
|
|
|
// Consensus heights on connected networks
|
|
message Network {// TODO: use this
|
|
uint32 id = 1;
|
|
int64 height = 2;
|
|
}
|
|
repeated Network networks = 4;
|
|
|
|
// TODO: include statement of gk public key?
|
|
// TODO: software version/release
|
|
}
|
|
|
|
// A LockupObservation is a signed statement by a given guardian node
|
|
// that they observed a finalized lockup on a chain.
|
|
//
|
|
// The lockup is uniquely identified by its hashed (tx_hash, nonce, values...) tuple.
|
|
//
|
|
// Other nodes will verify the signature. Once any node has observed a quorum of
|
|
// guardians submitting valid signatures for a given hash, they can be assembled into a VAA.
|
|
//
|
|
// Messages without valid signature are dropped unceremoniously.
|
|
//
|
|
// TODO: rename? we also use it for governance VAAs
|
|
message LockupObservation {
|
|
// Guardian pubkey as truncated eth address.
|
|
bytes addr = 1;
|
|
// The lockup's deterministic, unique hash.
|
|
bytes hash = 2;
|
|
// ECSDA signature of the hash using the node's guardian key.
|
|
bytes signature = 3;
|
|
}
|