Enum psibase::DbId

source ·
#[repr(u32)]
pub enum DbId { Service = 0, WriteOnly = 1, Subjective = 2, NativeConstrained = 3, NativeUnconstrained = 4, BlockLog = 5, HistoryEvent = 6, UiEvent = 7, MerkleEvent = 8, BlockProof = 9, NumDatabases = 10, }
Expand description

Identify database to operate on

Native functions expose a set of databases which serve various purposes. This enum identifies which database to use when invoking those functions.

Variants§

§

Service = 0

Services should store their tables here

The first 64 bits of the key match the service.

§

WriteOnly = 1

Data for RPC

Write-only during transactions, and read-only during RPC. Individual nodes may modify this database, expire data from this database, or wipe it entirely at will.

The first 64 bits of the key match the service.

§

Subjective = 2

Data that is not part of consensus

Only accessible to subjective services during transactions, but readable by all services during RPC. Doesn’t undo from aborting transactions, aborting blocks, or forking blocks. Individual nodes may modify this database or wipe

The first 64 bits of the key match the service.

§

NativeConstrained = 3

Tables used by native code

This database enforces constraints during write. Only writable by privileged services, but readable by all services.

Some writes to this database indicate chain upgrades. If a privileged service writes to a table that an older node version doesn’t know about, or writes new fields to an existing table that an older node doesn’t know about, then that node will reject the write. If the producers accepted the write into a block, then the node will stop following the chain until it’s upgraded to a newer version.

§

NativeUnconstrained = 4

Tables used by native code

This database doesn’t enforce constraints during write. Only writable by privileged services, but readable by all services.

§

BlockLog = 5

Block log

Transactions don’t have access to this, but RPC does.

§

HistoryEvent = 6

Long-term history event storage

Write-only during transactions, and read-only during RPC. Individual nodes may modify this database, expire data from this database, or wipe it entirely at will.

TODO: this policy may eventually change to allow time-limited read access during transactions.

Key is an auto-incremented, 64-bit unsigned number.

Value must begin with:

  • 32 bit: block number
  • 64 bit: service

Only usable with these native functions:

TODO: right now the value must begin with the service. Revisit whether beginning with the block number is useful.

§

UiEvent = 7

Short-term history event storage

These events are erased once the block that produced them becomes final. They notify user interfaces which subscribe to activity.

Write-only during transactions, and read-only during RPC. Individual nodes may modify this database, expire data from this database, or wipe it entirely at will.

Key is an auto-incremented, 64-bit unsigned number.

Value must begin with:

  • 32 bit: block number
  • 64 bit: service

Only usable with these native functions:

TODO: right now the value must begin with the service. Revisit whether beginning with the block number is useful.

§

MerkleEvent = 8

Events which go into the merkle tree

TODO: read support; right now only RPC mode can read

Services may produce these events during transactions and may read them up to 1 hour (configurable) after they were produced, or they reach finality, which ever is longer.

Key is an auto-incremented, 64-bit unsigned number.

Value must begin with:

  • 32 bit: block number
  • 64 bit: service

Only usable with these native functions:

TODO: right now the value must begin with the service. Revisit whether beginning with the block number is useful.

§

BlockProof = 9

block signatures

§

NumDatabases = 10

Number of defined databases

This number may grow in the future

Trait Implementations§

source§

impl Clone for DbId

source§

fn clone(&self) -> DbId

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Copy for DbId

Auto Trait Implementations§

§

impl Freeze for DbId

§

impl RefUnwindSafe for DbId

§

impl Send for DbId

§

impl Sync for DbId

§

impl Unpin for DbId

§

impl UnwindSafe for DbId

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> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<Reference, Outer, OuterFieldType, Inner> HasPart<Nested<Outer, Inner>> for Reference
where Reference: HasPart<Outer> + ?Sized, Outer: Part<PartType = Field<OuterFieldType>>, Inner: Part, OuterFieldType: HasPart<Inner, RawTarget = OuterFieldType> + PartialRefTarget + ?Sized,

source§

unsafe fn part_ptr( ptr: *const <Reference as PartialRefTarget>::RawTarget ) -> <<Inner as Part>::PartType as PartType>::Ptr

Given a constant pointer to a target, produce a constant pointer to a part of it. Read more
source§

unsafe fn part_ptr_mut( ptr: *mut <Reference as PartialRefTarget>::RawTarget ) -> <<Inner as Part>::PartType as PartType>::PtrMut

Given a mutable pointer to a target, produce a mutable pointer to a part of it. Read more
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> ReflectNoMethods for T

source§

fn reflect_methods<Return>(visitor: impl StructVisitor<Return>) -> Return

source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

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

§

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>,

§

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>,

§

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<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