account.rs

Overview

The account.rs file provides the data structures and serialization logic for representing blockchain accounts in an archival format. It defines a serializable struct, ArchAccount, which encapsulates the account's state and metadata in a format suitable for storage or transmission. The file includes conversion implementations from internal serialization sets to ArchAccount, utility functions for encoding account status, and address construction based on workchain and account identifiers.


Structs and Data Types

ArchAccount

A serializable and deserializable struct representing an archived view of a blockchain account.

pub struct ArchAccount {
    pub id: String,
    pub workchain_id: i32,
    pub boc: Option<Vec<u8>>,
    pub init_code_hash: Option<String>,
    pub last_paid: Option<u32>,
    pub bits: Option<String>,
    pub cells: Option<String>,
    pub public_cells: Option<String>,
    pub last_trans_lt: Option<String>,
    pub last_trans_hash: Option<String>,
    pub balance: Option<String>,
    pub balance_other: Option<Vec<u8>>,
    pub code: Option<Vec<u8>>,
    pub code_hash: Option<String>,
    pub data: Option<Vec<u8>>,
    pub data_hash: Option<String>,
    pub acc_type: u8,
    pub last_trans_chain_order: Option<String>,
    pub dapp_id: String,
    pub due_payment: Option<String>,
    pub proof: Option<Vec<u8>>,
    pub prev_code_hash: Option<String>,
    pub state_hash: Option<String>,
    pub split_depth: Option<u32>,
}

The struct derives Deserialize, Serialize, Clone, Debug, and Default traits for JSON (de)serialization and cloning purposes.


Trait Implementations

From<AccountSerializationSet> for ArchAccount

Converts an AccountSerializationSet (an internal representation of an account plus serialized data) into an ArchAccount.

Process:

Usage Example:

let arch_account: ArchAccount = account_serialization_set.into();

From<DeletedAccountSerializationSet> for ArchAccount

Converts a DeletedAccountSerializationSet (representation of a deleted account) into an ArchAccount.

Process:

Usage Example:

let deleted_arch_account: ArchAccount = deleted_account_serialization_set.into();

Functions

serialize_account_status

pub(crate) fn serialize_account_status(status: &AccountStatus) -> u8

Encodes an AccountStatus enum into a compact u8 representation.

AccountStatus

Encoded Value (u8)

AccStateUninit

0b00 (0)

AccStateFrozen

0b10 (2)

AccStateActive

0b01 (1)

AccStateNonexist

0b11 (3)

Parameters:

Returns:

Example:

let encoded = serialize_account_status(&AccountStatus::AccStateActive);
// encoded == 1

construct_address

pub(crate) fn construct_address(
    workchain_id: i32,
    account_id: AccountId,
) -> anyhow::Result<MsgAddressInt>

Constructs a MsgAddressInt (message address) from a workchain ID and an account ID.

Implementation Details:

Parameters:

Returns:

Example:

let addr = construct_address(0, account_id)?;
println!("{}", addr.to_string());

Important Implementation Notes


Interaction with Other Modules


Visual Diagram: Class Diagram for ArchAccount and Related Conversions

classDiagram
class ArchAccount {
+id: String
+workchain_id: i32
+boc: Option<Vec<u8>>
+init_code_hash: Option<String>
+last_paid: Option<u32>
+bits: Option<String>
+cells: Option<String>
+public_cells: Option<String>
+last_trans_lt: Option<String>
+last_trans_hash: Option<String>
+balance: Option<String>
+balance_other: Option<Vec<u8>>
+code: Option<Vec<u8>>
+code_hash: Option<String>
+data: Option<Vec<u8>>
+data_hash: Option<String>
+acc_type: u8
+last_trans_chain_order: Option<String>
+dapp_id: String
+due_payment: Option<String>
+proof: Option<Vec<u8>>
+prev_code_hash: Option<String>
+state_hash: Option<String>
+split_depth: Option<u32>
}
class AccountSerializationSet
class DeletedAccountSerializationSet
class AccountStatus
AccountSerializationSet --> ArchAccount : From trait (conversion)
DeletedAccountSerializationSet --> ArchAccount : From trait (conversion)
AccountStatus ..> ArchAccount : acc_type encoded by serialize_account_status()

References to Related Topics