frostfs-api/proto-docs/refs.md
Ori Bruk b0df4dfc4d
All checks were successful
Formatters / Run fmt (pull_request) Successful in 25s
Pre-commit hooks / Pre-commit (pull_request) Successful in 36s
DCO action / DCO (pull_request) Successful in 42s
[#68] Remove unnecessary language options.
Change proto package path.

Signed-off-by: Ori Bruk <o.bruk@yadro.com>
2024-11-05 16:52:48 +03:00

8.1 KiB

Protocol Documentation

Table of Contents

Top

refs/types.proto

Message Address

Objects in FrostFS are addressed by their ContainerID and ObjectID.

String presentation of Address is a concatenation of string encoded ContainerID and ObjectID delimited by '/' character.

Field Type Label Description
container_id ContainerID Container identifier
object_id ObjectID Object identifier

Message Checksum

Checksum message. Depending on checksum algorithm type, the string presentation may vary:

  • TZ
    Hex encoded string without 0x prefix
  • SHA256
    Hex encoded string without 0x prefix
Field Type Label Description
type ChecksumType Checksum algorithm type
sum bytes Checksum itself

Message ContainerID

FrostFS container identifier. Container structures are immutable and content-addressed.

ContainerID is a 32 byte long SHA256 hash of stable-marshalled container message.

String presentation is a base58 encoded string.

JSON value will be data encoded as a string using standard base64 encoding with paddings. Either standard or URL-safe base64 encoding with/without paddings are accepted.

Field Type Label Description
value bytes Container identifier in a binary format.

Message ObjectID

FrostFS Object unique identifier. Objects are immutable and content-addressed. It means ObjectID will change if the header or the payload changes.

ObjectID is a 32 byte long SHA256 hash of the object's header field, which, in it's turn, contains the hash of the object's payload.

String presentation is a base58 encoded string.

JSON value will be data encoded as a string using standard base64 encoding with paddings. Either standard or URL-safe base64 encoding with/without paddings are accepted.

Field Type Label Description
value bytes Object identifier in a binary format

Message OwnerID

OwnerID is a derivative of a user's main public key. The transformation algorithm is the same as for Neo3 wallet addresses. Neo3 wallet address can be directly used as OwnerID.

OwnerID is a 25 bytes sequence starting with Neo version prefix byte followed by 20 bytes of ScrptHash and 4 bytes of checksum.

String presentation is a Base58 Check Encoded string.

JSON value will be data encoded as a string using standard base64 encoding with paddings. Either standard or URL-safe base64 encoding with/without paddings are accepted.

Field Type Label Description
value bytes Identifier of the container owner in a binary format

Message Signature

Signature of something in FrostFS.

Field Type Label Description
key bytes Public key used for signing
sign bytes Signature
scheme SignatureScheme Scheme contains digital signature scheme identifier

Message SignatureRFC6979

RFC 6979 signature.

Field Type Label Description
key bytes Public key used for signing
sign bytes Deterministic ECDSA with SHA-256 hashing

Message Version

API version used by a node.

String presentation is a Semantic Versioning 2.0.0 compatible version string with 'v' prefix. i.e. vX.Y, where X is the major number, Y is the minor number.

Field Type Label Description
major uint32 Major API version
minor uint32 Minor API version

ChecksumType

Checksum algorithm type.

Name Number Description
CHECKSUM_TYPE_UNSPECIFIED 0 Unknown. Not used
TZ 1 Tillich-Zemor homomorphic hash function
SHA256 2 SHA-256

SignatureScheme

Signature scheme describes digital signing scheme used for (key, signature) pair.

Name Number Description
ECDSA_SHA512 0 ECDSA with SHA-512 hashing (FIPS 186-3)
ECDSA_RFC6979_SHA256 1 Deterministic ECDSA with SHA-256 hashing (RFC 6979)
ECDSA_RFC6979_SHA256_WALLET_CONNECT 2 Deterministic ECDSA with SHA-256 hashing using WalletConnect API. Here the algorithm is the same, but the message format differs.

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