|
@@ -17,35 +17,26 @@ mod constants;
|
|
|
mod integration;
|
|
|
mod migration;
|
|
|
mod primitives;
|
|
|
+mod runtime_api;
|
|
|
#[cfg(test)]
|
|
|
mod tests; // Runtime integration tests
|
|
|
|
|
|
-use frame_support::inherent::{CheckInherentsResult, InherentData};
|
|
|
use frame_support::traits::KeyOwnerProofSystem;
|
|
|
use frame_support::weights::{
|
|
|
constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight},
|
|
|
Weight,
|
|
|
};
|
|
|
-use frame_support::{construct_runtime, parameter_types, traits::Randomness};
|
|
|
-use pallet_contracts_rpc_runtime_api::ContractExecResult;
|
|
|
-use pallet_grandpa::fg_primitives;
|
|
|
+use frame_support::{construct_runtime, parameter_types};
|
|
|
use pallet_grandpa::{AuthorityId as GrandpaId, AuthorityList as GrandpaAuthorityList};
|
|
|
use pallet_im_online::sr25519::AuthorityId as ImOnlineId;
|
|
|
use pallet_session::historical as pallet_session_historical;
|
|
|
use pallet_transaction_payment::Multiplier;
|
|
|
-use pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo;
|
|
|
-use sp_api::impl_runtime_apis;
|
|
|
use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId;
|
|
|
use sp_core::crypto::KeyTypeId;
|
|
|
-use sp_core::OpaqueMetadata;
|
|
|
use sp_runtime::curve::PiecewiseLinear;
|
|
|
-use sp_runtime::traits::{
|
|
|
- BlakeTwo256, Block as BlockT, NumberFor, OpaqueKeys, Saturating, StaticLookup,
|
|
|
-};
|
|
|
-use sp_runtime::transaction_validity::{TransactionSource, TransactionValidity};
|
|
|
+use sp_runtime::traits::{BlakeTwo256, Block as BlockT, OpaqueKeys, Saturating};
|
|
|
use sp_runtime::{
|
|
|
- create_runtime_str, generic, impl_opaque_keys, ApplyExtrinsicResult, FixedPointNumber, Perbill,
|
|
|
- Perquintill,
|
|
|
+ create_runtime_str, generic, impl_opaque_keys, FixedPointNumber, Perbill, Perquintill,
|
|
|
};
|
|
|
use sp_std::boxed::Box;
|
|
|
use sp_std::vec::Vec;
|
|
@@ -55,8 +46,10 @@ use sp_version::RuntimeVersion;
|
|
|
use system::EnsureRoot;
|
|
|
|
|
|
pub use constants::*;
|
|
|
-use integration::proposals::{CouncilManager, ExtrinsicProposalEncoder, MembershipOriginValidator};
|
|
|
pub use primitives::*;
|
|
|
+pub use runtime_api::*;
|
|
|
+
|
|
|
+use integration::proposals::{CouncilManager, ExtrinsicProposalEncoder, MembershipOriginValidator};
|
|
|
|
|
|
use content_working_group as content_wg;
|
|
|
use governance::{council, election};
|
|
@@ -66,6 +59,8 @@ use storage::{data_directory, data_object_storage_registry, data_object_type_reg
|
|
|
pub use common;
|
|
|
pub use forum;
|
|
|
pub use governance::election_params::ElectionParameters;
|
|
|
+#[cfg(any(feature = "std", test))]
|
|
|
+pub use pallet_balances::Call as BalancesCall;
|
|
|
pub use pallet_staking::StakerStatus;
|
|
|
pub use proposals_codex::ProposalsConfigParameters;
|
|
|
pub use versioned_store;
|
|
@@ -78,7 +73,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
|
|
|
authoring_version: 7,
|
|
|
spec_version: 0,
|
|
|
impl_version: 0,
|
|
|
- apis: RUNTIME_API_VERSIONS,
|
|
|
+ apis: crate::runtime_api::EXPORTED_RUNTIME_API_VERSIONS,
|
|
|
transaction_version: 1,
|
|
|
};
|
|
|
|
|
@@ -665,225 +660,3 @@ construct_runtime!(
|
|
|
StorageWorkingGroup: working_group::<Instance2>::{Module, Call, Storage, Config<T>, Event<T>},
|
|
|
}
|
|
|
);
|
|
|
-
|
|
|
-/// The address format for describing accounts.
|
|
|
-pub type Address = <Indices as StaticLookup>::Source;
|
|
|
-/// The SignedExtension to the basic transaction logic.
|
|
|
-pub type SignedExtra = (
|
|
|
- system::CheckSpecVersion<Runtime>,
|
|
|
- system::CheckTxVersion<Runtime>,
|
|
|
- system::CheckGenesis<Runtime>,
|
|
|
- system::CheckEra<Runtime>,
|
|
|
- system::CheckNonce<Runtime>,
|
|
|
- system::CheckWeight<Runtime>,
|
|
|
- pallet_transaction_payment::ChargeTransactionPayment<Runtime>,
|
|
|
- pallet_grandpa::ValidateEquivocationReport<Runtime>,
|
|
|
-);
|
|
|
-
|
|
|
-/// Digest item type.
|
|
|
-pub type DigestItem = generic::DigestItem<Hash>;
|
|
|
-
|
|
|
-/// Block header type as expected by this runtime.
|
|
|
-pub type Header = generic::Header<BlockNumber, BlakeTwo256>;
|
|
|
-
|
|
|
-/// Block type as expected by this runtime.
|
|
|
-pub type Block = generic::Block<Header, UncheckedExtrinsic>;
|
|
|
-
|
|
|
-/// A Block signed with a Justification
|
|
|
-pub type SignedBlock = generic::SignedBlock<Block>;
|
|
|
-
|
|
|
-/// BlockId type as expected by this runtime.
|
|
|
-pub type BlockId = generic::BlockId<Block>;
|
|
|
-
|
|
|
-/// Unchecked extrinsic type as expected by this runtime.
|
|
|
-pub type UncheckedExtrinsic = generic::UncheckedExtrinsic<Address, Call, Signature, SignedExtra>;
|
|
|
-
|
|
|
-/// Executive: handles dispatch to the various modules.
|
|
|
-pub type Executive =
|
|
|
- frame_executive::Executive<Runtime, Block, system::ChainContext<Runtime>, Runtime, AllModules>;
|
|
|
-
|
|
|
-#[cfg(any(feature = "std", test))]
|
|
|
-pub use pallet_balances::Call as BalancesCall;
|
|
|
-
|
|
|
-impl_runtime_apis! {
|
|
|
- impl sp_api::Core<Block> for Runtime {
|
|
|
- fn version() -> RuntimeVersion {
|
|
|
- VERSION
|
|
|
- }
|
|
|
-
|
|
|
- fn execute_block(block: Block) {
|
|
|
- Executive::execute_block(block)
|
|
|
- }
|
|
|
-
|
|
|
- fn initialize_block(header: &<Block as BlockT>::Header) {
|
|
|
- Executive::initialize_block(header)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- impl sp_api::Metadata<Block> for Runtime {
|
|
|
- fn metadata() -> OpaqueMetadata {
|
|
|
- Runtime::metadata().into()
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- impl sp_block_builder::BlockBuilder<Block> for Runtime {
|
|
|
- fn apply_extrinsic(extrinsic: <Block as BlockT>::Extrinsic) -> ApplyExtrinsicResult {
|
|
|
- Executive::apply_extrinsic(extrinsic)
|
|
|
- }
|
|
|
-
|
|
|
- fn finalize_block() -> <Block as BlockT>::Header {
|
|
|
- Executive::finalize_block()
|
|
|
- }
|
|
|
-
|
|
|
- fn inherent_extrinsics(data: InherentData) -> Vec<<Block as BlockT>::Extrinsic> {
|
|
|
- data.create_extrinsics()
|
|
|
- }
|
|
|
-
|
|
|
- fn check_inherents(block: Block, data: InherentData) -> CheckInherentsResult {
|
|
|
- data.check_extrinsics(&block)
|
|
|
- }
|
|
|
-
|
|
|
- fn random_seed() -> <Block as BlockT>::Hash {
|
|
|
- RandomnessCollectiveFlip::random_seed()
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- impl sp_transaction_pool::runtime_api::TaggedTransactionQueue<Block> for Runtime {
|
|
|
- fn validate_transaction(
|
|
|
- source: TransactionSource,
|
|
|
- tx: <Block as BlockT>::Extrinsic,
|
|
|
- ) -> TransactionValidity {
|
|
|
- Executive::validate_transaction(source, tx)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- impl sp_offchain::OffchainWorkerApi<Block> for Runtime {
|
|
|
- fn offchain_worker(header: &<Block as BlockT>::Header) {
|
|
|
- Executive::offchain_worker(header)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- impl fg_primitives::GrandpaApi<Block> for Runtime {
|
|
|
- fn grandpa_authorities() -> GrandpaAuthorityList {
|
|
|
- Grandpa::grandpa_authorities()
|
|
|
- }
|
|
|
-
|
|
|
- fn submit_report_equivocation_extrinsic(
|
|
|
- equivocation_proof: fg_primitives::EquivocationProof<
|
|
|
- <Block as BlockT>::Hash,
|
|
|
- NumberFor<Block>,
|
|
|
- >,
|
|
|
- key_owner_proof: fg_primitives::OpaqueKeyOwnershipProof,
|
|
|
- ) -> Option<()> {
|
|
|
- let key_owner_proof = key_owner_proof.decode()?;
|
|
|
-
|
|
|
- Grandpa::submit_report_equivocation_extrinsic(
|
|
|
- equivocation_proof,
|
|
|
- key_owner_proof,
|
|
|
- )
|
|
|
- }
|
|
|
-
|
|
|
- fn generate_key_ownership_proof(
|
|
|
- _set_id: fg_primitives::SetId,
|
|
|
- authority_id: GrandpaId,
|
|
|
- ) -> Option<fg_primitives::OpaqueKeyOwnershipProof> {
|
|
|
- use codec::Encode;
|
|
|
-
|
|
|
- Historical::prove((fg_primitives::KEY_TYPE, authority_id))
|
|
|
- .map(|p| p.encode())
|
|
|
- .map(fg_primitives::OpaqueKeyOwnershipProof::new)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- impl sp_consensus_babe::BabeApi<Block> for Runtime {
|
|
|
- fn configuration() -> sp_consensus_babe::BabeGenesisConfiguration {
|
|
|
- // The choice of `c` parameter (where `1 - c` represents the
|
|
|
- // probability of a slot being empty), is done in accordance to the
|
|
|
- // slot duration and expected target block time, for safely
|
|
|
- // resisting network delays of maximum two seconds.
|
|
|
- // <https://research.web3.foundation/en/latest/polkadot/BABE/Babe/#6-practical-results>
|
|
|
- sp_consensus_babe::BabeGenesisConfiguration {
|
|
|
- slot_duration: Babe::slot_duration(),
|
|
|
- epoch_length: EpochDuration::get(),
|
|
|
- c: PRIMARY_PROBABILITY,
|
|
|
- genesis_authorities: Babe::authorities(),
|
|
|
- randomness: Babe::randomness(),
|
|
|
- allowed_slots: sp_consensus_babe::AllowedSlots::PrimaryAndSecondaryPlainSlots,
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- fn current_epoch_start() -> sp_consensus_babe::SlotNumber {
|
|
|
- Babe::current_epoch_start()
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- impl sp_authority_discovery::AuthorityDiscoveryApi<Block> for Runtime {
|
|
|
- fn authorities() -> Vec<AuthorityDiscoveryId> {
|
|
|
- AuthorityDiscovery::authorities()
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- impl frame_system_rpc_runtime_api::AccountNonceApi<Block, AccountId, Index> for Runtime {
|
|
|
- fn account_nonce(account: AccountId) -> Index {
|
|
|
- System::account_nonce(account)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- impl pallet_contracts_rpc_runtime_api::ContractsApi<Block, AccountId, Balance, BlockNumber>
|
|
|
- for Runtime
|
|
|
- {
|
|
|
- fn call(
|
|
|
- origin: AccountId,
|
|
|
- dest: AccountId,
|
|
|
- value: Balance,
|
|
|
- gas_limit: u64,
|
|
|
- input_data: Vec<u8>,
|
|
|
- ) -> ContractExecResult {
|
|
|
- let exec_result =
|
|
|
- Contracts::bare_call(origin, dest, value, gas_limit, input_data);
|
|
|
- match exec_result {
|
|
|
- Ok(v) => ContractExecResult::Success {
|
|
|
- status: v.status,
|
|
|
- data: v.data,
|
|
|
- },
|
|
|
- Err(_) => ContractExecResult::Error,
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- fn get_storage(
|
|
|
- address: AccountId,
|
|
|
- key: [u8; 32],
|
|
|
- ) -> pallet_contracts_primitives::GetStorageResult {
|
|
|
- Contracts::get_storage(address, key)
|
|
|
- }
|
|
|
-
|
|
|
- fn rent_projection(
|
|
|
- address: AccountId,
|
|
|
- ) -> pallet_contracts_primitives::RentProjectionResult<BlockNumber> {
|
|
|
- Contracts::rent_projection(address)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- impl pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi<
|
|
|
- Block,
|
|
|
- Balance,
|
|
|
- UncheckedExtrinsic,
|
|
|
- > for Runtime {
|
|
|
- fn query_info(uxt: UncheckedExtrinsic, len: u32) -> RuntimeDispatchInfo<Balance> {
|
|
|
- TransactionPayment::query_info(uxt, len)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- impl sp_session::SessionKeys<Block> for Runtime {
|
|
|
- fn generate_session_keys(seed: Option<Vec<u8>>) -> Vec<u8> {
|
|
|
- SessionKeys::generate(seed)
|
|
|
- }
|
|
|
- fn decode_session_keys(
|
|
|
- encoded: Vec<u8>,
|
|
|
- ) -> Option<Vec<(Vec<u8>, KeyTypeId)>> {
|
|
|
- SessionKeys::decode_into_raw_public_keys(&encoded)
|
|
|
- }
|
|
|
- }
|
|
|
-}
|