From fabdd78d634f0e1eaaa5576085b63810e2fedea1 Mon Sep 17 00:00:00 2001 From: Alex Vanin Date: Wed, 12 Aug 2020 12:57:28 +0300 Subject: [PATCH] Add pre-release jindo branch --- accounting/v2/service.pb.go | Bin 0 -> 38493 bytes accounting/v2/service.proto | 75 +++++++ acl/v2/types.pb.go | Bin 0 -> 39370 bytes acl/v2/types.proto | 106 ++++++++++ container/v2/service.pb.go | Bin 0 -> 172025 bytes container/v2/service.proto | 285 +++++++++++++++++++++++++ container/v2/types.pb.go | Bin 0 -> 20400 bytes container/v2/types.proto | 40 ++++ netmap/v2/types.pb.go | Bin 0 -> 63966 bytes netmap/v2/types.proto | 92 ++++++++ object/v2/service.pb.go | Bin 0 -> 259486 bytes object/v2/service.proto | 407 ++++++++++++++++++++++++++++++++++++ object/v2/types.pb.go | Bin 0 -> 48908 bytes object/v2/types.proto | 85 ++++++++ refs/v2/types.pb.go | Bin 0 -> 23077 bytes refs/v2/types.proto | 32 +++ service/v2/meta.pb.go | Bin 0 -> 75795 bytes service/v2/meta.proto | 129 ++++++++++++ service/v2/verify.pb.go | Bin 0 -> 29072 bytes service/v2/verify.proto | 43 ++++ session/v2/service.pb.go | Bin 0 -> 35760 bytes session/v2/service.proto | 60 ++++++ storagegroup/v2/types.pb.go | Bin 0 -> 13002 bytes storagegroup/v2/types.proto | 30 +++ 24 files changed, 1384 insertions(+) create mode 100644 accounting/v2/service.pb.go create mode 100644 accounting/v2/service.proto create mode 100644 acl/v2/types.pb.go create mode 100644 acl/v2/types.proto create mode 100644 container/v2/service.pb.go create mode 100644 container/v2/service.proto create mode 100644 container/v2/types.pb.go create mode 100644 container/v2/types.proto create mode 100644 netmap/v2/types.pb.go create mode 100644 netmap/v2/types.proto create mode 100644 object/v2/service.pb.go create mode 100644 object/v2/service.proto create mode 100644 object/v2/types.pb.go create mode 100644 object/v2/types.proto create mode 100644 refs/v2/types.pb.go create mode 100644 refs/v2/types.proto create mode 100644 service/v2/meta.pb.go create mode 100644 service/v2/meta.proto create mode 100644 service/v2/verify.pb.go create mode 100644 service/v2/verify.proto create mode 100644 session/v2/service.pb.go create mode 100644 session/v2/service.proto create mode 100644 storagegroup/v2/types.pb.go create mode 100644 storagegroup/v2/types.proto diff --git a/accounting/v2/service.pb.go b/accounting/v2/service.pb.go new file mode 100644 index 0000000000000000000000000000000000000000..7d8eba9c142cd3bdfc04fc3636a872f81e73106b GIT binary patch literal 38493 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 YF`w;l=4BZn-Um67zhvdA=(?N#4`(Czr~m)} literal 0 HcmV?d00001 diff --git a/accounting/v2/service.proto b/accounting/v2/service.proto new file mode 100644 index 00000000..6c12c6ba --- /dev/null +++ b/accounting/v2/service.proto @@ -0,0 +1,75 @@ +syntax = "proto3"; + +package accounting.v2; + +option go_package = "github.com/nspcc-dev/neofs-api-go/accounting/v2"; +option csharp_namespace = "NeoFS.API.Accounting"; + +import "refs/v2/types.proto"; +import "service/v2/meta.proto"; +import "service/v2/verify.proto"; + +// The service provides methods for obtaining information +// about the account balance in NeoFS system. +service Accounting { + // Returns the amount of funds for the requested NeoFS account. + rpc Balance (BalanceRequest) returns (BalanceResponse); +} + +// Message defines the request body of Balance method. +// +// To indicate the account for which the balance is requested, it's identifier +// is used. +// +// To gain access to the requested information, the request body must be formed +// according to the requirements from the system specification. +message BalanceRequest { + message Body { + // Carries user identifier in NeoFS system for which the balance + // is requested. + refs.v2.OwnerID owner_id = 1; + } + + // Body of the balance request message. + Body body = 1; + + // Carries request meta information. Header data is used only to regulate + // message transport and does not affect request execution. + service.v2.RequestMetaHeader meta_header = 2; + + // Carries request verification information. This header is used to + // authenticate the nodes of the message route and check the correctness + // of transmission. + service.v2.RequestVerificationHeader verify_header = 3; +} + +// Decimal represents the decimal numbers. +message Decimal { + // value carries number value. + int64 value = 1; + + // precision carries value precision. + uint32 precision = 2; +} + +// Message defines the response body of Balance method. +// +// The amount of funds is calculated in decimal numbers. +message BalanceResponse { + message Body { + // Carries the amount of funds on the account. + Decimal balance = 1; + } + + // Body of the balance response message. + Body body = 1; + + // Carries response meta information. Header data is used only to regulate + // message transport and does not affect request execution. + service.v2.ResponseMetaHeader meta_header = 2; + + // Carries response verification information. This header is used to + // authenticate the nodes of the message route and check the correctness + // of transmission. + service.v2.ResponseVerificationHeader verify_header = 3; +} diff --git a/acl/v2/types.pb.go b/acl/v2/types.pb.go new file mode 100644 index 0000000000000000000000000000000000000000..06711e2444aef32fb5b7d4bd24c2c646af31943b GIT binary patch literal 39370 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 literal 0 HcmV?d00001 diff --git a/object/v2/types.proto b/object/v2/types.proto new file mode 100644 index 00000000..9462bc04 --- /dev/null +++ b/object/v2/types.proto @@ -0,0 +1,85 @@ +syntax = "proto3"; + +package object.v2; + +option go_package = "github.com/nspcc-dev/neofs-api-go/object/v2"; +option csharp_namespace = "NeoFS.API.Object"; + +import "refs/v2/types.proto"; +import "service/v2/meta.proto"; +import "service/v2/verify.proto"; + +// Type of the object payload content +enum ObjectType { + // Just a normal object + REGULAR = 0; + // Used internally to identify deleted objects + TOMBSTONE = 1; + // Identifies that the object holds StorageGroup information + STORAGE_GROUP = 2; +} + +message Header { + // Object's container + refs.v2.ContainerID container_id = 1; + // Object's owner + refs.v2.OwnerID owner_id = 2; + // Epoch when the object was created + uint64 creation_epoch = 3; + // Object format version. + // Effectively the version of API library used to create particular object + service.v2.Version version = 4; + // Size of payload in bytes. + // 0xFFFFFFFFFFFFFFFF means `payload_length` is unknown + uint64 payload_length = 5; + // Hash of payload bytes + bytes payload_hash = 6; + ObjectType object_type = 7; + // Homomorphic hash of the object payload. + bytes homomorphic_hash = 8; + // Session token, if it was used during Object creation. + // Need it to verify integrity and authenticity out of Request scope. + service.v2.SessionToken session_token = 9; + + // Attribute groups the user-defined Key-Value pairs attached to the object + message Attribute { + // string key to the object attribute + string key = 1; + // string value of the object attribute + string value = 2; + } + repeated Attribute attributes = 10; + + // Information about spawning the objects through a payload splitting. + message Split { + // Identifier of the origin object.v2. + // Parent and children objects must be within the same container.v2. + // Parent object_id is known only to the minor child. + refs.v2.ObjectID parent = 1; + // Previous carries identifier of the left split neighbor. + refs.v2.ObjectID previous = 2; + // `signature` field of the parent object.v2. Used to reconstruct parent. + service.v2.Signature parent_signature = 3; + // `header` field of the parent object.v2. Used to reconstruct parent. + Header parent_header = 4; + // Children carries list of identifiers of the objects generated by splitting the current. + repeated refs.v2.ObjectID children = 5; + } + // Position of the object in the split hierarchy. + Split split = 11; +} + +// Object structure. +message Object { + // Object's unique identifier. + // Object is content-addressed. It means id will change if header or payload + // changes. It's calculated as a hash of header field, which contains hash of + // object's payload + refs.v2.ObjectID object_id = 1; + // Signed object_id + service.v2.Signature signature = 2; + // Object metadata headers + Header header = 3; + // Payload bytes. + bytes payload = 4; +} diff --git a/refs/v2/types.pb.go b/refs/v2/types.pb.go new file mode 100644 index 0000000000000000000000000000000000000000..c76f97c9b3aa846d572e8a8f0c737cf521322b2d GIT binary patch literal 23077 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 literal 0 HcmV?d00001 diff --git a/refs/v2/types.proto b/refs/v2/types.proto new file mode 100644 index 00000000..82049b43 --- /dev/null +++ b/refs/v2/types.proto @@ -0,0 +1,32 @@ +syntax = "proto3"; + +package refs.v2; + +option go_package = "github.com/nspcc-dev/neofs-api-go/refs/v2"; +option csharp_namespace = "NeoFS.API.Refs"; + +// Address of object (container id + object id) +message Address { + // container_id carries container identifier. + ContainerID container_id = 1; + // object_id carries object identifier. + ObjectID object_id = 2; +} + +// NeoFS object identifier. +message ObjectID { + // value carries the object identifier in a binary format. + bytes value = 1; +} + +// NeoFS container identifier. +message ContainerID { + // value carries the container identifier in a binary format. + bytes value = 1; +} + +// OwnerID group information about the owner of the NeoFS container.v2. +message OwnerID { + // value carries the identifier of the container owner in a binary format. + bytes value = 1; +} \ No newline at end of file diff --git a/service/v2/meta.pb.go b/service/v2/meta.pb.go new file mode 100644 index 0000000000000000000000000000000000000000..34d2eb79af0dd80017cb315ec0f89bc17bb7f01b GIT binary patch literal 75795 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 literal 0 HcmV?d00001 diff --git a/service/v2/meta.proto b/service/v2/meta.proto new file mode 100644 index 00000000..c1a4ddfc --- /dev/null +++ b/service/v2/meta.proto @@ -0,0 +1,129 @@ +syntax = "proto3"; + +package service.v2; + +option go_package = "github.com/nspcc-dev/neofs-api-go/service/v2"; +option csharp_namespace = "NeoFS.API.Service"; + +import "acl/v2/types.proto"; +import "refs/v2/types.proto"; +import "service/v2/verify.proto"; + +message XHeader { + // Key of the X-Header. + string key = 1; + // Value of the X-Header. + string value = 2; +} + +// Represents API version used by node. +message Version { + // Major API version. + uint32 major = 1; + // Minor API version. + uint32 minor = 2; +} + +// Lifetime parameters of the token. Filed names taken from rfc7519. +message TokenLifetime { + // Expiration Epoch + uint64 exp = 1; + // Not valid before Epoch + uint64 nbf = 2; + // Issued at Epoch + uint64 iat = 3; +} + +// NeoFS session token. +message SessionToken { + message Body { + // ID is a token identifier. valid UUIDv4 represented in bytes + bytes id = 1; + // OwnerID carries identifier of the session initiator. + refs.v2.OwnerID owner_id = 2; + // Verb is an enumeration of session request types + enum Verb { + // Refers to object.Put RPC call + OBJECT_PUT = 0; + // Refers to object.Get RPC call + OBJECT_GET = 1; + // Refers to object.Head RPC call + OBJECT_HEAD = 2; + // Refers to object.Search RPC call + OBJECT_SEARCH = 3; + // Refers to object.Delete RPC call + OBJECT_DELETE = 4; + // Refers to object.GetRange RPC call + OBJECT_RANGE = 5; + // Refers to object.GetRangeHash RPC call + OBJECT_RANGEHASH = 6; + } + // Verb is a type of request for which the token is issued + Verb verb = 3; + // Lifetime is a lifetime of the session + TokenLifetime lifetime = 4; + // SessionKey is a public key of session key + bytes session_key = 5; + // Carries context of the session. + oneof context { + // object_address represents the object session context. + refs.v2.Address object_address = 6; + } + } + // Session Token body + Body token = 1; + + // Signature is a signature of session token information + Signature signature = 2; +} + +// BearerToken has information about request ACL rules with limited lifetime +message BearerToken { + message Body { + // EACLTable carries table of extended ACL rules + acl.v2.EACLTable eacl_table = 1; + // OwnerID carries identifier of the token owner + refs.v2.OwnerID owner_id = 2; + // Token expiration and valid time period parameters + TokenLifetime lifetime = 3; + } + // Bearer Token body + Body token = 1; + + // Signature of BearerToken body + Signature signature = 2; +} + +// Information about the request +message RequestMetaHeader { + // Client API version. + Version version = 1; + // Client local epoch number. Set to 0 if unknown. + uint64 epoch = 2; + // Maximum number of nodes in the request route. + uint32 ttl = 3; + // Request X-Headers. + repeated XHeader x_headers = 4; + // Token is a token of the session within which the request is sent + SessionToken token = 5; + // Bearer is a Bearer token of the request + BearerToken bearer = 6; + + // RequestMetaHeader of the origin request. + RequestMetaHeader origin = 7; +} + +// Information about the response +message ResponseMetaHeader { + // Server API version. + Version version = 1; + // Server local epoch number. + uint64 epoch = 2; + // Maximum number of nodes in the response route. + uint32 ttl = 3; + // Response X-Headers. + repeated XHeader x_headers = 4; + + // Carries response meta header of the origin response. + ResponseMetaHeader origin = 5; +} diff --git a/service/v2/verify.pb.go b/service/v2/verify.pb.go new file mode 100644 index 0000000000000000000000000000000000000000..6f1cd42a3ced3923d1550af67c4e86693589372c GIT binary patch literal 29072 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 literal 0 HcmV?d00001 diff --git a/service/v2/verify.proto b/service/v2/verify.proto new file mode 100644 index 00000000..29338969 --- /dev/null +++ b/service/v2/verify.proto @@ -0,0 +1,43 @@ +syntax = "proto3"; + +package service.v2; + +option go_package = "github.com/nspcc-dev/neofs-api-go/service/v2"; +option csharp_namespace = "NeoFS.API.Service"; + +import "acl/v2/types.proto"; +import "refs/v2/types.proto"; + +// Signature of something in NeoFS +message Signature { + // Public key used for signing. + bytes key = 1; + // Signature + bytes sign = 2; +} + +// Verification info for request signed by all intermediate nodes +message RequestVerificationHeader { + // Request Body signature. Should be generated once by request initiator. + Signature body_signature = 1; + // Request Meta signature is added and signed by any intermediate node + Signature meta_signature = 2; + // Sign previous hops + Signature origin_signature = 3; + + // Chain of previous hops signatures + RequestVerificationHeader origin = 4; +} + +// Verification info for response signed by all intermediate nodes +message ResponseVerificationHeader { + // Response Body signature. Should be generated once by answering node. + Signature body_signature = 1; + // Response Meta signature is added and signed by any intermediate node + Signature meta_signature = 2; + // Sign previous hops + Signature origin_signature = 3; + + // Chain of previous hops signatures + ResponseVerificationHeader origin = 4; +} diff --git a/session/v2/service.pb.go b/session/v2/service.pb.go new file mode 100644 index 0000000000000000000000000000000000000000..9d5d8af673fcad2c7ebc0ad9a453791a4e9e54a9 GIT binary patch literal 35760 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 literal 0 HcmV?d00001 diff --git a/storagegroup/v2/types.proto b/storagegroup/v2/types.proto new file mode 100644 index 00000000..3d89a675 --- /dev/null +++ b/storagegroup/v2/types.proto @@ -0,0 +1,30 @@ +syntax = "proto3"; + +package storagegroup.v2; + +option go_package = "github.com/nspcc-dev/neofs-api-go/storagegroup/v2"; +option csharp_namespace = "NeoFS.API.StorageGroup"; + +import "refs/v2/types.proto"; + +// StorageGroup groups the information about the NeoFS storage group. +// The storage group consists of objects from single container. +message StorageGroup { + // validation_data_size carries the total size of the payloads of the storage + // group members. + uint64 validation_data_size = 1; + + // validation_hash carries homomorphic hash from the concatenation of the + // payloads of the storage group members + // The order of concatenation is the same as the order of the members in the + // Members field. + bytes validation_hash = 2; + + // expiration_epoch carries last NeoFS epoch number of the storage group + // lifetime. + uint64 expiration_epoch = 3; + + // Members carries the list of identifiers of the object storage group members. + // The list is strictly ordered. + repeated refs.v2.ObjectID members = 4; +}