Skip to main content

FileCreateTransactionBody

Struct FileCreateTransactionBody 

Source
pub struct FileCreateTransactionBody {
    pub expiration_time: Option<Timestamp>,
    pub keys: Option<KeyList>,
    pub contents: Vec<u8>,
    pub shard_id: Option<ShardId>,
    pub realm_id: Option<RealmId>,
    pub new_realm_admin_key: Option<Key>,
    pub memo: String,
}
Expand description

Create a new file.

If successful, the new file SHALL contain the (possibly empty) content provided in the contents field.
When the current consensus time exceeds the expirationTime value, the network SHALL expire the file, and MAY archive the state entry.

§Signature Requirements

The HFS manages file authorization in a manner that can be confusing. The core element of file authorization is the keys field, which is a KeyList; a list of individual Key messages, each of which may represent a simple or complex key.
The file service transactions treat this list differently.
A fileCreate, fileAppend, or fileUpdate MUST have a valid signature from each key in the list.
A fileDelete MUST have a valid signature from at least one key in the list. This is different, and allows a file “owned” by many entities to be deleted by any one of those entities. A deleted file cannot be restored, so it is important to consider this when assigning keys for a file.
If any of the keys in a KeyList are complex, the full requirements of each complex key must be met to count as a “valid signature” for that key. A complex key structure (i.e. a ThresholdKey, or KeyList, possibly including additional ThresholdKey or KeyList descendants) may be assigned as the sole entry in a file keys field to ensure all transactions have the same signature requirements.

If the keys field is an empty KeyList, then the file SHALL be immutable and the only transaction permitted to modify that file SHALL be a fileUpdate transaction with only the expirationTime set.

§Shard and Realm

The current API ignores shardID and realmID. All files are created in shard 0 and realm 0. Future versions of the API may support multiple realms and multiple shards.

§Block Stream Effects

After the file is created, the FileID for it SHALL be returned in the transaction receipt, and SHALL be recorded in the transaction record.

Fields§

§expiration_time: Option<Timestamp>

An expiration timestamp.

When the network consensus time exceeds this value, the network SHALL expire the file.

§keys: Option<KeyList>

A list of keys that represent file “owners”.

Every `Key` in this list MUST sign this `fileCreate` transaction, as well as any `fileUpdate` or `fileAppend` that modifies this file.
At least one `Key` in this list MUST sign any `fileDelete` transaction to delete this file.
If this `KeyList` is empty, the file SHALL be created immutable and the only field that may be changed subsequently is the `expirationTime`. An immutable file cannot be deleted except with a `systemDelete` transaction, or by expiration.

§contents: Vec<u8>

A byte array of file content.

The file SHALL be created with initial content equal to this field.

§shard_id: Option<ShardId>

A shard in which this file is created

§realm_id: Option<RealmId>

A realm in which this file is created.

The shard number for this realm MUST match the value in `shardID`.
Currently, this MUST be `0` for both fields.
If the desired realm is `0.0`, this SHOULD NOT be set.

§new_realm_admin_key: Option<Key>
👎Deprecated

The “create realm” was never enabled, and should not be possible on file creation.
An admin key for a new realm, if one is created. Added deprecated tag 2024-05.

§memo: String

A short description of this file.

This value, if set, MUST NOT exceed `transaction.maxMemoUtf8Bytes` (default 100) bytes when encoded as UTF-8.

Trait Implementations§

Source§

impl Clone for FileCreateTransactionBody

Source§

fn clone(&self) -> FileCreateTransactionBody

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for FileCreateTransactionBody

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for FileCreateTransactionBody

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Message for FileCreateTransactionBody

Source§

fn encoded_len(&self) -> usize

Returns the encoded length of the message without a length delimiter.
Source§

fn clear(&mut self)

Clears the message, resetting all fields to their default.
Source§

fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>
where Self: Sized,

Encodes the message to a buffer. Read more
Source§

fn encode_to_vec(&self) -> Vec<u8>
where Self: Sized,

Encodes the message to a newly allocated buffer.
Source§

fn encode_length_delimited( &self, buf: &mut impl BufMut, ) -> Result<(), EncodeError>
where Self: Sized,

Encodes the message with a length-delimiter to a buffer. Read more
Source§

fn encode_length_delimited_to_vec(&self) -> Vec<u8>
where Self: Sized,

Encodes the message with a length-delimiter to a newly allocated buffer.
Source§

fn decode(buf: impl Buf) -> Result<Self, DecodeError>
where Self: Default,

Decodes an instance of the message from a buffer. Read more
Source§

fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>
where Self: Default,

Decodes a length-delimited instance of the message from the buffer.
Source§

fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>
where Self: Sized,

Decodes an instance of the message from a buffer, and merges it into self. Read more
Source§

fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>
where Self: Sized,

Decodes a length-delimited instance of the message from buffer, and merges it into self.
Source§

impl PartialEq for FileCreateTransactionBody

Source§

fn eq(&self, other: &FileCreateTransactionBody) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for FileCreateTransactionBody

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more