use oasis_core_runtime::consensus::beacon::EpochTime;
use crate::types::{address::Address, message::MessageEvent, token};
#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
pub struct Deposit {
#[cbor(optional)]
pub to: Option<Address>,
pub amount: token::BaseUnits,
}
#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
pub struct Withdraw {
#[cbor(optional)]
pub to: Option<Address>,
pub amount: token::BaseUnits,
}
#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
pub struct Delegate {
pub to: Address,
pub amount: token::BaseUnits,
#[cbor(optional)]
pub receipt: u64,
}
#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
pub struct Undelegate {
pub from: Address,
pub shares: u128,
#[cbor(optional)]
pub receipt: u64,
}
#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
#[cfg_attr(test, derive(PartialEq, Eq))]
#[repr(u8)]
pub enum ReceiptKind {
#[default]
Invalid = 0,
Delegate = 1,
UndelegateStart = 2,
UndelegateDone = 3,
}
impl ReceiptKind {
pub fn is_valid(&self) -> bool {
!matches!(self, Self::Invalid)
}
}
#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
pub struct TakeReceipt {
pub kind: ReceiptKind,
pub id: u64,
}
#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
#[cfg_attr(test, derive(PartialEq, Eq))]
pub struct Receipt {
#[cbor(optional)]
pub shares: u128,
#[cbor(optional)]
pub epoch: EpochTime,
#[cbor(optional)]
pub receipt: u64,
#[cbor(optional)]
pub amount: u128,
#[cbor(optional)]
pub error: Option<ConsensusError>,
}
#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
pub struct BalanceQuery {
pub address: Address,
}
#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
pub struct ConsensusAccountQuery {
pub address: Address,
}
#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
pub struct DelegationQuery {
pub from: Address,
pub to: Address,
}
#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
pub struct DelegationsQuery {
pub from: Address,
}
#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
pub struct UndelegationsQuery {
pub to: Address,
}
#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
pub struct AccountBalance {
pub balance: u128,
}
#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
pub struct DelegationInfo {
pub shares: u128,
#[cbor(optional)]
pub receipt: u64,
}
#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
pub struct ExtendedDelegationInfo {
pub to: Address,
pub shares: u128,
}
#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
pub struct UndelegationInfo {
pub from: Address,
pub epoch: EpochTime,
pub shares: u128,
}
#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
pub struct ConsensusTransferContext {
pub address: Address,
#[cbor(optional)]
pub nonce: u64,
#[cbor(optional)]
pub to: Address,
pub amount: token::BaseUnits,
}
#[derive(Clone, Debug, Default, cbor::Encode, cbor::Decode)]
pub struct ConsensusWithdrawContext {
#[cbor(optional)]
pub from: Address,
#[cbor(optional)]
pub nonce: u64,
pub address: Address,
pub amount: token::BaseUnits,
}
#[derive(Clone, Debug, cbor::Encode, cbor::Decode, Default)]
pub struct ConsensusDelegateContext {
pub from: Address,
pub nonce: u64,
pub to: Address,
pub amount: token::BaseUnits,
#[cbor(optional)]
pub receipt: bool,
}
#[derive(Clone, Debug, cbor::Encode, cbor::Decode, Default)]
pub struct ConsensusUndelegateContext {
pub from: Address,
pub nonce: u64,
pub to: Address,
pub shares: u128,
#[cbor(optional)]
pub receipt: bool,
}
#[derive(Clone, Debug, Default, PartialEq, Eq, cbor::Encode, cbor::Decode)]
pub struct ConsensusError {
#[cbor(optional)]
pub module: String,
#[cbor(optional)]
pub code: u32,
}
impl From<MessageEvent> for ConsensusError {
fn from(me: MessageEvent) -> Self {
Self {
module: me.module,
code: me.code,
}
}
}