use std::fmt::Display;
use fvm_ipld_encoding::tuple::*;
use fvm_ipld_encoding::{serde_bytes, RawBytes};
use fvm_ipld_hamt::BytesKey;
use fvm_shared::address::Address;
use fvm_shared::clock::ChainEpoch;
use fvm_shared::econ::TokenAmount;
use fvm_shared::error::ExitCode;
use fvm_shared::MethodNum;
use integer_encoding::VarInt;
use serde::{Deserialize, Serialize};
pub const SIGNERS_MAX: usize = 256;
#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize, Hash, Eq, PartialEq, PartialOrd)]
#[serde(transparent)]
pub struct TxnID(pub i64);
impl TxnID {
pub fn key(self) -> BytesKey {
self.0.encode_var_vec().into()
}
}
impl Display for TxnID {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
#[derive(Clone, PartialEq, Eq, Debug, Serialize_tuple, Deserialize_tuple)]
pub struct Transaction {
pub to: Address,
pub value: TokenAmount,
pub method: MethodNum,
pub params: RawBytes,
pub approved: Vec<Address>,
}
#[derive(Serialize_tuple, Debug)]
pub struct ProposalHashData<'a> {
pub requester: Option<&'a Address>,
pub to: &'a Address,
pub value: &'a TokenAmount,
pub method: &'a MethodNum,
pub params: &'a RawBytes,
}
#[derive(Serialize_tuple, Deserialize_tuple)]
pub struct ConstructorParams {
pub signers: Vec<Address>,
pub num_approvals_threshold: u64,
pub unlock_duration: ChainEpoch,
pub start_epoch: ChainEpoch,
}
#[derive(Serialize_tuple, Deserialize_tuple)]
pub struct ProposeParams {
pub to: Address,
pub value: TokenAmount,
pub method: MethodNum,
pub params: RawBytes,
}
#[derive(Serialize_tuple, Deserialize_tuple)]
pub struct ProposeReturn {
pub txn_id: TxnID,
pub applied: bool,
pub code: ExitCode,
pub ret: RawBytes,
}
#[derive(Clone, PartialEq, Eq, Debug, Serialize_tuple, Deserialize_tuple)]
pub struct TxnIDParams {
pub id: TxnID,
#[serde(with = "serde_bytes")]
pub proposal_hash: Vec<u8>,
}
#[derive(Serialize_tuple, Deserialize_tuple)]
pub struct ApproveReturn {
pub applied: bool,
pub code: ExitCode,
pub ret: RawBytes,
}
#[derive(Serialize_tuple, Deserialize_tuple)]
pub struct AddSignerParams {
pub signer: Address,
pub increase: bool,
}
#[derive(Serialize_tuple, Deserialize_tuple)]
pub struct RemoveSignerParams {
pub signer: Address,
pub decrease: bool,
}
#[derive(Serialize_tuple, Deserialize_tuple)]
pub struct SwapSignerParams {
pub from: Address,
pub to: Address,
}
#[derive(Serialize_tuple, Deserialize_tuple)]
pub struct ChangeNumApprovalsThresholdParams {
pub new_threshold: u64,
}
#[derive(Serialize_tuple, Deserialize_tuple)]
pub struct LockBalanceParams {
pub start_epoch: ChainEpoch,
pub unlock_duration: ChainEpoch,
pub amount: TokenAmount,
}