forked from ghe0/brain-mock
195 lines
4.2 KiB
Protocol Buffer
195 lines
4.2 KiB
Protocol Buffer
syntax = "proto3";
|
|
package snp_proto;
|
|
|
|
message Empty {
|
|
}
|
|
|
|
message Pubkey {
|
|
string pubkey = 1;
|
|
}
|
|
|
|
message AccountBalance {
|
|
uint64 balance = 1;
|
|
uint64 tmp_locked = 2;
|
|
}
|
|
|
|
message Contract {
|
|
string uuid = 1;
|
|
string hostname = 2;
|
|
string admin_pubkey = 3;
|
|
string node_pubkey = 4;
|
|
repeated uint32 exposed_ports = 5;
|
|
string public_ipv4 = 6;
|
|
string public_ipv6 = 7;
|
|
uint32 disk_size_gb = 8;
|
|
uint32 vcpus = 9;
|
|
uint32 memory_mb = 10;
|
|
string kernel_sha = 11;
|
|
string dtrfs_sha = 12;
|
|
string created_at = 13;
|
|
string updated_at = 14;
|
|
// total nanotoken cost per minute (for all units)
|
|
uint64 nano_per_minute = 15;
|
|
uint64 locked_nano = 16;
|
|
string collected_at = 17;
|
|
}
|
|
|
|
message MeasurementArgs {
|
|
// this will be IP:Port of the dtrfs API
|
|
// actually not a measurement arg, but needed for the injector
|
|
string dtrfs_api_endpoint = 1;
|
|
repeated uint32 exposed_ports = 2;
|
|
string ovmf_hash = 5;
|
|
// This is needed to allow the CLI to build the kernel params from known data.
|
|
// The CLI will use the kernel params to get the measurement.
|
|
repeated MeasurementIP ips = 6;
|
|
}
|
|
|
|
message MeasurementIP {
|
|
uint32 nic_index = 1;
|
|
string address = 2;
|
|
string mask = 3;
|
|
string gateway = 4;
|
|
}
|
|
|
|
message RegisterNodeReq {
|
|
string node_pubkey = 1;
|
|
string owner_pubkey = 2;
|
|
string main_ip = 3;
|
|
string country = 4;
|
|
string region = 5;
|
|
string city = 6;
|
|
// nanotokens per unit per minute
|
|
uint64 price = 7;
|
|
}
|
|
|
|
message NodeResources {
|
|
string node_pubkey = 1;
|
|
uint32 avail_ports = 2;
|
|
uint32 avail_ipv4 = 3;
|
|
uint32 avail_ipv6 = 4;
|
|
uint32 avail_vcpus = 5;
|
|
uint32 avail_memory_mb = 6;
|
|
uint32 avail_storage_gb = 7;
|
|
uint32 max_ports_per_vm = 8;
|
|
}
|
|
|
|
message NewVmReq {
|
|
string uuid = 1;
|
|
string hostname = 2;
|
|
string admin_pubkey = 3;
|
|
string node_pubkey = 4;
|
|
repeated uint32 extra_ports = 5;
|
|
bool public_ipv4 = 6;
|
|
bool public_ipv6 = 7;
|
|
uint32 disk_size_gb = 8;
|
|
uint32 vcpus = 9;
|
|
uint32 memory_mb = 10;
|
|
string kernel_url = 11;
|
|
string kernel_sha = 12;
|
|
string dtrfs_url = 13;
|
|
string dtrfs_sha = 14;
|
|
uint64 price_per_unit = 15;
|
|
uint64 locked_nano = 16;
|
|
}
|
|
|
|
message NewVmResp {
|
|
string uuid = 1;
|
|
string error = 2;
|
|
MeasurementArgs args = 3;
|
|
}
|
|
|
|
message UpdateVmReq {
|
|
string uuid = 1;
|
|
uint32 disk_size_gb = 2;
|
|
uint32 vcpus = 3;
|
|
uint32 memory_mb = 4;
|
|
string kernel_url = 5;
|
|
string kernel_sha = 6;
|
|
string dtrfs_url = 7;
|
|
string dtrfs_sha = 8;
|
|
}
|
|
|
|
message UpdateVmResp {
|
|
string uuid = 1;
|
|
string error = 2;
|
|
MeasurementArgs args = 3;
|
|
}
|
|
|
|
message DeleteVmReq {
|
|
string uuid = 1;
|
|
}
|
|
|
|
message BrainMessage {
|
|
oneof Msg {
|
|
NewVmReq new_vm_req = 1;
|
|
UpdateVmReq update_vm_req = 2;
|
|
DeleteVmReq delete_vm = 3;
|
|
}
|
|
}
|
|
|
|
message DaemonMessage {
|
|
oneof Msg {
|
|
Pubkey pubkey = 1;
|
|
NewVmResp new_vm_resp = 2;
|
|
UpdateVmResp update_vm_resp = 3;
|
|
NodeResources node_resources = 4;
|
|
}
|
|
}
|
|
|
|
service BrainDaemon {
|
|
rpc RegisterNode (RegisterNodeReq) returns (stream Contract);
|
|
rpc BrainMessages (Pubkey) returns (stream BrainMessage);
|
|
rpc DaemonMessages (stream DaemonMessage) returns (Empty);
|
|
}
|
|
|
|
message ListContractsReq {
|
|
string admin_pubkey = 1;
|
|
string node_pubkey = 2;
|
|
string uuid = 3;
|
|
}
|
|
|
|
message NodeFilters {
|
|
uint32 free_ports = 1;
|
|
bool offers_ipv4 = 2;
|
|
bool offers_ipv6 = 3;
|
|
uint32 vcpus = 4;
|
|
uint32 memory_mb = 5;
|
|
uint32 storage_gb = 6;
|
|
string country = 7;
|
|
string region = 8;
|
|
string city = 9;
|
|
string ip = 10;
|
|
string node_pubkey = 11;
|
|
}
|
|
|
|
message NodeListResp {
|
|
string node_pubkey = 1;
|
|
string country = 2;
|
|
string region = 3;
|
|
string city = 4;
|
|
string ip = 5; // required for latency test
|
|
uint32 server_rating = 6;
|
|
uint32 provider_rating = 7;
|
|
// nanotokens per unit per minute
|
|
uint64 price = 8;
|
|
}
|
|
|
|
message ExtendVmReq {
|
|
string uuid = 1;
|
|
string admin_pubkey = 2;
|
|
uint64 locked_nano = 3;
|
|
}
|
|
|
|
service BrainCli {
|
|
rpc GetAirdrop (Pubkey) returns (Empty);
|
|
rpc GetBalance (Pubkey) returns (AccountBalance);
|
|
rpc NewVm (NewVmReq) returns (NewVmResp);
|
|
rpc ListContracts (ListContractsReq) returns (stream Contract);
|
|
rpc ListNodes (NodeFilters) returns (stream NodeListResp);
|
|
rpc GetOneNode (NodeFilters) returns (NodeListResp);
|
|
rpc DeleteVm (DeleteVmReq) returns (Empty);
|
|
rpc UpdateVm (UpdateVmReq) returns (UpdateVmResp);
|
|
rpc ExtendVm (ExtendVmReq) returns (Empty);
|
|
}
|