#![allow(non_snake_case)]
use crate::{
AccountNumber, Hex, MethodNumber, Pack, TimePointSec, TimePointUSec, ToKey, ToSchema, Unpack,
WasmConfigRow,
};
use async_graphql::{InputObject, SimpleObject, Union};
use serde::{Deserialize, Serialize};
pub type Checksum256 = Hex<[u8; 32]>;
pub type BlockNum = u32;
pub type BlockTime = TimePointUSec;
#[derive(
Debug,
Clone,
Default,
Pack,
Unpack,
ToKey,
ToSchema,
Serialize,
Deserialize,
SimpleObject,
InputObject,
PartialEq,
Eq,
)]
#[fracpack(fracpack_mod = "fracpack")]
#[to_key(psibase_mod = "crate")]
#[graphql(input_name = "ActionInput")]
pub struct Action {
pub sender: AccountNumber,
pub service: AccountNumber,
pub method: MethodNumber,
pub rawData: Hex<Vec<u8>>,
}
#[derive(Debug, Clone, Default, Pack, Unpack, ToKey, ToSchema, Serialize)]
#[fracpack(fracpack_mod = "fracpack")]
#[to_key(psibase_mod = "crate")]
pub struct SharedAction<'a> {
pub sender: AccountNumber,
pub service: AccountNumber,
pub method: MethodNumber,
pub rawData: Hex<&'a [u8]>,
}
#[derive(Debug, Clone, Default, Pack, Unpack, ToKey, ToSchema, Serialize, Deserialize)]
#[fracpack(fracpack_mod = "fracpack")]
#[to_key(psibase_mod = "crate")]
pub struct GenesisActionData {
pub memo: String,
pub services: Vec<GenesisService>,
}
#[derive(Debug, Clone, Default, Pack, Unpack, ToKey, ToSchema, Serialize)]
#[fracpack(fracpack_mod = "fracpack")]
#[to_key(psibase_mod = "crate")]
pub struct SharedGenesisActionData<'a> {
pub memo: String,
#[serde(borrow)]
pub services: Vec<SharedGenesisService<'a>>,
}
#[derive(Debug, Clone, Default, Pack, Unpack, ToKey, ToSchema, Serialize, Deserialize)]
#[fracpack(fracpack_mod = "fracpack")]
#[to_key(psibase_mod = "crate")]
pub struct GenesisService {
pub service: AccountNumber,
pub flags: u64,
pub vmType: u8,
pub vmVersion: u8,
pub code: Hex<Vec<u8>>,
}
#[derive(Debug, Clone, Default, Pack, Unpack, ToKey, ToSchema, Serialize)]
#[fracpack(fracpack_mod = "fracpack")]
#[to_key(psibase_mod = "crate")]
pub struct SharedGenesisService<'a> {
pub service: AccountNumber,
pub flags: u64,
pub vmType: u8,
pub vmVersion: u8,
pub code: Hex<&'a [u8]>,
}
#[derive(
Debug,
Clone,
Default,
Pack,
Unpack,
ToKey,
ToSchema,
Serialize,
Deserialize,
SimpleObject,
InputObject,
PartialEq,
Eq,
)]
#[fracpack(fracpack_mod = "fracpack")]
#[to_key(psibase_mod = "crate")]
#[graphql(input_name = "ClaimInput")]
pub struct Claim {
pub service: AccountNumber,
pub rawData: Hex<Vec<u8>>,
}
#[derive(
Debug,
Clone,
Default,
Pack,
Unpack,
ToKey,
ToSchema,
Serialize,
Deserialize,
SimpleObject,
InputObject,
PartialEq,
Eq,
)]
#[fracpack(definition_will_not_change, fracpack_mod = "fracpack")]
#[to_key(psibase_mod = "crate")]
#[graphql(input_name = "TaposInput")]
pub struct Tapos {
pub expiration: TimePointSec,
pub refBlockSuffix: u32,
pub flags: u16,
pub refBlockIndex: u8,
}
impl Tapos {
pub const DO_NOT_BROADCAST_FLAG: u16 = 1 << 0;
pub const VALID_FLAGS: u16 = 0x0001;
}
#[derive(
Debug,
Clone,
Default,
Pack,
Unpack,
ToKey,
ToSchema,
Serialize,
Deserialize,
SimpleObject,
InputObject,
PartialEq,
Eq,
)]
#[fracpack(fracpack_mod = "fracpack")]
#[to_key(psibase_mod = "crate")]
#[graphql(input_name = "TransactionInput")]
pub struct Transaction {
pub tapos: Tapos,
pub actions: Vec<Action>,
pub claims: Vec<Claim>,
}
#[derive(
Debug,
Clone,
Default,
Pack,
Unpack,
ToKey,
ToSchema,
Serialize,
Deserialize,
SimpleObject,
InputObject,
PartialEq,
Eq,
)]
#[fracpack(fracpack_mod = "fracpack")]
#[to_key(psibase_mod = "crate")]
#[graphql(input_name = "SignedTransactionInput")]
pub struct SignedTransaction {
pub transaction: Hex<Vec<u8>>,
pub proofs: Vec<Hex<Vec<u8>>>,
}
type TermNum = u32;
#[derive(
Debug,
Clone,
Default,
Pack,
Unpack,
ToKey,
ToSchema,
Serialize,
Deserialize,
SimpleObject,
InputObject,
)]
#[fracpack(fracpack_mod = "fracpack")]
#[to_key(psibase_mod = "crate")]
#[graphql(input_name = "ProducerInput")]
pub struct Producer {
pub name: AccountNumber,
pub auth: Claim,
}
#[derive(
Debug, Clone, Default, Pack, Unpack, ToSchema, Serialize, Deserialize, SimpleObject, InputObject,
)]
#[fracpack(fracpack_mod = "fracpack")]
pub struct CftConsensus {
pub producers: Vec<Producer>,
}
#[derive(
Debug, Clone, Default, Pack, Unpack, ToSchema, Serialize, Deserialize, SimpleObject, InputObject,
)]
#[fracpack(fracpack_mod = "fracpack")]
pub struct BftConsensus {
pub producers: Vec<Producer>,
}
#[derive(Debug, Clone, Pack, Unpack, ToSchema, Serialize, Deserialize, Union)]
#[fracpack(fracpack_mod = "fracpack")]
pub enum ConsensusData {
CFT(CftConsensus),
BFT(BftConsensus),
}
impl ConsensusData {
pub fn producers(&self) -> &Vec<Producer> {
match self {
ConsensusData::CFT(cft) => &cft.producers,
ConsensusData::BFT(bft) => &bft.producers,
}
}
}
#[derive(
Debug,
Clone,
Default,
Pack,
Unpack,
ToKey,
ToSchema,
Serialize,
Deserialize,
SimpleObject,
InputObject,
)]
#[fracpack(fracpack_mod = "fracpack")]
#[fracpack(definition_will_not_change)]
#[to_key(psibase_mod = "crate")]
pub struct ConsensusBytes {
pub consensusVariantIdx: u8,
pub consensusData: Vec<u8>,
}
#[derive(
Debug,
Clone,
Default,
Pack,
Unpack,
ToKey,
ToSchema,
Serialize,
Deserialize,
SimpleObject,
InputObject,
)]
#[fracpack(fracpack_mod = "fracpack")]
#[to_key(psibase_mod = "crate")]
pub struct BlockHeaderAuthAccount {
pub codeNum: AccountNumber,
pub codeHash: Checksum256,
pub vmType: u8,
pub vmVersion: u8,
}
#[derive(Debug, Clone, Pack, Unpack, ToSchema, Serialize, Deserialize)]
#[fracpack(fracpack_mod = "fracpack")]
pub struct Consensus {
pub data: ConsensusData,
pub services: Vec<BlockHeaderAuthAccount>,
pub wasmConfig: WasmConfigRow,
}
#[derive(Debug, Clone, Pack, Unpack, ToSchema, Serialize, Deserialize)]
#[fracpack(fracpack_mod = "fracpack")]
pub struct PendingConsensus {
pub consensus: Consensus,
pub blockNum: BlockNum,
}
#[derive(Debug, Clone, Pack, Unpack, ToSchema, Serialize, Deserialize)]
#[fracpack(fracpack_mod = "fracpack")]
pub struct JointConsensus {
pub current: Consensus,
pub next: Option<PendingConsensus>,
}
#[derive(
Debug,
Clone,
Default,
Pack,
Unpack,
ToKey,
ToSchema,
Serialize,
Deserialize,
SimpleObject,
InputObject,
)]
#[fracpack(fracpack_mod = "fracpack")]
#[to_key(psibase_mod = "crate")]
pub struct BlockHeaderCode {
pub vmType: u8,
pub vmVersion: u8,
pub code: Vec<u8>,
}
#[derive(Debug, Clone, Default, Pack, Unpack, ToSchema, Serialize, Deserialize)]
#[fracpack(fracpack_mod = "fracpack")]
pub struct BlockHeader {
pub previous: Checksum256,
pub blockNum: BlockNum,
pub time: BlockTime,
pub producer: AccountNumber,
pub term: TermNum,
pub commitNum: BlockNum,
consensusState: Checksum256,
trxMerkleRoot: Checksum256,
eventMerkleRoot: Checksum256,
newConsensus: Option<Consensus>,
authCode: Option<Vec<BlockHeaderCode>>,
}
#[derive(Debug, Clone, Default, Pack, Unpack, ToSchema, Serialize, Deserialize)]
#[fracpack(fracpack_mod = "fracpack")]
pub struct Block {
pub header: BlockHeader,
pub transactions: Vec<SignedTransaction>,
pub subjectiveData: Vec<Hex<Vec<u8>>>,
}
#[derive(Debug, Clone, Default, Pack, Unpack, ToSchema, Serialize, Deserialize)]
#[fracpack(fracpack_mod = "fracpack")]
pub struct SignedBlock {
pub block: Block,
pub signature: Hex<Vec<u8>>,
}
#[derive(Debug, Clone, Default, Pack, Unpack, ToSchema, Serialize, Deserialize)]
#[fracpack(fracpack_mod = "fracpack")]
pub struct BlockInfo {
pub header: BlockHeader,
pub blockId: Checksum256,
}