2020-01-30 11:41:24 +00:00
# Protocol Documentation
< a name = "top" > < / a >
## Table of Contents
2024-03-05 09:36:58 +00:00
- [refs/types.proto ](#refs/types.proto )
- Messages
2024-11-05 13:52:48 +00:00
- [Address ](#frost.fs.refs.Address )
- [Checksum ](#frost.fs.refs.Checksum )
- [ContainerID ](#frost.fs.refs.ContainerID )
- [ObjectID ](#frost.fs.refs.ObjectID )
- [OwnerID ](#frost.fs.refs.OwnerID )
- [Signature ](#frost.fs.refs.Signature )
- [SignatureRFC6979 ](#frost.fs.refs.SignatureRFC6979 )
- [Version ](#frost.fs.refs.Version )
2024-09-02 12:03:58 +00:00
2024-03-05 09:36:58 +00:00
- [Scalar Value Types ](#scalar-value-types )
2020-01-30 11:41:24 +00:00
< a name = "refs/types.proto" > < / a >
< p align = "right" > < a href = "#top" > Top< / a > < / p >
## refs/types.proto
<!-- end services -->
2024-11-05 13:52:48 +00:00
< a name = "frost.fs.refs.Address" > < / a >
2020-01-30 11:41:24 +00:00
### Message Address
2024-09-05 13:27:53 +00:00
Objects in FrostFS are addressed by their ContainerID and ObjectID.
2020-12-11 07:20:21 +00:00
2022-06-21 11:32:14 +00:00
String presentation of `Address` is a concatenation of string encoded
2020-12-11 07:20:21 +00:00
`ContainerID` and `ObjectID` delimited by '/' character.
2020-01-30 11:41:24 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2024-11-05 13:52:48 +00:00
| container_id | [ContainerID ](#frost.fs.refs.ContainerID ) | | Container identifier |
| object_id | [ObjectID ](#frost.fs.refs.ObjectID ) | | Object identifier |
2020-01-30 11:41:24 +00:00
2020-08-04 12:52:14 +00:00
2024-11-05 13:52:48 +00:00
< a name = "frost.fs.refs.Checksum" > < / a >
2020-08-18 15:41:25 +00:00
### Message Checksum
2020-10-16 11:40:12 +00:00
Checksum message.
2022-06-21 11:32:14 +00:00
Depending on checksum algorithm type, the string presentation may vary:
2020-12-11 07:20:21 +00:00
* TZ \
Hex encoded string without `0x` prefix
* SHA256 \
Hex encoded string without `0x` prefix
2020-08-18 15:41:25 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2024-11-05 13:52:48 +00:00
| type | [ChecksumType ](#frost.fs.refs.ChecksumType ) | | Checksum algorithm type |
2020-08-18 15:41:25 +00:00
| sum | [bytes ](#bytes ) | | Checksum itself |
2024-11-05 13:52:48 +00:00
< a name = "frost.fs.refs.ContainerID" > < / a >
2020-08-05 14:39:57 +00:00
### Message ContainerID
2024-09-05 13:27:53 +00:00
FrostFS container identifier. Container structures are immutable and
2020-12-11 07:20:21 +00:00
content-addressed.
2020-12-25 12:16:10 +00:00
`ContainerID` is a 32 byte long
[SHA256 ](https://csrc.nist.gov/publications/detail/fips/180/4/final ) hash of
stable-marshalled container message.
2020-12-11 07:20:21 +00:00
2022-06-21 11:32:14 +00:00
String presentation is a
2020-12-25 12:16:10 +00:00
[base58 ](https://tools.ietf.org/html/draft-msporny-base58-02 ) encoded string.
2022-06-21 11:32:14 +00:00
JSON value will be data encoded as a string using standard base64
2020-12-25 12:16:10 +00:00
encoding with paddings. Either
[standard ](https://tools.ietf.org/html/rfc4648#section-4 ) or
[URL-safe ](https://tools.ietf.org/html/rfc4648#section-5 ) base64 encoding
with/without paddings are accepted.
2020-08-05 14:39:57 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-10-16 11:40:12 +00:00
| value | [bytes ](#bytes ) | | Container identifier in a binary format. |
2020-08-05 14:39:57 +00:00
2024-11-05 13:52:48 +00:00
< a name = "frost.fs.refs.ObjectID" > < / a >
2020-08-04 12:52:14 +00:00
### Message ObjectID
2024-09-05 13:27:53 +00:00
FrostFS Object unique identifier. Objects are immutable and
content-addressed. It means `ObjectID` will change if the `header` or the
`payload` changes.
2020-12-11 07:20:21 +00:00
2020-12-25 12:16:10 +00:00
`ObjectID` is a 32 byte long
[SHA256 ](https://csrc.nist.gov/publications/detail/fips/180/4/final ) hash of
2024-03-05 09:36:58 +00:00
the object's `header` field, which, in it's turn, contains the hash of the
object's payload.
2020-12-25 12:16:10 +00:00
2022-06-21 11:32:14 +00:00
String presentation is a
2020-12-25 12:16:10 +00:00
[base58 ](https://tools.ietf.org/html/draft-msporny-base58-02 ) encoded string.
2020-12-11 07:20:21 +00:00
2022-06-21 11:32:14 +00:00
JSON value will be data encoded as a string using standard base64
2020-12-25 12:16:10 +00:00
encoding with paddings. Either
[standard ](https://tools.ietf.org/html/rfc4648#section-4 ) or
[URL-safe ](https://tools.ietf.org/html/rfc4648#section-5 ) base64 encoding
with/without paddings are accepted.
2020-08-04 12:52:14 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-10-16 11:40:12 +00:00
| value | [bytes ](#bytes ) | | Object identifier in a binary format |
2020-08-04 12:52:14 +00:00
2020-08-05 15:11:00 +00:00
2024-11-05 13:52:48 +00:00
< a name = "frost.fs.refs.OwnerID" > < / a >
2020-08-05 15:11:00 +00:00
### Message OwnerID
2020-12-11 07:20:21 +00:00
`OwnerID` is a derivative of a user's main public key. The transformation
2020-10-16 11:40:12 +00:00
algorithm is the same as for Neo3 wallet addresses. Neo3 wallet address can
be directly used as `OwnerID` .
2020-08-05 15:11:00 +00:00
2020-12-11 07:20:21 +00:00
`OwnerID` is a 25 bytes sequence starting with Neo version prefix byte
followed by 20 bytes of ScrptHash and 4 bytes of checksum.
2022-06-21 11:32:14 +00:00
String presentation is a [Base58
2020-12-25 12:16:10 +00:00
Check](https://en.bitcoin.it/wiki/Base58Check_encoding) Encoded string.
2022-06-21 11:32:14 +00:00
JSON value will be data encoded as a string using standard base64
2020-12-25 12:16:10 +00:00
encoding with paddings. Either
[standard ](https://tools.ietf.org/html/rfc4648#section-4 ) or
[URL-safe ](https://tools.ietf.org/html/rfc4648#section-5 ) base64 encoding
with/without paddings are accepted.
2020-12-11 07:20:21 +00:00
2020-08-05 15:11:00 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-10-16 11:40:12 +00:00
| value | [bytes ](#bytes ) | | Identifier of the container owner in a binary format |
2020-08-05 15:11:00 +00:00
2020-08-18 13:51:28 +00:00
2024-11-05 13:52:48 +00:00
< a name = "frost.fs.refs.Signature" > < / a >
2020-08-18 13:51:28 +00:00
### Message Signature
2024-09-05 13:27:53 +00:00
Signature of something in FrostFS.
2020-08-18 13:51:28 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-10-16 11:40:12 +00:00
| key | [bytes ](#bytes ) | | Public key used for signing |
2020-08-18 13:51:28 +00:00
| sign | [bytes ](#bytes ) | | Signature |
2024-11-05 13:52:48 +00:00
| scheme | [SignatureScheme ](#frost.fs.refs.SignatureScheme ) | | Scheme contains digital signature scheme identifier |
2022-03-02 09:30:05 +00:00
2024-11-05 13:52:48 +00:00
< a name = "frost.fs.refs.SignatureRFC6979" > < / a >
2022-03-02 09:30:05 +00:00
### Message SignatureRFC6979
RFC 6979 signature.
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| key | [bytes ](#bytes ) | | Public key used for signing |
| sign | [bytes ](#bytes ) | | Deterministic ECDSA with SHA-256 hashing |
2020-08-18 13:51:28 +00:00
2024-11-05 13:52:48 +00:00
< a name = "frost.fs.refs.Version" > < / a >
2020-08-18 13:51:28 +00:00
### Message Version
2020-10-16 11:40:12 +00:00
API version used by a node.
2020-08-18 13:51:28 +00:00
2020-12-11 07:20:21 +00:00
String presentation is a Semantic Versioning 2.0.0 compatible version string
2024-03-05 09:36:58 +00:00
with 'v' prefix. i.e. `vX.Y` , where `X` is the major number, `Y` is the minor
number.
2020-12-11 07:20:21 +00:00
2020-08-18 13:51:28 +00:00
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
2020-10-16 11:40:12 +00:00
| major | [uint32 ](#uint32 ) | | Major API version |
| minor | [uint32 ](#uint32 ) | | Minor API version |
2020-08-18 13:51:28 +00:00
2020-01-30 11:41:24 +00:00
<!-- end messages -->
2020-08-18 15:41:25 +00:00
2024-11-05 13:52:48 +00:00
< a name = "frost.fs.refs.ChecksumType" > < / a >
2020-08-18 15:41:25 +00:00
### ChecksumType
2020-10-16 11:40:12 +00:00
Checksum algorithm type.
2020-08-18 15:41:25 +00:00
| Name | Number | Description |
| ---- | ------ | ----------- |
| CHECKSUM_TYPE_UNSPECIFIED | 0 | Unknown. Not used |
2020-10-16 11:40:12 +00:00
| TZ | 1 | Tillich-Zemor homomorphic hash function |
2020-08-18 15:41:25 +00:00
| SHA256 | 2 | SHA-256 |
2022-02-07 12:46:39 +00:00
2024-11-05 13:52:48 +00:00
< a name = "frost.fs.refs.SignatureScheme" > < / a >
2022-02-07 12:46:39 +00:00
### SignatureScheme
2024-03-05 09:36:58 +00:00
Signature scheme describes digital signing scheme used for (key, signature)
pair.
2022-02-07 12:46:39 +00:00
| Name | Number | Description |
| ---- | ------ | ----------- |
2022-03-02 09:30:05 +00:00
| ECDSA_SHA512 | 0 | ECDSA with SHA-512 hashing (FIPS 186-3) |
| ECDSA_RFC6979_SHA256 | 1 | Deterministic ECDSA with SHA-256 hashing (RFC 6979) |
2022-06-21 11:32:14 +00:00
| 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. |
2022-02-07 12:46:39 +00:00
2020-01-30 11:41:24 +00:00
<!-- end enums -->
## Scalar Value Types
| .proto Type | Notes | C++ Type | Java Type | Python Type |
| ----------- | ----- | -------- | --------- | ----------- |
| < a name = "double" / > double | | double | double | float |
| < a name = "float" / > float | | float | float | float |
| < a name = "int32" / > 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 |
| < a name = "int64" / > 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 |
| < a name = "uint32" / > uint32 | Uses variable-length encoding. | uint32 | int | int/long |
| < a name = "uint64" / > uint64 | Uses variable-length encoding. | uint64 | long | int/long |
| < a name = "sint32" / > sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int |
| < a name = "sint64" / > sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long |
| < a name = "fixed32" / > fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int |
| < a name = "fixed64" / > fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long |
| < a name = "sfixed32" / > sfixed32 | Always four bytes. | int32 | int | int |
| < a name = "sfixed64" / > sfixed64 | Always eight bytes. | int64 | long | int/long |
| < a name = "bool" / > bool | | bool | boolean | boolean |
| < a name = "string" / > string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode |
| < a name = "bytes" / > bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str |