81 lines
2.5 KiB
Protocol Buffer
81 lines
2.5 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package gossip.v1;
|
|
|
|
option go_package = "github.com/certusone/wormhole/bridge/pkg/proto/gossip/v1;gossipv1";
|
|
|
|
message GossipMessage {
|
|
oneof message {
|
|
// Deprecated: use SignedHeartbeat.
|
|
Heartbeat heartbeat = 1;
|
|
SignedObservation signed_observation = 2;
|
|
SignedHeartbeat signed_heartbeat = 3;
|
|
}
|
|
}
|
|
|
|
message SignedHeartbeat {
|
|
// Serialized Heartbeat message.
|
|
bytes heartbeat = 1;
|
|
|
|
// ECDSA signature using the node's guardian public key.
|
|
bytes signature = 2;
|
|
|
|
// Guardian address that signed this payload (truncated Eth address).
|
|
// This is already contained in Heartbeat, however, we want to verify
|
|
// the payload before we deserialize it.
|
|
bytes guardian_addr = 3;
|
|
}
|
|
|
|
// 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;
|
|
|
|
message Network {
|
|
// Canonical chain ID.
|
|
uint32 id = 1;
|
|
// Consensus height of the node.
|
|
int64 height = 2;
|
|
// Chain-specific human-readable representation of the bridge contract address.
|
|
string bridge_address = 3;
|
|
// Connection error count
|
|
uint64 error_count = 4;
|
|
}
|
|
repeated Network networks = 4;
|
|
|
|
// Human-readable representation of the current bridge node release.
|
|
string version = 5;
|
|
|
|
// Human-readable representation of the guardian key's address.
|
|
string guardian_addr = 6;
|
|
|
|
// UNIX boot timestamp.
|
|
int64 boot_timestamp = 7;
|
|
}
|
|
|
|
// A SignedObservation is a signed statement by a given guardian node
|
|
// that they observed a given event.
|
|
//
|
|
// Observations always result from an external, final event being observed.
|
|
// Examples are emitted messages 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.
|
|
//
|
|
// 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.
|
|
message SignedObservation {
|
|
// Guardian pubkey as truncated eth address.
|
|
bytes addr = 1;
|
|
// The observation's deterministic, unique hash.
|
|
bytes hash = 2;
|
|
// ECSDA signature of the hash using the node's guardian key.
|
|
bytes signature = 3;
|
|
}
|