diff --git a/justfile b/justfile index af2e2c708..ef5799fe7 100644 --- a/justfile +++ b/justfile @@ -1,100 +1,59 @@ # Help information default: - @just --list - -# Build everything -build-all: - cargo build --release - -# Build the "Base" Runtime -build-base-runtime: - cargo build --release -p polimec-base-runtime - -# Build the "Testnet" Runtime -build-parachain-runtime: - cargo build --release -p polimec-parachain-runtime - -# Build the "Parachain" Node -build-parachain-node: - cargo build --release -p polimec-parachain-node + @just --list # Build the "Base" Runtime using srtool build-base-srtool: - srtool build --root -p polimec-base-runtime --runtime-dir runtimes/base --build-opts="--features=on-chain-release-build" + srtool build --root -p polimec-base-runtime --runtime-dir runtimes/base --build-opts="--features=on-chain-release-build" # Build the "Testnet" Runtime using srtool -build-parachain-srtool: - srtool build --root -p polimec-parachain-runtime --runtime-dir runtimes/testnet # Test the runtimes features test-runtime-features: - cargo test --features runtime-benchmarks -p polimec-parachain-runtime + cargo test --features runtime-benchmarks -p polimec-parachain-runtime # Run the integration tests test-integration: - cargo test -p integration-tests - - -# Benchmark the "Testnet" Runtime -benchmark-runtime-funding: - cargo run --features runtime-benchmarks --release -p polimec-parachain-node benchmark pallet \ - --chain=polimec-rococo-local \ - --steps=50 \ - --repeat=20 \ - --pallet=pallet_funding \ - --extrinsic '*' \ - --wasm-execution=compiled \ - --heap-pages=4096 \ - --output=runtimes/testnet/src/weights/pallet_funding.rs - - -# Benchmark the "Testnet" Runtime -benchmark-runtime-linear-release: - cargo run --features runtime-benchmarks --release -p polimec-parachain-node benchmark pallet \ - --chain=polimec-rococo-local \ - --steps=50 \ - --repeat=20 \ - --pallet=pallet_linear_release \ - --extrinsic '*' \ - --wasm-execution=compiled \ - --heap-pages=4096 \ - --output=runtimes/testnet/src/weights/pallet_linear_release.rs - -# Benchmark the "Testnet" Runtime -benchmark-pallet-funding: - cargo run --features runtime-benchmarks,fast-mode --release -p polimec-parachain-node benchmark pallet \ - --chain=polimec-rococo-local \ - --steps=50 \ - --repeat=20 \ - --pallet=pallet_funding \ - --extrinsic '*' \ - --heap-pages=4096 \ - --output=pallets/funding/src/weights-test.rs \ - --template=./.maintain/frame-weight-template.hbs - -benchmark-pallet-linear-release: - cargo run --features runtime-benchmarks,fast-mode --release -p polimec-parachain-node benchmark pallet \ - --chain=polimec-rococo-local \ - --steps=50 \ - --repeat=20 \ - --pallet=pallet_linear_release \ - --extrinsic '*' \ - --heap-pages=4096 \ - --output=pallets/linear-release/src/weights.rs \ - --template=./.maintain/frame-weight-template.hbs - -benchmarks-test: - cargo test --features runtime-benchmarks -p pallet-funding benchmarks - + cargo test -p integration-tests + +# src: https://github.com/polkadot-fellows/runtimes/blob/48ccfae6141d2924f579d81e8b1877efd208693f/system-parachains/asset-hubs/asset-hub-polkadot/src/weights/cumulus_pallet_xcmp_queue.rs +# Benchmark a specific pallet on the "Base" Runtime +benchmark-runtime pallet="pallet-elections-phragmen" features="runtime-benchmarks": + cargo run --features {{ features }} --release -p polimec-parachain-node benchmark pallet \ + --chain=base-polkadot \ + --steps=50 \ + --repeat=20 \ + --pallet={{ pallet }} \ + --extrinsic=* \ + --wasm-execution=compiled \ + --heap-pages=4096 \ + --output=runtimes/base/src/weights/{{ replace(pallet, "-", "_") }}.rs + +# src: https://github.com/paritytech/polkadot-sdk/blob/bc2e5e1fe26e2c2c8ee766ff9fe7be7e212a0c62/substrate/frame/nfts/src/weights.rs +# Run the Runtime benchmarks for a specific pallet +benchmark-pallet pallet="pallet-elections-phragmen" features="runtime-benchmarks": + cargo run --features {{ features }} --release -p polimec-parachain-node benchmark pallet \ + --chain=base-polkadot \ + --steps=50 \ + --repeat=20 \ + --pallet={{ pallet }} \ + --no-storage-info \ + --no-median-slopes \ + --no-min-squares \ + --extrinsic '*' \ + --wasm-execution=compiled \ + --heap-pages=4096 \ + --output=pallets/{{ replace(pallet, "pallet-", "") }}/src/weights.rs \ + --template=./.maintain/frame-weight-template.hbs # Build the Node Docker Image -docker-build tag = "latest" package= "polimec-parachain-node": - ./scripts/build_image.sh {{tag}} ./Dockerfile {{package}} +docker-build tag="latest" package="polimec-parachain-node": + ./scripts/build_image.sh {{ tag }} ./Dockerfile {{ package }} # Create the "Base" Runtime Chainspec create-chainspec-base: - ./scripts/create_base_chain_spec.sh ./runtimes/base/target/srtool/release/wbuild/polimec-base-runtime/polimec_base_runtime.compact.compressed.wasm 2105 + ./scripts/create_base_chain_spec.sh ./runtimes/base/target/srtool/release/wbuild/polimec-base-runtime/polimec_base_runtime.compact.compressed.wasm 2105 # Use zombienet to spawn rococo + polimec testnet -zombienet path_to_file = "scripts/zombienet/native/base-rococo-local.toml": - zombienet spawn {{path_to_file}} \ No newline at end of file +zombienet path_to_file="scripts/zombienet/native/base-rococo-local.toml": + zombienet spawn {{ path_to_file }} diff --git a/nodes/parachain/src/chain_spec/base.rs b/nodes/parachain/src/chain_spec/base.rs index c3f5344e4..e97d645a6 100644 --- a/nodes/parachain/src/chain_spec/base.rs +++ b/nodes/parachain/src/chain_spec/base.rs @@ -31,7 +31,7 @@ use base_runtime::{ inflation::{perbill_annual_to_perbill_round, BLOCKS_PER_YEAR}, InflationInfo, Range, }, - AccountId, AuraId as AuthorityId, Balance, BalancesConfig, MinCandidateStk, ParachainInfoConfig, + AccountId, AuraId as AuthorityId, Balance, BalancesConfig, ElectionsConfig, MinCandidateStk, ParachainInfoConfig, ParachainStakingConfig, PolkadotXcmConfig, RuntimeGenesisConfig, SessionConfig, SudoConfig, SystemConfig, PLMC, }; @@ -216,9 +216,12 @@ fn base_testnet_genesis( sudo_account: AccountId, id: ParaId, ) -> RuntimeGenesisConfig { + const ENDOWMENT: Balance = 10_000_000 * PLMC; + const STASH: Balance = ENDOWMENT / 1000; + RuntimeGenesisConfig { system: SystemConfig { code: wasm_binary.to_vec(), ..Default::default() }, - balances: BalancesConfig { balances: endowed_accounts }, + balances: BalancesConfig { balances: endowed_accounts.clone() }, parachain_info: ParachainInfoConfig { parachain_id: id, ..Default::default() }, parachain_staking: ParachainStakingConfig { candidates: stakers.iter().map(|(accunt, _, balance)| (accunt.clone(), *balance)).collect::>(), @@ -254,7 +257,15 @@ fn base_testnet_genesis( council: Default::default(), technical_committee: Default::default(), democracy: Default::default(), - elections: Default::default(), + elections: ElectionsConfig { + members: endowed_accounts + .iter() + .map(|(member, _)| member) + .take((endowed_accounts.len() + 1) / 2) + .cloned() + .map(|member| (member, STASH)) + .collect(), + }, treasury: Default::default(), vesting: Default::default(), } diff --git a/pallets/democracy/Cargo.toml b/pallets/democracy/Cargo.toml index 02be6e932..79f6a1459 100644 --- a/pallets/democracy/Cargo.toml +++ b/pallets/democracy/Cargo.toml @@ -1,10 +1,10 @@ [package] name = "pallet-democracy" -version = "4.0.0-dev" +version.workspace = true authors.workspace = true edition.workspace = true -license = "Apache-2.0" -homepage = "https://substrate.io" +license-file.workspace = true +homepage.workspace = true repository.workspace = true description = "FRAME pallet for democracy" readme = "README.md" diff --git a/pallets/elections-phragmen/Cargo.toml b/pallets/elections-phragmen/Cargo.toml index 05a690229..a25219461 100644 --- a/pallets/elections-phragmen/Cargo.toml +++ b/pallets/elections-phragmen/Cargo.toml @@ -1,10 +1,10 @@ [package] name = "pallet-elections-phragmen" -version = "5.0.0-dev" +version.workspace = true authors.workspace = true edition.workspace = true -license = "Apache-2.0" -homepage = "https://substrate.io" +license-file.workspace = true +homepage.workspace = true repository.workspace = true description = "FRAME pallet based on seq-Phragmén election method." readme = "README.md" diff --git a/pallets/elections-phragmen/src/benchmarking.rs b/pallets/elections-phragmen/src/benchmarking.rs index 517bff81f..d6e71de65 100644 --- a/pallets/elections-phragmen/src/benchmarking.rs +++ b/pallets/elections-phragmen/src/benchmarking.rs @@ -24,14 +24,12 @@ use frame_system::RawOrigin; use crate::Pallet as Elections; -const BALANCE_FACTOR: u32 = 250; - /// grab new account with infinite balance. fn endowed_account(name: &'static str, index: u32) -> T::AccountId { let account: T::AccountId = account(name, index, 0); // Fund each account with at-least their stake but still a sane amount as to not mess up // the vote calculation. - let amount = default_stake::(T::MaxVoters::get()) * BalanceOf::::from(BALANCE_FACTOR); + let amount = default_stake::(T::MaxVoters::get()) * T::CandidacyBond::get(); let _ = T::Currency::set_balance(&account, amount); // important to increase the total issuance since T::CurrencyToVote will need it to be sane for // phragmen to work. diff --git a/runtimes/base/src/lib.rs b/runtimes/base/src/lib.rs index 9f30492fb..da42cbed3 100644 --- a/runtimes/base/src/lib.rs +++ b/runtimes/base/src/lib.rs @@ -809,11 +809,38 @@ construct_runtime!( #[cfg(feature = "runtime-benchmarks")] mod benches { frame_benchmarking::define_benchmarks!( + // System support stuff. [frame_system, SystemBench::] + [pallet_timestamp, Timestamp] + [pallet_sudo, Sudo] + [pallet_utility, Utility] + [pallet_multisig, Multisig] + [pallet_proxy, Proxy] + + // Monetary stuff. [pallet_balances, Balances] + [pallet_vesting, Vesting] + + // Collator support. [pallet_session, SessionBench::] - [pallet_timestamp, Timestamp] + [pallet_parachain_staking, ParachainStaking] + + // XCM helpers. [cumulus_pallet_xcmp_queue, XcmpQueue] + [pallet_xcm, PolkadotXcm] + + // Governance + [pallet_treasury, Treasury] + [pallet_democracy, Democracy] + [pallet_collective, Council] + [pallet_collective, TechnicalCommittee] + [pallet_elections_phragmen, Elections] + [pallet_preimage, Preimage] + [pallet_scheduler, Scheduler] + + // Oracle + [pallet_membership, OracleProvidersMembership] + //[orml_oracle, Oracle] ); } diff --git a/runtimes/shared-configuration/src/governance.rs b/runtimes/shared-configuration/src/governance.rs index 70ca8c924..39b19e33e 100644 --- a/runtimes/shared-configuration/src/governance.rs +++ b/runtimes/shared-configuration/src/governance.rs @@ -104,20 +104,24 @@ parameter_types! { pub const MinimumDeposit: Balance = 100 * PLMC; pub const EnactmentPeriod: BlockNumber = ENACTMENT_PERIOD; pub const CooloffPeriod: BlockNumber = COOLOFF_PERIOD; + // Council Pallet pub const CouncilMotionDuration: BlockNumber = COUNCIL_MOTION_DURATION; pub const CouncilMaxProposals: u32 = 7; pub const CouncilMaxMembers: u32 = 20; + // Technical Committee pub const TechnicalMotionDuration: BlockNumber = TECHNICAL_MOTION_DURATION; pub const TechnicalMaxProposals: u32 = 7; pub const TechnicalMaxMembers: u32 = 5; + // Extras pub const PreimageBaseDeposit: Balance = deposit(2, 64); pub const MaxProposals: u32 = 10; pub const MaxVotes: u32 = 100; pub const MaxBlacklisted: u32 = 100; pub const MaxDeposits: u32 = 100; + //Treasury pub const ProposalBond: Permill = Permill::from_percent(5); pub const ProposalBondMinimum: Balance = 50 * PLMC;