frostfs-api/proto-docs/container.md
Leonard Lyubich 12dd5e07ba container: Tidy up the format
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2020-08-06 23:45:50 +03:00

10 KiB

Protocol Documentation

Table of Contents

Top

container/service.proto

Service "container.Service"

Service 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

Field Type Label Description
ContainerID refs.ContainerID ContainerID 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

Message GetExtendedACLRequest

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

Message GetExtendedACLResponse

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

Message GetRequest

Field Type Label Description
ContainerID refs.ContainerID ContainerID carries identifier of the container to get.

Message GetResponse

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

Message ListRequest

Field Type Label Description
OwnerID refs.OwnerID OwnerID carries identifier of the container owner.

Message ListResponse

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

Message PutRequest

Field Type Label Description
Container Container Container to create in NeoFS.
PublicKey bytes PublicKey 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

Field Type Label Description
ContainerID refs.ContainerID ContainerID carries identifier of the new container.

Message SetExtendedACLRequest

Field Type Label Description
EACL acl.EACLTable EACL to set for the container.
Signature bytes Signature of stable-marshalled Extended ACL according to RFC-6979.

Message SetExtendedACLResponse

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
OwnerID refs.OwnerID OwnerID carries identifier of the container owner.
Nonce bytes Nonce is a 16 byte UUID, used to avoid collisions of container id.
BasicACL 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.
Rules netmap.PlacementRule Rules define storage 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