syntax = "proto3"; package brain; message Empty { } message NodePubkey { string node_pubkey = 1; } message RegisterNodeRequest { string node_pubkey = 1; string owner_pubkey = 2; string ip = 3; string country = 4; string city = 5; uint32 avail_ports = 6; uint32 avail_ipv4 = 7; uint32 avail_ipv6 = 8; uint32 avail_vcpus = 9; uint32 avail_memory_mb = 10; uint32 avail_storage_gb = 11; uint32 max_ports_per_vm = 12; } message NewVMRequest { string uuid = 1; // UUID is empty when CLI sends request; brain sets UUID 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; } message UpdateVMRequest { string uuid = 1; string node_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 timestamp = 2; string error = 3; } 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; } message ListVMContractsReq { string admin_pubkey = 1; string node_pubkey = 2; } message NewVMConfirmation { string uuid = 1; repeated uint32 exposed_ports = 2; string public_ipv4 = 3; string public_ipv6 = 4; string error = 5; } message DeletedVMUpdate { string uuid = 1; } service BrainDaemonService { rpc RegisterNode (RegisterNodeRequest) returns (Empty); rpc GetNewVMReqs (NodePubkey) returns (stream NewVMRequest); rpc SendVMConfirmations (stream NewVMConfirmation) returns (Empty); rpc DeletedVMUpdates (NodePubkey) returns (stream DeletedVMUpdate); rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract); rpc UpdateVMs (NodePubkey) returns (stream UpdateVMRequest); } 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; } message NodeListResp { string node_pubkey = 1; string country = 2; string city = 3; string ip = 4; // required for latency test uint32 server_rating = 5; uint32 provider_rating = 6; } service BrainCliService { rpc CreateVMContract (NewVMRequest) returns (NewVMConfirmation); rpc ListVMContracts (ListVMContractsReq) returns (stream VMContract); rpc ListNodes (NodeFilters) returns (stream NodeListResp); rpc DeleteVM (DeletedVMUpdate) returns (Empty); rpc UpdateVM (UpdateVMRequest) returns (UpdateVMResp); }