mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-11-20 15:15:18 +00:00
668 lines
16 KiB
Protocol Buffer
668 lines
16 KiB
Protocol Buffer
syntax = "proto3";
|
||
|
||
package quilibrium.node.node.pb;
|
||
|
||
option go_package = "source.quilibrium.com/quilibrium/monorepo/node/protobufs";
|
||
|
||
import "clock.proto";
|
||
import "keys.proto";
|
||
|
||
message GetFramesRequest {
|
||
bytes filter = 1;
|
||
uint64 from_frame_number = 2;
|
||
uint64 to_frame_number = 3;
|
||
bool include_candidates = 4;
|
||
}
|
||
|
||
message GetFrameInfoRequest {
|
||
bytes filter = 1;
|
||
uint64 frame_number = 2;
|
||
bytes selector = 3;
|
||
}
|
||
|
||
message GetPeerInfoRequest {}
|
||
|
||
message GetNodeInfoRequest {}
|
||
|
||
message GetNetworkInfoRequest {}
|
||
|
||
message FramesResponse {
|
||
repeated quilibrium.node.clock.pb.ClockFrame truncated_clock_frames = 1;
|
||
}
|
||
|
||
message FrameInfoResponse {
|
||
quilibrium.node.clock.pb.ClockFrame clock_frame = 1;
|
||
}
|
||
|
||
message PeerInfo {
|
||
bytes peer_id = 1;
|
||
repeated string multiaddrs = 2;
|
||
uint64 max_frame = 3;
|
||
int64 timestamp = 4;
|
||
bytes version = 5;
|
||
bytes signature = 6;
|
||
bytes public_key = 7;
|
||
bytes total_distance = 8;
|
||
}
|
||
|
||
message PeerInfoResponse {
|
||
repeated PeerInfo peer_info = 1;
|
||
repeated PeerInfo uncooperative_peer_info = 2;
|
||
}
|
||
|
||
message NetworkInfo {
|
||
bytes peer_id = 1;
|
||
repeated string multiaddrs = 2;
|
||
double peer_score = 3;
|
||
}
|
||
|
||
message NodeInfoResponse {
|
||
string peer_id = 1;
|
||
uint64 max_frame = 2;
|
||
uint64 peer_score = 3;
|
||
bytes version = 4;
|
||
}
|
||
|
||
message PutPeerInfoRequest {
|
||
repeated PeerInfo peer_info = 1;
|
||
repeated PeerInfo uncooperative_peer_info = 2;
|
||
}
|
||
|
||
message PutNodeInfoRequest {
|
||
string peer_id = 1;
|
||
uint64 max_frame = 2;
|
||
uint64 peer_score = 3;
|
||
bytes signature = 4;
|
||
}
|
||
|
||
message PutResponse {}
|
||
|
||
message NetworkInfoResponse {
|
||
repeated NetworkInfo network_info = 1;
|
||
}
|
||
|
||
message GetTokenInfoRequest {
|
||
bytes address = 1; // optional, v2.0 only
|
||
}
|
||
|
||
message TokenInfoResponse {
|
||
// Total active token supply, as a 256 bit integer representing maximum
|
||
// divisble units. 1 QUIL = 8000000000 units, 50 QUIL would be represented by
|
||
// 0x0000000000000000000000000000000000000000000000000000005D21DBA000
|
||
bytes confirmed_token_supply = 1;
|
||
// Total token supply, including unconfirmed frame data, as a 256 bit integer.
|
||
bytes unconfirmed_token_supply = 2;
|
||
// The total number of tokens owned by the prover address associated with the
|
||
// node.
|
||
bytes owned_tokens = 3;
|
||
// The total number of tokens owned by the prover address associated with the
|
||
// node, including unconfirmed frame data.
|
||
bytes unconfirmed_owned_tokens = 4;
|
||
}
|
||
|
||
message Capability {
|
||
// A general protocol identifier as a uint32 – this is expected to rarely
|
||
// iterate, and should be uniquely identifying both protocol and version.
|
||
// Pragmatically speaking, this implies that the least significant byte
|
||
// specifies version (which should iterate most minimally), and the three most
|
||
// significant bytes should specify protocol. Recipients SHOULD ignore
|
||
// messages with incompatible protocol identifiers, but also SHOULD warn on
|
||
// identifiers with versions higher than the supported protocol. A large
|
||
// number of unsupported protocol messages may indicate spam/some other
|
||
// attack, whereas a large number of unsupported protocol versions may
|
||
// indicate an out of date client, respective to which side is the maximum of
|
||
// the version number.
|
||
uint32 protocol_identifier = 1;
|
||
// An optional bundle of information specific to the capability – used for
|
||
// extensibility in negotiating variations of a protocol – e.g. Triple-Ratchet
|
||
// but only for certain curve types.
|
||
bytes additional_metadata = 2;
|
||
}
|
||
|
||
message SelfTestReport {
|
||
// The number of reported accessible cores
|
||
uint32 cores = 1;
|
||
// The total available memory
|
||
bytes memory = 2;
|
||
// The total available storage
|
||
bytes storage = 3;
|
||
// The list of supported capabilities
|
||
repeated Capability capabilities = 4;
|
||
// The highest master frame the node has
|
||
uint64 master_head_frame = 5;
|
||
// The bit slice declaring prover range
|
||
bytes prover_range = 6;
|
||
}
|
||
|
||
message ValidationMessage {
|
||
bytes validation = 1;
|
||
}
|
||
|
||
message SyncRequest {
|
||
quilibrium.node.clock.pb.ClockFramesRequest frames_request = 1;
|
||
}
|
||
|
||
message SyncResponse {
|
||
quilibrium.node.clock.pb.ClockFramesResponse frames_response = 1;
|
||
}
|
||
|
||
service ValidationService {
|
||
rpc PerformValidation(ValidationMessage) returns (ValidationMessage);
|
||
rpc Sync(SyncRequest) returns (stream SyncResponse);
|
||
}
|
||
|
||
message GetPeerManifestsRequest {}
|
||
|
||
message PeerManifest {
|
||
bytes peer_id = 1;
|
||
// The number of reported accessible cores
|
||
uint32 cores = 2;
|
||
// The total available memory
|
||
bytes memory = 3;
|
||
// The total available storage
|
||
bytes storage = 4;
|
||
// The list of supported capabilities
|
||
repeated Capability capabilities = 5;
|
||
// The highest master frame the node has
|
||
uint64 master_head_frame = 6;
|
||
// The last time seen tick
|
||
int64 last_seen = 7;
|
||
// The increment of the node
|
||
uint32 increment = 8;
|
||
}
|
||
|
||
message AnnounceProverRequest {
|
||
repeated quilibrium.node.keys.pb.Ed448Signature public_key_signatures_ed448 = 1;
|
||
MintCoinRequest initial_proof = 2;
|
||
}
|
||
|
||
message AnnounceProverJoin {
|
||
bytes filter = 1;
|
||
uint64 frame_number = 2;
|
||
quilibrium.node.keys.pb.Ed448Signature public_key_signature_ed448 = 3;
|
||
}
|
||
|
||
message AnnounceProverLeave {
|
||
bytes filter = 1;
|
||
uint64 frame_number = 2;
|
||
quilibrium.node.keys.pb.Ed448Signature public_key_signature_ed448 = 3;
|
||
}
|
||
|
||
message AnnounceProverPause {
|
||
bytes filter = 1;
|
||
uint64 frame_number = 2;
|
||
quilibrium.node.keys.pb.Ed448Signature public_key_signature_ed448 = 3;
|
||
}
|
||
|
||
message AnnounceProverResume {
|
||
bytes filter = 1;
|
||
uint64 frame_number = 2;
|
||
quilibrium.node.keys.pb.Ed448Signature public_key_signature_ed448 = 3;
|
||
}
|
||
|
||
message OriginatedAccountRef {
|
||
bytes address = 1;
|
||
}
|
||
|
||
message ImplicitAccount {
|
||
uint32 implicit_type = 1;
|
||
bytes address = 2;
|
||
bytes domain = 3;
|
||
}
|
||
|
||
message AccountRef {
|
||
oneof account {
|
||
OriginatedAccountRef originated_account = 1;
|
||
ImplicitAccount implicit_account = 2;
|
||
}
|
||
}
|
||
|
||
message AccountAllowanceRef {
|
||
bytes address = 1;
|
||
}
|
||
|
||
message CoinAllowanceRef {
|
||
bytes address = 1;
|
||
}
|
||
|
||
message Coin {
|
||
bytes amount = 1;
|
||
bytes intersection = 2;
|
||
AccountRef owner = 3;
|
||
}
|
||
|
||
message TokenRequest {
|
||
oneof request {
|
||
TransferCoinRequest transfer = 1;
|
||
SplitCoinRequest split = 2;
|
||
MergeCoinRequest merge = 3;
|
||
MintCoinRequest mint = 4;
|
||
AnnounceProverRequest announce = 5;
|
||
}
|
||
}
|
||
|
||
message TokenRequests {
|
||
repeated TokenRequest requests = 1;
|
||
}
|
||
|
||
message PreCoinProof {
|
||
bytes amount = 1;
|
||
uint32 index = 2;
|
||
bytes indexProof = 3;
|
||
bytes commitment = 4;
|
||
bytes proof = 5;
|
||
uint32 parallelism = 6;
|
||
uint32 difficulty = 7;
|
||
AccountRef owner = 8;
|
||
}
|
||
|
||
message TokenOutput {
|
||
oneof output {
|
||
Coin coin = 1;
|
||
PreCoinProof proof = 2;
|
||
CoinRef deleted_coin = 3;
|
||
PreCoinProof deleted_proof = 4;
|
||
}
|
||
}
|
||
|
||
message TokenOutputs {
|
||
repeated TokenOutput outputs = 1;
|
||
}
|
||
|
||
message CoinRef {
|
||
bytes address = 1;
|
||
}
|
||
|
||
message PendingTransactionRef {
|
||
bytes address = 1;
|
||
}
|
||
|
||
message KeyRef {
|
||
bytes address = 1;
|
||
}
|
||
|
||
message Signature {
|
||
uint32 signature_type = 1;
|
||
bytes signature = 2;
|
||
KeyRef key = 3;
|
||
}
|
||
|
||
message PeerManifestsResponse {
|
||
repeated PeerManifest peer_manifests = 1;
|
||
}
|
||
|
||
message AcceptPendingTransactionRequest {
|
||
PendingTransactionRef pending_transaction = 1;
|
||
Signature signature = 2;
|
||
}
|
||
|
||
message AllowAccountRequest {
|
||
AccountRef of_account = 1;
|
||
AccountRef permitted_account = 2;
|
||
repeated string permitted_operations = 3;
|
||
AccountAllowanceRef allowance = 4;
|
||
Signature signature = 5;
|
||
}
|
||
|
||
message AllowCoinRequest {
|
||
CoinRef of_coin = 1;
|
||
AccountRef permitted_account = 2;
|
||
repeated string permitted_operations = 3;
|
||
AccountAllowanceRef account_allowance = 4;
|
||
CoinAllowanceRef coin_allowance = 5;
|
||
Signature signature = 6;
|
||
}
|
||
|
||
message BalanceAccountRequest {
|
||
AccountRef account = 1;
|
||
AccountAllowanceRef allowance = 2;
|
||
Signature signature = 3;
|
||
}
|
||
|
||
message CoinsAccountRequest {
|
||
AccountRef account = 1;
|
||
AccountAllowanceRef allowance = 2;
|
||
Signature signature = 3;
|
||
}
|
||
|
||
message PendingTransactionsAccountRequest {
|
||
AccountRef account = 1;
|
||
AccountAllowanceRef allowance = 2;
|
||
Signature signature = 3;
|
||
}
|
||
|
||
message IntersectCoinRequest {
|
||
repeated bytes addresses = 1;
|
||
AccountAllowanceRef account_allowance = 2;
|
||
CoinAllowanceRef coin_allowance = 3;
|
||
CoinRef of_coin = 4;
|
||
}
|
||
|
||
message MergeCoinRequest {
|
||
repeated CoinRef coins = 1;
|
||
AccountAllowanceRef account_allowance = 2;
|
||
repeated CoinAllowanceRef coin_allowances = 3;
|
||
quilibrium.node.keys.pb.Ed448Signature signature = 4;
|
||
}
|
||
|
||
message MintCoinRequest {
|
||
repeated bytes proofs = 1;
|
||
AccountAllowanceRef allowance = 2;
|
||
quilibrium.node.keys.pb.Ed448Signature signature = 3;
|
||
}
|
||
|
||
message MutualReceiveCoinRequest {
|
||
AccountRef to_account = 1;
|
||
AccountAllowanceRef allowance = 2;
|
||
Signature signature = 3;
|
||
}
|
||
|
||
message MutualTransferCoinRequest {
|
||
bytes rendezvous = 1;
|
||
CoinRef of_coin = 2;
|
||
AccountAllowanceRef account_allowance = 3;
|
||
CoinAllowanceRef coin_allowance = 4;
|
||
Signature signature = 5;
|
||
}
|
||
|
||
message RevokeAccountRequest {
|
||
AccountRef of_account = 1;
|
||
AccountAllowanceRef revoked_allowance = 2;
|
||
AccountAllowanceRef allowance = 3;
|
||
Signature signature = 4;
|
||
}
|
||
|
||
message RevokeCoinRequest {
|
||
CoinRef of_coin = 1;
|
||
CoinAllowanceRef revoked_allowance = 2;
|
||
AccountAllowanceRef account_allowance = 3;
|
||
CoinAllowanceRef coin_allowance = 4;
|
||
Signature signature = 5;
|
||
}
|
||
|
||
message SplitCoinRequest {
|
||
CoinRef of_coin = 1;
|
||
repeated bytes amounts = 2;
|
||
AccountAllowanceRef account_allowance = 3;
|
||
CoinAllowanceRef coin_allowance = 4;
|
||
quilibrium.node.keys.pb.Ed448Signature signature = 5;
|
||
}
|
||
|
||
message TransferCoinRequest {
|
||
AccountRef to_account = 1;
|
||
AccountRef refund_account = 2;
|
||
CoinRef of_coin = 3;
|
||
int64 expiry = 4;
|
||
AccountAllowanceRef account_allowance = 5;
|
||
CoinAllowanceRef coin_allowance = 6;
|
||
quilibrium.node.keys.pb.Ed448Signature signature = 7;
|
||
}
|
||
|
||
message ApprovePendingTransactionRequest {
|
||
PendingTransactionRef pending_transaction = 1;
|
||
AccountAllowanceRef account_allowance = 2;
|
||
Signature signature = 3;
|
||
}
|
||
|
||
message RejectPendingTransactionRequest {
|
||
PendingTransactionRef pending_transaction = 1;
|
||
AccountAllowanceRef account_allowance = 2;
|
||
Signature signature = 3;
|
||
}
|
||
|
||
message InlineKey {
|
||
bytes ref = 1;
|
||
bytes key = 2;
|
||
}
|
||
|
||
message KeyRing {
|
||
repeated InlineKey keys = 1;
|
||
}
|
||
|
||
message Confirmation {
|
||
bytes message_id = 1;
|
||
bytes proof = 2;
|
||
}
|
||
|
||
message DeliveryData {
|
||
InlineKey shared_key = 1;
|
||
Confirmation confirmation = 2;
|
||
}
|
||
|
||
message DeliveryMethod {
|
||
uint32 delivery_type = 1;
|
||
bytes address = 2;
|
||
}
|
||
|
||
message DecryptableAllowAccountRequest {
|
||
AllowAccountRequest request = 1;
|
||
KeyRing key_ring = 2;
|
||
DeliveryMethod delivery_method = 3;
|
||
}
|
||
|
||
message DecryptableBalanceAccountRequest {
|
||
BalanceAccountRequest request = 1;
|
||
KeyRing key_ring = 2;
|
||
}
|
||
|
||
message DecryptableCoinsAccountRequest {
|
||
CoinsAccountRequest request = 1;
|
||
KeyRing key_ring = 2;
|
||
}
|
||
|
||
message DecryptableRevokeAccountRequest {
|
||
RevokeAccountRequest request = 1;
|
||
KeyRing key_ring = 2;
|
||
DeliveryMethod delivery_method = 3;
|
||
}
|
||
|
||
message DecryptablePendingTransactionsAccountRequest {
|
||
PendingTransactionsAccountRequest request = 1;
|
||
KeyRing key_ring = 2;
|
||
DeliveryMethod delivery_method = 3;
|
||
}
|
||
|
||
message DecryptableAllowCoinRequest {
|
||
AllowCoinRequest request = 1;
|
||
KeyRing key_ring = 2;
|
||
DeliveryMethod delivery_method = 3;
|
||
}
|
||
|
||
message DecryptableIntersectCoinRequest {
|
||
IntersectCoinRequest request = 1;
|
||
KeyRing key_ring = 2;
|
||
DeliveryMethod delivery_method = 3;
|
||
}
|
||
|
||
message DecryptableMergeCoinRequest {
|
||
MergeCoinRequest request = 1;
|
||
KeyRing key_ring = 2;
|
||
DeliveryMethod delivery_method = 3;
|
||
}
|
||
|
||
message DecryptableMintCoinRequest {
|
||
MintCoinRequest request = 1;
|
||
KeyRing key_ring = 2;
|
||
DeliveryMethod delivery_method = 3;
|
||
}
|
||
|
||
message DecryptableMutualReceiveCoinRequest {
|
||
MutualReceiveCoinRequest request = 1;
|
||
KeyRing key_ring = 2;
|
||
DeliveryMethod delivery_method = 3;
|
||
}
|
||
|
||
message DecryptableMutualTransferCoinRequest {
|
||
MutualTransferCoinRequest request = 1;
|
||
KeyRing key_ring = 2;
|
||
DeliveryMethod delivery_method = 3;
|
||
}
|
||
|
||
message DecryptableRevokeCoinRequest {
|
||
RevokeCoinRequest request = 1;
|
||
KeyRing key_ring = 2;
|
||
DeliveryMethod delivery_method = 3;
|
||
}
|
||
|
||
message DecryptableSplitCoinRequest {
|
||
SplitCoinRequest request = 1;
|
||
KeyRing key_ring = 2;
|
||
DeliveryMethod delivery_method = 3;
|
||
}
|
||
|
||
message DecryptableTransferCoinRequest {
|
||
TransferCoinRequest request = 1;
|
||
KeyRing key_ring = 2;
|
||
DeliveryMethod delivery_method = 3;
|
||
}
|
||
|
||
message DecryptableApprovePendingTransactionRequest {
|
||
ApprovePendingTransactionRequest request = 1;
|
||
KeyRing key_ring = 2;
|
||
DeliveryMethod delivery_method = 3;
|
||
}
|
||
|
||
message DecryptableRejectPendingTransactionRequest {
|
||
RejectPendingTransactionRequest request = 1;
|
||
KeyRing key_ring = 2;
|
||
DeliveryMethod delivery_method = 3;
|
||
}
|
||
|
||
message CoinInfo {
|
||
CoinRef coin = 1;
|
||
bytes balance = 2;
|
||
}
|
||
|
||
message PendingTransactionInfo {
|
||
PendingTransactionRef pending_transaction = 1;
|
||
CoinInfo coin = 2;
|
||
AccountRef refund_account = 3;
|
||
}
|
||
|
||
message AllowAccountResponse {
|
||
AccountAllowanceRef allowance = 1;
|
||
repeated DeliveryData deliveries = 2;
|
||
}
|
||
|
||
message BalanceAccountResponse {
|
||
bytes balance = 1;
|
||
}
|
||
|
||
message CoinsAccountResponse {
|
||
repeated CoinInfo coins = 1;
|
||
}
|
||
|
||
message PendingTransactionsAccountResponse {
|
||
repeated PendingTransactionInfo pending_transactions = 1;
|
||
}
|
||
|
||
message RevokeAccountResponse {
|
||
repeated DeliveryData deliveries = 1;
|
||
}
|
||
|
||
message AllowCoinResponse {
|
||
CoinAllowanceRef allowance = 1;
|
||
repeated DeliveryData deliveries = 2;
|
||
}
|
||
|
||
message IntersectCoinResponse {
|
||
bool intersects = 1;
|
||
}
|
||
|
||
message MergeCoinResponse {
|
||
CoinRef coin = 1;
|
||
repeated DeliveryData deliveries = 2;
|
||
}
|
||
|
||
message MintCoinResponse {
|
||
repeated CoinInfo coins = 1;
|
||
repeated DeliveryData deliveries = 2;
|
||
}
|
||
|
||
message MutualReceiveCoinResponse {
|
||
uint32 status = 1;
|
||
bytes rendezvous = 2;
|
||
CoinRef coin = 3;
|
||
repeated DeliveryData deliveries = 4;
|
||
}
|
||
|
||
message MutualTransferCoinResponse {
|
||
uint32 status = 1;
|
||
repeated DeliveryData deliveries = 2;
|
||
}
|
||
|
||
message RevokeCoinResponse {
|
||
repeated DeliveryData deliveries = 1;
|
||
}
|
||
|
||
message SplitCoinResponse {
|
||
repeated CoinRef coins = 1;
|
||
repeated DeliveryData deliveries = 2;
|
||
}
|
||
|
||
message TransferCoinResponse {
|
||
PendingTransactionRef pending_transaction = 1;
|
||
repeated DeliveryData deliveries = 2;
|
||
}
|
||
|
||
message ApprovePendingTransactionResponse {
|
||
CoinRef coin = 1;
|
||
repeated DeliveryData deliveries = 2;
|
||
}
|
||
|
||
message RejectPendingTransactionResponse {
|
||
repeated DeliveryData deliveries = 2;
|
||
}
|
||
|
||
message SendMessageResponse{}
|
||
|
||
message GetTokensByAccountRequest {
|
||
bytes address = 1;
|
||
}
|
||
|
||
message TokensByAccountResponse {
|
||
repeated Coin coins = 1;
|
||
repeated uint64 frame_numbers = 2;
|
||
}
|
||
|
||
service NodeService {
|
||
rpc GetFrames(GetFramesRequest) returns (FramesResponse);
|
||
rpc GetFrameInfo(GetFrameInfoRequest) returns (FrameInfoResponse);
|
||
rpc GetPeerInfo(GetPeerInfoRequest) returns (PeerInfoResponse);
|
||
rpc GetNodeInfo(GetNodeInfoRequest) returns (NodeInfoResponse);
|
||
rpc GetNetworkInfo(GetNetworkInfoRequest) returns (NetworkInfoResponse);
|
||
rpc GetTokenInfo(GetTokenInfoRequest) returns (TokenInfoResponse);
|
||
rpc GetPeerManifests(GetPeerManifestsRequest) returns (PeerManifestsResponse);
|
||
rpc SendMessage(TokenRequest) returns (SendMessageResponse);
|
||
rpc GetTokensByAccount(GetTokensByAccountRequest) returns (TokensByAccountResponse);
|
||
}
|
||
|
||
service AccountService {
|
||
rpc Allow(DecryptableAllowAccountRequest) returns (AllowAccountResponse);
|
||
rpc GetBalance(DecryptableBalanceAccountRequest) returns (BalanceAccountResponse);
|
||
rpc ListCoins(DecryptableCoinsAccountRequest) returns (CoinsAccountResponse);
|
||
rpc ListPendingTransactions(DecryptablePendingTransactionsAccountRequest) returns (PendingTransactionsAccountResponse);
|
||
rpc Revoke(DecryptableRevokeAccountRequest) returns (RevokeAccountResponse);
|
||
}
|
||
|
||
service CoinService {
|
||
rpc Allow(DecryptableAllowCoinRequest) returns (AllowCoinResponse);
|
||
rpc Intersect(DecryptableIntersectCoinRequest) returns (IntersectCoinResponse);
|
||
rpc Merge(DecryptableMergeCoinRequest) returns (MergeCoinResponse);
|
||
rpc Mint(DecryptableMintCoinRequest) returns (MintCoinResponse);
|
||
rpc MutualReceive(DecryptableMutualReceiveCoinRequest) returns (stream MutualReceiveCoinResponse);
|
||
rpc MutualTransfer(DecryptableMutualTransferCoinRequest) returns (stream MutualTransferCoinResponse);
|
||
rpc Revoke(DecryptableRevokeCoinRequest) returns (RevokeCoinResponse);
|
||
rpc Split(DecryptableSplitCoinRequest) returns (SplitCoinResponse);
|
||
rpc Transfer(DecryptableTransferCoinRequest) returns (TransferCoinResponse);
|
||
}
|
||
|
||
service TransactionService {
|
||
rpc Approve(DecryptableApprovePendingTransactionRequest) returns (ApprovePendingTransactionResponse);
|
||
rpc Reject(DecryptableRejectPendingTransactionRequest) returns (RejectPendingTransactionResponse);
|
||
}
|
||
|
||
service NodeStats {
|
||
rpc PutNodeInfo(PutNodeInfoRequest) returns (PutResponse);
|
||
rpc PutPeerInfo(PutPeerInfoRequest) returns (PutResponse);
|
||
} |