syntax = "proto3"; package object.v2; option go_package = "github.com/nspcc-dev/neofs-api-go/object/v2"; option csharp_namespace = "NeoFS.API.Object"; import "refs/v2/types.proto"; import "service/v2/meta.proto"; import "service/v2/verify.proto"; // Type of the object payload content enum ObjectType { // Just a normal object REGULAR = 0; // Used internally to identify deleted objects TOMBSTONE = 1; // Identifies that the object holds StorageGroup information STORAGE_GROUP = 2; } message Header { // Object's container refs.v2.ContainerID container_id = 1; // Object's owner refs.v2.OwnerID owner_id = 2; // Epoch when the object was created uint64 creation_epoch = 3; // Object format version. // Effectively the version of API library used to create particular object service.v2.Version version = 4; // Size of payload in bytes. // 0xFFFFFFFFFFFFFFFF means `payload_length` is unknown uint64 payload_length = 5; // Hash of payload bytes bytes payload_hash = 6; ObjectType object_type = 7; // Homomorphic hash of the object payload. bytes homomorphic_hash = 8; // Session token, if it was used during Object creation. // Need it to verify integrity and authenticity out of Request scope. service.v2.SessionToken session_token = 9; // Attribute groups the user-defined Key-Value pairs attached to the object message Attribute { // string key to the object attribute string key = 1; // string value of the object attribute string value = 2; } repeated Attribute attributes = 10; // Information about spawning the objects through a payload splitting. message Split { // Identifier of the origin object.v2. // Parent and children objects must be within the same container.v2. // Parent object_id is known only to the minor child. refs.v2.ObjectID parent = 1; // Previous carries identifier of the left split neighbor. refs.v2.ObjectID previous = 2; // `signature` field of the parent object.v2. Used to reconstruct parent. service.v2.Signature parent_signature = 3; // `header` field of the parent object.v2. Used to reconstruct parent. Header parent_header = 4; // Children carries list of identifiers of the objects generated by splitting the current. repeated refs.v2.ObjectID children = 5; } // Position of the object in the split hierarchy. Split split = 11; } // Object structure. message Object { // Object's unique identifier. // Object is content-addressed. It means id will change if header or payload // changes. It's calculated as a hash of header field, which contains hash of // object's payload refs.v2.ObjectID object_id = 1; // Signed object_id service.v2.Signature signature = 2; // Object metadata headers Header header = 3; // Payload bytes. bytes payload = 4; }