[#216] English Check

Signed-off-by: Elizaveta Chichindaeva <elizaveta@nspcc.ru>
This commit is contained in:
Elizaveta Chichindaeva 2022-04-13 09:21:33 +03:00 committed by LeL
parent 431335054c
commit f233a2fd67
22 changed files with 156 additions and 156 deletions

View file

@ -44,8 +44,8 @@ $ git merge upstream/master
``` ```
### Create your feature branch ### Create your feature branch
Before making code changes, make sure you create a separate branch for these Before making code changes, make sure you have created a separate branch for these
changes. Maybe you will find it convenient to name branch in changes. Maybe you will find it convenient to name branch in the
`<type>/<Issue>-<changes_topic>` format. `<type>/<Issue>-<changes_topic>` format.
```sh ```sh
@ -106,9 +106,9 @@ To sign your work, just add a line like this at the end of your commit message:
Signed-off-by: Samii Sakisaka <samii@nspcc.ru> Signed-off-by: Samii Sakisaka <samii@nspcc.ru>
``` ```
This can easily be done with the `--signoff` option to `git commit`. This can be done easily with the `--signoff` option to `git commit`.
By doing this you state that you can certify the following (from [The Developer By doing this, you state that you can certify the following (from [The Developer
Certificate of Origin](https://developercertificate.org/)): Certificate of Origin](https://developercertificate.org/)):
``` ```

View file

@ -29,7 +29,7 @@ This repository contains:
Feel free to contribute to this project after reading the [contributing Feel free to contribute to this project after reading the [contributing
guidelines](CONTRIBUTING.md). guidelines](CONTRIBUTING.md).
Before starting to work on a certain topic, create a new issue first, Before you start working on a certain topic, first create a new issue
describing the feature/topic you are going to implement. describing the feature/topic you are going to implement.
## License ## License

View file

@ -13,7 +13,7 @@ import "session/types.proto";
// other NeoFS nodes to get information about the account balance. Deposit and // other NeoFS nodes to get information about the account balance. Deposit and
// Withdraw operations can't be implemented here, as they require Mainnet NeoFS // Withdraw operations can't be implemented here, as they require Mainnet NeoFS
// smart contract invocation. Transfer operations between internal NeoFS // smart contract invocation. Transfer operations between internal NeoFS
// accounts are possible, if both use the same token type. // accounts are possible if both use the same token type.
service AccountingService { service AccountingService {
// Returns the amount of funds in GAS token for the requested NeoFS account. // Returns the amount of funds in GAS token for the requested NeoFS account.
// //
@ -26,7 +26,7 @@ service AccountingService {
// BalanceRequest message // BalanceRequest message
message BalanceRequest { message BalanceRequest {
// To indicate the account for which the balance is requested, it's identifier // To indicate the account for which the balance is requested, its identifier
// is used. It can be any existing account in NeoFS sidechain `Balance` smart // is used. It can be any existing account in NeoFS sidechain `Balance` smart
// contract. If omitted, client implementation MUST set it to the request's // contract. If omitted, client implementation MUST set it to the request's
// signer `OwnerID`. // signer `OwnerID`.
@ -51,7 +51,7 @@ message BalanceRequest {
// BalanceResponse message // BalanceResponse message
message BalanceResponse { message BalanceResponse {
// The amount of funds in GAS token for the `OwnerID`'s account requested. // The amount of funds in GAS token for the `OwnerID`'s account requested.
// Balance is `Decimal` format to avoid precision issues with rounding. // Balance is given in the `Decimal` format to avoid precision issues with rounding.
message Body { message Body {
// Amount of funds in GAS token for the requested account. // Amount of funds in GAS token for the requested account.
Decimal balance = 1; Decimal balance = 1;

View file

@ -13,7 +13,7 @@ option csharp_namespace = "Neo.FileStorage.API.Accounting";
// Specification](http://speleotrove.com/decimal/) for detailed problem // Specification](http://speleotrove.com/decimal/) for detailed problem
// description. // description.
message Decimal { message Decimal {
// Number in smallest Token fractions. // Number in the smallest Token fractions.
int64 value = 1 [json_name = "value"]; int64 value = 1 [json_name = "value"];
// Precision value indicating how many smallest fractions can be in one // Precision value indicating how many smallest fractions can be in one

View file

@ -15,11 +15,11 @@ enum Role {
// User target rule is applied if sender is the owner of the container // User target rule is applied if sender is the owner of the container
USER = 1; USER = 1;
// System target rule is applied if sender is the storage node within the // System target rule is applied if sender is a storage node within the
// container or inner ring node // container or an inner ring node
SYSTEM = 2; SYSTEM = 2;
// Others target rule is applied if sender is not user nor system target // Others target rule is applied if sender is neither a user nor a system target
OTHERS = 3; OTHERS = 3;
} }
@ -100,7 +100,7 @@ message EACLRecord {
// Rule execution result. Either allows or denies access if filters match. // Rule execution result. Either allows or denies access if filters match.
Action action = 2 [json_name = "action"]; Action action = 2 [json_name = "action"];
// Filter to check particular properties of the request or object. // Filter to check particular properties of the request or the object.
// //
// By default `key` field refers to the corresponding object's `Attribute`. // By default `key` field refers to the corresponding object's `Attribute`.
// Some Object's header fields can also be accessed by adding `$Object:` // Some Object's header fields can also be accessed by adding `$Object:`
@ -160,12 +160,12 @@ message EACLRecord {
repeated Target targets = 4 [json_name="targets"]; repeated Target targets = 4 [json_name="targets"];
} }
// Extended ACL rules table. Defined a list of ACL rules additionally to Basic // Extended ACL rules table. A list of ACL rules defined additionally to Basic
// ACL. Extended ACL rules can be attached to the container and can be updated // ACL. Extended ACL rules can be attached to a container and can be updated
// or may be defined in `BearerToken` structure. Please see the corresponding // or may be defined in `BearerToken` structure. Please see the corresponding
// NeoFS Technical Specification's section for detailed description. // NeoFS Technical Specification section for detailed description.
message EACLTable { message EACLTable {
// eACL format version. Effectively the version of API library used to create // eACL format version. Effectively, the version of API library used to create
// eACL Table. // eACL Table.
neo.fs.v2.refs.Version version = 1 [json_name = "version"]; neo.fs.v2.refs.Version version = 1 [json_name = "version"];
@ -183,11 +183,11 @@ message EACLTable {
// used in the similar use cases, like providing authorisation to externally // used in the similar use cases, like providing authorisation to externally
// authenticated party. // authenticated party.
// //
// BearerToken can be issued only by container's owner and must be signed using // BearerToken can be issued only by the container's owner and must be signed using
// the key associated with container's `OwnerID`. // the key associated with the container's `OwnerID`.
message BearerToken { message BearerToken {
// Bearer Token body structure contains Extended ACL table issued by container // Bearer Token body structure contains Extended ACL table issued by the container
// owner with additional information preventing token's abuse. // owner with additional information preventing token abuse.
message Body { message Body {
// Table of Extended ACL rules to use instead of the ones attached to the // Table of Extended ACL rules to use instead of the ones attached to the
// container. If it contains `container_id` field, bearer token is only // container. If it contains `container_id` field, bearer token is only
@ -195,7 +195,7 @@ message BearerToken {
// is allowed. // is allowed.
EACLTable eacl_table = 1 [json_name="eaclTable"]; EACLTable eacl_table = 1 [json_name="eaclTable"];
// `OwnerID` to whom the token was issued. Must match the request // `OwnerID` defines to whom the token was issued. It must match the request
// originator's `OwnerID`. If empty, any token bearer will be accepted. // originator's `OwnerID`. If empty, any token bearer will be accepted.
neo.fs.v2.refs.OwnerID owner_id = 2 [json_name="ownerID"]; neo.fs.v2.refs.OwnerID owner_id = 2 [json_name="ownerID"];

View file

@ -10,7 +10,7 @@ import "refs/types.proto";
// DataAuditResult keeps record of conducted Data Audits. The detailed report is // DataAuditResult keeps record of conducted Data Audits. The detailed report is
// generated separately. // generated separately.
message DataAuditResult { message DataAuditResult {
// Data Audit Result format version. Effectively the version of API library // Data Audit Result format version. Effectively, the version of API library
// used to report DataAuditResult structure. // used to report DataAuditResult structure.
neo.fs.v2.refs.Version version = 1 [json_name = "version"]; neo.fs.v2.refs.Version version = 1 [json_name = "version"];
@ -38,16 +38,16 @@ message DataAuditResult {
// List of Storage Groups that failed audit PoR stage // List of Storage Groups that failed audit PoR stage
repeated neo.fs.v2.refs.ObjectID fail_sg = 9 [json_name = "failSG"]; repeated neo.fs.v2.refs.ObjectID fail_sg = 9 [json_name = "failSG"];
// Number of sampled objects under audit placed in an optimal way according to // Number of sampled objects under the audit placed in an optimal way according to
// the containers placement policy when checking PoP // the containers placement policy when checking PoP
uint32 hit = 10 [json_name = "hit"]; uint32 hit = 10 [json_name = "hit"];
// Number of sampled objects under audit placed in suboptimal way according to // Number of sampled objects under the audit placed in suboptimal way according to
// the containers placement policy, but still at a satisfactory level when // the containers placement policy, but still at a satisfactory level when
// checking PoP // checking PoP
uint32 miss = 11 [json_name = "miss"]; uint32 miss = 11 [json_name = "miss"];
// Number of sampled objects under audit stored in a way not confirming // Number of sampled objects under the audit stored inconsistently with the
// placement policy or not found at all when checking PoP // placement policy or not found at all when checking PoP
uint32 fail = 12 [json_name = "fail"]; uint32 fail = 12 [json_name = "fail"];

View file

@ -17,7 +17,7 @@ import "session/types.proto";
service ContainerService { service ContainerService {
// `Put` invokes `Container` smart contract's `Put` method and returns // `Put` invokes `Container` smart contract's `Put` method and returns
// response immediately. After a new block is issued in sidechain, request is // response immediately. After a new block is issued in sidechain, request is
// verified by Inner Ring nodes. After one more block in sidechain, container // verified by Inner Ring nodes. After one more block in sidechain, the container
// is added into smart contract storage. // is added into smart contract storage.
// //
// Statuses: // Statuses:
@ -28,7 +28,7 @@ service ContainerService {
// `Delete` invokes `Container` smart contract's `Delete` method and returns // `Delete` invokes `Container` smart contract's `Delete` method and returns
// response immediately. After a new block is issued in sidechain, request is // response immediately. After a new block is issued in sidechain, request is
// verified by Inner Ring nodes. After one more block in sidechain, container // verified by Inner Ring nodes. After one more block in sidechain, the container
// is added into smart contract storage. // is added into smart contract storage.
// //
// Statuses: // Statuses:
@ -56,7 +56,7 @@ service ContainerService {
rpc List(ListRequest) returns (ListResponse); rpc List(ListRequest) returns (ListResponse);
// Invokes 'SetEACL' method of 'Container` smart contract and returns response // Invokes 'SetEACL' method of 'Container` smart contract and returns response
// immediately. After one more block in sidechain, Extended ACL changes are // immediately. After one more block in sidechain, changes in an Extended ACL are
// added into smart contract storage. // added into smart contract storage.
// //
// Statuses: // Statuses:
@ -76,7 +76,7 @@ service ContainerService {
// container not found. // container not found.
rpc GetExtendedACL(GetExtendedACLRequest) returns (GetExtendedACLResponse); rpc GetExtendedACL(GetExtendedACLRequest) returns (GetExtendedACLResponse);
// Announce container used space values for P2P synchronization. // Announces the space values used by the container for P2P synchronization.
// //
// Statuses: // Statuses:
// - **OK** (0, SECTION_SUCCESS): \ // - **OK** (0, SECTION_SUCCESS): \
@ -117,7 +117,7 @@ message PutResponse {
// Container put response body contains information about the newly registered // Container put response body contains information about the newly registered
// container as seen by `Container` smart contract. `ContainerID` can be // container as seen by `Container` smart contract. `ContainerID` can be
// calculated beforehand from the container structure and compared to the one // calculated beforehand from the container structure and compared to the one
// returned here to make sure everything was done as expected. // returned here to make sure everything has been done as expected.
message Body { message Body {
// Unique identifier of the newly created container // Unique identifier of the newly created container
neo.fs.v2.refs.ContainerID container_id = 1; neo.fs.v2.refs.ContainerID container_id = 1;
@ -137,8 +137,8 @@ message PutResponse {
// Container removal request // Container removal request
message DeleteRequest { message DeleteRequest {
// Container removal request body has a signed `ContainerID` as a proof of // Container removal request body has signed `ContainerID` as a proof of
// container owner's intent. The signature will be verified by `Container` // the container owner's intent. The signature will be verified by `Container`
// smart contract, so signing algorithm must be supported by NeoVM. // smart contract, so signing algorithm must be supported by NeoVM.
message Body { message Body {
// Identifier of the container to delete from NeoFS // Identifier of the container to delete from NeoFS
@ -202,7 +202,7 @@ message GetRequest {
// Get container structure // Get container structure
message GetResponse { message GetResponse {
// Get container response body does not have container structure signature. It // Get container response body does not have container structure signature. It
// was already verified on container creation. // has been already verified upon container creation.
message Body { message Body {
// Requested container structure // Requested container structure
Container container = 1; Container container = 1;
@ -210,7 +210,7 @@ message GetResponse {
// Signature of a stable-marshalled container according to RFC-6979. // Signature of a stable-marshalled container according to RFC-6979.
neo.fs.v2.refs.SignatureRFC6979 signature = 2; neo.fs.v2.refs.SignatureRFC6979 signature = 2;
// Session token if the container was created within a session // Session token if the container has been created within the session
neo.fs.v2.session.SessionToken session_token = 3; neo.fs.v2.session.SessionToken session_token = 3;
} }
// Body of container get response message. // Body of container get response message.
@ -272,7 +272,7 @@ message SetExtendedACLRequest {
// Set Extended ACL request body does not have separate `ContainerID` // Set Extended ACL request body does not have separate `ContainerID`
// reference. It will be taken from `EACLTable.container_id` field. // reference. It will be taken from `EACLTable.container_id` field.
message Body { message Body {
// Extended ACL table to set for container // Extended ACL table to set for the container
neo.fs.v2.acl.EACLTable eacl = 1; neo.fs.v2.acl.EACLTable eacl = 1;
// Signature of stable-marshalled Extended ACL table according to RFC-6979. // Signature of stable-marshalled Extended ACL table according to RFC-6979.
@ -294,7 +294,7 @@ message SetExtendedACLRequest {
// Set Extended ACL // Set Extended ACL
message SetExtendedACLResponse { message SetExtendedACLResponse {
// `SetExtendedACLResponse` has an empty body because the operation is // `SetExtendedACLResponse` has an empty body because the operation is
// asynchronous and update should be reflected in `Container` smart contract's // asynchronous and the update should be reflected in `Container` smart contract's
// storage after next block is issued in sidechain. // storage after next block is issued in sidechain.
message Body { } message Body { }
@ -334,9 +334,9 @@ message GetExtendedACLRequest {
// Get Extended ACL // Get Extended ACL
message GetExtendedACLResponse { message GetExtendedACLResponse {
// Get Extended ACL Response body can be empty if the requested container did // Get Extended ACL Response body can be empty if the requested container does
// not have Extended ACL Table attached or Extended ACL was not allowed at // not have Extended ACL Table attached or Extended ACL has not been allowed at
// container creation. // the time of container creation.
message Body { message Body {
// Extended ACL requested, if available // Extended ACL requested, if available
neo.fs.v2.acl.EACLTable eacl = 1; neo.fs.v2.acl.EACLTable eacl = 1;
@ -364,21 +364,21 @@ message GetExtendedACLResponse {
message AnnounceUsedSpaceRequest { message AnnounceUsedSpaceRequest {
// Container used space announcement body. // Container used space announcement body.
message Body { message Body {
// Announcement contains used space information about single container. // Announcement contains used space information for a single container.
message Announcement { message Announcement {
// Epoch number for which container size estimation was produced. // Epoch number for which the container size estimation was produced.
uint64 epoch = 1; uint64 epoch = 1;
// Identifier of the container. // Identifier of the container.
neo.fs.v2.refs.ContainerID container_id = 2; neo.fs.v2.refs.ContainerID container_id = 2;
// Used space is a sum of object payload sizes of specified // Used space is a sum of object payload sizes of a specified
// container, stored in the node. It must not include inhumed objects. // container, stored in the node. It must not include inhumed objects.
uint64 used_space = 3; uint64 used_space = 3;
} }
// List of announcements. If nodes share several containers, then // List of announcements. If nodes share several containers,
// announcements transferred in a batch. // announcements are transferred in a batch.
repeated Announcement announcements = 1; repeated Announcement announcements = 1;
} }

View file

@ -10,11 +10,11 @@ import "refs/types.proto";
// Container is a structure that defines object placement behaviour. Objects can // Container is a structure that defines object placement behaviour. Objects can
// be stored only within containers. They define placement rule, attributes and // be stored only within containers. They define placement rule, attributes and
// access control information. ID of the container is a 32 byte long SHA256 hash // access control information. An ID of a container is a 32 byte long SHA256 hash
// of stable-marshalled container message. // of stable-marshalled container message.
message Container { message Container {
// Container format version. Effectively the version of API library used to // Container format version. Effectively, the version of API library used to
// create container. // create the container.
neo.fs.v2.refs.Version version = 1 [json_name = "version"]; neo.fs.v2.refs.Version version = 1 [json_name = "version"];
// Identifier of the container owner // Identifier of the container owner
@ -23,13 +23,13 @@ message Container {
// Nonce is a 16 byte UUIDv4, used to avoid collisions of `ContainerID`s // Nonce is a 16 byte UUIDv4, used to avoid collisions of `ContainerID`s
bytes nonce = 3 [json_name = "nonce"]; bytes nonce = 3 [json_name = "nonce"];
// `BasicACL` contains access control rules for owner, system, others groups // `BasicACL` contains access control rules for the owner, system and others groups,
// and permission bits for `BearerToken` and `Extended ACL` // as well as permission bits for `BearerToken` and `Extended ACL`
uint32 basic_acl = 4 [json_name = "basicACL"]; uint32 basic_acl = 4 [json_name = "basicACL"];
// `Attribute` is a user-defined Key-Value metadata pair attached to the // `Attribute` is a user-defined Key-Value metadata pair attached to the
// container. Container attributes are immutable. They are set at container // container. Container attributes are immutable. They are set at the moment of
// creation and can never be added or updated. // container creation and can never be added or updated.
// //
// Key name must be a container-unique valid UTF-8 string. Value can't be // Key name must be a container-unique valid UTF-8 string. Value can't be
// empty. Containers with duplicated attribute names or attributes with empty // empty. Containers with duplicated attribute names or attributes with empty
@ -38,14 +38,14 @@ message Container {
// There are some "well-known" attributes affecting system behaviour: // There are some "well-known" attributes affecting system behaviour:
// //
// * __NEOFS__SUBNET \ // * __NEOFS__SUBNET \
// String ID of container's storage subnet. Container can be attached to // String ID of a container's storage subnet. Any container can be attached to
// only one subnet. // one subnet only.
// * __NEOFS__NAME \ // * __NEOFS__NAME \
// String of human-friendly container name registered as the domain in // String of a human-friendly container name registered as a domain in
// NNS contract. // NNS contract.
// * __NEOFS__ZONE \ // * __NEOFS__ZONE \
// String of zone for `__NEOFS__NAME`. Used as TLD of domain name in NNS // String of a zone for `__NEOFS__NAME`. Used as a TLD of a domain name in NNS
// contract. If zone is not specified, use default zone: `container`. // contract. If no zone is specified, use default zone: `container`.
// //
// And some well-known attributes used by applications only: // And some well-known attributes used by applications only:
// //

View file

@ -1,25 +1,25 @@
# Release instructions # Release instructions
This documents outlines the neofs-api release process, and can be used as a TODO This documents outlines the neofs-api release process and can be used as a TODO
list for a new release. list for a new release.
## Pre-release checks ## Pre-release checks
These should run successfully: This should run successfully:
* `make lint` * `make lint`
## Pre-release actions ## Pre-release actions
These must be run: This must be run:
* `make doc` * `make doc`
## Writing CHANGELOG ## Writing CHANGELOG
Add an entry to the CHANGELOG.md following the style established there. Add an entry to the CHANGELOG.md following the style established there.
Add a codename for releases with new major version, version and release date in Add a codename for releases with the new major version, version and release date in
the heading. Write a paragraph describing the most significant changes done in the heading. Write a paragraph describing the most significant changes done in
this release. Then add sections with what was added, changed and removed, this release. Then add sections with what has been added, changed and removed,
describing each change briefly with a reference to GitHub issues, where describing each change briefly with a reference to GitHub issues, where
available. available.

View file

@ -7,7 +7,7 @@ option csharp_namespace = "Neo.FileStorage.API.Lock";
import "refs/types.proto"; import "refs/types.proto";
// Lock objects protects a list of objects from being deleted. Lifetime of the // Lock objects protects a list of objects from being deleted. The lifetime of a
// lock object is limited similar to regular objects in // lock object is limited similar to regular objects in
// `__NEOFS__EXPIRATION_EPOCH` attribute. // `__NEOFS__EXPIRATION_EPOCH` attribute.
message Lock { message Lock {

View file

@ -9,16 +9,16 @@ import "netmap/types.proto";
import "refs/types.proto"; import "refs/types.proto";
import "session/types.proto"; import "session/types.proto";
// `NetmapService` provides methods to work with `Network Map` and information // `NetmapService` provides methods to work with `Network Map` and the information
// required to build it. The resulting `Network Map` is stored in sidechain // required to build it. The resulting `Network Map` is stored in sidechain
// `Netmap` smart contract, while related information can be obtained from other // `Netmap` smart contract, while related information can be obtained from other
// NeoFS nodes. // NeoFS nodes.
service NetmapService { service NetmapService {
// Get NodeInfo structure from the particular node directly. Node information // Get NodeInfo structure from the particular node directly.
// can be taken from `Netmap` smart contract, but in some cases the one may // Node information can be taken from `Netmap` smart contract. In some cases, though,
// want to get recent information directly, or to talk to the node not yet // one may want to get recent information directly or to talk to the node not yet
// present in `Network Map` to find out what API version can be used for // present in the `Network Map` to find out what API version can be used for
// further communication. Can also be used to check if node is up and running. // further communication. This can be also used to check if a node is up and running.
// //
// Statuses: // Statuses:
// - **OK** (0, SECTION_SUCCESS): // - **OK** (0, SECTION_SUCCESS):
@ -35,7 +35,7 @@ service NetmapService {
rpc NetworkInfo (NetworkInfoRequest) returns (NetworkInfoResponse); rpc NetworkInfo (NetworkInfoRequest) returns (NetworkInfoResponse);
} }
// Get NodeInfo structure from the particular node directly // Get NodeInfo structure directly from a particular node
message LocalNodeInfoRequest { message LocalNodeInfoRequest {
// LocalNodeInfo request body is empty. // LocalNodeInfo request body is empty.
message Body { message Body {
@ -76,7 +76,7 @@ message LocalNodeInfoResponse {
neo.fs.v2.session.ResponseVerificationHeader verify_header = 3; neo.fs.v2.session.ResponseVerificationHeader verify_header = 3;
} }
// Get NetworkInfo structure with the network view from particular node. // Get NetworkInfo structure with the network view from a particular node.
message NetworkInfoRequest { message NetworkInfoRequest {
// NetworkInfo request body is empty. // NetworkInfo request body is empty.
message Body { message Body {

View file

@ -41,7 +41,7 @@ enum Operation {
// just groups nodes into a bucket by attribute, selecting nodes only by their // just groups nodes into a bucket by attribute, selecting nodes only by their
// hash distance. // hash distance.
enum Clause { enum Clause {
// No modifier defined. Will select nodes from bucket randomly. // No modifier defined. Nodes will be selected from the bucket randomly
CLAUSE_UNSPECIFIED = 0; CLAUSE_UNSPECIFIED = 0;
// SAME will select only nodes having the same value of bucket attribute // SAME will select only nodes having the same value of bucket attribute
@ -51,10 +51,10 @@ enum Clause {
DISTINCT = 2; DISTINCT = 2;
} }
// Filter will return the subset of nodes from `NetworkMap` or another filter's // This filter will return the subset of nodes from `NetworkMap` or another filter's
// results, that will satisfy filter's conditions. // results that will satisfy filter's conditions.
message Filter { message Filter {
// Name of the filter or a reference to the named filter. '*' means // Name of the filter or a reference to a named filter. '*' means
// application to the whole unfiltered NetworkMap. At top level it's used as a // application to the whole unfiltered NetworkMap. At top level it's used as a
// filter name. At lower levels it's considered to be a reference to another // filter name. At lower levels it's considered to be a reference to another
// named filter // named filter
@ -86,7 +86,7 @@ message Selector {
// Selector modifier showing how to form a bucket // Selector modifier showing how to form a bucket
Clause clause = 3 [json_name = "clause"]; Clause clause = 3 [json_name = "clause"];
// Attribute bucket to select from // Bucket attribute to select from
string attribute = 4 [json_name = "attribute"]; string attribute = 4 [json_name = "attribute"];
// Filter reference to select from // Filter reference to select from
@ -94,7 +94,7 @@ message Selector {
} }
// Number of object replicas in a set of nodes from the defined selector. If no // Number of object replicas in a set of nodes from the defined selector. If no
// selector set the root bucket containing all possible nodes will be used by // selector set, the root bucket containing all possible nodes will be used by
// default. // default.
message Replica { message Replica {
// How many object replicas to put // How many object replicas to put
@ -204,7 +204,7 @@ message NodeInfo {
// automatically from `UN-LOCODE` attribute. // automatically from `UN-LOCODE` attribute.
// //
// For detailed description of each well-known attribute please see the // For detailed description of each well-known attribute please see the
// corresponding section in NeoFS Technical specification. // corresponding section in NeoFS Technical Specification.
message Attribute { message Attribute {
// Key of the node attribute // Key of the node attribute
string key = 1 [json_name = "key"]; string key = 1 [json_name = "key"];

View file

@ -10,14 +10,14 @@ import "refs/types.proto";
import "session/types.proto"; import "session/types.proto";
// `ObjectService` provides API for manipulating objects. Object operations do // `ObjectService` provides API for manipulating objects. Object operations do
// not interact with sidechain and are only served by nodes in p2p style. // not affect the sidechain and are only served by nodes in p2p style.
service ObjectService { service ObjectService {
// Receive full object structure, including Headers and payload. Response uses // Receive full object structure, including Headers and payload. Response uses
// gRPC stream. First response message carries object with requested address. // gRPC stream. First response message carries the object with the requested address.
// Chunk messages are parts of the object's payload if it is needed. All // Chunk messages are parts of the object's payload if it is needed. All
// messages, except the first one, carry payload chunks. Requested object can // messages, except the first one, carry payload chunks. The requested object can
// be restored by concatenation of object message payload and all chunks // be restored by concatenation of object message payload and all chunks
// keeping receiving order. // keeping the receiving order.
// //
// Statuses: // Statuses:
// - **OK** (0, SECTION_SUCCESS): \ // - **OK** (0, SECTION_SUCCESS): \
@ -40,7 +40,7 @@ service ObjectService {
// SHOULD be set. Session token SHOULD be obtained before `PUT` operation (see // SHOULD be set. Session token SHOULD be obtained before `PUT` operation (see
// session package). Chunk messages are considered by server as a part of an // session package). Chunk messages are considered by server as a part of an
// object payload. All messages, except first one, SHOULD be payload chunks. // object payload. All messages, except first one, SHOULD be payload chunks.
// Chunk messages SHOULD be sent in direct order of fragmentation. // Chunk messages SHOULD be sent in the direct order of fragmentation.
// //
// Statuses: // Statuses:
// - **OK** (0, SECTION_SUCCESS): \ // - **OK** (0, SECTION_SUCCESS): \
@ -82,7 +82,7 @@ service ObjectService {
// Returns the object Headers without data payload. By default full header is // Returns the object Headers without data payload. By default full header is
// returned. If `main_only` request field is set, the short header with only // returned. If `main_only` request field is set, the short header with only
// the very minimal information would be returned instead. // the very minimal information will be returned instead.
// //
// Statuses: // Statuses:
// - **OK** (0, SECTION_SUCCESS): \ // - **OK** (0, SECTION_SUCCESS): \
@ -118,7 +118,7 @@ service ObjectService {
// Get byte range of data payload. Range is set as an (offset, length) tuple. // Get byte range of data payload. Range is set as an (offset, length) tuple.
// Like in `Get` method, the response uses gRPC stream. Requested range can be // Like in `Get` method, the response uses gRPC stream. Requested range can be
// restored by concatenation of all received payload chunks keeping receiving // restored by concatenation of all received payload chunks keeping the receiving
// order. // order.
// //
// Statuses: // Statuses:
@ -139,8 +139,8 @@ service ObjectService {
// Returns homomorphic or regular hash of object's payload range after // Returns homomorphic or regular hash of object's payload range after
// applying XOR operation with the provided `salt`. Ranges are set of (offset, // applying XOR operation with the provided `salt`. Ranges are set of (offset,
// length) tuples. Hashes order in response corresponds to ranges order in // length) tuples. Hashes order in response corresponds to the ranges order in
// request. Note that hash is calculated for XORed data. // the request. Note that hash is calculated for XORed data.
// //
// Statuses: // Statuses:
// - **OK** (0, SECTION_SUCCESS): \ // - **OK** (0, SECTION_SUCCESS): \
@ -353,12 +353,12 @@ message HeadRequest {
neo.fs.v2.session.RequestVerificationHeader verify_header = 3; neo.fs.v2.session.RequestVerificationHeader verify_header = 3;
} }
// Tuple of full object header and signature of `ObjectID`. \ // Tuple of a full object header and signature of an `ObjectID`. \
// Signed `ObjectID` is present to verify full header's authenticity through the // Signed `ObjectID` is present to verify full header's authenticity through the
// following steps: // following steps:
// //
// 1. Calculate `SHA-256` of marshalled `Header` structure // 1. Calculate `SHA-256` of the marshalled `Header` structure
// 2. Check if the resulting hash matched `ObjectID` // 2. Check if the resulting hash matches `ObjectID`
// 3. Check if `ObjectID` signature in `signature` field is correct // 3. Check if `ObjectID` signature in `signature` field is correct
message HeaderWithSignature { message HeaderWithSignature {
// Full object header // Full object header
@ -407,13 +407,13 @@ message SearchRequest {
// Version of the Query Language used // Version of the Query Language used
uint32 version = 2; uint32 version = 2;
// Filter structure checks if object header field or attribute content // Filter structure checks if the object header field or the attribute content
// matches a value. // matches a value.
// //
// If no filters set, search request will return all objects of the // If no filters are set, search request will return all objects of the
// container, including Regular object, Tombstones and Storage Group // container, including Regular object, Tombstones and Storage Group
// objects. Most human users expect to get only object they can directly // objects. Most human users expect to get only object they can directly
// work with. In that case the `$Object:ROOT` filter should be used. // work with. In that case, `$Object:ROOT` filter should be used.
// //
// By default `key` field refers to the corresponding object's `Attribute`. // By default `key` field refers to the corresponding object's `Attribute`.
// Some Object's header fields can also be accessed by adding `$Object:` // Some Object's header fields can also be accessed by adding `$Object:`
@ -446,10 +446,10 @@ message SearchRequest {
// properties: // properties:
// //
// * $Object:ROOT \ // * $Object:ROOT \
// Returns only `REGULAR` type objects that are not split or are the top // Returns only `REGULAR` type objects that are not split or that are the top
// level root objects in a split hierarchy. This includes objects not // level root objects in a split hierarchy. This includes objects not
// present physically, like large objects split into smaller objects // present physically, like large objects split into smaller objects
// without separate top-level root object. Other type objects like // without a separate top-level root object. Objects of other types like
// StorageGroups and Tombstones will not be shown. This filter may be // StorageGroups and Tombstones will not be shown. This filter may be
// useful for listing objects like `ls` command of some virtual file // useful for listing objects like `ls` command of some virtual file
// system. This filter is activated if the `key` exists, disregarding the // system. This filter is activated if the `key` exists, disregarding the

View file

@ -9,7 +9,7 @@ import "refs/types.proto";
import "session/types.proto"; import "session/types.proto";
// Type of the object payload content. Only `REGULAR` type objects can be split, // Type of the object payload content. Only `REGULAR` type objects can be split,
// hence `TOMBSTONE`, `STORAGE_GROUP` and `LOCK` payload is limited by maximal // hence `TOMBSTONE`, `STORAGE_GROUP` and `LOCK` payload is limited by the maximum
// object size. // object size.
// //
// String presentation of object type is the same as definition: // String presentation of object type is the same as definition:
@ -51,7 +51,7 @@ enum MatchType {
// Short header fields // Short header fields
message ShortHeader { message ShortHeader {
// Object format version. Effectively the version of API library used to // Object format version. Effectively, the version of API library used to
// create particular object. // create particular object.
neo.fs.v2.refs.Version version = 1 [json_name = "version"]; neo.fs.v2.refs.Version version = 1 [json_name = "version"];
@ -77,7 +77,7 @@ message ShortHeader {
// Object Header // Object Header
message Header { message Header {
// Object format version. Effectively the version of API library used to // Object format version. Effectively, the version of API library used to
// create particular object // create particular object
neo.fs.v2.refs.Version version = 1 [json_name = "version"]; neo.fs.v2.refs.Version version = 1 [json_name = "version"];
@ -107,10 +107,10 @@ message Header {
// integrity and authenticity out of Request scope. // integrity and authenticity out of Request scope.
neo.fs.v2.session.SessionToken session_token = 9 [json_name = "sessionToken"]; neo.fs.v2.session.SessionToken session_token = 9 [json_name = "sessionToken"];
// `Attribute` is a user-defined Key-Value metadata pair attached to the // `Attribute` is a user-defined Key-Value metadata pair attached to an
// object. // object.
// //
// Key name must be a object-unique valid UTF-8 string. Value can't be empty. // Key name must be an object-unique valid UTF-8 string. Value can't be empty.
// Objects with duplicated attribute names or attributes with empty values // Objects with duplicated attribute names or attributes with empty values
// will be considered invalid. // will be considered invalid.
// //
@ -141,7 +141,7 @@ message Header {
// MIME Content Type of object's payload // MIME Content Type of object's payload
// //
// For detailed description of each well-known attribute please see the // For detailed description of each well-known attribute please see the
// corresponding section in NeoFS Technical specification. // corresponding section in NeoFS Technical Specification.
message Attribute { message Attribute {
// string key to the object attribute // string key to the object attribute
string key = 1 [json_name = "key"]; string key = 1 [json_name = "key"];
@ -182,8 +182,8 @@ message Header {
} }
// Object structure. Object is immutable and content-addressed. It means // Object structure. Object is immutable and content-addressed. It means
// `ObjectID` will change if header or payload changes. It's calculated as a // `ObjectID` will change if the header or the payload changes. It's calculated as a
// hash of header field, which contains hash of object's payload. // hash of header field which contains hash of the object's payload.
// //
// For non-regular object types payload format depends on object type specified // For non-regular object types payload format depends on object type specified
// in the header. // in the header.
@ -201,20 +201,20 @@ message Object {
bytes payload = 4 [json_name = "payload"]; bytes payload = 4 [json_name = "payload"];
} }
// Meta information of split hierarchy for object assembly. With last part // Meta information of split hierarchy for object assembly. With the last part
// one can traverse linked list of split hierarchy back to first part and // one can traverse linked list of split hierarchy back to the first part and
// assemble original object. With linking object one can assembly object // assemble the original object. With a linking object one can assemble an object
// straight away from the object parts. // right from the object parts.
message SplitInfo { message SplitInfo {
// 16 byte UUID used to identify the split object hierarchy parts. // 16 byte UUID used to identify the split object hierarchy parts.
bytes split_id = 1; bytes split_id = 1;
// Identifier of the last object in split hierarchy parts. It contains // The identifier of the last object in split hierarchy parts. It contains
// split header with original object header. // split header with the original object header.
neo.fs.v2.refs.ObjectID last_part = 2; neo.fs.v2.refs.ObjectID last_part = 2;
// Identifier of linking object for split hierarchy parts. It contains // The identifier of a linking object for split hierarchy parts. It contains
// split header with original object header and sorted list of // split header with the original object header and a sorted list of
// object parts. // object parts.
neo.fs.v2.refs.ObjectID link = 3; neo.fs.v2.refs.ObjectID link = 3;
} }

View file

@ -7,7 +7,7 @@ option csharp_namespace = "Neo.FileStorage.API.Refs";
// Objects in NeoFS are addressed by their ContainerID and ObjectID. // Objects in NeoFS are addressed by their ContainerID and ObjectID.
// //
// String presentation of `Address` is the concatenation of string encoded // String presentation of `Address` is a concatenation of string encoded
// `ContainerID` and `ObjectID` delimited by '/' character. // `ContainerID` and `ObjectID` delimited by '/' character.
message Address { message Address {
// Container identifier // Container identifier
@ -17,17 +17,17 @@ message Address {
} }
// NeoFS Object unique identifier. Objects are immutable and content-addressed. // NeoFS Object unique identifier. Objects are immutable and content-addressed.
// It means `ObjectID` will change if `header` or `payload` changes. // It means `ObjectID` will change if the `header` or the `payload` changes.
// //
// `ObjectID` is a 32 byte long // `ObjectID` is a 32 byte long
// [SHA256](https://csrc.nist.gov/publications/detail/fips/180/4/final) hash of // [SHA256](https://csrc.nist.gov/publications/detail/fips/180/4/final) hash of
// object's `header` field, which, in it's turn, contains hash of object's // the object's `header` field, which, in it's turn, contains the hash of the object's
// payload. // payload.
// //
// String presentation is // String presentation is a
// [base58](https://tools.ietf.org/html/draft-msporny-base58-02) encoded string. // [base58](https://tools.ietf.org/html/draft-msporny-base58-02) encoded string.
// //
// JSON value will be the data encoded as a string using standard base64 // JSON value will be data encoded as a string using standard base64
// encoding with paddings. Either // encoding with paddings. Either
// [standard](https://tools.ietf.org/html/rfc4648#section-4) or // [standard](https://tools.ietf.org/html/rfc4648#section-4) or
// [URL-safe](https://tools.ietf.org/html/rfc4648#section-5) base64 encoding // [URL-safe](https://tools.ietf.org/html/rfc4648#section-5) base64 encoding
@ -44,10 +44,10 @@ message ObjectID {
// [SHA256](https://csrc.nist.gov/publications/detail/fips/180/4/final) hash of // [SHA256](https://csrc.nist.gov/publications/detail/fips/180/4/final) hash of
// stable-marshalled container message. // stable-marshalled container message.
// //
// String presentation is // String presentation is a
// [base58](https://tools.ietf.org/html/draft-msporny-base58-02) encoded string. // [base58](https://tools.ietf.org/html/draft-msporny-base58-02) encoded string.
// //
// JSON value will be the data encoded as a string using standard base64 // JSON value will be data encoded as a string using standard base64
// encoding with paddings. Either // encoding with paddings. Either
// [standard](https://tools.ietf.org/html/rfc4648#section-4) or // [standard](https://tools.ietf.org/html/rfc4648#section-4) or
// [URL-safe](https://tools.ietf.org/html/rfc4648#section-5) base64 encoding // [URL-safe](https://tools.ietf.org/html/rfc4648#section-5) base64 encoding
@ -64,10 +64,10 @@ message ContainerID {
// `OwnerID` is a 25 bytes sequence starting with Neo version prefix byte // `OwnerID` is a 25 bytes sequence starting with Neo version prefix byte
// followed by 20 bytes of ScrptHash and 4 bytes of checksum. // followed by 20 bytes of ScrptHash and 4 bytes of checksum.
// //
// String presentation is [Base58 // String presentation is a [Base58
// Check](https://en.bitcoin.it/wiki/Base58Check_encoding) Encoded string. // Check](https://en.bitcoin.it/wiki/Base58Check_encoding) Encoded string.
// //
// JSON value will be the data encoded as a string using standard base64 // JSON value will be data encoded as a string using standard base64
// encoding with paddings. Either // encoding with paddings. Either
// [standard](https://tools.ietf.org/html/rfc4648#section-4) or // [standard](https://tools.ietf.org/html/rfc4648#section-4) or
// [URL-safe](https://tools.ietf.org/html/rfc4648#section-5) base64 encoding // [URL-safe](https://tools.ietf.org/html/rfc4648#section-5) base64 encoding
@ -81,7 +81,7 @@ message OwnerID {
// //
// String representation of a value is base-10 integer. // String representation of a value is base-10 integer.
// //
// JSON representation is an object containing single `value` number field. // JSON representation is an object containing a single `value` number field.
message SubnetID { message SubnetID {
// 4-byte integer subnetwork identifier. // 4-byte integer subnetwork identifier.
fixed32 value = 1 [json_name = "value"]; fixed32 value = 1 [json_name = "value"];
@ -90,7 +90,7 @@ message SubnetID {
// API version used by a node. // API version used by a node.
// //
// String presentation is a Semantic Versioning 2.0.0 compatible version string // String presentation is a Semantic Versioning 2.0.0 compatible version string
// with 'v' prefix. I.e. `vX.Y`, where `X` - major number, `Y` - minor number. // with 'v' prefix. i.e. `vX.Y`, where `X` is the major number, `Y` is the minor number.
message Version { message Version {
// Major API version // Major API version
uint32 major = 1 [json_name = "major"]; uint32 major = 1 [json_name = "major"];
@ -139,7 +139,7 @@ enum ChecksumType {
} }
// Checksum message. // Checksum message.
// Depending on checksum algorithm type the string presentation may vary: // Depending on checksum algorithm type, the string presentation may vary:
// //
// * TZ \ // * TZ \
// Hex encoded string without `0x` prefix // Hex encoded string without `0x` prefix

View file

@ -22,7 +22,7 @@ service ReputationService {
// - Common failures (SECTION_FAILURE_COMMON). // - Common failures (SECTION_FAILURE_COMMON).
rpc AnnounceLocalTrust (AnnounceLocalTrustRequest) returns (AnnounceLocalTrustResponse); rpc AnnounceLocalTrust (AnnounceLocalTrustRequest) returns (AnnounceLocalTrustResponse);
// Announces the intermediate result of the iterative algorithm for // Announce the intermediate result of the iterative algorithm for
// calculating the global reputation of the node in NeoFS network. // calculating the global reputation of the node in NeoFS network.
// //
// Statuses: // Statuses:
@ -41,7 +41,7 @@ message AnnounceLocalTrustRequest {
// List of normalized local trust values to other NeoFS nodes. The value // List of normalized local trust values to other NeoFS nodes. The value
// is calculated according to EigenTrust++ algorithm and must be a // is calculated according to EigenTrust++ algorithm and must be a
// floating point number in the [0;1] range. // floating point number in [0;1] range.
repeated Trust trusts = 2; repeated Trust trusts = 2;
} }
@ -58,11 +58,11 @@ message AnnounceLocalTrustRequest {
neo.fs.v2.session.RequestVerificationHeader verify_header = 3; neo.fs.v2.session.RequestVerificationHeader verify_header = 3;
} }
// Node's local trust information announce response. // Node's local trust information announcement response.
message AnnounceLocalTrustResponse { message AnnounceLocalTrustResponse {
// Response to the node's local trust information announce has an empty body // Response to the node's local trust information announcement has an empty body
// because the trust exchange operation is asynchronous. If Trust information // because the trust exchange operation is asynchronous. If Trust information
// will not pass sanity checks it is silently ignored. // does not pass sanity checks, it is silently ignored.
message Body { message Body {
} }
@ -106,11 +106,11 @@ message AnnounceIntermediateResultRequest {
neo.fs.v2.session.RequestVerificationHeader verify_header = 3; neo.fs.v2.session.RequestVerificationHeader verify_header = 3;
} }
// Intermediate global trust information announce response. // Intermediate global trust information announcement response.
message AnnounceIntermediateResultResponse { message AnnounceIntermediateResultResponse {
// Response to the node's intermediate global trust information announce has // Response to the node's intermediate global trust information announcement has
// an empty body because the trust exchange operation is asynchronous. If // an empty body because the trust exchange operation is asynchronous. If
// Trust information will not pass sanity checks it is silently ignored. // Trust information does not pass sanity checks, it is silently ignored.
message Body { message Body {
} }

View file

@ -7,13 +7,13 @@ option csharp_namespace = "Neo.FileStorage.API.Reputation";
import "refs/types.proto"; import "refs/types.proto";
// NeoFS unique peer identifier is 33 byte long compressed public key of the // NeoFS unique peer identifier is a 33 byte long compressed public key of the
// node, the same as the one stored in the network map. // node, the same as the one stored in the network map.
// //
// String presentation is // String presentation is a
// [base58](https://tools.ietf.org/html/draft-msporny-base58-02) encoded string. // [base58](https://tools.ietf.org/html/draft-msporny-base58-02) encoded string.
// //
// JSON value will be the data encoded as a string using standard base64 // JSON value will be data encoded as a string using standard base64
// encoding with paddings. Either // encoding with paddings. Either
// [standard](https://tools.ietf.org/html/rfc4648#section-4) or // [standard](https://tools.ietf.org/html/rfc4648#section-4) or
// [URL-safe](https://tools.ietf.org/html/rfc4648#section-5) base64 encoding // [URL-safe](https://tools.ietf.org/html/rfc4648#section-5) base64 encoding
@ -43,7 +43,7 @@ message PeerToPeerTrust {
// Global trust level to NeoFS node. // Global trust level to NeoFS node.
message GlobalTrust { message GlobalTrust {
// Message format version. Effectively the version of API library used to create // Message format version. Effectively, the version of API library used to create
// the message. // the message.
neo.fs.v2.refs.Version version = 1 [json_name = "version"]; neo.fs.v2.refs.Version version = 1 [json_name = "version"];
// Message body structure. // Message body structure.

View file

@ -13,7 +13,7 @@ import "session/types.proto";
// attached in requests for further verification. Please see corresponding // attached in requests for further verification. Please see corresponding
// section of NeoFS Technical Specification for details. // section of NeoFS Technical Specification for details.
service SessionService { service SessionService {
// Opens a new session between two peers. // Open a new session between two peers.
// //
// Statuses: // Statuses:
// - **OK** (0, SECTION_SUCCESS): // - **OK** (0, SECTION_SUCCESS):
@ -31,7 +31,7 @@ message CreateRequest {
// Session expiration `Epoch` // Session expiration `Epoch`
uint64 expiration = 2; uint64 expiration = 2;
} }
// Body of create session token request message. // Body of a create session token request message.
Body body = 1; Body body = 1;
// Carries request meta information. Header data is used only to regulate // Carries request meta information. Header data is used only to regulate

View file

@ -117,10 +117,10 @@ message SessionToken {
neo.fs.v2.refs.Signature signature = 2 [json_name = "signature"]; neo.fs.v2.refs.Signature signature = 2 [json_name = "signature"];
} }
// Extended headers for Request/Response. May contain any user-defined headers // Extended headers for Request/Response. They may contain any user-defined headers
// to be interpreted on application level. // to be interpreted on application level.
// //
// Key name must be unique valid UTF-8 string. Value can't be empty. Requests or // Key name must be a unique valid UTF-8 string. Value can't be empty. Requests or
// Responses with duplicated header names or headers with empty values will be // Responses with duplicated header names or headers with empty values will be
// considered invalid. // considered invalid.
// //
@ -133,9 +133,9 @@ message SessionToken {
// current epoch only will be used. // current epoch only will be used.
// * __NEOFS__NETMAP_LOOKUP_DEPTH \ // * __NEOFS__NETMAP_LOOKUP_DEPTH \
// If object can't be found using current epoch's netmap, this header limits // If object can't be found using current epoch's netmap, this header limits
// how many past epochs back the node can lookup. The `value` is string // how many past epochs the node can look up through. The `value` is string
// encoded `uint64` in decimal presentation. If set to '0' or not set, the // encoded `uint64` in decimal presentation. If set to '0' or not set, only the
// current epoch only will be used. // current epoch will be used.
message XHeader { message XHeader {
// Key of the X-Header // Key of the X-Header
string key = 1 [json_name = "key"]; string key = 1 [json_name = "key"];
@ -194,9 +194,9 @@ message ResponseMetaHeader {
neo.fs.v2.status.Status status = 6 [json_name = "status"]; neo.fs.v2.status.Status status = 6 [json_name = "status"];
} }
// Verification info for request signed by all intermediate nodes. // Verification info for the request signed by all intermediate nodes.
message RequestVerificationHeader { message RequestVerificationHeader {
// Request Body signature. Should be generated once by request initiator. // Request Body signature. Should be generated once by the request initiator.
neo.fs.v2.refs.Signature body_signature = 1 [json_name = "bodySignature"]; neo.fs.v2.refs.Signature body_signature = 1 [json_name = "bodySignature"];
// Request Meta signature is added and signed by each intermediate node // Request Meta signature is added and signed by each intermediate node
neo.fs.v2.refs.Signature meta_signature = 2 [json_name = "metaSignature"]; neo.fs.v2.refs.Signature meta_signature = 2 [json_name = "metaSignature"];
@ -207,9 +207,9 @@ message RequestVerificationHeader {
RequestVerificationHeader origin = 4 [json_name = "origin"]; RequestVerificationHeader origin = 4 [json_name = "origin"];
} }
// Verification info for response signed by all intermediate nodes // Verification info for the response signed by all intermediate nodes
message ResponseVerificationHeader { message ResponseVerificationHeader {
// Response Body signature. Should be generated once by answering node. // Response Body signature. Should be generated once by an answering node.
neo.fs.v2.refs.Signature body_signature = 1 [json_name = "bodySignature"]; neo.fs.v2.refs.Signature body_signature = 1 [json_name = "bodySignature"];
// Response Meta signature is added and signed by each intermediate node // Response Meta signature is added and signed by each intermediate node
neo.fs.v2.refs.Signature meta_signature = 2 [json_name = "metaSignature"]; neo.fs.v2.refs.Signature meta_signature = 2 [json_name = "metaSignature"];

View file

@ -23,12 +23,12 @@ option csharp_namespace = "Neo.FileStorage.API.Status";
// //
// All outcomes are divided into successful and failed, which corresponds // All outcomes are divided into successful and failed, which corresponds
// to the success or failure of the operation. The definition of success // to the success or failure of the operation. The definition of success
// follows from the semantics of RPC and the description of its purpose. // follows the semantics of RPC and the description of its purpose.
// The server must not attach code that is the opposite of outcome type. // The server must not attach code that is the opposite of the outcome type.
// //
// See the set of return codes in the description for calls. // See the set of return codes in the description for calls.
// //
// Each status can carry developer-facing error message. It should be human // Each status can carry a developer-facing error message. It should be a human
// readable text in English. The server should not transmit (and the client // readable text in English. The server should not transmit (and the client
// should not expect) useful information in the message. Field `details` // should not expect) useful information in the message. Field `details`
// should make the return more detailed. // should make the return more detailed.

View file

@ -8,8 +8,8 @@ option csharp_namespace = "Neo.FileStorage.API.StorageGroup";
import "refs/types.proto"; import "refs/types.proto";
// StorageGroup keeps verification information for Data Audit sessions. Objects // StorageGroup keeps verification information for Data Audit sessions. Objects
// that require payed storage guaranties are gathered in `StorageGroups` with // that require paid storage guarantees are gathered in `StorageGroups` with
// additional information used for proof of storage. `StorageGroup` only // additional information used for the proof of storage. `StorageGroup` only
// contains objects from the same container. // contains objects from the same container.
message StorageGroup { message StorageGroup {
// Total size of the payloads of objects in the storage group // Total size of the payloads of objects in the storage group

View file

@ -7,17 +7,17 @@ option csharp_namespace = "Neo.FileStorage.API.Tombstone";
import "refs/types.proto"; import "refs/types.proto";
// Tombstone keeps record of deleted objects for few epochs until they are // Tombstone keeps record of deleted objects for a few epochs until they are
// purged from the NeoFS network. // purged from the NeoFS network.
message Tombstone { message Tombstone {
// Last NeoFS epoch number of the tombstone lifetime. It's set by tombstone // Last NeoFS epoch number of the tombstone lifetime. It's set by the tombstone
// creator depending on current NeoFS network settings. Tombstone object // creator depending on the current NeoFS network settings. A tombstone object
// must have the same expiration epoch value in `__NEOFS__EXPIRATION_EPOCH` // must have the same expiration epoch value in `__NEOFS__EXPIRATION_EPOCH`
// attribute. Otherwise tombstone will be rejected by storage node. // attribute. Otherwise, the tombstone will be rejected by a storage node.
uint64 expiration_epoch = 1 [json_name = "expirationEpoch"]; uint64 expiration_epoch = 1 [json_name = "expirationEpoch"];
// 16 byte UUID used to identify the split object hierarchy parts. Must be // 16 byte UUID used to identify the split object hierarchy parts. Must be
// unique inside container. All objects participating in the split must // unique inside a container. All objects participating in the split must
// have the same `split_id` value. // have the same `split_id` value.
bytes split_id = 2 [json_name = "splitID"]; bytes split_id = 2 [json_name = "splitID"];