frostfs-api/proto-docs/container.md
Stanislav Bogatyrev 4e908a17b1 [#50] Add version fields where it makes sense
Some pieces of data (container, object, etc) may be stored for a long time and
there will be a need in the future to understand which obscure format from the
past was used to create it.

Signed-off-by: Stanislav Bogatyrev <stanislav@nspcc.ru>
2020-08-17 12:12:30 +03:00

22 KiB

Protocol Documentation

Table of Contents

Top

container/service.proto

Service "neo.fs.v2.container.ContainerService"

ContainerService provides API to access container smart-contract in morph chain via NeoFS node.

rpc Put(PutRequest) returns (PutResponse);
rpc Delete(DeleteRequest) returns (DeleteResponse);
rpc Get(GetRequest) returns (GetResponse);
rpc List(ListRequest) returns (ListResponse);
rpc SetExtendedACL(SetExtendedACLRequest) returns (SetExtendedACLResponse);
rpc GetExtendedACL(GetExtendedACLRequest) returns (GetExtendedACLResponse);

Method Put

Put invokes 'Put' method in container smart-contract and returns response immediately. After new block in morph chain, request is verified by inner ring nodes. After one more block in morph chain, container added into smart-contract storage.

Name Input Output
Put PutRequest PutResponse

Method Delete

Delete invokes 'Delete' method in container smart-contract and returns response immediately. After new block in morph chain, request is verified by inner ring nodes. After one more block in morph chain, container removed from smart-contract storage.

Name Input Output
Delete DeleteRequest DeleteResponse

Method Get

Get returns container from container smart-contract storage.

Name Input Output
Get GetRequest GetResponse

Method List

List returns all owner's containers from container smart-contract storage.

Name Input Output
List ListRequest ListResponse

Method SetExtendedACL

SetExtendedACL invokes 'SetEACL' method in container smart-contract and returns response immediately. After new block in morph chain, Extended ACL added into smart-contract storage.

Name Input Output
SetExtendedACL SetExtendedACLRequest SetExtendedACLResponse

Method GetExtendedACL

GetExtendedACL returns Extended ACL table and signature from container smart-contract storage.

Name Input Output
GetExtendedACL GetExtendedACLRequest GetExtendedACLResponse

Message DeleteRequest

Container removal request

Field Type Label Description
body DeleteRequest.Body Body of container delete request message.
meta_header neo.fs.v2.service.RequestMetaHeader Carries request meta information. Header data is used only to regulate message transport and does not affect request execution.
verify_header neo.fs.v2.service.RequestVerificationHeader Carries request verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission.

Message DeleteRequest.Body

Request body

Field Type Label Description
container_id neo.fs.v2.refs.ContainerID container_id carries identifier of the container to delete from NeoFS.
signature bytes Signature of container id according to RFC-6979.

Message DeleteResponse

DeleteResponse is empty because delete operation is asynchronous and done via consensus in inner ring nodes

Field Type Label Description
body DeleteResponse.Body Body of container delete response message.
meta_header neo.fs.v2.service.ResponseMetaHeader Carries response meta information. Header data is used only to regulate message transport and does not affect request execution.
verify_header neo.fs.v2.service.ResponseVerificationHeader Carries response verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission.

Message DeleteResponse.Body

Response body

Message GetExtendedACLRequest

Get Extended ACL

Field Type Label Description
body GetExtendedACLRequest.Body Body of get extended acl request message.
meta_header neo.fs.v2.service.RequestMetaHeader Carries request meta information. Header data is used only to regulate message transport and does not affect request execution.
verify_header neo.fs.v2.service.RequestVerificationHeader Carries request verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission.

Message GetExtendedACLRequest.Body

Request body

Field Type Label Description
container_id neo.fs.v2.refs.ContainerID container_id carries identifier of the container that has Extended ACL.

Message GetExtendedACLResponse

Get Extended ACL

Field Type Label Description
body GetExtendedACLResponse.Body Body of get extended acl response message.
meta_header neo.fs.v2.service.ResponseMetaHeader Carries response meta information. Header data is used only to regulate message transport and does not affect request execution.
verify_header neo.fs.v2.service.ResponseVerificationHeader Carries response verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission.

Message GetExtendedACLResponse.Body

Response body

Field Type Label Description
eacl neo.fs.v2.acl.EACLTable Extended ACL that has been requested if it was set up.
signature bytes Signature of stable-marshalled Extended ACL according to RFC-6979.

Message GetRequest

Get container structure

Field Type Label Description
body GetRequest.Body Body of container get request message.
meta_header neo.fs.v2.service.RequestMetaHeader Carries request meta information. Header data is used only to regulate message transport and does not affect request execution.
verify_header neo.fs.v2.service.RequestVerificationHeader Carries request verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission.

Message GetRequest.Body

Request body

Field Type Label Description
container_id neo.fs.v2.refs.ContainerID container_id carries identifier of the container to get.

Message GetResponse

Get container structure

Field Type Label Description
body GetResponse.Body Body of container get response message.
meta_header neo.fs.v2.service.ResponseMetaHeader Carries response meta information. Header data is used only to regulate message transport and does not affect request execution.
verify_header neo.fs.v2.service.ResponseVerificationHeader Carries response verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission.

Message GetResponse.Body

Response body

Field Type Label Description
container Container Container that has been requested.

Message ListRequest

List containers

Field Type Label Description
body ListRequest.Body Body of list containers request message.
meta_header neo.fs.v2.service.RequestMetaHeader Carries request meta information. Header data is used only to regulate message transport and does not affect request execution.
verify_header neo.fs.v2.service.RequestVerificationHeader Carries request verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission.

Message ListRequest.Body

Request body

Field Type Label Description
owner_id neo.fs.v2.refs.OwnerID owner_id carries identifier of the container owner.

Message ListResponse

List containers

Field Type Label Description
body ListResponse.Body Body of list containers response message.
meta_header neo.fs.v2.service.ResponseMetaHeader Carries response meta information. Header data is used only to regulate message transport and does not affect request execution.
verify_header neo.fs.v2.service.ResponseVerificationHeader Carries response verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission.

Message ListResponse.Body

Response body

Field Type Label Description
container_ids neo.fs.v2.refs.ContainerID repeated ContainerIDs carries list of identifiers of the containers that belong to the owner.

Message PutRequest

New NeoFS Container creation request

Field Type Label Description
body PutRequest.Body Body of container put request message.
meta_header neo.fs.v2.service.RequestMetaHeader Carries request meta information. Header data is used only to regulate message transport and does not affect request execution.
verify_header neo.fs.v2.service.RequestVerificationHeader Carries request verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission.

Message PutRequest.Body

Request body

Field Type Label Description
container Container Container to create in NeoFS.
public_key bytes Public Key of container owner. It can be public key of the owner or it can be public key that bound in neofs.id smart-contract.
signature bytes Signature of stable-marshalled container according to RFC-6979.

Message PutResponse

New NeoFS Container creation response

Field Type Label Description
body PutResponse.Body Body of container put response message.
meta_header neo.fs.v2.service.ResponseMetaHeader Carries response meta information. Header data is used only to regulate message transport and does not affect request execution.
verify_header neo.fs.v2.service.ResponseVerificationHeader Carries response verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission.

Message PutResponse.Body

Response body

Field Type Label Description
container_id neo.fs.v2.refs.ContainerID container_id carries identifier of the new container.

Message SetExtendedACLRequest

Set Extended ACL

Field Type Label Description
body SetExtendedACLRequest.Body Body of set extended acl request message.
meta_header neo.fs.v2.service.RequestMetaHeader Carries request meta information. Header data is used only to regulate message transport and does not affect request execution.
verify_header neo.fs.v2.service.RequestVerificationHeader Carries request verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission.

Message SetExtendedACLRequest.Body

Request body

Field Type Label Description
eacl neo.fs.v2.acl.EACLTable Extended ACL to set for the container.
signature bytes Signature of stable-marshalled Extended ACL according to RFC-6979.

Message SetExtendedACLResponse

Set Extended ACL

Field Type Label Description
body SetExtendedACLResponse.Body Body of set extended acl response message.
meta_header neo.fs.v2.service.ResponseMetaHeader Carries response meta information. Header data is used only to regulate message transport and does not affect request execution.
verify_header neo.fs.v2.service.ResponseVerificationHeader Carries response verification information. This header is used to authenticate the nodes of the message route and check the correctness of transmission.

Message SetExtendedACLResponse.Body

Response body

Top

container/types.proto

Message Container

Container is a structure that defines object placement behaviour. Objects can 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 of stable-marshalled container message.

Field Type Label Description
version neo.fs.v2.service.Version Container format version. Effectively the version of API library used to create container
owner_id neo.fs.v2.refs.OwnerID OwnerID carries identifier of the container owner.
nonce bytes Nonce is a 16 byte UUID, used to avoid collisions of container id.
basic_acl uint32 BasicACL contains access control rules for owner, system, others groups and permission bits for bearer token and Extended ACL.
attributes Container.Attribute repeated Attributes define any immutable characteristics of container.
placement_policy neo.fs.v2.netmap.PlacementPolicy Placement policy for the object inside the container.

Message Container.Attribute

Attribute is a key-value pair of strings.

Field Type Label Description
key string Key of immutable container attribute.
value string Value of immutable container attribute.

Scalar Value Types

.proto Type Notes C++ Type Java Type Python Type
double double double float
float float float float
int32 Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. int32 int int
int64 Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. int64 long int/long
uint32 Uses variable-length encoding. uint32 int int/long
uint64 Uses variable-length encoding. uint64 long int/long
sint32 Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. int32 int int
sint64 Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. int64 long int/long
fixed32 Always four bytes. More efficient than uint32 if values are often greater than 2^28. uint32 int int
fixed64 Always eight bytes. More efficient than uint64 if values are often greater than 2^56. uint64 long int/long
sfixed32 Always four bytes. int32 int int
sfixed64 Always eight bytes. int64 long int/long
bool bool boolean boolean
string A string must always contain UTF-8 encoded or 7-bit ASCII text. string String str/unicode
bytes May contain any arbitrary sequence of bytes. string ByteString str