From 612516da80c41e76bc6a5b70b4f4c133e88683cd Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Thu, 7 Dec 2023 14:36:22 +0900 Subject: [PATCH] refactor: simplify the DefaultFilecoinKernel generics It's not _actually_ generic over the inner kernel type (only works for the `DefaultKernel`), so we might as well simplify that. I.e., was: DefaultFilecoinKernel> Now: DefaultFilecoinKernel --- fvm/src/kernel/filecoin.rs | 32 +++++++++++++++---------------- fvm/src/lib.rs | 9 +++++---- fvm/src/syscalls/mod.rs | 5 ++--- testing/conformance/src/vm.rs | 5 +---- testing/integration/src/tester.rs | 6 +++--- 5 files changed, 26 insertions(+), 31 deletions(-) diff --git a/fvm/src/kernel/filecoin.rs b/fvm/src/kernel/filecoin.rs index d63b78567a..cc69f0d9fe 100644 --- a/fvm/src/kernel/filecoin.rs +++ b/fvm/src/kernel/filecoin.rs @@ -88,24 +88,22 @@ pub trait FilecoinKernel: Kernel { } #[derive(Delegate)] -#[delegate(IpldBlockOps)] -#[delegate(ActorOps)] -#[delegate(CryptoOps)] -#[delegate(DebugOps)] -#[delegate(EventOps)] -#[delegate(GasOps)] -#[delegate(MessageOps)] -#[delegate(NetworkOps)] -#[delegate(RandomnessOps)] -#[delegate(SelfOps)] -pub struct DefaultFilecoinKernel(pub K) -where - K: Kernel; - -impl FilecoinKernel for DefaultFilecoinKernel> +#[delegate(IpldBlockOps, where = "C: CallManager")] +#[delegate(ActorOps, where = "C: CallManager")] +#[delegate(CryptoOps, where = "C: CallManager")] +#[delegate(DebugOps, where = "C: CallManager")] +#[delegate(EventOps, where = "C: CallManager")] +#[delegate(GasOps, where = "C: CallManager")] +#[delegate(MessageOps, where = "C: CallManager")] +#[delegate(NetworkOps, where = "C: CallManager")] +#[delegate(RandomnessOps, where = "C: CallManager")] +#[delegate(SelfOps, where = "C: CallManager")] +pub struct DefaultFilecoinKernel(pub DefaultKernel); + +impl FilecoinKernel for DefaultFilecoinKernel where C: CallManager, - DefaultFilecoinKernel>: Kernel, + DefaultFilecoinKernel: Kernel, { fn compute_unsealed_sector_cid( &self, @@ -245,7 +243,7 @@ where } } -impl Kernel for DefaultFilecoinKernel> +impl Kernel for DefaultFilecoinKernel where C: CallManager, { diff --git a/fvm/src/lib.rs b/fvm/src/lib.rs index 65d0b624e8..5147e40a24 100644 --- a/fvm/src/lib.rs +++ b/fvm/src/lib.rs @@ -54,11 +54,11 @@ mod test { use crate::call_manager::DefaultCallManager; use crate::engine::EnginePool; + use crate::executor; use crate::externs::{Chain, Consensus, Externs, Rand}; use crate::kernel::filecoin::DefaultFilecoinKernel; use crate::machine::{DefaultMachine, Manifest, NetworkConfig}; use crate::state_tree::StateTree; - use crate::{executor, DefaultKernel}; struct DummyExterns; @@ -125,8 +125,9 @@ mod test { let machine = DefaultMachine::new(&mc, bs, DummyExterns).unwrap(); let engine = EnginePool::new_default((&mc.network).into()).unwrap(); - let _ = executor::DefaultExecutor::< - DefaultFilecoinKernel>>, - >::new(engine, Box::new(machine)); + let _ = executor::DefaultExecutor::>>::new( + engine, + Box::new(machine), + ); } } diff --git a/fvm/src/syscalls/mod.rs b/fvm/src/syscalls/mod.rs index ddf5557238..9b2a4b4572 100644 --- a/fvm/src/syscalls/mod.rs +++ b/fvm/src/syscalls/mod.rs @@ -329,13 +329,12 @@ where } } -impl SyscallHandler>> - for DefaultFilecoinKernel> +impl SyscallHandler> for DefaultFilecoinKernel where C: CallManager, { fn bind_syscalls( - linker: &mut Linker>>>, + linker: &mut Linker>>, ) -> anyhow::Result<()> { DefaultKernel::::bind_syscalls(linker)?; diff --git a/testing/conformance/src/vm.rs b/testing/conformance/src/vm.rs index ba721b436d..86ee264398 100644 --- a/testing/conformance/src/vm.rs +++ b/testing/conformance/src/vm.rs @@ -23,7 +23,6 @@ use wasmtime::Linker; // We have glob imports here because delegation doesn't work well without it. use fvm::kernel::prelude::*; use fvm::kernel::Result; -use fvm::DefaultKernel; use crate::externs::TestExterns; use crate::vector::{MessageVector, Variant}; @@ -170,9 +169,7 @@ where #[delegate(NetworkOps)] #[delegate(RandomnessOps)] #[delegate(SelfOps)] -pub struct TestKernel>>>( - pub K, -); +pub struct TestKernel>>(pub K); impl Kernel for TestKernel where diff --git a/testing/integration/src/tester.rs b/testing/integration/src/tester.rs index 6ba16b16d9..1d79d72337 100644 --- a/testing/integration/src/tester.rs +++ b/testing/integration/src/tester.rs @@ -9,7 +9,7 @@ use fvm::externs::Externs; use fvm::kernel::filecoin::DefaultFilecoinKernel; use fvm::machine::{DefaultMachine, Machine, MachineContext, NetworkConfig}; use fvm::state_tree::{ActorState, StateTree}; -use fvm::{init_actor, system_actor, DefaultKernel}; +use fvm::{init_actor, system_actor}; use fvm_ipld_blockstore::{Block, Blockstore, MemoryBlockstore}; use fvm_ipld_encoding::{ser, CborStore}; use fvm_shared::address::{Address, Protocol}; @@ -36,7 +36,7 @@ lazy_static! { pub trait Store: Blockstore + Sized + 'static {} pub type IntegrationExecutor = - DefaultExecutor>>>>; + DefaultExecutor>>>; pub type Account = (ActorID, Address); @@ -298,7 +298,7 @@ where let machine = DefaultMachine::new(&mc, blockstore, externs)?; let executor = DefaultExecutor::< - DefaultFilecoinKernel>>>, + DefaultFilecoinKernel>>, >::new(engine, machine)?; self.executor = Some(executor);