// Copyright (C) 2018 Storj Labs, Inc. // See LICENSE for copying information. syntax = "proto3"; package pointerdb; import "timestamp.proto"; // PointerDB defines the interface for interacting with the network state persistence layer service PointerDB { // Put formats and hands off a file path to be saved to boltdb rpc Put(PutRequest) returns (PutResponse); // Get formats and hands off a file path to get a small value from boltdb rpc Get(GetRequest) returns (GetResponse); // List calls the bolt client's List function and returns all file paths rpc List(ListRequest) returns (ListResponse); // Delete formats and hands off a file path to delete from boltdb rpc Delete(DeleteRequest) returns (DeleteResponse); } message RedundancyScheme { enum SchemeType { RS = 0; } SchemeType type = 1; // these values apply to RS encoding int64 min_req = 2; // minimum required for reconstruction int64 total = 3; // total amount of pieces we generated int64 repair_threshold = 4; // amount of pieces we need to drop to before triggering repair int64 success_threshold = 5; // amount of pieces we need to store to call it a success } message EncryptionScheme { enum EncryptionType { AESGCM = 0; SECRETBOX = 1; // only allow authenticated encryption schemes } EncryptionType type = 1; bytes encrypted_encryption_key = 2; bytes encrypted_starting_nonce = 3; } message RemotePiece { int64 piece_num = 1; string node_id = 2; } message RemoteSegment { RedundancyScheme redundancy = 1; string piece_id = 2; repeated RemotePiece remote_pieces = 3; bytes merkle_root = 4; // root hash of the hashes of all of these pieces } message Pointer { enum DataType { INLINE = 0; REMOTE = 1; } DataType type = 1; bytes inline_segment = 3; RemoteSegment remote = 4; int64 size = 5; google.protobuf.Timestamp creation_date = 6; google.protobuf.Timestamp expiration_date = 7; bytes metadata = 8; } // PutRequest is a request message for the Put rpc call message PutRequest { bytes path = 1; Pointer pointer = 2; bytes APIKey = 3; } // GetRequest is a request message for the Get rpc call message GetRequest { bytes path = 1; bytes APIKey = 2; } // ListRequest is a request message for the List rpc call message ListRequest { bytes starting_path_key = 1; // the Path key in the bucket to start listing int64 limit = 2; // how many keys to list bytes APIKey = 3; } // PutResponse is a response message for the Put rpc call message PutResponse { } // GetResponse is a response message for the Get rpc call message GetResponse { bytes pointer = 1; // this is a Pointer type marshalled into bytes } // ListResponse is a response message for the List rpc call message ListResponse { repeated bytes paths = 1; bool truncated = 2; } message DeleteRequest { bytes path = 1; bytes APIKey = 2; } // DeleteResponse is a response message for the Delete rpc call message DeleteResponse { }