#![cfg_attr(coverage_nightly, feature(coverage_attribute))]
use address::Address;
use cid::Cid;
use clock::ChainEpoch;
pub mod address;
pub mod bigint;
pub mod chainid;
pub mod clock;
pub mod commcid;
pub mod consensus;
pub mod crypto;
pub mod deal;
pub mod econ;
pub mod error;
pub mod event;
pub mod message;
pub mod piece;
pub mod randomness;
pub mod receipt;
pub mod sector;
pub mod state;
pub mod sys;
pub mod upgrade;
pub mod version;
use cid::multihash::Multihash;
use crypto::hash::SupportedHashes;
use fvm_ipld_encoding::DAG_CBOR;
use fvm_ipld_encoding::ipld_block::IpldBlock;
use crate::error::ExitCode;
pub const IPLD_RAW: u64 = 0x55;
pub const IDENTITY_HASH: u64 = 0x0;
pub const MAX_CID_LEN: usize = 100;
pub const HAMT_BIT_WIDTH: u32 = 5;
pub type ActorID = u64;
pub type MethodNum = u64;
pub const METHOD_SEND: MethodNum = 0;
pub const METHOD_CONSTRUCTOR: MethodNum = 1;
#[derive(Debug, PartialEq, Eq, Clone)]
pub struct Response {
pub exit_code: ExitCode,
pub return_data: Option<IpldBlock>,
}
const fn const_unwrap<T: Copy, E>(r: Result<T, E>) -> T {
let v = match r {
Ok(v) => v,
Err(_) => panic!(), };
std::mem::forget(r);
v
}
const EMPTY_ARR_HASH_DIGEST: &[u8] = &[
0x45, 0xb0, 0xcf, 0xc2, 0x20, 0xce, 0xec, 0x5b, 0x7c, 0x1c, 0x62, 0xc4, 0xd4, 0x19, 0x3d, 0x38,
0xe4, 0xeb, 0xa4, 0x8e, 0x88, 0x15, 0x72, 0x9c, 0xe7, 0x5f, 0x9c, 0x0a, 0xb0, 0xe4, 0xc1, 0xc0,
];
pub const EMPTY_ARR_CID: Cid = Cid::new_v1(
DAG_CBOR,
const_unwrap(Multihash::wrap(
SupportedHashes::Blake2b256 as u64,
EMPTY_ARR_HASH_DIGEST,
)),
);
#[test]
fn test_empty_arr_cid() {
use fvm_ipld_encoding::to_vec;
use multihash_codetable::{Code, MultihashDigest};
let empty = to_vec::<[(); 0]>(&[]).unwrap();
let expected = Cid::new_v1(DAG_CBOR, Code::Blake2b256.digest(&empty));
assert_eq!(EMPTY_ARR_CID, expected);
}