# Protocol Documentation ## Table of Contents - [container/service.proto](#container/service.proto) - Services - [Service](#container.Service) - Messages - [DeleteRequest](#container.DeleteRequest) - [DeleteResponse](#container.DeleteResponse) - [GetExtendedACLRequest](#container.GetExtendedACLRequest) - [GetExtendedACLResponse](#container.GetExtendedACLResponse) - [GetRequest](#container.GetRequest) - [GetResponse](#container.GetResponse) - [ListRequest](#container.ListRequest) - [ListResponse](#container.ListResponse) - [PutRequest](#container.PutRequest) - [PutResponse](#container.PutResponse) - [SetExtendedACLRequest](#container.SetExtendedACLRequest) - [SetExtendedACLResponse](#container.SetExtendedACLResponse) - [container/types.proto](#container/types.proto) - Messages - [Attribute](#container.Attribute) - [Container](#container.Container) - [Scalar Value Types](#scalar-value-types)
## 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](#container.PutRequest) | [PutResponse](#container.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](#container.DeleteRequest) | [DeleteResponse](#container.DeleteResponse) | #### Method Get Get returns container from container smart-contract storage. | Name | Input | Output | | ---- | ----- | ------ | | Get | [GetRequest](#container.GetRequest) | [GetResponse](#container.GetResponse) | #### Method List List returns all owner's containers from container smart-contract storage. | Name | Input | Output | | ---- | ----- | ------ | | List | [ListRequest](#container.ListRequest) | [ListResponse](#container.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](#container.SetExtendedACLRequest) | [SetExtendedACLResponse](#container.SetExtendedACLResponse) | #### Method GetExtendedACL GetExtendedACL returns Extended ACL table and signature from container smart-contract storage. | Name | Input | Output | | ---- | ----- | ------ | | GetExtendedACL | [GetExtendedACLRequest](#container.GetExtendedACLRequest) | [GetExtendedACLResponse](#container.GetExtendedACLResponse) | ### Message DeleteRequest | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | ContainerID | [refs.ContainerID](#refs.ContainerID) | | ContainerID carries identifier of the container to delete from NeoFS. | | Signature | [bytes](#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](#refs.ContainerID) | | ContainerID carries identifier of the container that has Extended ACL. | ### Message GetExtendedACLResponse | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | EACL | [acl.EACLTable](#acl.EACLTable) | | EACL that has been requested if it was set up. | | Signature | [bytes](#bytes) | | Signature of stable-marshalled Extended ACL according to RFC-6979. | ### Message GetRequest | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | ContainerID | [refs.ContainerID](#refs.ContainerID) | | ContainerID carries identifier of the container to get. | ### Message GetResponse | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | Container | [Container](#container.Container) | | Container that has been requested. | ### Message ListRequest | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | OwnerID | [refs.OwnerID](#refs.OwnerID) | | OwnerID carries identifier of the container owner. | ### Message ListResponse | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | ContainerIDs | [refs.ContainerID](#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.Container) | | Container to create in NeoFS. | | PublicKey | [bytes](#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](#bytes) | | Signature of stable-marshalled container according to RFC-6979. | ### Message PutResponse | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | ContainerID | [refs.ContainerID](#refs.ContainerID) | | ContainerID carries identifier of the new container. | ### Message SetExtendedACLRequest | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | EACL | [acl.EACLTable](#acl.EACLTable) | | EACL to set for the container. | | Signature | [bytes](#bytes) | | Signature of stable-marshalled Extended ACL according to RFC-6979. | ### Message SetExtendedACLResponse ## container/types.proto ### Message Attribute Attribute is a key-value pair of strings. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | Key | [string](#string) | | Key of immutable container attribute. | | Value | [string](#string) | | Value of immutable container attribute. | ### 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](#refs.OwnerID) | | OwnerID carries identifier of the container owner. | | Nonce | [bytes](#bytes) | | Nonce is a 16 byte UUID, used to avoid collisions of container id. | | BasicACL | [uint32](#uint32) | | BasicACL contains access control rules for owner, system, others groups and permission bits for bearer token and Extended ACL. | | Attributes | [Attribute](#container.Attribute) | repeated | Attributes define any immutable characteristics of container. | | Rules | [netmap.PlacementRule](#netmap.PlacementRule) | | Rules define storage policy for the object inside the container. | ## 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 |