mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 23:21:02 +00:00
30844b1e9c
* Add Instance type parameter to pallet * Sketch out what the runtime could look like * Allow runtime to compile with multiple bridge pallets * Cargo Fmt * Allow an instance of a PoA chain to be used with currency-exchange I specify that it's only _an instance_ instead of _instances_ since the currency-exchange pallet does not support multiple instances itself. What this commit does is make it so that the different instances of the PoA chains we currently have are compatible with the currency-exchange pallet through the implementation of the PeerBlockchain trait. * Add Instance type parameter to Currency Exchange pallet * Wire up currency exchange intances in runtime * Rust Fmt * Show sccache * Allow Eth pallet to use a default instance * Use a default instance in Eth pallet tests * Remove Rialto and Kovan feature flags Through some discussions it has been decided that the `bridge-node` should, like Substrate's `node-template`, be a showcase of the different pallets available in a project. Because of this I've removed the feature flags for the Rialto and Kovan networks in favour of having both of them included in the runtime. * Update the chain_spec to use both Rialto and Kovan configs * Update pallet level calls used by Substrate client Allows the project to compile. However, it should be noted that in reality we shouldn't be hardcoding the pallet we're calling. * Allow currency-exchange pallet to use a default instance * Support benchmarking an instance of the Eth pallet * Update currency exchange benchmarks to work with instances * Fix test helpers which now need a PoA instance * Remove Actions for checking Rialto and Kovan features * Add missing comments * Update Runtime API string constants * Add issue number for generic chain support in relay * Add Runtime APIs for instances of the currency-exchange pallet * Rust Fmt Co-authored-by: Denis S. Soldatov aka General-Beck <general.beck@gmail.com>
135 lines
4.9 KiB
Rust
135 lines
4.9 KiB
Rust
// Copyright 2019-2020 Parity Technologies (UK) Ltd.
|
|
// This file is part of Parity Bridges Common.
|
|
|
|
// Parity Bridges Common is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
|
|
// Parity Bridges Common is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Parity Bridges Common. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
//! Exchange module complexity is mostly determined by callbacks, defined by runtime.
|
|
//! So we are giving runtime opportunity to prepare environment and construct proof
|
|
//! before invoking module calls.
|
|
|
|
use super::{Call, Instance, Module as CurrencyExchangeModule, PeerBlockchain, Trait as CurrencyExchangeTrait};
|
|
use sp_std::prelude::*;
|
|
|
|
use frame_benchmarking::{account, benchmarks_instance};
|
|
use frame_system::RawOrigin;
|
|
|
|
const SEED: u32 = 0;
|
|
const WORST_TX_SIZE_FACTOR: u32 = 1000;
|
|
const WORST_PROOF_SIZE_FACTOR: u32 = 1000;
|
|
|
|
/// Module we're benchmarking here.
|
|
pub struct Module<T: Trait<I>, I: Instance>(CurrencyExchangeModule<T, I>);
|
|
|
|
/// Proof benchmarking parameters.
|
|
pub struct ProofParams<Recipient> {
|
|
/// Funds recipient.
|
|
pub recipient: Recipient,
|
|
/// When true, recipient must exists before import.
|
|
pub recipient_exists: bool,
|
|
/// When 0, transaction should have minimal possible size. When this value has non-zero value n,
|
|
/// transaction size should be (if possible) near to MIN_SIZE + n * SIZE_FACTOR.
|
|
pub transaction_size_factor: u32,
|
|
/// When 0, proof should have minimal possible size. When this value has non-zero value n,
|
|
/// proof size should be (if possible) near to MIN_SIZE + n * SIZE_FACTOR.
|
|
pub proof_size_factor: u32,
|
|
}
|
|
|
|
/// Trait that must be implemented by runtime.
|
|
pub trait Trait<I: Instance>: CurrencyExchangeTrait<I> {
|
|
/// Prepare proof for importing exchange transaction.
|
|
fn make_proof(
|
|
proof_params: ProofParams<Self::AccountId>,
|
|
) -> <<Self as CurrencyExchangeTrait<I>>::PeerBlockchain as PeerBlockchain>::TransactionInclusionProof;
|
|
}
|
|
|
|
benchmarks_instance! {
|
|
_ { }
|
|
|
|
// Benchmark `import_peer_transaction` extrinsic with the best possible conditions:
|
|
// * Proof is the transaction itself.
|
|
// * Transaction has minimal size.
|
|
// * Recipient account exists.
|
|
import_peer_transaction_best_case {
|
|
let i in 1..100;
|
|
|
|
let recipient: T::AccountId = account("recipient", i, SEED);
|
|
let proof = T::make_proof(ProofParams {
|
|
recipient: recipient.clone(),
|
|
recipient_exists: true,
|
|
transaction_size_factor: 0,
|
|
proof_size_factor: 0,
|
|
});
|
|
}: import_peer_transaction(RawOrigin::Signed(recipient), proof)
|
|
|
|
// Benchmark `import_peer_transaction` extrinsic when recipient account does not exists.
|
|
import_peer_transaction_when_recipient_does_not_exists {
|
|
let i in 1..100;
|
|
|
|
let recipient: T::AccountId = account("recipient", i, SEED);
|
|
let proof = T::make_proof(ProofParams {
|
|
recipient: recipient.clone(),
|
|
recipient_exists: false,
|
|
transaction_size_factor: 0,
|
|
proof_size_factor: 0,
|
|
});
|
|
}: import_peer_transaction(RawOrigin::Signed(recipient), proof)
|
|
|
|
// Benchmark `import_peer_transaction` when transaction size increases.
|
|
import_peer_transaction_when_transaction_size_increases {
|
|
let i in 1..100;
|
|
let n in 1..WORST_TX_SIZE_FACTOR;
|
|
|
|
let recipient: T::AccountId = account("recipient", i, SEED);
|
|
let proof = T::make_proof(ProofParams {
|
|
recipient: recipient.clone(),
|
|
recipient_exists: true,
|
|
transaction_size_factor: n,
|
|
proof_size_factor: 0,
|
|
});
|
|
}: import_peer_transaction(RawOrigin::Signed(recipient), proof)
|
|
|
|
// Benchmark `import_peer_transaction` when proof size increases.
|
|
import_peer_transaction_when_proof_size_increases {
|
|
let i in 1..100;
|
|
let n in 1..WORST_PROOF_SIZE_FACTOR;
|
|
|
|
let recipient: T::AccountId = account("recipient", i, SEED);
|
|
let proof = T::make_proof(ProofParams {
|
|
recipient: recipient.clone(),
|
|
recipient_exists: true,
|
|
transaction_size_factor: 0,
|
|
proof_size_factor: n,
|
|
});
|
|
}: import_peer_transaction(RawOrigin::Signed(recipient), proof)
|
|
|
|
// Benchmark `import_peer_transaction` extrinsic with the worst possible conditions:
|
|
// * Proof is large.
|
|
// * Transaction has large size.
|
|
// * Recipient account does not exists.
|
|
import_peer_transaction_worst_case {
|
|
let i in 1..100;
|
|
let m in WORST_TX_SIZE_FACTOR..WORST_TX_SIZE_FACTOR+1;
|
|
let n in WORST_PROOF_SIZE_FACTOR..WORST_PROOF_SIZE_FACTOR+1;
|
|
|
|
let recipient: T::AccountId = account("recipient", i, SEED);
|
|
let proof = T::make_proof(ProofParams {
|
|
recipient: recipient.clone(),
|
|
recipient_exists: false,
|
|
transaction_size_factor: m,
|
|
proof_size_factor: n,
|
|
});
|
|
}: import_peer_transaction(RawOrigin::Signed(recipient), proof)
|
|
|
|
}
|