Migrated SNP proto file and its From impls into its snp module and updated build configuration for snp proto
This commit is contained in:
parent
099f0a0488
commit
be4e41db05
24
build.rs
24
build.rs
@ -2,9 +2,29 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
tonic_build::configure()
|
tonic_build::configure()
|
||||||
.build_server(true)
|
.build_server(true)
|
||||||
.protoc_arg("--experimental_allow_proto3_optional")
|
.protoc_arg("--experimental_allow_proto3_optional")
|
||||||
|
.type_attribute(
|
||||||
|
".vm_proto.VmContract",
|
||||||
|
"#[derive(serde::Serialize, serde::Deserialize)]",
|
||||||
|
)
|
||||||
|
.type_attribute(
|
||||||
|
".vm_proto.InspectOperatorResp",
|
||||||
|
"#[derive(serde::Serialize, serde::Deserialize)]",
|
||||||
|
)
|
||||||
|
.type_attribute(
|
||||||
|
".vm_proto.ListOperatorsResp",
|
||||||
|
"#[derive(serde::Serialize, serde::Deserialize)]",
|
||||||
|
)
|
||||||
|
.type_attribute(
|
||||||
|
".vm_proto.VmNodeListResp",
|
||||||
|
"#[derive(serde::Serialize, serde::Deserialize)]",
|
||||||
|
)
|
||||||
.compile_protos(
|
.compile_protos(
|
||||||
&["proto/sgx/brain.proto", "proto/sgx/dtpm.proto"],
|
&[
|
||||||
&["proto"],
|
"proto/sgx/brain.proto",
|
||||||
|
"proto/sgx/dtpm.proto",
|
||||||
|
"proto/snp/vm.proto",
|
||||||
|
],
|
||||||
|
&["proto/sgx", "proto/snp"],
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
271
proto/snp/vm.proto
Normal file
271
proto/snp/vm.proto
Normal file
@ -0,0 +1,271 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
package vm_proto;
|
||||||
|
|
||||||
|
message Empty {
|
||||||
|
}
|
||||||
|
|
||||||
|
message Pubkey {
|
||||||
|
string pubkey = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message AccountBalance {
|
||||||
|
uint64 balance = 1;
|
||||||
|
uint64 tmp_locked = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message VmContract {
|
||||||
|
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 nanoLP 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This should also include a block hash or similar, for auth
|
||||||
|
message RegisterVmNodeReq {
|
||||||
|
string node_pubkey = 1;
|
||||||
|
string operator_wallet = 2;
|
||||||
|
string main_ip = 3;
|
||||||
|
string country = 4;
|
||||||
|
string region = 5;
|
||||||
|
string city = 6;
|
||||||
|
// nanoLP per unit per minute
|
||||||
|
uint64 price = 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
message VmNodeResources {
|
||||||
|
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;
|
||||||
|
string admin_pubkey = 2;
|
||||||
|
uint32 disk_size_gb = 3;
|
||||||
|
uint32 vcpus = 4;
|
||||||
|
uint32 memory_mb = 5;
|
||||||
|
string kernel_url = 6;
|
||||||
|
string kernel_sha = 7;
|
||||||
|
string dtrfs_url = 8;
|
||||||
|
string dtrfs_sha = 9;
|
||||||
|
}
|
||||||
|
|
||||||
|
message UpdateVmResp {
|
||||||
|
string uuid = 1;
|
||||||
|
string error = 2;
|
||||||
|
MeasurementArgs args = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message DeleteVmReq {
|
||||||
|
string uuid = 1;
|
||||||
|
string admin_pubkey = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message BrainVmMessage {
|
||||||
|
oneof Msg {
|
||||||
|
NewVmReq new_vm_req = 1;
|
||||||
|
UpdateVmReq update_vm_req = 2;
|
||||||
|
DeleteVmReq delete_vm = 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
message DaemonStreamAuth {
|
||||||
|
string timestamp = 1;
|
||||||
|
string pubkey = 2;
|
||||||
|
repeated string contracts = 3;
|
||||||
|
string signature = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message VmDaemonMessage {
|
||||||
|
oneof Msg {
|
||||||
|
DaemonStreamAuth auth = 1;
|
||||||
|
NewVmResp new_vm_resp = 2;
|
||||||
|
UpdateVmResp update_vm_resp = 3;
|
||||||
|
VmNodeResources vm_node_resources = 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
service BrainVmDaemon {
|
||||||
|
rpc RegisterVmNode (RegisterVmNodeReq) returns (stream VmContract);
|
||||||
|
rpc BrainMessages (DaemonStreamAuth) returns (stream BrainVmMessage);
|
||||||
|
rpc DaemonMessages (stream VmDaemonMessage) returns (Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
message ListVmContractsReq {
|
||||||
|
string wallet = 1;
|
||||||
|
bool as_operator = 2;
|
||||||
|
string uuid = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message VmNodeFilters {
|
||||||
|
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 VmNodeListResp {
|
||||||
|
string operator = 1;
|
||||||
|
string node_pubkey = 2;
|
||||||
|
string country = 3;
|
||||||
|
string region = 4;
|
||||||
|
string city = 5;
|
||||||
|
string ip = 6; // required for latency test
|
||||||
|
repeated string reports = 7; // TODO: this will become an enum
|
||||||
|
uint64 price = 8; // nanoLP per unit per minute
|
||||||
|
}
|
||||||
|
|
||||||
|
message ExtendVmReq {
|
||||||
|
string uuid = 1;
|
||||||
|
string admin_pubkey = 2;
|
||||||
|
uint64 locked_nano = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message AirdropReq {
|
||||||
|
string pubkey = 1;
|
||||||
|
uint64 tokens = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message SlashReq {
|
||||||
|
string pubkey = 1;
|
||||||
|
uint64 tokens = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Account {
|
||||||
|
string pubkey = 1;
|
||||||
|
uint64 balance = 2;
|
||||||
|
uint64 tmp_locked = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message RegOperatorReq {
|
||||||
|
string pubkey = 1;
|
||||||
|
uint64 escrow = 2;
|
||||||
|
string email = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ListOperatorsResp {
|
||||||
|
string pubkey = 1;
|
||||||
|
uint64 escrow = 2;
|
||||||
|
string email = 3;
|
||||||
|
uint64 app_nodes = 4;
|
||||||
|
uint64 vm_nodes = 5;
|
||||||
|
uint64 reports = 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
message InspectOperatorResp {
|
||||||
|
ListOperatorsResp operator = 1;
|
||||||
|
repeated VmNodeListResp nodes = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ReportNodeReq {
|
||||||
|
string admin_pubkey = 1;
|
||||||
|
string node_pubkey = 2;
|
||||||
|
string contract = 3;
|
||||||
|
string reason = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message KickReq {
|
||||||
|
string operator_wallet = 1;
|
||||||
|
string contract_uuid = 2;
|
||||||
|
string reason = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message BanUserReq {
|
||||||
|
string operator_wallet = 1;
|
||||||
|
string user_wallet = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message KickResp {
|
||||||
|
uint64 nano_lp = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
service BrainCli {
|
||||||
|
rpc GetBalance (Pubkey) returns (AccountBalance);
|
||||||
|
rpc NewVm (NewVmReq) returns (NewVmResp);
|
||||||
|
rpc ListVmContracts (ListVmContractsReq) returns (stream VmContract);
|
||||||
|
rpc ListVmNodes (VmNodeFilters) returns (stream VmNodeListResp);
|
||||||
|
rpc GetOneVmNode (VmNodeFilters) returns (VmNodeListResp);
|
||||||
|
rpc DeleteVm (DeleteVmReq) returns (Empty);
|
||||||
|
rpc UpdateVm (UpdateVmReq) returns (UpdateVmResp);
|
||||||
|
rpc ExtendVm (ExtendVmReq) returns (Empty);
|
||||||
|
rpc ReportNode (ReportNodeReq) returns (Empty);
|
||||||
|
rpc ListOperators (Empty) returns (stream ListOperatorsResp);
|
||||||
|
rpc InspectOperator (Pubkey) returns (InspectOperatorResp);
|
||||||
|
rpc RegisterOperator (RegOperatorReq) returns (Empty);
|
||||||
|
rpc KickContract (KickReq) returns (KickResp);
|
||||||
|
rpc BanUser (BanUserReq) returns (Empty);
|
||||||
|
// admin commands
|
||||||
|
rpc Airdrop (AirdropReq) returns (Empty);
|
||||||
|
rpc Slash (SlashReq) returns (Empty);
|
||||||
|
rpc ListAllVmContracts (Empty) returns (stream VmContract);
|
||||||
|
rpc ListAccounts (Empty) returns (stream Account);
|
||||||
|
}
|
@ -1 +1,2 @@
|
|||||||
pub mod sgx;
|
pub mod sgx;
|
||||||
|
pub mod snp;
|
||||||
|
32
src/snp/mod.rs
Normal file
32
src/snp/mod.rs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
pub mod pb {
|
||||||
|
|
||||||
|
pub mod vm {
|
||||||
|
tonic::include_proto!("vm_proto");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
use pb::vm as snp_proto;
|
||||||
|
|
||||||
|
impl From<snp_proto::NewVmResp> for snp_proto::VmDaemonMessage {
|
||||||
|
fn from(value: snp_proto::NewVmResp) -> Self {
|
||||||
|
snp_proto::VmDaemonMessage {
|
||||||
|
msg: Some(snp_proto::vm_daemon_message::Msg::NewVmResp(value)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<snp_proto::UpdateVmResp> for snp_proto::VmDaemonMessage {
|
||||||
|
fn from(value: snp_proto::UpdateVmResp) -> Self {
|
||||||
|
snp_proto::VmDaemonMessage {
|
||||||
|
msg: Some(snp_proto::vm_daemon_message::Msg::UpdateVmResp(value)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<snp_proto::VmNodeResources> for snp_proto::VmDaemonMessage {
|
||||||
|
fn from(value: snp_proto::VmNodeResources) -> Self {
|
||||||
|
snp_proto::VmDaemonMessage {
|
||||||
|
msg: Some(snp_proto::vm_daemon_message::Msg::VmNodeResources(value)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user