diff --git a/tests/conformance_tests/src/message.rs b/tests/conformance_tests/src/message.rs index b141f216c6c1..c45e6bff0348 100644 --- a/tests/conformance_tests/src/message.rs +++ b/tests/conformance_tests/src/message.rs @@ -4,7 +4,6 @@ use super::*; use db::MemoryDB; use interpreter::{CircSupplyCalc, LookbackStateGetter}; -use networks::get_network_version_default; use state_tree::StateTree; use vm::TokenAmount; @@ -23,6 +22,7 @@ pub struct ExecuteMessageParams<'a> { pub circ_supply: TokenAmount, pub basefee: TokenAmount, pub randomness: ReplayingRand<'a>, + pub nv: fil_types::NetworkVersion, } struct MockCircSupply(TokenAmount); @@ -51,13 +51,14 @@ pub fn execute_message( let circ_supply = MockCircSupply(params.circ_supply); let lb = MockStateLB(bs); + let nv = params.nv; let mut vm = VM::<_, _, _, _, _>::new( params.pre_root, bs, params.epoch, ¶ms.randomness, params.basefee, - get_network_version_default, + |_| nv, &circ_supply, &lb, )?; diff --git a/tests/conformance_tests/test-vectors b/tests/conformance_tests/test-vectors index 7aebc6f892fc..d96ce11315df 160000 --- a/tests/conformance_tests/test-vectors +++ b/tests/conformance_tests/test-vectors @@ -1 +1 @@ -Subproject commit 7aebc6f892fc03819dc3f980df184604c9e9bf63 +Subproject commit d96ce11315dfd219a7279dfa129214212e1b0510 diff --git a/tests/conformance_tests/tests/conformance_runner.rs b/tests/conformance_tests/tests/conformance_runner.rs index 7cdd412a100d..df6de30c4d7a 100644 --- a/tests/conformance_tests/tests/conformance_runner.rs +++ b/tests/conformance_tests/tests/conformance_runner.rs @@ -11,6 +11,7 @@ use cid::Cid; use clock::ChainEpoch; use conformance_tests::*; use encoding::Cbor; +use fil_types::NetworkVersion; use fil_types::TOTAL_FILECOIN; use flate2::read::GzDecoder; use forest_message::{MessageReceipt, UnsignedMessage}; @@ -21,6 +22,7 @@ use paramfetch::{get_params_default, SectorSizeOpt}; use regex::Regex; use state_manager::StateManager; use statediff::print_state_diff; +use std::convert::TryInto; use std::error::Error as StdError; use std::fmt; use std::fs::File; @@ -189,6 +191,7 @@ async fn execute_message_vector( .map(|i| i.to_bigint().unwrap()) .unwrap_or(DEFAULT_BASE_FEE.clone()), randomness: ReplayingRand::new(randomness), + nv: variant.nv.try_into().unwrap_or(NetworkVersion::V0), }, )?; root = post_root; diff --git a/types/src/version.rs b/types/src/version.rs index f0a7074f8e73..8dcf13623a0f 100644 --- a/types/src/version.rs +++ b/types/src/version.rs @@ -2,10 +2,13 @@ // SPDX-License-Identifier: Apache-2.0, MIT use encoding::repr::Serialize_repr; +use std::convert::TryFrom; use std::fmt::{self, Display, Formatter}; +use num_derive::FromPrimitive; +use num_traits::FromPrimitive; /// Specifies the network version -#[derive(Debug, PartialEq, Clone, Copy, PartialOrd, Serialize_repr)] +#[derive(Debug, PartialEq, Clone, Copy, PartialOrd, Serialize_repr, FromPrimitive)] #[repr(u32)] pub enum NetworkVersion { /// genesis (specs-actors v0.9.3) @@ -40,6 +43,17 @@ pub enum NetworkVersion { V14, } +impl TryFrom for NetworkVersion { + type Error = (); + + fn try_from(v: u32) -> Result { + match FromPrimitive::from_u32(v) { + Some(nv) => Ok(nv), + _ => Err(()), + } + } +} + impl Display for NetworkVersion { fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { match self {