From 7c5910f106c1c1e6c5755f1450e39892fb5f1a47 Mon Sep 17 00:00:00 2001 From: "Mar.io" Date: Wed, 15 Jun 2022 17:07:28 +0200 Subject: [PATCH 1/8] initial pallet for dapps-staking chain extension --- Cargo.toml | 1 + chainextensions/dapps-staking/Cargo.toml | 54 +++++++++++++++ .../dapps-staking/src/extension_traits.rs | 12 ++++ chainextensions/dapps-staking/src/lib.rs | 69 +++++++++++++++++++ 4 files changed, 136 insertions(+) create mode 100644 chainextensions/dapps-staking/Cargo.toml create mode 100644 chainextensions/dapps-staking/src/extension_traits.rs create mode 100644 chainextensions/dapps-staking/src/lib.rs diff --git a/Cargo.toml b/Cargo.toml index ccfc1ae5..1d298151 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,4 +14,5 @@ members = [ "precompiles/sr25519", "precompiles/utils", "precompiles/xcm", + "chainextensions/dapps-staking", ] diff --git a/chainextensions/dapps-staking/Cargo.toml b/chainextensions/dapps-staking/Cargo.toml new file mode 100644 index 00000000..72524301 --- /dev/null +++ b/chainextensions/dapps-staking/Cargo.toml @@ -0,0 +1,54 @@ +[package] +name = "pallet-chain-extension-dapps-staking" +version = "4.0.0" +authors = ["Stake Technologies "] +edition = "2021" +license = "Apache-2.0" +homepage = "https://astar.network" +repository = "https://github.com/AstarNetwork/astar-frame" +description = "dApps Staking chain extension for WASM contracts" + + + +[dependencies] +codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false } +scale-info = { version = "2.1.0", default-features = false, features = ["derive"] } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false } +pallet-contracts = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false, features = ["unstable-interface"] } +pallet-contracts-primitives = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false } +pallet-contracts-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false } +num_enum = { version = "0.5.3", default-features = false } +log = "0.4.16" + +# Astar +pallet-dapps-staking = { path = "../../frame/dapps-staking", default-features = false } + +[dev-dependencies] +derive_more = "0.99" +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19" } +pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19" } +serde = "1.0.100" +sha3 = "0.10.1" +sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19" } + +[features] +default = ["std"] +std = [ + "codec/std", + "pallet-contracts/std", + "pallet-contracts-primitives/std", + "pallet-contracts-rpc-runtime-api/std", + "scale-info/std", + "sp-std/std", + "sp-core/std", + "sp-runtime/std", + "frame-support/std", + "frame-system/std", + "pallet-dapps-staking/std", +] + diff --git a/chainextensions/dapps-staking/src/extension_traits.rs b/chainextensions/dapps-staking/src/extension_traits.rs new file mode 100644 index 00000000..fef2d541 --- /dev/null +++ b/chainextensions/dapps-staking/src/extension_traits.rs @@ -0,0 +1,12 @@ +use pallet_contracts::chain_extension::{Environment, Ext, InitState, SysConfig, UncheckedFrom}; +use sp_runtime::DispatchError; + +pub trait AstarChainExtension { + fn execute_func( + func_id: u32, + env: Environment, + ) -> Result<(), DispatchError> + where + ::AccountId: UncheckedFrom<::Hash> + AsRef<[u8]>, + G: pallet_dapps_staking::Config; +} diff --git a/chainextensions/dapps-staking/src/lib.rs b/chainextensions/dapps-staking/src/lib.rs new file mode 100644 index 00000000..d93029e5 --- /dev/null +++ b/chainextensions/dapps-staking/src/lib.rs @@ -0,0 +1,69 @@ +use sp_runtime::DispatchError; +// use sp_std::vec::Vec; + +mod extension_traits; +use extension_traits::AstarChainExtension; +use codec::Encode; +use frame_support::log::{error, trace}; +use pallet_contracts::chain_extension::{Environment, Ext, InitState, SysConfig, UncheckedFrom}; +use pallet_dapps_staking; + +pub struct DappsStakingExtension; +impl AstarChainExtension for DappsStakingExtension { + fn execute_func( + func_id: u32, + env: Environment, + ) -> Result<(), DispatchError> + where + ::AccountId: UncheckedFrom<::Hash> + AsRef<[u8]>, + E: pallet_dapps_staking::Config, + { + let mut env = env.buf_in_buf_out(); + match func_id { + // DappsStaking - current_era() + 1 => { + let current_era = pallet_dapps_staking::CurrentEra::::get(); + let current_era_encoded = current_era.encode(); + trace!( + target: "runtime", + "[ChainExtension]|call|func_id:{:} current_era:{:?}", + func_id, + ¤t_era_encoded + ); + + env.write(¤t_era_encoded, false, None).map_err(|_| { + DispatchError::Other( + "ChainExtension DappsStakingExtension failed to write result", + ) + })?; + } + + // DappsStaking - general_era_info() + 2 => { + let arg: u32 = env.read_as()?; + let era_info =pallet_dapps_staking::GeneralEraInfo::::get(arg) + .ok_or(DispatchError::Other("general_era_info call failed")); + let era_info_encoded = era_info.encode(); + trace!( + target: "runtime", + "[ChainExtension]|call|func_id:{:} era_info_encoded:{:?}", + func_id, + &era_info_encoded + ); + + env.write(&era_info_encoded, false, None).map_err(|_| { + DispatchError::Other( + "ChainExtension DappsStakingExtension failed to write result", + ) + })?; + } + _ => { + error!("Called an unregistered `func_id`: {:}", func_id); + return Err(DispatchError::Other( + "DappsStakingExtension: Unimplemented func_id", + )); + } + } + Ok(()) + } +} From 427e3facbbcb1e5c36a68ebb9fe676013b4d2958 Mon Sep 17 00:00:00 2001 From: "Mar.io" Date: Thu, 16 Jun 2022 18:40:16 +0200 Subject: [PATCH 2/8] merge trait into lib --- .../dapps-staking/src/extension_traits.rs | 12 ------------ chainextensions/dapps-staking/src/lib.rs | 18 +++++++++++++----- 2 files changed, 13 insertions(+), 17 deletions(-) delete mode 100644 chainextensions/dapps-staking/src/extension_traits.rs diff --git a/chainextensions/dapps-staking/src/extension_traits.rs b/chainextensions/dapps-staking/src/extension_traits.rs deleted file mode 100644 index fef2d541..00000000 --- a/chainextensions/dapps-staking/src/extension_traits.rs +++ /dev/null @@ -1,12 +0,0 @@ -use pallet_contracts::chain_extension::{Environment, Ext, InitState, SysConfig, UncheckedFrom}; -use sp_runtime::DispatchError; - -pub trait AstarChainExtension { - fn execute_func( - func_id: u32, - env: Environment, - ) -> Result<(), DispatchError> - where - ::AccountId: UncheckedFrom<::Hash> + AsRef<[u8]>, - G: pallet_dapps_staking::Config; -} diff --git a/chainextensions/dapps-staking/src/lib.rs b/chainextensions/dapps-staking/src/lib.rs index d93029e5..2c5f8b6d 100644 --- a/chainextensions/dapps-staking/src/lib.rs +++ b/chainextensions/dapps-staking/src/lib.rs @@ -1,13 +1,21 @@ +#![cfg_attr(not(feature = "std"), no_std)] use sp_runtime::DispatchError; -// use sp_std::vec::Vec; -mod extension_traits; -use extension_traits::AstarChainExtension; use codec::Encode; use frame_support::log::{error, trace}; use pallet_contracts::chain_extension::{Environment, Ext, InitState, SysConfig, UncheckedFrom}; use pallet_dapps_staking; +pub trait AstarChainExtension { + fn execute_func( + func_id: u32, + env: Environment, + ) -> Result<(), DispatchError> + where + ::AccountId: UncheckedFrom<::Hash> + AsRef<[u8]>, + E: pallet_dapps_staking::pallet::pallet::Config; +} + pub struct DappsStakingExtension; impl AstarChainExtension for DappsStakingExtension { fn execute_func( @@ -16,7 +24,7 @@ impl AstarChainExtension for DappsStakingExtension { ) -> Result<(), DispatchError> where ::AccountId: UncheckedFrom<::Hash> + AsRef<[u8]>, - E: pallet_dapps_staking::Config, + E: pallet_dapps_staking::pallet::pallet::Config, { let mut env = env.buf_in_buf_out(); match func_id { @@ -41,7 +49,7 @@ impl AstarChainExtension for DappsStakingExtension { // DappsStaking - general_era_info() 2 => { let arg: u32 = env.read_as()?; - let era_info =pallet_dapps_staking::GeneralEraInfo::::get(arg) + let era_info = pallet_dapps_staking::GeneralEraInfo::::get(arg) .ok_or(DispatchError::Other("general_era_info call failed")); let era_info_encoded = era_info.encode(); trace!( From 818b13209358139fb9780ad0af1d8c23c687979f Mon Sep 17 00:00:00 2001 From: "Mar.io" Date: Tue, 21 Jun 2022 17:32:00 +0200 Subject: [PATCH 3/8] add R generic for Runtime --- chainextensions/dapps-staking/src/lib.rs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/chainextensions/dapps-staking/src/lib.rs b/chainextensions/dapps-staking/src/lib.rs index 2c5f8b6d..14486e80 100644 --- a/chainextensions/dapps-staking/src/lib.rs +++ b/chainextensions/dapps-staking/src/lib.rs @@ -7,30 +7,29 @@ use pallet_contracts::chain_extension::{Environment, Ext, InitState, SysConfig, use pallet_dapps_staking; pub trait AstarChainExtension { - fn execute_func( + fn execute_func( func_id: u32, env: Environment, ) -> Result<(), DispatchError> where + E: Ext, ::AccountId: UncheckedFrom<::Hash> + AsRef<[u8]>, - E: pallet_dapps_staking::pallet::pallet::Config; + R: pallet_dapps_staking::Config; } pub struct DappsStakingExtension; impl AstarChainExtension for DappsStakingExtension { - fn execute_func( - func_id: u32, - env: Environment, - ) -> Result<(), DispatchError> + fn execute_func(func_id: u32, env: Environment) -> Result<(), DispatchError> where + E: Ext, ::AccountId: UncheckedFrom<::Hash> + AsRef<[u8]>, - E: pallet_dapps_staking::pallet::pallet::Config, + R: pallet_dapps_staking::Config, { let mut env = env.buf_in_buf_out(); match func_id { // DappsStaking - current_era() 1 => { - let current_era = pallet_dapps_staking::CurrentEra::::get(); + let current_era = pallet_dapps_staking::CurrentEra::::get(); let current_era_encoded = current_era.encode(); trace!( target: "runtime", @@ -49,7 +48,7 @@ impl AstarChainExtension for DappsStakingExtension { // DappsStaking - general_era_info() 2 => { let arg: u32 = env.read_as()?; - let era_info = pallet_dapps_staking::GeneralEraInfo::::get(arg) + let era_info = pallet_dapps_staking::GeneralEraInfo::::get(arg) .ok_or(DispatchError::Other("general_era_info call failed")); let era_info_encoded = era_info.encode(); trace!( From c08bdf25dfb5f72bf2ae1d9c5d84721f6f178780 Mon Sep 17 00:00:00 2001 From: Maar-io Date: Thu, 23 Jun 2022 09:38:49 -0400 Subject: [PATCH 4/8] updates for polkadot-v0.9.24 --- chainextensions/dapps-staking/Cargo.toml | 36 +++++++++--------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/chainextensions/dapps-staking/Cargo.toml b/chainextensions/dapps-staking/Cargo.toml index 72524301..56a79834 100644 --- a/chainextensions/dapps-staking/Cargo.toml +++ b/chainextensions/dapps-staking/Cargo.toml @@ -8,47 +8,37 @@ homepage = "https://astar.network" repository = "https://github.com/AstarNetwork/astar-frame" description = "dApps Staking chain extension for WASM contracts" - - [dependencies] codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false } +num-traits = { version = "0.2", default-features = false } scale-info = { version = "2.1.0", default-features = false, features = ["derive"] } -sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false } -sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false } -frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false } -frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false } -pallet-contracts = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false, features = ["unstable-interface"] } -pallet-contracts-primitives = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false } -pallet-contracts-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false } -num_enum = { version = "0.5.3", default-features = false } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24", default-features = false } +pallet-contracts = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24", default-features = false, features = ["unstable-interface"] } +pallet-contracts-primitives = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24", default-features = false } +pallet-contracts-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24", default-features = false } log = "0.4.16" # Astar pallet-dapps-staking = { path = "../../frame/dapps-staking", default-features = false } -[dev-dependencies] -derive_more = "0.99" -pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19" } -pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19" } -serde = "1.0.100" -sha3 = "0.10.1" -sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19", default-features = false } -sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.19" } - [features] default = ["std"] std = [ "codec/std", + "frame-support/std", + "frame-system/std", + "num-traits/std", "pallet-contracts/std", "pallet-contracts-primitives/std", "pallet-contracts-rpc-runtime-api/std", + "pallet-dapps-staking/std", "scale-info/std", "sp-std/std", "sp-core/std", "sp-runtime/std", - "frame-support/std", - "frame-system/std", - "pallet-dapps-staking/std", ] From 63f89bfe8cb26ba3265598cdd0d3e35c9a7b312d Mon Sep 17 00:00:00 2001 From: Shunsuke Watanabe Date: Mon, 27 Jun 2022 15:48:00 +0900 Subject: [PATCH 5/8] chain extensions balances --- Cargo.toml | 2 + chainextensions/balances/Cargo.toml | 45 ++++++++++++++++++ chainextensions/balances/src/lib.rs | 59 ++++++++++++++++++++++++ chainextensions/dapps-staking/Cargo.toml | 2 + chainextensions/dapps-staking/src/lib.rs | 22 ++------- chainextensions/traits/Cargo.toml | 21 +++++++++ chainextensions/traits/src/lib.rs | 13 ++++++ 7 files changed, 147 insertions(+), 17 deletions(-) create mode 100644 chainextensions/balances/Cargo.toml create mode 100644 chainextensions/balances/src/lib.rs create mode 100644 chainextensions/traits/Cargo.toml create mode 100644 chainextensions/traits/src/lib.rs diff --git a/Cargo.toml b/Cargo.toml index 1d298151..9fa1a3af 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,5 +14,7 @@ members = [ "precompiles/sr25519", "precompiles/utils", "precompiles/xcm", + "chainextensions/traits", + "chainextensions/balances", "chainextensions/dapps-staking", ] diff --git a/chainextensions/balances/Cargo.toml b/chainextensions/balances/Cargo.toml new file mode 100644 index 00000000..892bb62e --- /dev/null +++ b/chainextensions/balances/Cargo.toml @@ -0,0 +1,45 @@ +[package] +name = "chain-extension-balances" +version = "4.0.0" +authors = ["Stake Technologies "] +edition = "2021" +license = "Apache-2.0" +homepage = "https://astar.network" +repository = "https://github.com/AstarNetwork/astar-frame" +description = "dApps Staking chain extension for WASM contracts" + +[dependencies] +codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false } +num-traits = { version = "0.2", default-features = false } +scale-info = { version = "2.1.0", default-features = false, features = ["derive"] } +sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24", default-features = false } +sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24", default-features = false } +frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24", default-features = false } +frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24", default-features = false } +pallet-contracts = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24", default-features = false, features = ["unstable-interface"] } +pallet-contracts-primitives = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24", default-features = false } +pallet-contracts-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24", default-features = false } +log = "0.4.16" + +# Astar +chain-extension-traits = { path = "../traits" } +pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24", default-features = false } + +[features] +default = ["std"] +std = [ + "codec/std", + "frame-support/std", + "frame-system/std", + "num-traits/std", + "pallet-contracts/std", + "pallet-contracts-primitives/std", + "pallet-contracts-rpc-runtime-api/std", + "pallet-balances/std", + "scale-info/std", + "sp-std/std", + "sp-core/std", + "sp-runtime/std", +] + diff --git a/chainextensions/balances/src/lib.rs b/chainextensions/balances/src/lib.rs new file mode 100644 index 00000000..6f275cb9 --- /dev/null +++ b/chainextensions/balances/src/lib.rs @@ -0,0 +1,59 @@ +#![cfg_attr(not(feature = "std"), no_std)] +use sp_runtime::DispatchError; +use codec::Encode; +use frame_support::log::{error, trace}; +use pallet_contracts::chain_extension::{Environment, Ext, InitState, SysConfig, UncheckedFrom}; +use chain_extension_traits::ChainExtension; + +pub struct BalancesExtension; + +impl ChainExtension for BalancesExtension { + fn execute_func(func_id: u32, env: Environment) -> Result<(), DispatchError> + where + E: Ext, + ::AccountId: UncheckedFrom<::Hash> + AsRef<[u8]>, + { + let mut env = env.buf_in_buf_out(); + match func_id { + // Balances - free_balance() + 1 => { + let arg: ::AccountId = env.read_as()?; + let free_balance = pallet_balances::Pallet::::free_balance(arg.clone()); + let free_balance_encoded = free_balance.encode(); + trace!( + target: "runtime", + "[ChainExtension]|call|func_id:{:} free_balance_encoded:{:?}, arg:{:?}", + func_id, + free_balance_encoded, + arg + ); + env.write(&free_balance_encoded, false, None).map_err(|_| { + DispatchError::Other("ChainExtension failed to call free_balance") + })?; + } + // balances - usable_balance() + 2 => { + let arg: ::AccountId = env.read_as()?; + let usable_balance = pallet_balances::Pallet::::usable_balance(arg.clone()); + let usable_balance_encoded = usable_balance.encode(); + trace!( + target: "runtime", + "[ChainExtension]|call|func_id:{:} usable_balance_encoded:{:?}, arg:{:?}", + func_id, + usable_balance_encoded, + arg + ); + env.write(&usable_balance_encoded, false, None).map_err(|_| { + DispatchError::Other("ChainExtension failed to call usable_balance") + })?; + } + _ => { + error!("Called an unregistered `func_id`: {:}", func_id); + return Err(DispatchError::Other( + "BalancesExtension: Unimplemented func_id", + )); + } + } + Ok(()) + } +} diff --git a/chainextensions/dapps-staking/Cargo.toml b/chainextensions/dapps-staking/Cargo.toml index 56a79834..3d85d345 100644 --- a/chainextensions/dapps-staking/Cargo.toml +++ b/chainextensions/dapps-staking/Cargo.toml @@ -23,7 +23,9 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkad log = "0.4.16" # Astar +chain-extension-traits = { path = "../traits" } pallet-dapps-staking = { path = "../../frame/dapps-staking", default-features = false } +# pallet-dapps-staking = { git = "https://github.com/AstarNetwork/astar-frame", branch = "polkadot-v0.9.24", default-features = false } [features] default = ["std"] diff --git a/chainextensions/dapps-staking/src/lib.rs b/chainextensions/dapps-staking/src/lib.rs index 14486e80..6517eb20 100644 --- a/chainextensions/dapps-staking/src/lib.rs +++ b/chainextensions/dapps-staking/src/lib.rs @@ -1,29 +1,17 @@ #![cfg_attr(not(feature = "std"), no_std)] use sp_runtime::DispatchError; - use codec::Encode; use frame_support::log::{error, trace}; use pallet_contracts::chain_extension::{Environment, Ext, InitState, SysConfig, UncheckedFrom}; -use pallet_dapps_staking; - -pub trait AstarChainExtension { - fn execute_func( - func_id: u32, - env: Environment, - ) -> Result<(), DispatchError> - where - E: Ext, - ::AccountId: UncheckedFrom<::Hash> + AsRef<[u8]>, - R: pallet_dapps_staking::Config; -} +use chain_extension_traits::ChainExtension; pub struct DappsStakingExtension; -impl AstarChainExtension for DappsStakingExtension { - fn execute_func(func_id: u32, env: Environment) -> Result<(), DispatchError> + +impl ChainExtension for DappsStakingExtension { + fn execute_func(func_id: u32, env: Environment) -> Result<(), DispatchError> where - E: Ext, + E: Ext, ::AccountId: UncheckedFrom<::Hash> + AsRef<[u8]>, - R: pallet_dapps_staking::Config, { let mut env = env.buf_in_buf_out(); match func_id { diff --git a/chainextensions/traits/Cargo.toml b/chainextensions/traits/Cargo.toml new file mode 100644 index 00000000..14260341 --- /dev/null +++ b/chainextensions/traits/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "chain-extension-traits" +version = "4.0.0" +authors = ["Stake Technologies "] +edition = "2021" +license = "Apache-2.0" +homepage = "https://astar.network" +repository = "https://github.com/AstarNetwork/astar-frame" +description = "dApps Staking chain extension for WASM contracts" + +[dependencies] +pallet-contracts = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24", default-features = false, features = ["unstable-interface"] } +sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24", default-features = false } + +[features] +default = ["std"] +std = [ + "pallet-contracts/std", + "sp-runtime/std", +] + diff --git a/chainextensions/traits/src/lib.rs b/chainextensions/traits/src/lib.rs new file mode 100644 index 00000000..dec897c6 --- /dev/null +++ b/chainextensions/traits/src/lib.rs @@ -0,0 +1,13 @@ +#![cfg_attr(not(feature = "std"), no_std)] +use sp_runtime::DispatchError; +use pallet_contracts::chain_extension::{Environment, Ext, InitState, SysConfig, UncheckedFrom}; + +pub trait ChainExtension { + fn execute_func( + func_id: u32, + env: Environment, + ) -> Result<(), DispatchError> + where + E: Ext, + ::AccountId: UncheckedFrom<::Hash> + AsRef<[u8]>; +} From eb4463d7c9c7925a36bd668c6b2b95e062adb5b8 Mon Sep 17 00:00:00 2001 From: Shunsuke Watanabe Date: Mon, 27 Jun 2022 16:20:12 +0900 Subject: [PATCH 6/8] added default feature false --- chainextensions/balances/Cargo.toml | 2 +- chainextensions/dapps-staking/Cargo.toml | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/chainextensions/balances/Cargo.toml b/chainextensions/balances/Cargo.toml index 892bb62e..f96af078 100644 --- a/chainextensions/balances/Cargo.toml +++ b/chainextensions/balances/Cargo.toml @@ -23,7 +23,7 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkad log = "0.4.16" # Astar -chain-extension-traits = { path = "../traits" } +chain-extension-traits = { path = "../traits", default-features = false } pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.24", default-features = false } [features] diff --git a/chainextensions/dapps-staking/Cargo.toml b/chainextensions/dapps-staking/Cargo.toml index 3d85d345..44b83da8 100644 --- a/chainextensions/dapps-staking/Cargo.toml +++ b/chainextensions/dapps-staking/Cargo.toml @@ -23,9 +23,8 @@ sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkad log = "0.4.16" # Astar -chain-extension-traits = { path = "../traits" } +chain-extension-traits = { path = "../traits", default-features = false } pallet-dapps-staking = { path = "../../frame/dapps-staking", default-features = false } -# pallet-dapps-staking = { git = "https://github.com/AstarNetwork/astar-frame", branch = "polkadot-v0.9.24", default-features = false } [features] default = ["std"] From bbd0b94734504afeb179666fd48e30a770d6afbe Mon Sep 17 00:00:00 2001 From: Shunsuke Watanabe Date: Mon, 27 Jun 2022 16:52:08 +0900 Subject: [PATCH 7/8] cargo fmt --- chainextensions/balances/src/lib.rs | 61 ++++++++++++------------ chainextensions/dapps-staking/src/lib.rs | 4 +- chainextensions/traits/src/lib.rs | 7 +-- 3 files changed, 35 insertions(+), 37 deletions(-) diff --git a/chainextensions/balances/src/lib.rs b/chainextensions/balances/src/lib.rs index 6f275cb9..86ce2024 100644 --- a/chainextensions/balances/src/lib.rs +++ b/chainextensions/balances/src/lib.rs @@ -1,13 +1,13 @@ #![cfg_attr(not(feature = "std"), no_std)] -use sp_runtime::DispatchError; +use chain_extension_traits::ChainExtension; use codec::Encode; use frame_support::log::{error, trace}; use pallet_contracts::chain_extension::{Environment, Ext, InitState, SysConfig, UncheckedFrom}; -use chain_extension_traits::ChainExtension; +use sp_runtime::DispatchError; pub struct BalancesExtension; -impl ChainExtension for BalancesExtension { +impl ChainExtension for BalancesExtension { fn execute_func(func_id: u32, env: Environment) -> Result<(), DispatchError> where E: Ext, @@ -18,35 +18,36 @@ impl ChainExtension for BalancesExtension { // Balances - free_balance() 1 => { let arg: ::AccountId = env.read_as()?; - let free_balance = pallet_balances::Pallet::::free_balance(arg.clone()); - let free_balance_encoded = free_balance.encode(); - trace!( - target: "runtime", - "[ChainExtension]|call|func_id:{:} free_balance_encoded:{:?}, arg:{:?}", - func_id, - free_balance_encoded, - arg - ); - env.write(&free_balance_encoded, false, None).map_err(|_| { - DispatchError::Other("ChainExtension failed to call free_balance") - })?; + let free_balance = pallet_balances::Pallet::::free_balance(arg.clone()); + let free_balance_encoded = free_balance.encode(); + trace!( + target: "runtime", + "[ChainExtension]|call|func_id:{:} free_balance_encoded:{:?}, arg:{:?}", + func_id, + free_balance_encoded, + arg + ); + env.write(&free_balance_encoded, false, None).map_err(|_| { + DispatchError::Other("ChainExtension failed to call free_balance") + })?; } // balances - usable_balance() - 2 => { - let arg: ::AccountId = env.read_as()?; - let usable_balance = pallet_balances::Pallet::::usable_balance(arg.clone()); - let usable_balance_encoded = usable_balance.encode(); - trace!( - target: "runtime", - "[ChainExtension]|call|func_id:{:} usable_balance_encoded:{:?}, arg:{:?}", - func_id, - usable_balance_encoded, - arg - ); - env.write(&usable_balance_encoded, false, None).map_err(|_| { - DispatchError::Other("ChainExtension failed to call usable_balance") - })?; - } + 2 => { + let arg: ::AccountId = env.read_as()?; + let usable_balance = pallet_balances::Pallet::::usable_balance(arg.clone()); + let usable_balance_encoded = usable_balance.encode(); + trace!( + target: "runtime", + "[ChainExtension]|call|func_id:{:} usable_balance_encoded:{:?}, arg:{:?}", + func_id, + usable_balance_encoded, + arg + ); + env.write(&usable_balance_encoded, false, None) + .map_err(|_| { + DispatchError::Other("ChainExtension failed to call usable_balance") + })?; + } _ => { error!("Called an unregistered `func_id`: {:}", func_id); return Err(DispatchError::Other( diff --git a/chainextensions/dapps-staking/src/lib.rs b/chainextensions/dapps-staking/src/lib.rs index 6517eb20..cc364f5e 100644 --- a/chainextensions/dapps-staking/src/lib.rs +++ b/chainextensions/dapps-staking/src/lib.rs @@ -1,9 +1,9 @@ #![cfg_attr(not(feature = "std"), no_std)] -use sp_runtime::DispatchError; +use chain_extension_traits::ChainExtension; use codec::Encode; use frame_support::log::{error, trace}; use pallet_contracts::chain_extension::{Environment, Ext, InitState, SysConfig, UncheckedFrom}; -use chain_extension_traits::ChainExtension; +use sp_runtime::DispatchError; pub struct DappsStakingExtension; diff --git a/chainextensions/traits/src/lib.rs b/chainextensions/traits/src/lib.rs index dec897c6..dced58bc 100644 --- a/chainextensions/traits/src/lib.rs +++ b/chainextensions/traits/src/lib.rs @@ -1,12 +1,9 @@ #![cfg_attr(not(feature = "std"), no_std)] -use sp_runtime::DispatchError; use pallet_contracts::chain_extension::{Environment, Ext, InitState, SysConfig, UncheckedFrom}; +use sp_runtime::DispatchError; pub trait ChainExtension { - fn execute_func( - func_id: u32, - env: Environment, - ) -> Result<(), DispatchError> + fn execute_func(func_id: u32, env: Environment) -> Result<(), DispatchError> where E: Ext, ::AccountId: UncheckedFrom<::Hash> + AsRef<[u8]>; From e221783ab00bf2f895a1d7045d615087c9d14543 Mon Sep 17 00:00:00 2001 From: Shunsuke Watanabe Date: Wed, 29 Jun 2022 02:52:04 +0900 Subject: [PATCH 8/8] up --- chainextensions/balances/src/lib.rs | 10 +++++----- chainextensions/dapps-staking/src/lib.rs | 11 ++++++----- chainextensions/traits/src/lib.rs | 4 ++-- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/chainextensions/balances/src/lib.rs b/chainextensions/balances/src/lib.rs index 86ce2024..914fcb7e 100644 --- a/chainextensions/balances/src/lib.rs +++ b/chainextensions/balances/src/lib.rs @@ -1,5 +1,5 @@ #![cfg_attr(not(feature = "std"), no_std)] -use chain_extension_traits::ChainExtension; +use chain_extension_traits::ChainExtensionExec; use codec::Encode; use frame_support::log::{error, trace}; use pallet_contracts::chain_extension::{Environment, Ext, InitState, SysConfig, UncheckedFrom}; @@ -7,10 +7,10 @@ use sp_runtime::DispatchError; pub struct BalancesExtension; -impl ChainExtension for BalancesExtension { +impl ChainExtensionExec for BalancesExtension { fn execute_func(func_id: u32, env: Environment) -> Result<(), DispatchError> where - E: Ext, + E: Ext, ::AccountId: UncheckedFrom<::Hash> + AsRef<[u8]>, { let mut env = env.buf_in_buf_out(); @@ -18,7 +18,7 @@ impl ChainExtension for BalancesExtension { // Balances - free_balance() 1 => { let arg: ::AccountId = env.read_as()?; - let free_balance = pallet_balances::Pallet::::free_balance(arg.clone()); + let free_balance = pallet_balances::Pallet::::free_balance(arg.clone()); let free_balance_encoded = free_balance.encode(); trace!( target: "runtime", @@ -34,7 +34,7 @@ impl ChainExtension for BalancesExtension { // balances - usable_balance() 2 => { let arg: ::AccountId = env.read_as()?; - let usable_balance = pallet_balances::Pallet::::usable_balance(arg.clone()); + let usable_balance = pallet_balances::Pallet::::usable_balance(arg.clone()); let usable_balance_encoded = usable_balance.encode(); trace!( target: "runtime", diff --git a/chainextensions/dapps-staking/src/lib.rs b/chainextensions/dapps-staking/src/lib.rs index cc364f5e..0dc8a5f1 100644 --- a/chainextensions/dapps-staking/src/lib.rs +++ b/chainextensions/dapps-staking/src/lib.rs @@ -1,5 +1,6 @@ #![cfg_attr(not(feature = "std"), no_std)] -use chain_extension_traits::ChainExtension; + +use chain_extension_traits::ChainExtensionExec; use codec::Encode; use frame_support::log::{error, trace}; use pallet_contracts::chain_extension::{Environment, Ext, InitState, SysConfig, UncheckedFrom}; @@ -7,17 +8,17 @@ use sp_runtime::DispatchError; pub struct DappsStakingExtension; -impl ChainExtension for DappsStakingExtension { +impl ChainExtensionExec for DappsStakingExtension { fn execute_func(func_id: u32, env: Environment) -> Result<(), DispatchError> where - E: Ext, + E: Ext, ::AccountId: UncheckedFrom<::Hash> + AsRef<[u8]>, { let mut env = env.buf_in_buf_out(); match func_id { // DappsStaking - current_era() 1 => { - let current_era = pallet_dapps_staking::CurrentEra::::get(); + let current_era = pallet_dapps_staking::CurrentEra::::get(); let current_era_encoded = current_era.encode(); trace!( target: "runtime", @@ -36,7 +37,7 @@ impl ChainExtension for DappsStakingExtensio // DappsStaking - general_era_info() 2 => { let arg: u32 = env.read_as()?; - let era_info = pallet_dapps_staking::GeneralEraInfo::::get(arg) + let era_info = pallet_dapps_staking::GeneralEraInfo::::get(arg) .ok_or(DispatchError::Other("general_era_info call failed")); let era_info_encoded = era_info.encode(); trace!( diff --git a/chainextensions/traits/src/lib.rs b/chainextensions/traits/src/lib.rs index dced58bc..cb8015e0 100644 --- a/chainextensions/traits/src/lib.rs +++ b/chainextensions/traits/src/lib.rs @@ -2,9 +2,9 @@ use pallet_contracts::chain_extension::{Environment, Ext, InitState, SysConfig, UncheckedFrom}; use sp_runtime::DispatchError; -pub trait ChainExtension { +pub trait ChainExtensionExec { fn execute_func(func_id: u32, env: Environment) -> Result<(), DispatchError> where - E: Ext, + E: Ext, ::AccountId: UncheckedFrom<::Hash> + AsRef<[u8]>; }