From d1a3a9cdef4ca977eadb8c0ec50787d56adff972 Mon Sep 17 00:00:00 2001 From: austinabell Date: Tue, 27 Oct 2020 10:08:16 -0400 Subject: [PATCH 1/7] Refactor out deadline types and setup crate for v2 upgrade --- Cargo.lock | 8 + Cargo.toml | 1 + node/rpc/src/state_api.rs | 6 +- types/src/deadlines/mod.rs | 154 ++++++++++++++++++ .../miner => types/src/deadlines}/quantize.rs | 0 types/src/lib.rs | 1 + vm/actor/Cargo.toml | 3 + vm/actor/src/builtin/miner/bitfield_queue.rs | 2 +- vm/actor/src/builtin/miner/deadline_state.rs | 4 +- vm/actor/src/builtin/miner/deadlines.rs | 135 ++------------- .../src/builtin/miner/expiration_queue.rs | 4 +- vm/actor/src/builtin/miner/mod.rs | 10 +- vm/actor/src/builtin/miner/partition_state.rs | 7 +- vm/actor/src/builtin/miner/state.rs | 19 ++- vm/actor/src/builtin/miner/vesting_state.rs | 3 +- vm/actorv2/Cargo.toml | 8 + vm/actorv2/src/lib.rs | 12 ++ vm/interpreter/Cargo.toml | 3 +- 18 files changed, 238 insertions(+), 142 deletions(-) create mode 100644 types/src/deadlines/mod.rs rename {vm/actor/src/builtin/miner => types/src/deadlines}/quantize.rs (100%) create mode 100644 vm/actorv2/Cargo.toml create mode 100644 vm/actorv2/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index b3366b0eed52..0ff9c442b591 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -46,6 +46,13 @@ dependencies = [ "unsigned-varint 0.5.1", ] +[[package]] +name = "actorv2" +version = "0.1.0" +dependencies = [ + "actor", +] + [[package]] name = "addr2line" version = "0.13.0" @@ -3038,6 +3045,7 @@ name = "interpreter" version = "0.1.0" dependencies = [ "actor", + "actorv2", "ahash 0.4.6", "byteorder 1.3.4", "chain", diff --git a/Cargo.toml b/Cargo.toml index 153b1d7e09c9..d49bc6964f5b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,7 @@ members = [ "blockchain/message_pool", "vm", "vm/actor", + "vm/actorv2", "vm/address", "vm/message", "vm/runtime", diff --git a/node/rpc/src/state_api.rs b/node/rpc/src/state_api.rs index 916daab9c1f5..0b7a061fb0d2 100644 --- a/node/rpc/src/state_api.rs +++ b/node/rpc/src/state_api.rs @@ -3,8 +3,8 @@ use crate::RpcState; use actor::miner::{ - ChainSectorInfo, DeadlineInfo, Deadlines, Fault, MinerInfo, SectorOnChainInfo, - SectorPreCommitOnChainInfo, State, + ChainSectorInfo, Deadlines, Fault, MinerInfo, SectorOnChainInfo, SectorPreCommitOnChainInfo, + State, }; use address::{json::AddressJson, Address}; use async_std::task; @@ -13,7 +13,7 @@ use blocks::{tipset_json::TipsetJson, Tipset, TipsetKeys}; use blockstore::BlockStore; use cid::{json::CidJson, Cid}; use clock::ChainEpoch; -use fil_types::{verifier::FullVerifier, SectorNumber}; +use fil_types::{deadlines::DeadlineInfo, verifier::FullVerifier, SectorNumber}; use jsonrpc_v2::{Data, Error as JsonRpcError, Params}; use message::{ message_receipt::json::MessageReceiptJson, diff --git a/types/src/deadlines/mod.rs b/types/src/deadlines/mod.rs new file mode 100644 index 000000000000..fbec1da121b0 --- /dev/null +++ b/types/src/deadlines/mod.rs @@ -0,0 +1,154 @@ +// Copyright 2020 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +mod quantize; + +pub use self::quantize::*; +use clock::ChainEpoch; +use serde::{Deserialize, Serialize}; + +/// Deadline calculations with respect to a current epoch. +/// "Deadline" refers to the window during which proofs may be submitted. +/// Windows are non-overlapping ranges [Open, Close), but the challenge epoch for a window occurs before +/// the window opens. +#[derive(Default, Debug, Serialize, Deserialize, PartialEq, Copy, Clone)] +pub struct DeadlineInfo { + /// Epoch at which this info was calculated. + pub current_epoch: ChainEpoch, + /// First epoch of the proving period (<= CurrentEpoch). + pub period_start: ChainEpoch, + /// Current deadline index, in [0..WPoStProvingPeriodDeadlines). + pub index: u64, + /// First epoch from which a proof may be submitted (>= CurrentEpoch). + pub open: ChainEpoch, + /// First epoch from which a proof may no longer be submitted (>= Open). + pub close: ChainEpoch, + /// Epoch at which to sample the chain for challenge (< Open). + pub challenge: ChainEpoch, + /// First epoch at which a fault declaration is rejected (< Open). + pub fault_cutoff: ChainEpoch, + + // Protocol parameters (This is intentionally included in the JSON response for deadlines) + w_post_period_deadlines: u64, + w_post_proving_period: ChainEpoch, + w_post_challenge_window: ChainEpoch, + w_post_challenge_lookback: ChainEpoch, + fault_declaration_cutoff: ChainEpoch, +} + +impl DeadlineInfo { + pub fn new( + period_start: ChainEpoch, + deadline_idx: u64, + current_epoch: ChainEpoch, + w_post_period_deadlines: u64, + w_post_proving_period: ChainEpoch, + w_post_challenge_window: ChainEpoch, + w_post_challenge_lookback: ChainEpoch, + fault_declaration_cutoff: ChainEpoch, + ) -> Self { + if deadline_idx < w_post_period_deadlines { + let deadline_open = period_start + (deadline_idx as i64 * w_post_challenge_window); + Self { + current_epoch, + period_start, + index: deadline_idx, + open: deadline_open, + close: deadline_open + w_post_challenge_window, + challenge: deadline_open - w_post_challenge_lookback, + fault_cutoff: deadline_open - fault_declaration_cutoff, + w_post_period_deadlines, + w_post_proving_period, + w_post_challenge_window, + w_post_challenge_lookback, + fault_declaration_cutoff, + } + } else { + let after_last_deadline = period_start + w_post_proving_period; + Self { + current_epoch, + period_start, + index: deadline_idx, + open: after_last_deadline, + close: after_last_deadline, + challenge: after_last_deadline, + fault_cutoff: 0, + w_post_period_deadlines, + w_post_proving_period, + w_post_challenge_window, + w_post_challenge_lookback, + fault_declaration_cutoff, + } + } + } + + /// Whether the proving period has begun. + pub fn period_started(&self) -> bool { + self.current_epoch >= self.period_start + } + + /// Whether the proving period has elapsed. + pub fn period_elapsed(&self) -> bool { + self.current_epoch >= self.next_period_start() + } + + /// The last epoch in the proving period. + pub fn period_end(&self) -> ChainEpoch { + self.period_start + self.w_post_proving_period - 1 + } + + /// The first epoch in the next proving period. + pub fn next_period_start(&self) -> ChainEpoch { + self.period_start + self.w_post_proving_period + } + + /// Whether the current deadline is currently open. + pub fn is_open(&self) -> bool { + self.current_epoch >= self.open && self.current_epoch < self.close + } + + /// Whether the current deadline has already closed. + pub fn has_elapsed(&self) -> bool { + self.current_epoch >= self.close + } + + /// The last epoch during which a proof may be submitted. + pub fn last(&self) -> ChainEpoch { + self.close - 1 + } + + /// Epoch at which the subsequent deadline opens. + pub fn next_open(&self) -> ChainEpoch { + self.close + } + + /// Whether the deadline's fault cutoff has passed. + pub fn fault_cutoff_passed(&self) -> bool { + self.current_epoch >= self.fault_cutoff + } + + /// Returns the next instance of this deadline that has not yet elapsed. + pub fn next_not_elapsed(self) -> Self { + std::iter::successors(Some(self), |info| { + Some(Self::new( + info.next_period_start(), + info.index, + info.current_epoch, + self.w_post_period_deadlines, + self.w_post_proving_period, + self.w_post_challenge_window, + self.w_post_challenge_lookback, + self.fault_declaration_cutoff, + )) + }) + .find(|info| !info.has_elapsed()) + .unwrap() // the iterator is infinite, so `find` won't ever return `None` + } + + pub fn quant_spec(&self) -> QuantSpec { + QuantSpec { + unit: self.w_post_proving_period, + offset: self.last(), + } + } +} diff --git a/vm/actor/src/builtin/miner/quantize.rs b/types/src/deadlines/quantize.rs similarity index 100% rename from vm/actor/src/builtin/miner/quantize.rs rename to types/src/deadlines/quantize.rs diff --git a/types/src/lib.rs b/types/src/lib.rs index 1e7e5b397b55..f365c3c0f761 100644 --- a/types/src/lib.rs +++ b/types/src/lib.rs @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0, MIT pub mod build_version; +pub mod deadlines; pub mod genesis; mod piece; mod randomness; diff --git a/vm/actor/Cargo.toml b/vm/actor/Cargo.toml index 37b32e63a180..5d050465fc3d 100644 --- a/vm/actor/Cargo.toml +++ b/vm/actor/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" authors = ["ChainSafe Systems "] edition = "2018" +[features] +v2 = ["ipld_hamt/v2"] + [dependencies] vm = { package = "forest_vm", path = "../../vm" } address = { package = "forest_address", path = "../address" } diff --git a/vm/actor/src/builtin/miner/bitfield_queue.rs b/vm/actor/src/builtin/miner/bitfield_queue.rs index fcf4bdb6a1fd..ced9f17738b3 100644 --- a/vm/actor/src/builtin/miner/bitfield_queue.rs +++ b/vm/actor/src/builtin/miner/bitfield_queue.rs @@ -1,11 +1,11 @@ // Copyright 2020 ChainSafe Systems // SPDX-License-Identifier: Apache-2.0, MIT -use super::QuantSpec; use crate::ActorDowncast; use bitfield::BitField; use cid::Cid; use clock::ChainEpoch; +use fil_types::deadlines::QuantSpec; use ipld_amt::{Amt, Error as AmtError}; use ipld_blockstore::BlockStore; use std::collections::HashMap; diff --git a/vm/actor/src/builtin/miner/deadline_state.rs b/vm/actor/src/builtin/miner/deadline_state.rs index 8759d6e4f57d..8151fd30063b 100644 --- a/vm/actor/src/builtin/miner/deadline_state.rs +++ b/vm/actor/src/builtin/miner/deadline_state.rs @@ -3,14 +3,14 @@ use super::{ BitFieldQueue, ExpirationSet, Partition, PartitionSectorMap, PoStPartition, PowerPair, - QuantSpec, SectorOnChainInfo, Sectors, TerminationResult, WPOST_PERIOD_DEADLINES, + SectorOnChainInfo, Sectors, TerminationResult, WPOST_PERIOD_DEADLINES, }; use crate::{actor_error, ActorDowncast, ActorError, ExitCode, TokenAmount}; use bitfield::BitField; use cid::{multihash::Blake2b256, Cid}; use clock::ChainEpoch; use encoding::tuple::*; -use fil_types::SectorSize; +use fil_types::{deadlines::QuantSpec, SectorSize}; use ipld_amt::Amt; use ipld_blockstore::BlockStore; use num_traits::Zero; diff --git a/vm/actor/src/builtin/miner/deadlines.rs b/vm/actor/src/builtin/miner/deadlines.rs index bce6f8b028a4..ecf34b6673a7 100644 --- a/vm/actor/src/builtin/miner/deadlines.rs +++ b/vm/actor/src/builtin/miner/deadlines.rs @@ -2,127 +2,28 @@ // SPDX-License-Identifier: Apache-2.0, MIT use super::policy::*; -use super::{Deadlines, Partition, QuantSpec}; +use super::{Deadlines, Partition}; use clock::ChainEpoch; -use fil_types::SectorNumber; +use fil_types::{deadlines::DeadlineInfo, SectorNumber}; use ipld_amt::Amt; use ipld_blockstore::BlockStore; -use serde::{Deserialize, Serialize}; use std::error::Error as StdError; -/// Deadline calculations with respect to a current epoch. -/// "Deadline" refers to the window during which proofs may be submitted. -/// Windows are non-overlapping ranges [Open, Close), but the challenge epoch for a window occurs before -/// the window opens. -#[derive(Default, Debug, Serialize, Deserialize, PartialEq)] -pub struct DeadlineInfo { - /// Epoch at which this info was calculated. - pub current_epoch: ChainEpoch, - /// First epoch of the proving period (<= CurrentEpoch). - pub period_start: ChainEpoch, - /// Current deadline index, in [0..WPoStProvingPeriodDeadlines). - pub index: u64, - /// First epoch from which a proof may be submitted (>= CurrentEpoch). - pub open: ChainEpoch, - /// First epoch from which a proof may no longer be submitted (>= Open). - pub close: ChainEpoch, - /// Epoch at which to sample the chain for challenge (< Open). - pub challenge: ChainEpoch, - /// First epoch at which a fault declaration is rejected (< Open). - pub fault_cutoff: ChainEpoch, -} - -impl DeadlineInfo { - pub fn new(period_start: ChainEpoch, deadline_idx: u64, current_epoch: ChainEpoch) -> Self { - if deadline_idx < WPOST_PERIOD_DEADLINES as u64 { - let deadline_open = period_start + (deadline_idx as i64 * WPOST_CHALLENGE_WINDOW); - Self { - current_epoch, - period_start, - index: deadline_idx, - open: deadline_open, - close: deadline_open + WPOST_CHALLENGE_WINDOW, - challenge: deadline_open - WPOST_CHALLENGE_LOOKBACK, - fault_cutoff: deadline_open - FAULT_DECLARATION_CUTOFF, - } - } else { - let after_last_deadline = period_start + WPOST_PROVING_PERIOD; - Self { - current_epoch, - period_start, - index: deadline_idx, - open: after_last_deadline, - close: after_last_deadline, - challenge: after_last_deadline, - fault_cutoff: 0, - } - } - } - - /// Whether the proving period has begun. - pub fn period_started(&self) -> bool { - self.current_epoch >= self.period_start - } - - /// Whether the proving period has elapsed. - pub fn period_elapsed(&self) -> bool { - self.current_epoch >= self.next_period_start() - } - - /// The last epoch in the proving period. - pub fn period_end(&self) -> ChainEpoch { - self.period_start + WPOST_PROVING_PERIOD - 1 - } - - /// The first epoch in the next proving period. - pub fn next_period_start(&self) -> ChainEpoch { - self.period_start + WPOST_PROVING_PERIOD - } - - /// Whether the current deadline is currently open. - pub fn is_open(&self) -> bool { - self.current_epoch >= self.open && self.current_epoch < self.close - } - - /// Whether the current deadline has already closed. - pub fn has_elapsed(&self) -> bool { - self.current_epoch >= self.close - } - - /// The last epoch during which a proof may be submitted. - pub fn last(&self) -> ChainEpoch { - self.close - 1 - } - - /// Epoch at which the subsequent deadline opens. - pub fn next_open(&self) -> ChainEpoch { - self.close - } - - /// Whether the deadline's fault cutoff has passed. - pub fn fault_cutoff_passed(&self) -> bool { - self.current_epoch >= self.fault_cutoff - } - - /// Returns the next instance of this deadline that has not yet elapsed. - pub fn next_not_elapsed(self) -> Self { - std::iter::successors(Some(self), |info| { - Some(Self::new( - info.next_period_start(), - info.index, - info.current_epoch, - )) - }) - .find(|info| !info.has_elapsed()) - .unwrap() // the iterator is infinite, so `find` won't ever return `None` - } - - pub fn quant_spec(&self) -> QuantSpec { - QuantSpec { - unit: WPOST_PROVING_PERIOD, - offset: self.last(), - } - } +pub fn new_deadline_info( + proving_period_start: ChainEpoch, + deadline_idx: u64, + current_epoch: ChainEpoch, +) -> DeadlineInfo { + DeadlineInfo::new( + proving_period_start, + deadline_idx, + current_epoch, + WPOST_PERIOD_DEADLINES, + WPOST_PROVING_PERIOD, + WPOST_CHALLENGE_WINDOW, + WPOST_CHALLENGE_LOOKBACK, + FAULT_DECLARATION_CUTOFF, + ) } impl Deadlines { @@ -167,7 +68,7 @@ pub fn deadline_is_mutable( // Get the next non-elapsed deadline (i.e., the next time we care about // mutations to the deadline). let deadline_info = - DeadlineInfo::new(proving_period_start, deadline_idx, current_epoch).next_not_elapsed(); + new_deadline_info(proving_period_start, deadline_idx, current_epoch).next_not_elapsed(); // Ensure that the current epoch is at least one challenge window before // that deadline opens. diff --git a/vm/actor/src/builtin/miner/expiration_queue.rs b/vm/actor/src/builtin/miner/expiration_queue.rs index 69c176c99a34..cae5788390b8 100644 --- a/vm/actor/src/builtin/miner/expiration_queue.rs +++ b/vm/actor/src/builtin/miner/expiration_queue.rs @@ -1,13 +1,13 @@ // Copyright 2020 ChainSafe Systems // SPDX-License-Identifier: Apache-2.0, MIT -use super::{power_for_sector, PowerPair, QuantSpec, SectorOnChainInfo, SECTORS_MAX}; +use super::{power_for_sector, PowerPair, SectorOnChainInfo, SECTORS_MAX}; use crate::ActorDowncast; use bitfield::BitField; use cid::Cid; use clock::ChainEpoch; use encoding::tuple::*; -use fil_types::{SectorNumber, SectorSize}; +use fil_types::{deadlines::QuantSpec, SectorNumber, SectorSize}; use ipld_amt::{Amt, Error as AmtError, ValueMut}; use ipld_blockstore::BlockStore; use num_bigint::bigint_ser; diff --git a/vm/actor/src/builtin/miner/mod.rs b/vm/actor/src/builtin/miner/mod.rs index b53edd906241..73bdbc2f69f8 100644 --- a/vm/actor/src/builtin/miner/mod.rs +++ b/vm/actor/src/builtin/miner/mod.rs @@ -9,7 +9,6 @@ mod expiration_queue; mod monies; mod partition_state; mod policy; -mod quantize; mod sector_map; mod sectors; mod state; @@ -25,7 +24,6 @@ pub use expiration_queue::*; pub use monies::*; pub use partition_state::*; pub use policy::*; -pub use quantize::*; pub use sector_map::*; pub use sectors::*; pub use state::*; @@ -62,9 +60,9 @@ use crypto::DomainSeparationTag::{ }; use encoding::Cbor; use fil_types::{ - InteractiveSealRandomness, NetworkVersion, PoStProof, PoStRandomness, RegisteredSealProof, - SealRandomness as SealRandom, SealVerifyInfo, SealVerifyParams, SectorID, SectorInfo, - SectorNumber, SectorSize, WindowPoStVerifyInfo, MAX_SECTOR_NUMBER, + deadlines::DeadlineInfo, InteractiveSealRandomness, NetworkVersion, PoStProof, PoStRandomness, + RegisteredSealProof, SealRandomness as SealRandom, SealVerifyInfo, SealVerifyParams, SectorID, + SectorInfo, SectorNumber, SectorSize, WindowPoStVerifyInfo, MAX_SECTOR_NUMBER, }; use ipld_amt::Amt; use ipld_blockstore::BlockStore; @@ -3259,7 +3257,7 @@ fn declaration_deadline_info( )); } - let deadline = DeadlineInfo::new(period_start, deadline_idx, current_epoch).next_not_elapsed(); + let deadline = new_deadline_info(period_start, deadline_idx, current_epoch).next_not_elapsed(); Ok(deadline) } diff --git a/vm/actor/src/builtin/miner/partition_state.rs b/vm/actor/src/builtin/miner/partition_state.rs index 59509e271a13..29b4ea5a529c 100644 --- a/vm/actor/src/builtin/miner/partition_state.rs +++ b/vm/actor/src/builtin/miner/partition_state.rs @@ -3,14 +3,17 @@ use super::{ power_for_sectors, validate_partition_contains_sectors, BitFieldQueue, ExpirationQueue, - ExpirationSet, QuantSpec, SectorOnChainInfo, Sectors, TerminationResult, NO_QUANTIZATION, + ExpirationSet, SectorOnChainInfo, Sectors, TerminationResult, }; use crate::{actor_error, ActorDowncast}; use bitfield::BitField; use cid::Cid; use clock::ChainEpoch; use encoding::tuple::*; -use fil_types::{SectorSize, StoragePower}; +use fil_types::{ + deadlines::{QuantSpec, NO_QUANTIZATION}, + SectorSize, StoragePower, +}; use ipld_blockstore::BlockStore; use num_bigint::bigint_ser; use num_traits::Zero; diff --git a/vm/actor/src/builtin/miner/state.rs b/vm/actor/src/builtin/miner/state.rs index e49f08062229..bcc7e49c2ae2 100644 --- a/vm/actor/src/builtin/miner/state.rs +++ b/vm/actor/src/builtin/miner/state.rs @@ -1,9 +1,11 @@ // Copyright 2020 ChainSafe Systems // SPDX-License-Identifier: Apache-2.0, MIT -use super::{assign_deadlines, deadline_is_mutable, policy::*, Deadline}; -use super::{deadlines::DeadlineInfo, DeadlineSectorMap}; -use super::{types::*, Deadlines, PowerPair, QuantSpec, Sectors, TerminationResult, VestingFunds}; +use super::DeadlineSectorMap; +use super::{ + assign_deadlines, deadline_is_mutable, deadlines::new_deadline_info, policy::*, Deadline, +}; +use super::{types::*, Deadlines, PowerPair, Sectors, TerminationResult, VestingFunds}; use crate::{make_map_with_root, u64_key, ActorDowncast}; use address::Address; use ahash::AHashSet; @@ -11,7 +13,10 @@ use bitfield::BitField; use cid::{multihash::Blake2b256, Cid}; use clock::ChainEpoch; use encoding::{serde_bytes, tuple::*, BytesDe, Cbor}; -use fil_types::{RegisteredSealProof, SectorNumber, SectorSize, MAX_SECTOR_NUMBER}; +use fil_types::{ + deadlines::{DeadlineInfo, QuantSpec}, + RegisteredSealProof, SectorNumber, SectorSize, MAX_SECTOR_NUMBER, +}; use ipld_amt::Error as AmtError; use ipld_blockstore::BlockStore; use ipld_hamt::{Error as HamtError, Hamt}; @@ -140,7 +145,7 @@ impl State { /// Returns deadline calculations for the current (according to state) proving period. pub fn deadline_info(&self, current_epoch: ChainEpoch) -> DeadlineInfo { - DeadlineInfo::new( + new_deadline_info( self.proving_period_start, self.current_deadline, current_epoch, @@ -149,7 +154,7 @@ impl State { /// Returns deadline calculations for the current (according to state) proving period. pub fn quant_spec_for_deadline(&self, deadline_idx: u64) -> QuantSpec { - DeadlineInfo::new(self.proving_period_start, deadline_idx, 0).quant_spec() + new_deadline_info(self.proving_period_start, deadline_idx, 0).quant_spec() } pub fn allocate_sector_number( @@ -399,7 +404,7 @@ impl State { for (deadline_idx, partition_sectors) in deadline_sectors.iter() { let deadline_info = - DeadlineInfo::new(self.proving_period_start, deadline_idx, current_epoch); + new_deadline_info(self.proving_period_start, deadline_idx, current_epoch); let new_expiration = deadline_info.last(); let mut deadline = deadlines.load_deadline(store, deadline_idx)?; diff --git a/vm/actor/src/builtin/miner/vesting_state.rs b/vm/actor/src/builtin/miner/vesting_state.rs index 7625f8d59480..b551322f2a68 100644 --- a/vm/actor/src/builtin/miner/vesting_state.rs +++ b/vm/actor/src/builtin/miner/vesting_state.rs @@ -1,9 +1,10 @@ // Copyright 2020 ChainSafe Systems // SPDX-License-Identifier: Apache-2.0, MIT -use super::{QuantSpec, VestSpec}; +use super::VestSpec; use clock::ChainEpoch; use encoding::tuple::*; +use fil_types::deadlines::QuantSpec; use num_bigint::{bigint_ser, Integer}; use num_traits::Zero; use std::{cmp::Ordering, collections::HashMap}; diff --git a/vm/actorv2/Cargo.toml b/vm/actorv2/Cargo.toml new file mode 100644 index 000000000000..b721797d1d39 --- /dev/null +++ b/vm/actorv2/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "actorv2" +version = "0.1.0" +authors = ["ChainSafe Systems "] +edition = "2018" + +[dependencies] +actor = { path = "../actor", features = ["v2"] } diff --git a/vm/actorv2/src/lib.rs b/vm/actorv2/src/lib.rs new file mode 100644 index 000000000000..daf5fbcad91d --- /dev/null +++ b/vm/actorv2/src/lib.rs @@ -0,0 +1,12 @@ +// Copyright 2020 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +//! Re-export of actors functionality with v2 feature flag set. +//! +//! The reason for this crate is the restriction from having a dependency referenced twice, +//! where we actually do want to reference a lot of duplicate logic for actors versions. +//! +//! If only one copy of actors is needed, the actors crate should be used with the `v2` feature +//! set instead. + +pub use actor::*; diff --git a/vm/interpreter/Cargo.toml b/vm/interpreter/Cargo.toml index b348c62fb26f..dab8ff1fbc41 100644 --- a/vm/interpreter/Cargo.toml +++ b/vm/interpreter/Cargo.toml @@ -7,6 +7,7 @@ edition = "2018" [dependencies] address = { package = "forest_address", path = "../address" } actor = { path = "../actor" } +actorv2 = { path = "../actorv2" } message = { package = "forest_message", path = "../message" } runtime = { path = "../runtime" } blocks = { package = "forest_blocks", path = "../../blockchain/blocks" } @@ -16,7 +17,7 @@ ipld_blockstore = { path = "../../ipld/blockstore" } num-bigint = { path = "../../utils/bigint", package = "forest_bigint" } forest_encoding = { path = "../../encoding" } cid = { package = "forest_cid", path = "../../ipld/cid" } -crypto = { package = "forest_crypto", path = "../../crypto" } +crypto = { package = "forest_crypto", path = "../../crypto" } num-traits = "0.2.11" byteorder = "1.3.4" state_tree = { path = "../state_tree" } From 350b1de3330ed4a66eef503bc5216317d90265dc Mon Sep 17 00:00:00 2001 From: austinabell Date: Tue, 27 Oct 2020 10:21:32 -0400 Subject: [PATCH 2/7] Put proofs api under feature --- types/Cargo.toml | 3 ++- types/src/lib.rs | 4 +++- types/src/piece/mod.rs | 14 ++++++++++---- types/src/sector/registered_proof.rs | 9 ++++++--- vm/runtime/Cargo.toml | 2 +- 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/types/Cargo.toml b/types/Cargo.toml index d9c1bd20d9d9..c5401508b229 100644 --- a/types/Cargo.toml +++ b/types/Cargo.toml @@ -13,7 +13,7 @@ chrono = "0.4.9" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.56" commcid = { path = "../utils/commcid" } -filecoin-proofs-api = "5.2" +filecoin-proofs-api = { version = "5.2", optional = true } vm = { package = "forest_vm", path = "../vm" } cid = { package = "forest_cid", path = "../ipld/cid", features = ["cbor"] } num-bigint = { path = "../utils/bigint", package = "forest_bigint", features=["json"] } @@ -30,3 +30,4 @@ async-std = "1.6.3" [features] json = ["base64", "forest_json_utils"] +proofs = ["filecoin-proofs-api"] diff --git a/types/src/lib.rs b/types/src/lib.rs index f365c3c0f761..ed23b7e8c322 100644 --- a/types/src/lib.rs +++ b/types/src/lib.rs @@ -7,9 +7,11 @@ pub mod genesis; mod piece; mod randomness; pub mod sector; -pub mod verifier; mod version; +#[cfg(feature = "proofs")] +pub mod verifier; + pub use self::piece::*; pub use self::randomness::*; pub use self::sector::*; diff --git a/types/src/piece/mod.rs b/types/src/piece/mod.rs index 026507b5ed20..ba280101fd43 100644 --- a/types/src/piece/mod.rs +++ b/types/src/piece/mod.rs @@ -1,14 +1,15 @@ // Copyright 2020 ChainSafe Systems // SPDX-License-Identifier: Apache-2.0, MIT +#[cfg(feature = "proofs")] mod zero; +#[cfg(feature = "proofs")] +pub use zero::zero_piece_commitment; + use cid::Cid; -use commcid::cid_to_piece_commitment_v1; use encoding::tuple::*; use serde::{Deserialize, Serialize}; -use std::convert::TryFrom; -pub use zero::zero_piece_commitment; /// Size of a piece in bytes #[derive(PartialEq, Debug, Eq, Clone, Copy)] @@ -69,17 +70,22 @@ pub struct PieceInfo { pub cid: Cid, } +#[cfg(feature = "proofs")] +use std::convert::TryFrom; + +#[cfg(feature = "proofs")] impl TryFrom<&PieceInfo> for filecoin_proofs_api::PieceInfo { type Error = &'static str; fn try_from(p: &PieceInfo) -> Result { Ok(Self { - commitment: cid_to_piece_commitment_v1(&p.cid)?, + commitment: commcid::cid_to_piece_commitment_v1(&p.cid)?, size: p.size.unpadded().into(), }) } } +#[cfg(feature = "proofs")] impl From for filecoin_proofs_api::UnpaddedBytesAmount { fn from(p: UnpaddedPieceSize) -> Self { Self(p.0) diff --git a/types/src/sector/registered_proof.rs b/types/src/sector/registered_proof.rs index 100cb5ab74a0..5a7646ddd896 100644 --- a/types/src/sector/registered_proof.rs +++ b/types/src/sector/registered_proof.rs @@ -2,8 +2,9 @@ // SPDX-License-Identifier: Apache-2.0, MIT use super::SectorSize; -use filecoin_proofs_api as proofs; use serde::{Deserialize, Deserializer, Serialize, Serializer}; + +#[cfg(feature = "proofs")] use std::convert::TryFrom; #[derive(PartialEq, Eq, Copy, Clone, Debug, Hash)] @@ -187,7 +188,8 @@ i64_conversion! { StackedDRG64GiBV1 => 4, } -impl TryFrom for proofs::RegisteredSealProof { +#[cfg(feature = "proofs")] +impl TryFrom for filecoin_proofs_api::RegisteredSealProof { type Error = String; fn try_from(p: RegisteredSealProof) -> Result { use RegisteredSealProof::*; @@ -214,7 +216,8 @@ impl From for RegisteredSealProof { } } -impl TryFrom for proofs::RegisteredPoStProof { +#[cfg(feature = "proofs")] +impl TryFrom for filecoin_proofs_api::RegisteredPoStProof { type Error = String; fn try_from(p: RegisteredPoStProof) -> Result { use RegisteredPoStProof::*; diff --git a/vm/runtime/Cargo.toml b/vm/runtime/Cargo.toml index de93c929f104..6b642a78dfc8 100644 --- a/vm/runtime/Cargo.toml +++ b/vm/runtime/Cargo.toml @@ -15,7 +15,7 @@ forest_encoding = { path = "../../encoding" } commcid = { path = "../../utils/commcid" } filecoin-proofs-api = "5.2" base64 = "0.12.1" -fil_types = { path = "../../types" } +fil_types = { path = "../../types", features = ["proofs"] } log = "0.4.8" [dev-dependencies] From 756c6b665ab633de6e6cc27816a7dc3a78b19ec4 Mon Sep 17 00:00:00 2001 From: austinabell Date: Tue, 27 Oct 2020 10:45:59 -0400 Subject: [PATCH 3/7] Update code id for v2 --- vm/actor/src/builtin/codes.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/vm/actor/src/builtin/codes.rs b/vm/actor/src/builtin/codes.rs index a563f9b41b9c..1d492d4813d5 100644 --- a/vm/actor/src/builtin/codes.rs +++ b/vm/actor/src/builtin/codes.rs @@ -3,6 +3,7 @@ use cid::{multihash::Identity, Cid, Codec}; +#[cfg(not(feature = "v2"))] lazy_static! { pub static ref SYSTEM_ACTOR_CODE_ID: Cid = make_builtin(b"fil/1/system"); pub static ref INIT_ACTOR_CODE_ID: Cid = make_builtin(b"fil/1/init"); @@ -16,7 +17,25 @@ lazy_static! { pub static ref REWARD_ACTOR_CODE_ID: Cid = make_builtin(b"fil/1/reward"); pub static ref VERIFREG_ACTOR_CODE_ID: Cid = make_builtin(b"fil/1/verifiedregistry"); pub static ref CHAOS_ACTOR_CODE_ID: Cid = make_builtin(b"fil/1/chaos"); +} +#[cfg(feature = "v2")] +lazy_static! { + pub static ref SYSTEM_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/system"); + pub static ref INIT_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/init"); + pub static ref CRON_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/cron"); + pub static ref ACCOUNT_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/account"); + pub static ref POWER_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/storagepower"); + pub static ref MINER_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/storageminer"); + pub static ref MARKET_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/storagemarket"); + pub static ref PAYCH_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/paymentchannel"); + pub static ref MULTISIG_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/multisig"); + pub static ref REWARD_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/reward"); + pub static ref VERIFREG_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/verifiedregistry"); + pub static ref CHAOS_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/chaos"); +} + +lazy_static! { // Set of actor code types that can represent external signing parties. pub static ref CALLER_TYPES_SIGNABLE: [Cid; 2] = [ACCOUNT_ACTOR_CODE_ID.clone(), MULTISIG_ACTOR_CODE_ID.clone()]; From 36b6bcb46c7cff5faaa54194d88b376bced68022 Mon Sep 17 00:00:00 2001 From: austinabell Date: Tue, 27 Oct 2020 13:14:07 -0400 Subject: [PATCH 4/7] Refactor for v2 support --- Cargo.lock | 8 +++ ipld/hamt/tests/hamt_tests.rs | 7 +- vm/actor/src/builtin/account/mod.rs | 1 - vm/actor/src/builtin/codes.rs | 19 ------ vm/actor/src/builtin/cron/mod.rs | 1 - vm/actor/src/builtin/init/mod.rs | 1 - vm/actor/src/builtin/market/mod.rs | 1 - vm/actor/src/builtin/miner/mod.rs | 1 - vm/actor/src/builtin/mod.rs | 2 +- vm/actor/src/builtin/multisig/mod.rs | 1 - vm/actor/src/builtin/paych/mod.rs | 1 - vm/actor/src/builtin/power/mod.rs | 1 - vm/actor/src/builtin/reward/mod.rs | 1 - vm/actor/src/builtin/system/mod.rs | 1 - vm/actor/src/builtin/verifreg/mod.rs | 1 - vm/actor/src/lib.rs | 54 +++++++++++++-- vm/actor/src/util/chaos/mod.rs | 1 - vm/actor/tests/common/mod.rs | 47 +------------ vm/actorv2/Cargo.toml | 11 ++- vm/actorv2/src/builtin/account/mod.rs | 11 +++ vm/actorv2/src/builtin/codes.rs | 64 ++++++++++++++++++ vm/actorv2/src/builtin/cron/mod.rs | 11 +++ vm/actorv2/src/builtin/init/mod.rs | 11 +++ vm/actorv2/src/builtin/market/mod.rs | 11 +++ vm/actorv2/src/builtin/miner/mod.rs | 11 +++ vm/actorv2/src/builtin/mod.rs | 19 ++++++ vm/actorv2/src/builtin/multisig/mod.rs | 11 +++ vm/actorv2/src/builtin/paych/mod.rs | 11 +++ vm/actorv2/src/builtin/power/mod.rs | 11 +++ vm/actorv2/src/builtin/reward/mod.rs | 11 +++ vm/actorv2/src/builtin/system/mod.rs | 11 +++ vm/actorv2/src/builtin/verifreg/mod.rs | 11 +++ vm/actorv2/src/lib.rs | 93 +++++++++++++++++++++++--- vm/interpreter/src/default_runtime.rs | 42 +++++------- vm/runtime/src/actor_code.rs | 1 - 35 files changed, 380 insertions(+), 120 deletions(-) create mode 100644 vm/actorv2/src/builtin/account/mod.rs create mode 100644 vm/actorv2/src/builtin/codes.rs create mode 100644 vm/actorv2/src/builtin/cron/mod.rs create mode 100644 vm/actorv2/src/builtin/init/mod.rs create mode 100644 vm/actorv2/src/builtin/market/mod.rs create mode 100644 vm/actorv2/src/builtin/miner/mod.rs create mode 100644 vm/actorv2/src/builtin/mod.rs create mode 100644 vm/actorv2/src/builtin/multisig/mod.rs create mode 100644 vm/actorv2/src/builtin/paych/mod.rs create mode 100644 vm/actorv2/src/builtin/power/mod.rs create mode 100644 vm/actorv2/src/builtin/reward/mod.rs create mode 100644 vm/actorv2/src/builtin/system/mod.rs create mode 100644 vm/actorv2/src/builtin/verifreg/mod.rs diff --git a/Cargo.lock b/Cargo.lock index 0ff9c442b591..69fce0fc50df 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -51,6 +51,14 @@ name = "actorv2" version = "0.1.0" dependencies = [ "actor", + "fil_types", + "forest_cid", + "forest_vm", + "ipld_blockstore", + "ipld_hamt", + "lazy_static", + "runtime", + "serde", ] [[package]] diff --git a/ipld/hamt/tests/hamt_tests.rs b/ipld/hamt/tests/hamt_tests.rs index b05184d2c3de..76fe73b8dacd 100644 --- a/ipld/hamt/tests/hamt_tests.rs +++ b/ipld/hamt/tests/hamt_tests.rs @@ -1,12 +1,15 @@ // Copyright 2020 ChainSafe Systems // SPDX-License-Identifier: Apache-2.0, MIT -use ipld_hamt::{BytesKey, Hamt}; +use ipld_hamt::Hamt; use cid::multihash::Blake2b256; use ipld_blockstore::{BSStats, BlockStore, TrackingBlockStore}; use serde_bytes::ByteBuf; +#[cfg(any(feature = "identity", feature = "v2"))] +use ipld_hamt::BytesKey; + #[cfg(feature = "identity")] use ipld_hamt::Identity; @@ -111,6 +114,7 @@ fn reload_empty() { } #[test] +#[cfg(feature = "v2")] fn set_delete_many() { let mem = db::MemoryDB::default(); let store = TrackingBlockStore::new(&mem); @@ -365,6 +369,7 @@ fn canonical_structure_alt_bit_width() { } #[test] +#[cfg(feature = "v2")] fn clean_child_ordering() { let make_key = |i: u64| -> BytesKey { let mut key = unsigned_varint::encode::u64_buffer(); diff --git a/vm/actor/src/builtin/account/mod.rs b/vm/actor/src/builtin/account/mod.rs index e382c4a7f149..03d492df1020 100644 --- a/vm/actor/src/builtin/account/mod.rs +++ b/vm/actor/src/builtin/account/mod.rs @@ -57,7 +57,6 @@ impl Actor { impl ActorCode for Actor { fn invoke_method( - &self, rt: &mut RT, method: MethodNum, params: &Serialized, diff --git a/vm/actor/src/builtin/codes.rs b/vm/actor/src/builtin/codes.rs index 1d492d4813d5..a563f9b41b9c 100644 --- a/vm/actor/src/builtin/codes.rs +++ b/vm/actor/src/builtin/codes.rs @@ -3,7 +3,6 @@ use cid::{multihash::Identity, Cid, Codec}; -#[cfg(not(feature = "v2"))] lazy_static! { pub static ref SYSTEM_ACTOR_CODE_ID: Cid = make_builtin(b"fil/1/system"); pub static ref INIT_ACTOR_CODE_ID: Cid = make_builtin(b"fil/1/init"); @@ -17,25 +16,7 @@ lazy_static! { pub static ref REWARD_ACTOR_CODE_ID: Cid = make_builtin(b"fil/1/reward"); pub static ref VERIFREG_ACTOR_CODE_ID: Cid = make_builtin(b"fil/1/verifiedregistry"); pub static ref CHAOS_ACTOR_CODE_ID: Cid = make_builtin(b"fil/1/chaos"); -} -#[cfg(feature = "v2")] -lazy_static! { - pub static ref SYSTEM_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/system"); - pub static ref INIT_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/init"); - pub static ref CRON_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/cron"); - pub static ref ACCOUNT_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/account"); - pub static ref POWER_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/storagepower"); - pub static ref MINER_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/storageminer"); - pub static ref MARKET_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/storagemarket"); - pub static ref PAYCH_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/paymentchannel"); - pub static ref MULTISIG_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/multisig"); - pub static ref REWARD_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/reward"); - pub static ref VERIFREG_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/verifiedregistry"); - pub static ref CHAOS_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/chaos"); -} - -lazy_static! { // Set of actor code types that can represent external signing parties. pub static ref CALLER_TYPES_SIGNABLE: [Cid; 2] = [ACCOUNT_ACTOR_CODE_ID.clone(), MULTISIG_ACTOR_CODE_ID.clone()]; diff --git a/vm/actor/src/builtin/cron/mod.rs b/vm/actor/src/builtin/cron/mod.rs index a5b11d4ebd6b..2e2de84fde4d 100644 --- a/vm/actor/src/builtin/cron/mod.rs +++ b/vm/actor/src/builtin/cron/mod.rs @@ -73,7 +73,6 @@ impl Actor { impl ActorCode for Actor { fn invoke_method( - &self, rt: &mut RT, method: MethodNum, params: &Serialized, diff --git a/vm/actor/src/builtin/init/mod.rs b/vm/actor/src/builtin/init/mod.rs index 05eba7050968..5ccd067165ab 100644 --- a/vm/actor/src/builtin/init/mod.rs +++ b/vm/actor/src/builtin/init/mod.rs @@ -102,7 +102,6 @@ impl Actor { impl ActorCode for Actor { fn invoke_method( - &self, rt: &mut RT, method: MethodNum, params: &Serialized, diff --git a/vm/actor/src/builtin/market/mod.rs b/vm/actor/src/builtin/market/mod.rs index 8e3e21d39cd4..062c6000146f 100644 --- a/vm/actor/src/builtin/market/mod.rs +++ b/vm/actor/src/builtin/market/mod.rs @@ -1215,7 +1215,6 @@ where impl ActorCode for Actor { fn invoke_method( - &self, rt: &mut RT, method: MethodNum, params: &Serialized, diff --git a/vm/actor/src/builtin/miner/mod.rs b/vm/actor/src/builtin/miner/mod.rs index 73bdbc2f69f8..786818d24563 100644 --- a/vm/actor/src/builtin/miner/mod.rs +++ b/vm/actor/src/builtin/miner/mod.rs @@ -3347,7 +3347,6 @@ where impl ActorCode for Actor { fn invoke_method( - &self, rt: &mut RT, method: MethodNum, params: &Serialized, diff --git a/vm/actor/src/builtin/mod.rs b/vm/actor/src/builtin/mod.rs index 8bf26c8a5546..4784847c61d3 100644 --- a/vm/actor/src/builtin/mod.rs +++ b/vm/actor/src/builtin/mod.rs @@ -13,7 +13,7 @@ pub mod paych; pub mod power; pub mod reward; mod shared; -mod singletons; +pub mod singletons; pub mod system; pub mod verifreg; diff --git a/vm/actor/src/builtin/multisig/mod.rs b/vm/actor/src/builtin/multisig/mod.rs index 4d67350db803..e4b099308c77 100644 --- a/vm/actor/src/builtin/multisig/mod.rs +++ b/vm/actor/src/builtin/multisig/mod.rs @@ -674,7 +674,6 @@ fn compute_proposal_hash( impl ActorCode for Actor { fn invoke_method( - &self, rt: &mut RT, method: MethodNum, params: &Serialized, diff --git a/vm/actor/src/builtin/paych/mod.rs b/vm/actor/src/builtin/paych/mod.rs index 23e9bafab84c..ecc4573a5e43 100644 --- a/vm/actor/src/builtin/paych/mod.rs +++ b/vm/actor/src/builtin/paych/mod.rs @@ -328,7 +328,6 @@ where impl ActorCode for Actor { fn invoke_method( - &self, rt: &mut RT, method: MethodNum, params: &Serialized, diff --git a/vm/actor/src/builtin/power/mod.rs b/vm/actor/src/builtin/power/mod.rs index 1b176a3706bf..15ad81ace2e4 100644 --- a/vm/actor/src/builtin/power/mod.rs +++ b/vm/actor/src/builtin/power/mod.rs @@ -629,7 +629,6 @@ impl Actor { impl ActorCode for Actor { fn invoke_method( - &self, rt: &mut RT, method: MethodNum, params: &Serialized, diff --git a/vm/actor/src/builtin/reward/mod.rs b/vm/actor/src/builtin/reward/mod.rs index 9323552ecfa0..2064d9d4a4f5 100644 --- a/vm/actor/src/builtin/reward/mod.rs +++ b/vm/actor/src/builtin/reward/mod.rs @@ -236,7 +236,6 @@ impl Actor { impl ActorCode for Actor { fn invoke_method( - &self, rt: &mut RT, method: MethodNum, params: &Serialized, diff --git a/vm/actor/src/builtin/system/mod.rs b/vm/actor/src/builtin/system/mod.rs index d0cb85eec1be..50cba1e35148 100644 --- a/vm/actor/src/builtin/system/mod.rs +++ b/vm/actor/src/builtin/system/mod.rs @@ -44,7 +44,6 @@ impl Actor { impl ActorCode for Actor { fn invoke_method( - &self, rt: &mut RT, method: MethodNum, params: &Serialized, diff --git a/vm/actor/src/builtin/verifreg/mod.rs b/vm/actor/src/builtin/verifreg/mod.rs index 6f8b26ca80a8..59064a976115 100644 --- a/vm/actor/src/builtin/verifreg/mod.rs +++ b/vm/actor/src/builtin/verifreg/mod.rs @@ -436,7 +436,6 @@ impl Actor { impl ActorCode for Actor { fn invoke_method( - &self, rt: &mut RT, method: MethodNum, params: &Serialized, diff --git a/vm/actor/src/lib.rs b/vm/actor/src/lib.rs index d57b216627ab..b30e4ee32e95 100644 --- a/vm/actor/src/lib.rs +++ b/vm/actor/src/lib.rs @@ -8,17 +8,20 @@ extern crate lazy_static; extern crate serde; mod builtin; -mod util; +pub mod util; pub use self::builtin::*; pub use self::util::*; -pub use vm::{actor_error, ActorError, ActorState, DealID, ExitCode, Serialized, TokenAmount}; +pub use vm::{ + actor_error, ActorError, ActorState, DealID, ExitCode, MethodNum, Serialized, TokenAmount, +}; use cid::Cid; use fil_types::HAMT_BIT_WIDTH; use ipld_blockstore::BlockStore; use ipld_hamt::{BytesKey, Error as HamtError, Hamt}; use num_bigint::BigInt; +use runtime::{ActorCode, Runtime}; use serde::{de::DeserializeOwned, Serialize}; use unsigned_varint::decode::Error as UVarintError; @@ -30,16 +33,16 @@ lazy_static! { /// Number of token units in an abstract "FIL" token. /// The network works purely in the indivisible token amounts. /// This constant converts to a fixed decimal with more human-friendly scale. -const TOKEN_PRECISION: u64 = 1_000_000_000_000_000_000; +pub const TOKEN_PRECISION: u64 = 1_000_000_000_000_000_000; /// Map type to be used within actors. The underlying type is a hamt. pub type Map<'bs, BS, V> = Hamt<'bs, BS, V, BytesKey>; /// Deal weight -type DealWeight = BigInt; +pub type DealWeight = BigInt; /// Used when invocation requires parameters to be an empty array of bytes -fn check_empty_params(params: &Serialized) -> Result<(), ActorError> { +pub fn check_empty_params(params: &Serialized) -> Result<(), ActorError> { if !params.is_empty() { Err(actor_error!(ErrSerialization; "params expected to be empty, was: {}", base64::encode(params.bytes()))) @@ -55,7 +58,7 @@ where BS: BlockStore, V: DeserializeOwned + Serialize + Clone, { - Hamt::<_, V>::new_with_bit_width(store, HAMT_BIT_WIDTH) + Map::<_, V>::new_with_bit_width(store, HAMT_BIT_WIDTH) } /// Create a map with a root cid. @@ -68,7 +71,7 @@ where BS: BlockStore, V: DeserializeOwned + Serialize + Clone, { - Hamt::<_, V>::load_with_bit_width(root, store, HAMT_BIT_WIDTH) + Map::<_, V>::load_with_bit_width(root, store, HAMT_BIT_WIDTH) } pub fn u64_key(k: u64) -> BytesKey { @@ -81,3 +84,40 @@ pub fn parse_uint_key(s: &[u8]) -> Result { let (v, _) = unsigned_varint::decode::u64(s)?; Ok(v) } + +pub fn invoke_code( + code: &Cid, + rt: &mut RT, + method_num: MethodNum, + params: &Serialized, +) -> Option> +where + BS: BlockStore, + RT: Runtime, +{ + if code == &*SYSTEM_ACTOR_CODE_ID { + Some(system::Actor::invoke_method(rt, method_num, params)) + } else if code == &*INIT_ACTOR_CODE_ID { + Some(init::Actor::invoke_method(rt, method_num, params)) + } else if code == &*CRON_ACTOR_CODE_ID { + Some(cron::Actor::invoke_method(rt, method_num, params)) + } else if code == &*ACCOUNT_ACTOR_CODE_ID { + Some(account::Actor::invoke_method(rt, method_num, params)) + } else if code == &*POWER_ACTOR_CODE_ID { + Some(power::Actor::invoke_method(rt, method_num, params)) + } else if code == &*MINER_ACTOR_CODE_ID { + Some(miner::Actor::invoke_method(rt, method_num, params)) + } else if code == &*MARKET_ACTOR_CODE_ID { + Some(market::Actor::invoke_method(rt, method_num, params)) + } else if code == &*PAYCH_ACTOR_CODE_ID { + Some(paych::Actor::invoke_method(rt, method_num, params)) + } else if code == &*MULTISIG_ACTOR_CODE_ID { + Some(multisig::Actor::invoke_method(rt, method_num, params)) + } else if code == &*REWARD_ACTOR_CODE_ID { + Some(reward::Actor::invoke_method(rt, method_num, params)) + } else if code == &*VERIFREG_ACTOR_CODE_ID { + Some(verifreg::Actor::invoke_method(rt, method_num, params)) + } else { + None + } +} diff --git a/vm/actor/src/util/chaos/mod.rs b/vm/actor/src/util/chaos/mod.rs index 36fe9e92a83e..a617ca19fd0b 100644 --- a/vm/actor/src/util/chaos/mod.rs +++ b/vm/actor/src/util/chaos/mod.rs @@ -195,7 +195,6 @@ impl Actor { impl ActorCode for Actor { fn invoke_method( - &self, rt: &mut RT, method: MethodNum, params: &Serialized, diff --git a/vm/actor/tests/common/mod.rs b/vm/actor/tests/common/mod.rs index bf1095914534..8d2ea8e32262 100644 --- a/vm/actor/tests/common/mod.rs +++ b/vm/actor/tests/common/mod.rs @@ -1,11 +1,6 @@ // Copyright 2020 ChainSafe Systems // SPDX-License-Identifier: Apache-2.0, MIT -use actor::{ - self, ACCOUNT_ACTOR_CODE_ID, CRON_ACTOR_CODE_ID, INIT_ACTOR_CODE_ID, MARKET_ACTOR_CODE_ID, - MINER_ACTOR_CODE_ID, MULTISIG_ACTOR_CODE_ID, PAYCH_ACTOR_CODE_ID, POWER_ACTOR_CODE_ID, - REWARD_ACTOR_CODE_ID, SYSTEM_ACTOR_CODE_ID, VERIFREG_ACTOR_CODE_ID, -}; use address::Address; use cid::{multihash::Blake2b256, Cid}; use clock::ChainEpoch; @@ -17,7 +12,7 @@ use fil_types::{ WindowPoStVerifyInfo, }; use ipld_blockstore::BlockStore; -use runtime::{ActorCode, ConsensusFault, MessageInfo, Runtime, Syscalls}; +use runtime::{ConsensusFault, MessageInfo, Runtime, Syscalls}; use std::cell::{Cell, RefCell}; use std::collections::{HashMap, VecDeque}; use std::error::Error as StdError; @@ -242,44 +237,8 @@ impl MockRuntime { ) -> Result { self.in_call = true; let prev_state = self.state.clone(); - - let res = match to_code { - x if x == &*SYSTEM_ACTOR_CODE_ID => { - actor::system::Actor.invoke_method(self, method_num, params) - } - x if x == &*INIT_ACTOR_CODE_ID => { - actor::init::Actor.invoke_method(self, method_num, params) - } - x if x == &*CRON_ACTOR_CODE_ID => { - actor::cron::Actor.invoke_method(self, method_num, params) - } - x if x == &*ACCOUNT_ACTOR_CODE_ID => { - actor::account::Actor.invoke_method(self, method_num, params) - } - x if x == &*POWER_ACTOR_CODE_ID => { - actor::power::Actor.invoke_method(self, method_num, params) - } - x if x == &*MINER_ACTOR_CODE_ID => { - actor::miner::Actor.invoke_method(self, method_num, params) - } - x if x == &*MARKET_ACTOR_CODE_ID => { - actor::market::Actor.invoke_method(self, method_num, params) - } - x if x == &*PAYCH_ACTOR_CODE_ID => { - actor::paych::Actor.invoke_method(self, method_num, params) - } - x if x == &*MULTISIG_ACTOR_CODE_ID => { - actor::multisig::Actor.invoke_method(self, method_num, params) - } - x if x == &*REWARD_ACTOR_CODE_ID => { - actor::reward::Actor.invoke_method(self, method_num, params) - } - x if x == &*VERIFREG_ACTOR_CODE_ID => { - actor::verifreg::Actor.invoke_method(self, method_num, params) - } - - _ => Err(actor_error!(SysErrForbidden; "invalid method id")), - }; + let res = actor::invoke_code(to_code, self, method_num, params) + .unwrap_or_else(|| Err(actor_error!(SysErrForbidden, "invalid method id"))); if res.is_err() { self.state = prev_state; diff --git a/vm/actorv2/Cargo.toml b/vm/actorv2/Cargo.toml index b721797d1d39..0fe4cba02c18 100644 --- a/vm/actorv2/Cargo.toml +++ b/vm/actorv2/Cargo.toml @@ -5,4 +5,13 @@ authors = ["ChainSafe Systems "] edition = "2018" [dependencies] -actor = { path = "../actor", features = ["v2"] } +actorv1 = { path = "../actor", package = "actor" } +cid = { package = "forest_cid", path = "../../ipld/cid", features = ["cbor"] } +ipld_blockstore = { path = "../../ipld/blockstore" } +# TODO should use v2 feature (or released version) once separated +ipld_hamt = { path = "../../ipld/hamt", features = ["go-interop"] } +vm = { package = "forest_vm", path = "../../vm" } +serde = { version = "1.0", features = ["derive"] } +lazy_static = "1.4.0" +fil_types = { path = "../../types" } +runtime = { path = "../runtime" } diff --git a/vm/actorv2/src/builtin/account/mod.rs b/vm/actorv2/src/builtin/account/mod.rs new file mode 100644 index 000000000000..244ede4e8cf9 --- /dev/null +++ b/vm/actorv2/src/builtin/account/mod.rs @@ -0,0 +1,11 @@ +// Copyright 2020 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) +// TODO actor v2 upgrade + +pub type Method = actorv1::account::Method; + +pub type Actor = actorv1::account::Actor; + +pub type State = actorv1::account::State; diff --git a/vm/actorv2/src/builtin/codes.rs b/vm/actorv2/src/builtin/codes.rs new file mode 100644 index 000000000000..02838067f95d --- /dev/null +++ b/vm/actorv2/src/builtin/codes.rs @@ -0,0 +1,64 @@ +// Copyright 2020 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +use cid::{multihash::Identity, Cid, Codec}; + +lazy_static! { + pub static ref SYSTEM_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/system"); + pub static ref INIT_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/init"); + pub static ref CRON_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/cron"); + pub static ref ACCOUNT_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/account"); + pub static ref POWER_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/storagepower"); + pub static ref MINER_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/storageminer"); + pub static ref MARKET_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/storagemarket"); + pub static ref PAYCH_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/paymentchannel"); + pub static ref MULTISIG_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/multisig"); + pub static ref REWARD_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/reward"); + pub static ref VERIFREG_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/verifiedregistry"); + pub static ref CHAOS_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/chaos"); + + // Set of actor code types that can represent external signing parties. + pub static ref CALLER_TYPES_SIGNABLE: [Cid; 2] = + [ACCOUNT_ACTOR_CODE_ID.clone(), MULTISIG_ACTOR_CODE_ID.clone()]; +} + +fn make_builtin(bz: &[u8]) -> Cid { + Cid::new_v1(Codec::Raw, Identity::digest(bz)) +} + +/// Returns true if the code `Cid` belongs to a builtin actor. +pub fn is_builtin_actor(code: &Cid) -> bool { + code == &*SYSTEM_ACTOR_CODE_ID + || code == &*INIT_ACTOR_CODE_ID + || code == &*CRON_ACTOR_CODE_ID + || code == &*ACCOUNT_ACTOR_CODE_ID + || code == &*POWER_ACTOR_CODE_ID + || code == &*MINER_ACTOR_CODE_ID + || code == &*MARKET_ACTOR_CODE_ID + || code == &*PAYCH_ACTOR_CODE_ID + || code == &*MULTISIG_ACTOR_CODE_ID + || code == &*REWARD_ACTOR_CODE_ID + || code == &*VERIFREG_ACTOR_CODE_ID +} + +/// Returns true if the code belongs to a singleton actor. +pub fn is_singleton_actor(code: &Cid) -> bool { + code == &*SYSTEM_ACTOR_CODE_ID + || code == &*INIT_ACTOR_CODE_ID + || code == &*REWARD_ACTOR_CODE_ID + || code == &*CRON_ACTOR_CODE_ID + || code == &*POWER_ACTOR_CODE_ID + || code == &*MARKET_ACTOR_CODE_ID + || code == &*VERIFREG_ACTOR_CODE_ID +} + +/// Returns true if the code belongs to an account actor. +pub fn is_account_actor(code: &Cid) -> bool { + code == &*ACCOUNT_ACTOR_CODE_ID +} + +// Tests whether a code CID represents an actor that can be an external principal: i.e. an account or multisig. +// We could do something more sophisticated here: https://github.com/filecoin-project/specs-actors/issues/178 +pub fn is_principal(code: &Cid) -> bool { + CALLER_TYPES_SIGNABLE.iter().any(|c| c == code) +} diff --git a/vm/actorv2/src/builtin/cron/mod.rs b/vm/actorv2/src/builtin/cron/mod.rs new file mode 100644 index 000000000000..a811e213f68d --- /dev/null +++ b/vm/actorv2/src/builtin/cron/mod.rs @@ -0,0 +1,11 @@ +// Copyright 2020 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) +// TODO actor v2 upgrade + +pub type Method = actorv1::cron::Method; + +pub type Actor = actorv1::cron::Actor; + +pub type State = actorv1::cron::State; diff --git a/vm/actorv2/src/builtin/init/mod.rs b/vm/actorv2/src/builtin/init/mod.rs new file mode 100644 index 000000000000..67993aac84b8 --- /dev/null +++ b/vm/actorv2/src/builtin/init/mod.rs @@ -0,0 +1,11 @@ +// Copyright 2020 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) +// TODO actor v2 upgrade + +pub type Method = actorv1::init::Method; + +pub type Actor = actorv1::init::Actor; + +pub type State = actorv1::init::State; diff --git a/vm/actorv2/src/builtin/market/mod.rs b/vm/actorv2/src/builtin/market/mod.rs new file mode 100644 index 000000000000..6c3dad8d7104 --- /dev/null +++ b/vm/actorv2/src/builtin/market/mod.rs @@ -0,0 +1,11 @@ +// Copyright 2020 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) +// TODO actor v2 upgrade + +pub type Method = actorv1::market::Method; + +pub type Actor = actorv1::market::Actor; + +pub type State = actorv1::market::State; diff --git a/vm/actorv2/src/builtin/miner/mod.rs b/vm/actorv2/src/builtin/miner/mod.rs new file mode 100644 index 000000000000..68e640bac3bb --- /dev/null +++ b/vm/actorv2/src/builtin/miner/mod.rs @@ -0,0 +1,11 @@ +// Copyright 2020 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) +// TODO actor v2 upgrade + +pub type Method = actorv1::miner::Method; + +pub type Actor = actorv1::miner::Actor; + +pub type State = actorv1::miner::State; diff --git a/vm/actorv2/src/builtin/mod.rs b/vm/actorv2/src/builtin/mod.rs new file mode 100644 index 000000000000..660586e7b2f9 --- /dev/null +++ b/vm/actorv2/src/builtin/mod.rs @@ -0,0 +1,19 @@ +// Copyright 2020 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +pub mod account; +mod codes; +pub mod cron; +pub mod init; +pub mod market; +pub mod miner; +pub mod multisig; +pub mod paych; +pub mod power; +pub mod reward; +pub mod system; +pub mod verifreg; + +pub use self::codes::*; +pub use actorv1::singletons::*; +pub use actorv1::network::*; diff --git a/vm/actorv2/src/builtin/multisig/mod.rs b/vm/actorv2/src/builtin/multisig/mod.rs new file mode 100644 index 000000000000..fd529783e220 --- /dev/null +++ b/vm/actorv2/src/builtin/multisig/mod.rs @@ -0,0 +1,11 @@ +// Copyright 2020 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) +// TODO actor v2 upgrade + +pub type Method = actorv1::multisig::Method; + +pub type Actor = actorv1::multisig::Actor; + +pub type State = actorv1::multisig::State; diff --git a/vm/actorv2/src/builtin/paych/mod.rs b/vm/actorv2/src/builtin/paych/mod.rs new file mode 100644 index 000000000000..e08a4ed0c8ce --- /dev/null +++ b/vm/actorv2/src/builtin/paych/mod.rs @@ -0,0 +1,11 @@ +// Copyright 2020 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) +// TODO actor v2 upgrade + +pub type Method = actorv1::paych::Method; + +pub type Actor = actorv1::paych::Actor; + +pub type State = actorv1::paych::State; diff --git a/vm/actorv2/src/builtin/power/mod.rs b/vm/actorv2/src/builtin/power/mod.rs new file mode 100644 index 000000000000..b9eb82b9773a --- /dev/null +++ b/vm/actorv2/src/builtin/power/mod.rs @@ -0,0 +1,11 @@ +// Copyright 2020 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) +// TODO actor v2 upgrade + +pub type Method = actorv1::power::Method; + +pub type Actor = actorv1::power::Actor; + +pub type State = actorv1::power::State; diff --git a/vm/actorv2/src/builtin/reward/mod.rs b/vm/actorv2/src/builtin/reward/mod.rs new file mode 100644 index 000000000000..18095fdfd298 --- /dev/null +++ b/vm/actorv2/src/builtin/reward/mod.rs @@ -0,0 +1,11 @@ +// Copyright 2020 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) +// TODO actor v2 upgrade + +pub type Method = actorv1::reward::Method; + +pub type Actor = actorv1::reward::Actor; + +pub type State = actorv1::reward::State; diff --git a/vm/actorv2/src/builtin/system/mod.rs b/vm/actorv2/src/builtin/system/mod.rs new file mode 100644 index 000000000000..cf4bd1b94a4e --- /dev/null +++ b/vm/actorv2/src/builtin/system/mod.rs @@ -0,0 +1,11 @@ +// Copyright 2020 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) +// TODO actor v2 upgrade + +pub type Method = actorv1::system::Method; + +pub type Actor = actorv1::system::Actor; + +pub type State = actorv1::system::State; diff --git a/vm/actorv2/src/builtin/verifreg/mod.rs b/vm/actorv2/src/builtin/verifreg/mod.rs new file mode 100644 index 000000000000..a3f296fdf8b0 --- /dev/null +++ b/vm/actorv2/src/builtin/verifreg/mod.rs @@ -0,0 +1,11 @@ +// Copyright 2020 ChainSafe Systems +// SPDX-License-Identifier: Apache-2.0, MIT + +// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) +// TODO actor v2 upgrade + +pub type Method = actorv1::verifreg::Method; + +pub type Actor = actorv1::verifreg::Actor; + +pub type State = actorv1::verifreg::State; diff --git a/vm/actorv2/src/lib.rs b/vm/actorv2/src/lib.rs index daf5fbcad91d..2209a9053072 100644 --- a/vm/actorv2/src/lib.rs +++ b/vm/actorv2/src/lib.rs @@ -1,12 +1,87 @@ // Copyright 2020 ChainSafe Systems // SPDX-License-Identifier: Apache-2.0, MIT -//! Re-export of actors functionality with v2 feature flag set. -//! -//! The reason for this crate is the restriction from having a dependency referenced twice, -//! where we actually do want to reference a lot of duplicate logic for actors versions. -//! -//! If only one copy of actors is needed, the actors crate should be used with the `v2` feature -//! set instead. - -pub use actor::*; +#[macro_use] +extern crate lazy_static; + +mod builtin; + +pub use self::builtin::*; +pub use actorv1::util::*; +pub use actorv1::{ + check_empty_params, parse_uint_key, u64_key, DealWeight, TOKEN_PRECISION, TOTAL_FILECOIN, +}; +pub use vm::{ + actor_error, ActorError, ActorState, DealID, ExitCode, MethodNum, Serialized, TokenAmount, +}; + +use cid::Cid; +use fil_types::HAMT_BIT_WIDTH; +use ipld_blockstore::BlockStore; +use ipld_hamt::{BytesKey, Error as HamtError, Hamt}; +use runtime::{ActorCode, Runtime}; +use serde::{de::DeserializeOwned, Serialize}; + +/// Map type to be used within actors. The underlying type is a hamt. +// TODO needs to use different version of Hamt than v1 +pub type Map<'bs, BS, V> = Hamt<'bs, BS, V, BytesKey>; + +/// Create a hamt configured with constant bit width. +#[inline] +pub fn make_map(store: &'_ BS) -> Map<'_, BS, V> +where + BS: BlockStore, + V: DeserializeOwned + Serialize + Clone, +{ + Map::<_, V>::new_with_bit_width(store, HAMT_BIT_WIDTH) +} + +/// Create a map with a root cid. +#[inline] +pub fn make_map_with_root<'bs, BS, V>( + root: &Cid, + store: &'bs BS, +) -> Result, HamtError> +where + BS: BlockStore, + V: DeserializeOwned + Serialize + Clone, +{ + Map::<_, V>::load_with_bit_width(root, store, HAMT_BIT_WIDTH) +} + +pub fn invoke_code( + code: &Cid, + rt: &mut RT, + method_num: MethodNum, + params: &Serialized, +) -> Option> +where + BS: BlockStore, + RT: Runtime, +{ + if code == &*SYSTEM_ACTOR_CODE_ID { + Some(system::Actor::invoke_method(rt, method_num, params)) + } else if code == &*INIT_ACTOR_CODE_ID { + Some(init::Actor::invoke_method(rt, method_num, params)) + } else if code == &*CRON_ACTOR_CODE_ID { + Some(cron::Actor::invoke_method(rt, method_num, params)) + } else if code == &*ACCOUNT_ACTOR_CODE_ID { + Some(account::Actor::invoke_method(rt, method_num, params)) + } else if code == &*POWER_ACTOR_CODE_ID { + Some(power::Actor::invoke_method(rt, method_num, params)) + } else if code == &*MINER_ACTOR_CODE_ID { + Some(miner::Actor::invoke_method(rt, method_num, params)) + } else if code == &*MARKET_ACTOR_CODE_ID { + Some(market::Actor::invoke_method(rt, method_num, params)) + } else if code == &*PAYCH_ACTOR_CODE_ID { + Some(paych::Actor::invoke_method(rt, method_num, params)) + } else if code == &*MULTISIG_ACTOR_CODE_ID { + Some(multisig::Actor::invoke_method(rt, method_num, params)) + } else if code == &*REWARD_ACTOR_CODE_ID { + Some(reward::Actor::invoke_method(rt, method_num, params)) + } else if code == &*VERIFREG_ACTOR_CODE_ID { + Some(verifreg::Actor::invoke_method(rt, method_num, params)) + } else { + None + } +} diff --git a/vm/interpreter/src/default_runtime.rs b/vm/interpreter/src/default_runtime.rs index 6f17b2f1415b..f7acd770d8b1 100644 --- a/vm/interpreter/src/default_runtime.rs +++ b/vm/interpreter/src/default_runtime.rs @@ -972,32 +972,20 @@ where P: NetworkParams, R: Rand, { - let ret = match code { - x if x == *SYSTEM_ACTOR_CODE_ID => system::Actor.invoke_method(rt, method_num, params), - x if x == *INIT_ACTOR_CODE_ID => init::Actor.invoke_method(rt, method_num, params), - x if x == *CRON_ACTOR_CODE_ID => cron::Actor.invoke_method(rt, method_num, params), - x if x == *ACCOUNT_ACTOR_CODE_ID => account::Actor.invoke_method(rt, method_num, params), - x if x == *POWER_ACTOR_CODE_ID => power::Actor.invoke_method(rt, method_num, params), - x if x == *MINER_ACTOR_CODE_ID => miner::Actor.invoke_method(rt, method_num, params), - x if x == *MARKET_ACTOR_CODE_ID => market::Actor.invoke_method(rt, method_num, params), - x if x == *PAYCH_ACTOR_CODE_ID => paych::Actor.invoke_method(rt, method_num, params), - x if x == *MULTISIG_ACTOR_CODE_ID => multisig::Actor.invoke_method(rt, method_num, params), - x if x == *REWARD_ACTOR_CODE_ID => reward::Actor.invoke_method(rt, method_num, params), - x if x == *VERIFREG_ACTOR_CODE_ID => verifreg::Actor.invoke_method(rt, method_num, params), - x => { - if rt.registered_actors.contains(&x) { - match x { - x if x == *CHAOS_ACTOR_CODE_ID => { - chaos::Actor.invoke_method(rt, method_num, params) - } - _ => Err(actor_error!(SysErrorIllegalActor; - "no code for registered actor at address {}", to)), - } - } else { - Err(actor_error!(SysErrorIllegalActor; "no code for actor at address {}", to)) - } - } + let ret = if let Some(ret) = actorv2::invoke_code(&code, rt, method_num, params) { + ret + } else if let Some(ret) = actor::invoke_code(&code, rt, method_num, params) { + ret + } else if code == *CHAOS_ACTOR_CODE_ID && rt.registered_actors.contains(&code) { + chaos::Actor::invoke_method(rt, method_num, params) + } else { + Err(actor_error!( + SysErrorIllegalActor, + "no code for actor at address {}", + to + )) }?; + if !rt.caller_validated { Err(actor_error!(SysErrorIllegalActor; "Caller must be validated during method execution")) } else { @@ -1072,3 +1060,7 @@ fn new_secp256k1_account_actor() -> ActorState { sequence: 0, } } + +fn is_builtin_actor(code: &Cid) -> bool { + actor::is_builtin_actor(code) || actorv2::is_builtin_actor(code) +} diff --git a/vm/runtime/src/actor_code.rs b/vm/runtime/src/actor_code.rs index 10126f8c3f51..8c52c1770444 100644 --- a/vm/runtime/src/actor_code.rs +++ b/vm/runtime/src/actor_code.rs @@ -10,7 +10,6 @@ pub trait ActorCode { /// Invokes method with runtime on the actor's code. Method number will match one /// defined by the Actor, and parameters will be serialized and used in execution fn invoke_method( - &self, rt: &mut RT, method: MethodNum, params: &Serialized, From 7d722f6130ef154c551d8e5f09db64c57084cbcc Mon Sep 17 00:00:00 2001 From: austinabell Date: Tue, 27 Oct 2020 14:20:20 -0400 Subject: [PATCH 5/7] Remove actors v2 --- Cargo.lock | 16 ----- Cargo.toml | 1 - vm/actorv2/Cargo.toml | 17 ----- vm/actorv2/src/builtin/account/mod.rs | 11 ---- vm/actorv2/src/builtin/codes.rs | 64 ------------------- vm/actorv2/src/builtin/cron/mod.rs | 11 ---- vm/actorv2/src/builtin/init/mod.rs | 11 ---- vm/actorv2/src/builtin/market/mod.rs | 11 ---- vm/actorv2/src/builtin/miner/mod.rs | 11 ---- vm/actorv2/src/builtin/mod.rs | 19 ------ vm/actorv2/src/builtin/multisig/mod.rs | 11 ---- vm/actorv2/src/builtin/paych/mod.rs | 11 ---- vm/actorv2/src/builtin/power/mod.rs | 11 ---- vm/actorv2/src/builtin/reward/mod.rs | 11 ---- vm/actorv2/src/builtin/system/mod.rs | 11 ---- vm/actorv2/src/builtin/verifreg/mod.rs | 11 ---- vm/actorv2/src/lib.rs | 87 -------------------------- vm/interpreter/Cargo.toml | 1 - vm/interpreter/src/default_runtime.rs | 6 +- 19 files changed, 2 insertions(+), 330 deletions(-) delete mode 100644 vm/actorv2/Cargo.toml delete mode 100644 vm/actorv2/src/builtin/account/mod.rs delete mode 100644 vm/actorv2/src/builtin/codes.rs delete mode 100644 vm/actorv2/src/builtin/cron/mod.rs delete mode 100644 vm/actorv2/src/builtin/init/mod.rs delete mode 100644 vm/actorv2/src/builtin/market/mod.rs delete mode 100644 vm/actorv2/src/builtin/miner/mod.rs delete mode 100644 vm/actorv2/src/builtin/mod.rs delete mode 100644 vm/actorv2/src/builtin/multisig/mod.rs delete mode 100644 vm/actorv2/src/builtin/paych/mod.rs delete mode 100644 vm/actorv2/src/builtin/power/mod.rs delete mode 100644 vm/actorv2/src/builtin/reward/mod.rs delete mode 100644 vm/actorv2/src/builtin/system/mod.rs delete mode 100644 vm/actorv2/src/builtin/verifreg/mod.rs delete mode 100644 vm/actorv2/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 69fce0fc50df..b3366b0eed52 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -46,21 +46,6 @@ dependencies = [ "unsigned-varint 0.5.1", ] -[[package]] -name = "actorv2" -version = "0.1.0" -dependencies = [ - "actor", - "fil_types", - "forest_cid", - "forest_vm", - "ipld_blockstore", - "ipld_hamt", - "lazy_static", - "runtime", - "serde", -] - [[package]] name = "addr2line" version = "0.13.0" @@ -3053,7 +3038,6 @@ name = "interpreter" version = "0.1.0" dependencies = [ "actor", - "actorv2", "ahash 0.4.6", "byteorder 1.3.4", "chain", diff --git a/Cargo.toml b/Cargo.toml index d49bc6964f5b..153b1d7e09c9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,6 @@ members = [ "blockchain/message_pool", "vm", "vm/actor", - "vm/actorv2", "vm/address", "vm/message", "vm/runtime", diff --git a/vm/actorv2/Cargo.toml b/vm/actorv2/Cargo.toml deleted file mode 100644 index 0fe4cba02c18..000000000000 --- a/vm/actorv2/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -name = "actorv2" -version = "0.1.0" -authors = ["ChainSafe Systems "] -edition = "2018" - -[dependencies] -actorv1 = { path = "../actor", package = "actor" } -cid = { package = "forest_cid", path = "../../ipld/cid", features = ["cbor"] } -ipld_blockstore = { path = "../../ipld/blockstore" } -# TODO should use v2 feature (or released version) once separated -ipld_hamt = { path = "../../ipld/hamt", features = ["go-interop"] } -vm = { package = "forest_vm", path = "../../vm" } -serde = { version = "1.0", features = ["derive"] } -lazy_static = "1.4.0" -fil_types = { path = "../../types" } -runtime = { path = "../runtime" } diff --git a/vm/actorv2/src/builtin/account/mod.rs b/vm/actorv2/src/builtin/account/mod.rs deleted file mode 100644 index 244ede4e8cf9..000000000000 --- a/vm/actorv2/src/builtin/account/mod.rs +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2020 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) -// TODO actor v2 upgrade - -pub type Method = actorv1::account::Method; - -pub type Actor = actorv1::account::Actor; - -pub type State = actorv1::account::State; diff --git a/vm/actorv2/src/builtin/codes.rs b/vm/actorv2/src/builtin/codes.rs deleted file mode 100644 index 02838067f95d..000000000000 --- a/vm/actorv2/src/builtin/codes.rs +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2020 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -use cid::{multihash::Identity, Cid, Codec}; - -lazy_static! { - pub static ref SYSTEM_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/system"); - pub static ref INIT_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/init"); - pub static ref CRON_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/cron"); - pub static ref ACCOUNT_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/account"); - pub static ref POWER_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/storagepower"); - pub static ref MINER_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/storageminer"); - pub static ref MARKET_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/storagemarket"); - pub static ref PAYCH_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/paymentchannel"); - pub static ref MULTISIG_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/multisig"); - pub static ref REWARD_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/reward"); - pub static ref VERIFREG_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/verifiedregistry"); - pub static ref CHAOS_ACTOR_CODE_ID: Cid = make_builtin(b"fil/2/chaos"); - - // Set of actor code types that can represent external signing parties. - pub static ref CALLER_TYPES_SIGNABLE: [Cid; 2] = - [ACCOUNT_ACTOR_CODE_ID.clone(), MULTISIG_ACTOR_CODE_ID.clone()]; -} - -fn make_builtin(bz: &[u8]) -> Cid { - Cid::new_v1(Codec::Raw, Identity::digest(bz)) -} - -/// Returns true if the code `Cid` belongs to a builtin actor. -pub fn is_builtin_actor(code: &Cid) -> bool { - code == &*SYSTEM_ACTOR_CODE_ID - || code == &*INIT_ACTOR_CODE_ID - || code == &*CRON_ACTOR_CODE_ID - || code == &*ACCOUNT_ACTOR_CODE_ID - || code == &*POWER_ACTOR_CODE_ID - || code == &*MINER_ACTOR_CODE_ID - || code == &*MARKET_ACTOR_CODE_ID - || code == &*PAYCH_ACTOR_CODE_ID - || code == &*MULTISIG_ACTOR_CODE_ID - || code == &*REWARD_ACTOR_CODE_ID - || code == &*VERIFREG_ACTOR_CODE_ID -} - -/// Returns true if the code belongs to a singleton actor. -pub fn is_singleton_actor(code: &Cid) -> bool { - code == &*SYSTEM_ACTOR_CODE_ID - || code == &*INIT_ACTOR_CODE_ID - || code == &*REWARD_ACTOR_CODE_ID - || code == &*CRON_ACTOR_CODE_ID - || code == &*POWER_ACTOR_CODE_ID - || code == &*MARKET_ACTOR_CODE_ID - || code == &*VERIFREG_ACTOR_CODE_ID -} - -/// Returns true if the code belongs to an account actor. -pub fn is_account_actor(code: &Cid) -> bool { - code == &*ACCOUNT_ACTOR_CODE_ID -} - -// Tests whether a code CID represents an actor that can be an external principal: i.e. an account or multisig. -// We could do something more sophisticated here: https://github.com/filecoin-project/specs-actors/issues/178 -pub fn is_principal(code: &Cid) -> bool { - CALLER_TYPES_SIGNABLE.iter().any(|c| c == code) -} diff --git a/vm/actorv2/src/builtin/cron/mod.rs b/vm/actorv2/src/builtin/cron/mod.rs deleted file mode 100644 index a811e213f68d..000000000000 --- a/vm/actorv2/src/builtin/cron/mod.rs +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2020 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) -// TODO actor v2 upgrade - -pub type Method = actorv1::cron::Method; - -pub type Actor = actorv1::cron::Actor; - -pub type State = actorv1::cron::State; diff --git a/vm/actorv2/src/builtin/init/mod.rs b/vm/actorv2/src/builtin/init/mod.rs deleted file mode 100644 index 67993aac84b8..000000000000 --- a/vm/actorv2/src/builtin/init/mod.rs +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2020 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) -// TODO actor v2 upgrade - -pub type Method = actorv1::init::Method; - -pub type Actor = actorv1::init::Actor; - -pub type State = actorv1::init::State; diff --git a/vm/actorv2/src/builtin/market/mod.rs b/vm/actorv2/src/builtin/market/mod.rs deleted file mode 100644 index 6c3dad8d7104..000000000000 --- a/vm/actorv2/src/builtin/market/mod.rs +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2020 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) -// TODO actor v2 upgrade - -pub type Method = actorv1::market::Method; - -pub type Actor = actorv1::market::Actor; - -pub type State = actorv1::market::State; diff --git a/vm/actorv2/src/builtin/miner/mod.rs b/vm/actorv2/src/builtin/miner/mod.rs deleted file mode 100644 index 68e640bac3bb..000000000000 --- a/vm/actorv2/src/builtin/miner/mod.rs +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2020 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) -// TODO actor v2 upgrade - -pub type Method = actorv1::miner::Method; - -pub type Actor = actorv1::miner::Actor; - -pub type State = actorv1::miner::State; diff --git a/vm/actorv2/src/builtin/mod.rs b/vm/actorv2/src/builtin/mod.rs deleted file mode 100644 index 660586e7b2f9..000000000000 --- a/vm/actorv2/src/builtin/mod.rs +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2020 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -pub mod account; -mod codes; -pub mod cron; -pub mod init; -pub mod market; -pub mod miner; -pub mod multisig; -pub mod paych; -pub mod power; -pub mod reward; -pub mod system; -pub mod verifreg; - -pub use self::codes::*; -pub use actorv1::singletons::*; -pub use actorv1::network::*; diff --git a/vm/actorv2/src/builtin/multisig/mod.rs b/vm/actorv2/src/builtin/multisig/mod.rs deleted file mode 100644 index fd529783e220..000000000000 --- a/vm/actorv2/src/builtin/multisig/mod.rs +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2020 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) -// TODO actor v2 upgrade - -pub type Method = actorv1::multisig::Method; - -pub type Actor = actorv1::multisig::Actor; - -pub type State = actorv1::multisig::State; diff --git a/vm/actorv2/src/builtin/paych/mod.rs b/vm/actorv2/src/builtin/paych/mod.rs deleted file mode 100644 index e08a4ed0c8ce..000000000000 --- a/vm/actorv2/src/builtin/paych/mod.rs +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2020 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) -// TODO actor v2 upgrade - -pub type Method = actorv1::paych::Method; - -pub type Actor = actorv1::paych::Actor; - -pub type State = actorv1::paych::State; diff --git a/vm/actorv2/src/builtin/power/mod.rs b/vm/actorv2/src/builtin/power/mod.rs deleted file mode 100644 index b9eb82b9773a..000000000000 --- a/vm/actorv2/src/builtin/power/mod.rs +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2020 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) -// TODO actor v2 upgrade - -pub type Method = actorv1::power::Method; - -pub type Actor = actorv1::power::Actor; - -pub type State = actorv1::power::State; diff --git a/vm/actorv2/src/builtin/reward/mod.rs b/vm/actorv2/src/builtin/reward/mod.rs deleted file mode 100644 index 18095fdfd298..000000000000 --- a/vm/actorv2/src/builtin/reward/mod.rs +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2020 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) -// TODO actor v2 upgrade - -pub type Method = actorv1::reward::Method; - -pub type Actor = actorv1::reward::Actor; - -pub type State = actorv1::reward::State; diff --git a/vm/actorv2/src/builtin/system/mod.rs b/vm/actorv2/src/builtin/system/mod.rs deleted file mode 100644 index cf4bd1b94a4e..000000000000 --- a/vm/actorv2/src/builtin/system/mod.rs +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2020 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) -// TODO actor v2 upgrade - -pub type Method = actorv1::system::Method; - -pub type Actor = actorv1::system::Actor; - -pub type State = actorv1::system::State; diff --git a/vm/actorv2/src/builtin/verifreg/mod.rs b/vm/actorv2/src/builtin/verifreg/mod.rs deleted file mode 100644 index a3f296fdf8b0..000000000000 --- a/vm/actorv2/src/builtin/verifreg/mod.rs +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2020 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -// * Updated to specs-actors commit: 17d3c602059e5c48407fb3c34343da87e6ea6586 (v0.9.12) -// TODO actor v2 upgrade - -pub type Method = actorv1::verifreg::Method; - -pub type Actor = actorv1::verifreg::Actor; - -pub type State = actorv1::verifreg::State; diff --git a/vm/actorv2/src/lib.rs b/vm/actorv2/src/lib.rs deleted file mode 100644 index 2209a9053072..000000000000 --- a/vm/actorv2/src/lib.rs +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2020 ChainSafe Systems -// SPDX-License-Identifier: Apache-2.0, MIT - -#[macro_use] -extern crate lazy_static; - -mod builtin; - -pub use self::builtin::*; -pub use actorv1::util::*; -pub use actorv1::{ - check_empty_params, parse_uint_key, u64_key, DealWeight, TOKEN_PRECISION, TOTAL_FILECOIN, -}; -pub use vm::{ - actor_error, ActorError, ActorState, DealID, ExitCode, MethodNum, Serialized, TokenAmount, -}; - -use cid::Cid; -use fil_types::HAMT_BIT_WIDTH; -use ipld_blockstore::BlockStore; -use ipld_hamt::{BytesKey, Error as HamtError, Hamt}; -use runtime::{ActorCode, Runtime}; -use serde::{de::DeserializeOwned, Serialize}; - -/// Map type to be used within actors. The underlying type is a hamt. -// TODO needs to use different version of Hamt than v1 -pub type Map<'bs, BS, V> = Hamt<'bs, BS, V, BytesKey>; - -/// Create a hamt configured with constant bit width. -#[inline] -pub fn make_map(store: &'_ BS) -> Map<'_, BS, V> -where - BS: BlockStore, - V: DeserializeOwned + Serialize + Clone, -{ - Map::<_, V>::new_with_bit_width(store, HAMT_BIT_WIDTH) -} - -/// Create a map with a root cid. -#[inline] -pub fn make_map_with_root<'bs, BS, V>( - root: &Cid, - store: &'bs BS, -) -> Result, HamtError> -where - BS: BlockStore, - V: DeserializeOwned + Serialize + Clone, -{ - Map::<_, V>::load_with_bit_width(root, store, HAMT_BIT_WIDTH) -} - -pub fn invoke_code( - code: &Cid, - rt: &mut RT, - method_num: MethodNum, - params: &Serialized, -) -> Option> -where - BS: BlockStore, - RT: Runtime, -{ - if code == &*SYSTEM_ACTOR_CODE_ID { - Some(system::Actor::invoke_method(rt, method_num, params)) - } else if code == &*INIT_ACTOR_CODE_ID { - Some(init::Actor::invoke_method(rt, method_num, params)) - } else if code == &*CRON_ACTOR_CODE_ID { - Some(cron::Actor::invoke_method(rt, method_num, params)) - } else if code == &*ACCOUNT_ACTOR_CODE_ID { - Some(account::Actor::invoke_method(rt, method_num, params)) - } else if code == &*POWER_ACTOR_CODE_ID { - Some(power::Actor::invoke_method(rt, method_num, params)) - } else if code == &*MINER_ACTOR_CODE_ID { - Some(miner::Actor::invoke_method(rt, method_num, params)) - } else if code == &*MARKET_ACTOR_CODE_ID { - Some(market::Actor::invoke_method(rt, method_num, params)) - } else if code == &*PAYCH_ACTOR_CODE_ID { - Some(paych::Actor::invoke_method(rt, method_num, params)) - } else if code == &*MULTISIG_ACTOR_CODE_ID { - Some(multisig::Actor::invoke_method(rt, method_num, params)) - } else if code == &*REWARD_ACTOR_CODE_ID { - Some(reward::Actor::invoke_method(rt, method_num, params)) - } else if code == &*VERIFREG_ACTOR_CODE_ID { - Some(verifreg::Actor::invoke_method(rt, method_num, params)) - } else { - None - } -} diff --git a/vm/interpreter/Cargo.toml b/vm/interpreter/Cargo.toml index dab8ff1fbc41..dd709816409f 100644 --- a/vm/interpreter/Cargo.toml +++ b/vm/interpreter/Cargo.toml @@ -7,7 +7,6 @@ edition = "2018" [dependencies] address = { package = "forest_address", path = "../address" } actor = { path = "../actor" } -actorv2 = { path = "../actorv2" } message = { package = "forest_message", path = "../message" } runtime = { path = "../runtime" } blocks = { package = "forest_blocks", path = "../../blockchain/blocks" } diff --git a/vm/interpreter/src/default_runtime.rs b/vm/interpreter/src/default_runtime.rs index f7acd770d8b1..1169a01d4cc7 100644 --- a/vm/interpreter/src/default_runtime.rs +++ b/vm/interpreter/src/default_runtime.rs @@ -972,9 +972,7 @@ where P: NetworkParams, R: Rand, { - let ret = if let Some(ret) = actorv2::invoke_code(&code, rt, method_num, params) { - ret - } else if let Some(ret) = actor::invoke_code(&code, rt, method_num, params) { + let ret = if let Some(ret) = actor::invoke_code(&code, rt, method_num, params) { ret } else if code == *CHAOS_ACTOR_CODE_ID && rt.registered_actors.contains(&code) { chaos::Actor::invoke_method(rt, method_num, params) @@ -1062,5 +1060,5 @@ fn new_secp256k1_account_actor() -> ActorState { } fn is_builtin_actor(code: &Cid) -> bool { - actor::is_builtin_actor(code) || actorv2::is_builtin_actor(code) + actor::is_builtin_actor(code) } From 59ebe1905f319f3cd0ff23ba1429a357de8c165e Mon Sep 17 00:00:00 2001 From: austinabell Date: Tue, 27 Oct 2020 14:24:17 -0400 Subject: [PATCH 6/7] ignore clippy warning --- types/src/deadlines/mod.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/types/src/deadlines/mod.rs b/types/src/deadlines/mod.rs index fbec1da121b0..b221cde5ddac 100644 --- a/types/src/deadlines/mod.rs +++ b/types/src/deadlines/mod.rs @@ -37,6 +37,7 @@ pub struct DeadlineInfo { } impl DeadlineInfo { + #[allow(clippy::too_many_arguments)] pub fn new( period_start: ChainEpoch, deadline_idx: u64, From d60d2e289c7a7e17775e922d723a45c43fd4ef85 Mon Sep 17 00:00:00 2001 From: austinabell Date: Wed, 28 Oct 2020 08:19:51 -0400 Subject: [PATCH 7/7] Remove duplicate token types --- vm/actor/src/builtin/market/policy.rs | 4 ++-- vm/actor/src/builtin/reward/types.rs | 5 ----- vm/actor/src/lib.rs | 10 ---------- 3 files changed, 2 insertions(+), 17 deletions(-) diff --git a/vm/actor/src/builtin/market/policy.rs b/vm/actor/src/builtin/market/policy.rs index 2fe1abc0fe4c..88087b827cbd 100644 --- a/vm/actor/src/builtin/market/policy.rs +++ b/vm/actor/src/builtin/market/policy.rs @@ -6,9 +6,9 @@ use crate::network::{ DEAL_WEIGHT_MULTIPLIER, EPOCHS_IN_DAY, QUALITY_BASE_MULTIPLIER, SECTOR_QUALITY_PRECISION, VERIFIED_DEAL_WEIGHT_MULTIPLIER, }; -use crate::{DealWeight, TOTAL_FILECOIN}; +use crate::DealWeight; use clock::ChainEpoch; -use fil_types::{NetworkVersion, PaddedPieceSize, StoragePower}; +use fil_types::{NetworkVersion, PaddedPieceSize, StoragePower, TOTAL_FILECOIN}; use num_bigint::Integer; use num_traits::Zero; use std::cmp::max; diff --git a/vm/actor/src/builtin/reward/types.rs b/vm/actor/src/builtin/reward/types.rs index a23f7b23e046..fca31f3c2750 100644 --- a/vm/actor/src/builtin/reward/types.rs +++ b/vm/actor/src/builtin/reward/types.rs @@ -8,11 +8,6 @@ use fil_types::StoragePower; use num_bigint::bigint_ser; use vm::TokenAmount; -/// Number of token units in an abstract "FIL" token. -/// The network works purely in the indivisible token amounts. This constant converts to a fixed decimal with more -/// human-friendly scale. -pub const TOKEN_PRECISION: u64 = 1_000_000_000_000_000_000; - #[derive(Clone, Debug, PartialEq, Serialize_tuple, Deserialize_tuple)] pub struct AwardBlockRewardParams { pub miner: Address, diff --git a/vm/actor/src/lib.rs b/vm/actor/src/lib.rs index b30e4ee32e95..f90173b45422 100644 --- a/vm/actor/src/lib.rs +++ b/vm/actor/src/lib.rs @@ -25,16 +25,6 @@ use runtime::{ActorCode, Runtime}; use serde::{de::DeserializeOwned, Serialize}; use unsigned_varint::decode::Error as UVarintError; -lazy_static! { - /// The maximum supply of Filecoin that will ever exist (in token units) - pub static ref TOTAL_FILECOIN: TokenAmount = TokenAmount::from(2_000_000_000) * TOKEN_PRECISION; -} - -/// Number of token units in an abstract "FIL" token. -/// The network works purely in the indivisible token amounts. -/// This constant converts to a fixed decimal with more human-friendly scale. -pub const TOKEN_PRECISION: u64 = 1_000_000_000_000_000_000; - /// Map type to be used within actors. The underlying type is a hamt. pub type Map<'bs, BS, V> = Hamt<'bs, BS, V, BytesKey>;