This repository was archived by the owner on Nov 15, 2023. It is now read-only.
-
Couldn't load subscription status.
- Fork 2.7k
Logic for the (Core) Fellowship #13503
Merged
Merged
Changes from all commits
Commits
Show all changes
97 commits
Select commit
Hold shift + click to select a range
e3a5bb2
More drafting
gavofyork 3ff9ce8
Merge remote-tracking branch 'origin/master' into gav-paymaster
gavofyork 07ab87a
Paymaster pallet
gavofyork 88e11ce
Merge remote-tracking branch 'origin/master' into gav-paymaster
gavofyork 8200850
Merge remote-tracking branch 'origin/master' into gav-paymaster
gavofyork 958d34f
Fix build
gavofyork 91cb1f5
More tests
gavofyork c53d372
Rename
gavofyork 0806559
Rename
gavofyork 5cadabf
Renaming
gavofyork 712118b
Revert old changes
gavofyork 07b785c
Multi-phase payouts to avoid bank-runs
gavofyork 7fb95d0
Tests
gavofyork 5c38814
Tests
gavofyork bfdf333
Allow payment to be targeted elsewhere
gavofyork 807a3c9
Proper ssync payment failure handling
gavofyork cf1f365
Test for repayment
gavofyork d829078
Docs
gavofyork 7162964
Impl RankedMembers for RankedCollective
gavofyork 2e299f4
Implement Pay for Pot (i.e. basic account).
gavofyork 5995eeb
Benchmarks
gavofyork c9c2ce8
Weights
gavofyork 16bc55a
Introduce Salary benchmark into node
gavofyork 2fc7fab
Fix warning
gavofyork 575f426
Merge branch 'master' of https://github.com/paritytech/substrate into…
42a7927
".git/.scripts/commands/bench/bench.sh" pallet dev pallet_salary
7dc1529
Update primitives/arithmetic/src/traits.rs
gavofyork 366267c
Update frame/salary/src/lib.rs
gavofyork 26f1ab0
Update lib.rs
gavofyork 872a047
Update frame/salary/src/lib.rs
gavofyork e2fd134
Docs
gavofyork 8d8a5bf
Update frame/salary/src/lib.rs
gavofyork 9849a65
Update frame/salary/src/lib.rs
gavofyork 0b4aafa
Fix
gavofyork 03199ae
Merge branch 'gav-paymaster' of github.com:paritytech/substrate into …
gavofyork a21b1bc
Fixes
gavofyork 4c85f02
Fixes
gavofyork d5696c1
Move some salary traits stuff to a shared location
gavofyork 199b1fe
Merge branch 'gav-paymaster' into gav-core-fellowship
gavofyork caaf99e
Initial draft
gavofyork 3d70833
Comment out bits
gavofyork ddd4d3e
Fix
gavofyork 26aa188
Merge branch 'gav-paymaster' into gav-core-fellowship
gavofyork 3fcc590
First couple of tests
gavofyork f60ed83
One more test
gavofyork 3704efe
Update frame/salary/src/lib.rs
gavofyork 93a845d
Update frame/salary/src/lib.rs
gavofyork 2ef3e14
Mul floor
gavofyork d992c0d
Tests
gavofyork e5c0733
Mul floor
gavofyork 5d24050
Merge branch 'gav-paymaster' of github.com:paritytech/substrate into …
gavofyork b3d160e
Fix warnings
gavofyork b9623a4
Fix test
gavofyork b051049
Merge branch 'gav-paymaster' into gav-core-fellowship
gavofyork 3580ea2
Tests
gavofyork 31bf7b6
Last tests
gavofyork c08c010
Docs
gavofyork 8782190
Merge branch 'gav-paymaster' into gav-core-fellowship
gavofyork a3f2026
Merge branch 'master' into gav-core-fellowship
gavofyork 392c74d
Merge branch 'gav-core-fellowship' of github.com:paritytech/substrate…
gavofyork 6c15f61
Fix warnings
gavofyork 6fec0d2
Merge branch 'master' into gav-core-fellowship
gavofyork 9d947a5
Benchmarks
gavofyork 65f3570
Merge branch 'gav-core-fellowship' of github.com:paritytech/substrate…
gavofyork 10e30b3
Weights
gavofyork bda6348
Integrate benchmark
gavofyork 47ad52c
Fixes
gavofyork 6752c18
Fix
gavofyork 5b8e221
Merge branch 'master' of https://github.com/paritytech/substrate into…
3116351
".git/.scripts/commands/bench/bench.sh" pallet dev pallet_core_fellow…
032f7c1
Better process flow
gavofyork 1f69d45
Fix benchmarks & tests
gavofyork b1868e0
Docs
gavofyork ec0f7db
Fixes
gavofyork 59d70c9
Fixes
gavofyork cdb8022
docs
gavofyork 308510a
".git/.scripts/commands/bench/bench.sh" pallet dev pallet_core_fellow…
8c60756
Docs and allow custom evidence size
gavofyork 958edf6
Merge branch 'gav-core-fellowship' of github.com:paritytech/substrate…
gavofyork dd07d0c
".git/.scripts/commands/bench/bench.sh" pallet dev pallet_core_fellow…
8233b71
Update frame/core-fellowship/src/lib.rs
gavofyork 1261201
Update frame/core-fellowship/src/tests.rs
gavofyork 8e524e9
Update frame/core-fellowship/src/benchmarking.rs
gavofyork 063f1d7
Update frame/core-fellowship/src/benchmarking.rs
gavofyork 76e521b
Apply suggestions from code review
gavofyork a86c095
Rename
gavofyork c9de385
Update primitives/arithmetic/src/traits.rs
gavofyork 8684952
Reduce magic numbers
gavofyork 4fc96dd
Merge branch 'gav-core-fellowship' of github.com:paritytech/substrate…
gavofyork 091c6af
Update frame/core-fellowship/src/lib.rs
gavofyork ecd0c46
Update frame/core-fellowship/src/lib.rs
gavofyork 749f9ac
Benchmark result
gavofyork 122df7c
Merge branch 'gav-core-fellowship' of github.com:paritytech/substrate…
gavofyork 04da40e
Remove dependency
gavofyork ae5a5e2
set_params should pay
gavofyork 554ac7d
induct should pay
gavofyork cc9f07c
Remove some other free calls
gavofyork File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,55 @@ | ||
| [package] | ||
| name = "pallet-core-fellowship" | ||
| version = "4.0.0-dev" | ||
| authors = ["Parity Technologies <[email protected]>"] | ||
| edition = "2021" | ||
| license = "Apache-2.0" | ||
| homepage = "https://substrate.io" | ||
| repository = "https://github.com/paritytech/substrate/" | ||
| description = "Logic as per the description of The Fellowship for core Polkadot technology" | ||
| readme = "README.md" | ||
|
|
||
| [package.metadata.docs.rs] | ||
| targets = ["x86_64-unknown-linux-gnu"] | ||
|
|
||
| [dependencies] | ||
| codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] } | ||
| log = { version = "0.4.16", default-features = false } | ||
| scale-info = { version = "2.0.1", default-features = false, features = ["derive"] } | ||
| frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true, path = "../benchmarking" } | ||
| frame-support = { version = "4.0.0-dev", default-features = false, path = "../support" } | ||
| frame-system = { version = "4.0.0-dev", default-features = false, path = "../system" } | ||
| sp-arithmetic = { version = "6.0.0", default-features = false, path = "../../primitives/arithmetic" } | ||
| sp-core = { version = "7.0.0", default-features = false, path = "../../primitives/core" } | ||
| sp-io = { version = "7.0.0", default-features = false, path = "../../primitives/io" } | ||
| sp-runtime = { version = "7.0.0", default-features = false, path = "../../primitives/runtime" } | ||
| sp-std = { version = "5.0.0", default-features = false, path = "../../primitives/std" } | ||
|
|
||
| [dev-dependencies] | ||
| pallet-ranked-collective = { version = "4.0.0-dev", default-features = false, path = "../ranked-collective" } | ||
| pallet-salary = { version = "4.0.0-dev", default-features = false, path = "../salary" } | ||
|
|
||
| [features] | ||
| default = ["std"] | ||
| std = [ | ||
| "codec/std", | ||
| "frame-benchmarking?/std", | ||
| "frame-support/std", | ||
| "frame-system/std", | ||
| "log/std", | ||
| "scale-info/std", | ||
| "sp-arithmetic/std", | ||
| "sp-core/std", | ||
| "sp-io/std", | ||
| "sp-runtime/std", | ||
| "sp-std/std", | ||
| ] | ||
| runtime-benchmarks = [ | ||
| "frame-benchmarking/runtime-benchmarks", | ||
| "frame-support/runtime-benchmarks", | ||
| "frame-system/runtime-benchmarks", | ||
| "sp-runtime/runtime-benchmarks", | ||
| "pallet-ranked-collective/runtime-benchmarks", | ||
| "pallet-salary/runtime-benchmarks", | ||
| ] | ||
| try-runtime = ["frame-support/try-runtime"] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| # Core Fellowship | ||
|
|
||
| Logic specific to the core Polkadot Fellowship. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,216 @@ | ||
| // This file is part of Substrate. | ||
|
|
||
| // Copyright (C) 2020-2022 Parity Technologies (UK) Ltd. | ||
| // SPDX-License-Identifier: Apache-2.0 | ||
|
|
||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||
| // you may not use this file except in compliance with the License. | ||
| // You may obtain a copy of the License at | ||
| // | ||
| // http://www.apache.org/licenses/LICENSE-2.0 | ||
| // | ||
| // Unless required by applicable law or agreed to in writing, software | ||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| // See the License for the specific language governing permissions and | ||
| // limitations under the License. | ||
|
|
||
| //! Salary pallet benchmarking. | ||
|
|
||
| #![cfg(feature = "runtime-benchmarks")] | ||
|
|
||
| use super::*; | ||
| use crate::Pallet as CoreFellowship; | ||
|
|
||
| use frame_benchmarking::v2::*; | ||
| use frame_system::RawOrigin; | ||
| use sp_arithmetic::traits::Bounded; | ||
|
|
||
| const SEED: u32 = 0; | ||
|
|
||
| type BenchResult = Result<(), BenchmarkError>; | ||
|
|
||
| #[instance_benchmarks] | ||
| mod benchmarks { | ||
| use super::*; | ||
|
|
||
| fn ensure_evidence<T: Config<I>, I: 'static>(who: &T::AccountId) -> BenchResult { | ||
| let evidence = BoundedVec::try_from(vec![0; Evidence::<T, I>::bound()]).unwrap(); | ||
| let wish = Wish::Retention; | ||
| let origin = RawOrigin::Signed(who.clone()).into(); | ||
| CoreFellowship::<T, I>::submit_evidence(origin, wish, evidence)?; | ||
| assert!(MemberEvidence::<T, I>::contains_key(who)); | ||
| Ok(()) | ||
| } | ||
|
|
||
| fn make_member<T: Config<I>, I: 'static>(rank: u16) -> Result<T::AccountId, BenchmarkError> { | ||
| let member = account("member", 0, SEED); | ||
| T::Members::induct(&member)?; | ||
| for _ in 0..rank { | ||
| T::Members::promote(&member)?; | ||
| } | ||
| CoreFellowship::<T, I>::import(RawOrigin::Signed(member.clone()).into())?; | ||
| Ok(member) | ||
| } | ||
|
|
||
| #[benchmark] | ||
| fn set_params() -> Result<(), BenchmarkError> { | ||
| let params = ParamsType { | ||
| active_salary: [100u32.into(); 9], | ||
| passive_salary: [10u32.into(); 9], | ||
| demotion_period: [100u32.into(); 9], | ||
| min_promotion_period: [100u32.into(); 9], | ||
| offboard_timeout: 1u32.into(), | ||
| }; | ||
|
|
||
| #[extrinsic_call] | ||
| _(RawOrigin::Root, Box::new(params.clone())); | ||
|
|
||
| assert_eq!(Params::<T, I>::get(), params); | ||
| Ok(()) | ||
| } | ||
|
|
||
| #[benchmark] | ||
| fn bump_offboard() -> Result<(), BenchmarkError> { | ||
| let member = make_member::<T, I>(0)?; | ||
|
|
||
| // Set it to the max value to ensure that any possible auto-demotion period has passed. | ||
| frame_system::Pallet::<T>::set_block_number(T::BlockNumber::max_value()); | ||
| ensure_evidence::<T, I>(&member)?; | ||
| assert!(Member::<T, I>::contains_key(&member)); | ||
|
|
||
| #[extrinsic_call] | ||
| CoreFellowship::<T, I>::bump(RawOrigin::Signed(member.clone()), member.clone()); | ||
|
|
||
| assert!(!Member::<T, I>::contains_key(&member)); | ||
| assert!(!MemberEvidence::<T, I>::contains_key(&member)); | ||
| Ok(()) | ||
| } | ||
|
|
||
| #[benchmark] | ||
| fn bump_demote() -> Result<(), BenchmarkError> { | ||
| let member = make_member::<T, I>(2)?; | ||
|
|
||
| // Set it to the max value to ensure that any possible auto-demotion period has passed. | ||
| frame_system::Pallet::<T>::set_block_number(T::BlockNumber::max_value()); | ||
| ensure_evidence::<T, I>(&member)?; | ||
| assert!(Member::<T, I>::contains_key(&member)); | ||
| assert_eq!(T::Members::rank_of(&member), Some(2)); | ||
|
|
||
| #[extrinsic_call] | ||
| CoreFellowship::<T, I>::bump(RawOrigin::Signed(member.clone()), member.clone()); | ||
|
|
||
| assert!(Member::<T, I>::contains_key(&member)); | ||
| assert_eq!(T::Members::rank_of(&member), Some(1)); | ||
| assert!(!MemberEvidence::<T, I>::contains_key(&member)); | ||
| Ok(()) | ||
| } | ||
|
|
||
| #[benchmark] | ||
| fn set_active() -> Result<(), BenchmarkError> { | ||
| let member = make_member::<T, I>(1)?; | ||
| assert!(Member::<T, I>::get(&member).unwrap().is_active); | ||
|
|
||
| #[extrinsic_call] | ||
| _(RawOrigin::Signed(member.clone()), false); | ||
|
|
||
| assert!(!Member::<T, I>::get(&member).unwrap().is_active); | ||
| Ok(()) | ||
| } | ||
|
|
||
| #[benchmark] | ||
| fn induct() -> Result<(), BenchmarkError> { | ||
| let candidate: T::AccountId = account("candidate", 0, SEED); | ||
|
|
||
| #[extrinsic_call] | ||
| _(RawOrigin::Root, candidate.clone()); | ||
|
|
||
| assert_eq!(T::Members::rank_of(&candidate), Some(0)); | ||
| assert!(Member::<T, I>::contains_key(&candidate)); | ||
| Ok(()) | ||
| } | ||
|
|
||
| #[benchmark] | ||
| fn promote() -> Result<(), BenchmarkError> { | ||
| let member = make_member::<T, I>(1)?; | ||
| ensure_evidence::<T, I>(&member)?; | ||
|
|
||
| #[extrinsic_call] | ||
| _(RawOrigin::Root, member.clone(), 2u8.into()); | ||
|
|
||
| assert_eq!(T::Members::rank_of(&member), Some(2)); | ||
| assert!(!MemberEvidence::<T, I>::contains_key(&member)); | ||
| Ok(()) | ||
| } | ||
|
|
||
| #[benchmark] | ||
| fn offboard() -> Result<(), BenchmarkError> { | ||
| let member = make_member::<T, I>(0)?; | ||
| T::Members::demote(&member)?; | ||
| ensure_evidence::<T, I>(&member)?; | ||
|
|
||
| assert!(T::Members::rank_of(&member).is_none()); | ||
| assert!(Member::<T, I>::contains_key(&member)); | ||
| assert!(MemberEvidence::<T, I>::contains_key(&member)); | ||
|
|
||
| #[extrinsic_call] | ||
| _(RawOrigin::Signed(member.clone()), member.clone()); | ||
|
|
||
| assert!(!Member::<T, I>::contains_key(&member)); | ||
| assert!(!MemberEvidence::<T, I>::contains_key(&member)); | ||
| Ok(()) | ||
| } | ||
|
|
||
| #[benchmark] | ||
| fn import() -> Result<(), BenchmarkError> { | ||
| let member = account("member", 0, SEED); | ||
| T::Members::induct(&member)?; | ||
| T::Members::promote(&member)?; | ||
|
|
||
| assert!(!Member::<T, I>::contains_key(&member)); | ||
|
|
||
| #[extrinsic_call] | ||
| _(RawOrigin::Signed(member.clone())); | ||
|
|
||
| assert!(Member::<T, I>::contains_key(&member)); | ||
| Ok(()) | ||
| } | ||
|
|
||
| #[benchmark] | ||
| fn approve() -> Result<(), BenchmarkError> { | ||
| let member = make_member::<T, I>(1)?; | ||
| let then = frame_system::Pallet::<T>::block_number(); | ||
| let now = then.saturating_plus_one(); | ||
| frame_system::Pallet::<T>::set_block_number(now); | ||
| ensure_evidence::<T, I>(&member)?; | ||
|
|
||
| assert_eq!(Member::<T, I>::get(&member).unwrap().last_proof, then); | ||
|
|
||
| #[extrinsic_call] | ||
| _(RawOrigin::Root, member.clone(), 1u8.into()); | ||
|
|
||
| assert_eq!(Member::<T, I>::get(&member).unwrap().last_proof, now); | ||
| assert!(!MemberEvidence::<T, I>::contains_key(&member)); | ||
| Ok(()) | ||
| } | ||
|
|
||
| #[benchmark] | ||
| fn submit_evidence() -> Result<(), BenchmarkError> { | ||
| let member = make_member::<T, I>(1)?; | ||
| let evidence = vec![0; Evidence::<T, I>::bound()].try_into().unwrap(); | ||
|
|
||
| assert!(!MemberEvidence::<T, I>::contains_key(&member)); | ||
|
|
||
| #[extrinsic_call] | ||
| _(RawOrigin::Signed(member.clone()), Wish::Retention, evidence); | ||
|
|
||
| assert!(MemberEvidence::<T, I>::contains_key(&member)); | ||
| Ok(()) | ||
| } | ||
|
|
||
| impl_benchmark_test_suite! { | ||
| CoreFellowship, | ||
| crate::tests::new_test_ext(), | ||
| crate::tests::Test, | ||
| } | ||
| } | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.