From 18182921f8e1c4a95079a4f609259ee78f319217 Mon Sep 17 00:00:00 2001 From: songtianyi Date: Tue, 23 Mar 2021 14:51:51 +0800 Subject: [PATCH] feat: migrate crab->backing from declarative macro to procedural macro --- bin/node/cli/src/chain_spec.rs | 4 +- bin/node/runtime/pangolin/src/lib.rs | 2 +- frame/bridge/crab/backing/src/lib.rs | 90 ++++++++++++++++------------ 3 files changed, 54 insertions(+), 42 deletions(-) diff --git a/bin/node/cli/src/chain_spec.rs b/bin/node/cli/src/chain_spec.rs index 28b5c33307..944df51356 100644 --- a/bin/node/cli/src/chain_spec.rs +++ b/bin/node/cli/src/chain_spec.rs @@ -219,7 +219,7 @@ fn pangolin_build_spec_genesis() -> pangolin_runtime::GenesisConfig { darwinia_crab_issuing: pangolin_runtime::CrabIssuingConfig { total_mapped_ring: 1 << 56 }, - darwinia_crab_backing: pangolin_runtime::CrabBackingConfig { + darwinia_crab_backing: pangolin_runtime::DarwiniaCrabBackingConfig { backed_ring: 1 << 56 }, darwinia_ethereum_relay: pangolin_runtime::EthereumRelayConfig { @@ -387,7 +387,7 @@ fn pangolin_development_genesis( darwinia_crab_issuing: pangolin_runtime::CrabIssuingConfig { total_mapped_ring: 1 << 56 }, - darwinia_crab_backing: pangolin_runtime::CrabBackingConfig { + darwinia_crab_backing: pangolin_runtime::DarwiniaCrabBackingConfig { backed_ring: 1 << 56 }, darwinia_ethereum_relay: pangolin_runtime::EthereumRelayConfig { diff --git a/bin/node/runtime/pangolin/src/lib.rs b/bin/node/runtime/pangolin/src/lib.rs index c4491e9e53..35f48e6738 100644 --- a/bin/node/runtime/pangolin/src/lib.rs +++ b/bin/node/runtime/pangolin/src/lib.rs @@ -481,7 +481,7 @@ frame_support::construct_runtime! { Multisig: pallet_multisig::{Module, Call, Storage, Event} = 32, CrabIssuing: darwinia_crab_issuing::{Module, Call, Storage, Config, Event} = 33, - CrabBacking: darwinia_crab_backing::{Module, Storage, Config} = 34, + DarwiniaCrabBacking: darwinia_crab_backing::{Module, Storage, Config} = 34, EthereumRelay: darwinia_ethereum_relay::{Module, Call, Storage, Config, Event} = 35, EthereumBacking: darwinia_ethereum_backing::{Module, Call, Storage, Config, Event} = 36, diff --git a/frame/bridge/crab/backing/src/lib.rs b/frame/bridge/crab/backing/src/lib.rs index ad0a951d6c..b7d07d8f33 100644 --- a/frame/bridge/crab/backing/src/lib.rs +++ b/frame/bridge/crab/backing/src/lib.rs @@ -20,66 +20,78 @@ #![cfg_attr(not(feature = "std"), no_std)] +pub use pallet::*; + pub mod weights; // --- darwinia --- pub use weights::WeightInfo; +use frame_support::traits::Currency; + mod types { // --- darwinia --- - #[cfg(feature = "std")] use crate::*; pub type AccountId = ::AccountId; - #[cfg(feature = "std")] - pub type RingBalance = as Currency>>::Balance; - - #[cfg(feature = "std")] type RingCurrency = ::RingCurrency; + + pub type RingBalance = as Currency>>::Balance; } -// --- substrate --- -use frame_support::{ - decl_module, decl_storage, - traits::{Currency, Get}, -}; -use sp_runtime::{traits::AccountIdConversion, ModuleId}; -// --- darwinia --- -use types::*; +#[frame_support::pallet] +pub mod pallet { + use super::*; + use frame_support::pallet_prelude::*; + use frame_support::traits::{Currency, Get}; + use frame_system::pallet_prelude::*; + use sp_runtime::{traits::AccountIdConversion, ModuleId}; + use types::*; -pub trait Config: frame_system::Config { - type ModuleId: Get; + /// Configure the pallet by specifying the parameters and types on which it depends. + #[pallet::config] + pub trait Config: frame_system::Config { + #[pallet::constant] + type ModuleId: Get; - type RingCurrency: Currency>; + type RingCurrency: Currency>; - type WeightInfo: WeightInfo; -} + type WeightInfo: WeightInfo; -decl_storage! { - trait Store for Module as DarwiniaCrabBacking {} + // no event for this pallet + } - add_extra_genesis { - config(backed_ring): RingBalance; - build(|config| { - let _ = T::RingCurrency::make_free_balance_be( - &>::account_id(), - T::RingCurrency::minimum_balance() + config.backed_ring - ); - }); + // Define the pallet struct placeholder, various pallet function are implemented on it. + #[pallet::pallet] + pub struct Pallet(_); + + #[pallet::hooks] + impl Hooks> for Pallet {} + + #[pallet::call] + impl Pallet {} + + #[pallet::genesis_config] + pub struct GenesisConfig { + pub backed_ring: RingBalance, } -} -decl_module! { - pub struct Module for enum Call - where - origin: T::Origin - { - const ModuleId: ModuleId = T::ModuleId::get(); + #[cfg(feature = "std")] + impl Default for GenesisConfig { + fn default() -> Self { + Self { + backed_ring: Default::default(), + } + } } -} -impl Module { - pub fn account_id() -> T::AccountId { - T::ModuleId::get().into_account() + #[pallet::genesis_build] + impl GenesisBuild for GenesisConfig { + fn build(&self) { + let _ = T::RingCurrency::make_free_balance_be( + &T::ModuleId::get().into_account(), + T::RingCurrency::minimum_balance() + self.backed_ring, + ); + } } }