2020-08-17 10:22:12 -07:00
|
|
|
syntax = "proto3";
|
|
|
|
|
|
|
|
package gossip.v1;
|
|
|
|
|
|
|
|
option go_package = "proto/gossip/v1;gossipv1";
|
|
|
|
|
2020-08-19 05:23:00 -07:00
|
|
|
message GossipMessage {
|
|
|
|
oneof message {
|
|
|
|
Heartbeat heartbeat = 1;
|
2020-11-20 13:35:00 -08:00
|
|
|
SignedObservation signed_observation = 2;
|
2020-08-19 05:23:00 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// P2P gossip heartbeats for network introspection purposes.
|
2020-08-17 10:22:12 -07:00
|
|
|
message Heartbeat {
|
2020-08-19 05:23:00 -07:00
|
|
|
// The node's arbitrarily chosen, untrusted nodeName.
|
2020-08-17 10:22:12 -07:00
|
|
|
string node_name = 1;
|
2020-08-19 05:23:00 -07:00
|
|
|
// A monotonic counter that resets to zero on startup.
|
2020-08-17 10:22:12 -07:00
|
|
|
int64 counter = 2;
|
2020-08-19 05:23:00 -07:00
|
|
|
// UNIX wall time.
|
2020-08-21 01:36:08 -07:00
|
|
|
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;
|
2020-08-19 05:23:00 -07:00
|
|
|
|
|
|
|
// TODO: include statement of gk public key?
|
|
|
|
// TODO: software version/release
|
|
|
|
}
|
|
|
|
|
2020-11-20 13:35:00 -08:00
|
|
|
// A SignedObservation is a signed statement by a given guardian node
|
|
|
|
// that they observed a given event.
|
2020-08-19 05:23:00 -07:00
|
|
|
//
|
2020-11-20 13:35:00 -08:00
|
|
|
// Observations always result from an external, final event being observed.
|
|
|
|
// Examples are lockups in finalized blocks on a block or guardian set changes
|
|
|
|
// injected by node operators after reaching off-chain consensus.
|
|
|
|
//
|
|
|
|
// The event is uniquely identified by its hashed (tx_hash, nonce, values...) tuple.
|
2020-08-19 05:23:00 -07:00
|
|
|
//
|
|
|
|
// 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.
|
2020-11-20 13:35:00 -08:00
|
|
|
message SignedObservation {
|
2020-08-19 05:23:00 -07:00
|
|
|
// Guardian pubkey as truncated eth address.
|
|
|
|
bytes addr = 1;
|
2020-08-21 04:00:40 -07:00
|
|
|
// The lockup's deterministic, unique hash.
|
2020-08-19 05:23:00 -07:00
|
|
|
bytes hash = 2;
|
|
|
|
// ECSDA signature of the hash using the node's guardian key.
|
|
|
|
bytes signature = 3;
|
2020-08-17 10:22:12 -07:00
|
|
|
}
|