mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-31 20:21:03 +00:00
Public function dispatching.
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
|
||||
use rstd::vec::Vec;
|
||||
use codec::{Input, Slicable};
|
||||
use {AccountId, SessionKey};
|
||||
|
||||
#[cfg(feature = "std")]
|
||||
use std::fmt;
|
||||
@@ -153,16 +154,27 @@ impl Slicable for Proposal {
|
||||
#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))]
|
||||
#[repr(u8)]
|
||||
enum FunctionId {
|
||||
/// Set the timestamp.
|
||||
TimestampSet = 0x00,
|
||||
/// Set temporary session key as a validator.
|
||||
|
||||
SessionSetKey = 0x10,
|
||||
/// Staking subsystem: begin staking.
|
||||
|
||||
StakingStake = 0x20,
|
||||
/// Staking subsystem: stop staking.
|
||||
StakingUnstake = 0x21,
|
||||
/// Staking subsystem: transfer stake.
|
||||
StakingTransfer = 0x22,
|
||||
|
||||
CouncilVotePropose = 0x30,
|
||||
CouncilVoteVote = 0x31,
|
||||
CouncilVoteVeto = 0x32,
|
||||
|
||||
CouncilSetApprovals = 0x40,
|
||||
CouncilReapInactiveVoter = 0x41,
|
||||
CouncilRetractVoter = 0x42,
|
||||
CouncilSubmitCandidacy = 0x43,
|
||||
CouncilPresentWinner = 0x44,
|
||||
|
||||
DemocracyPropose = 0x50,
|
||||
DemocracySecond = 0x51,
|
||||
DemocracyVote = 0x52,
|
||||
}
|
||||
|
||||
impl FunctionId {
|
||||
@@ -179,17 +191,29 @@ impl FunctionId {
|
||||
/// Functions on the runtime.
|
||||
#[derive(Clone, PartialEq, Eq)]
|
||||
#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Debug))]
|
||||
#[allow(missing_docs)]
|
||||
pub enum Function {
|
||||
/// Set the timestamp.
|
||||
TimestampSet(u64),
|
||||
/// Set temporary session key as a validator.
|
||||
SessionSetKey(::SessionKey),
|
||||
/// Staking subsystem: begin staking.
|
||||
|
||||
SessionSetKey(SessionKey),
|
||||
|
||||
StakingStake,
|
||||
/// Staking subsystem: stop staking.
|
||||
StakingUnstake,
|
||||
/// Staking subsystem: transfer stake.
|
||||
StakingTransfer(::AccountId, u64),
|
||||
StakingTransfer(AccountId, u64),
|
||||
|
||||
CouncilVotePropose(Proposal),
|
||||
CouncilVoteVote([u8; 32], bool),
|
||||
CouncilVoteVeto([u8; 32]),
|
||||
|
||||
CouncilSetApprovals(Vec<bool>, u32),
|
||||
CouncilReapInactiveVoter(u32, AccountId, u32, u32),
|
||||
CouncilRetractVoter(u32),
|
||||
CouncilSubmitCandidacy(u32),
|
||||
CouncilPresentWinner(AccountId, u64, u32),
|
||||
|
||||
DemocracyPropose(Proposal, u64),
|
||||
DemocracySecond(u32),
|
||||
DemocracyVote(u32, bool),
|
||||
}
|
||||
|
||||
impl Slicable for Function {
|
||||
@@ -197,17 +221,54 @@ impl Slicable for Function {
|
||||
let id = try_opt!(u8::decode(input).and_then(FunctionId::from_u8));
|
||||
Some(match id {
|
||||
FunctionId::TimestampSet =>
|
||||
Function::TimestampSet(try_opt!(Slicable::decode(input))),
|
||||
Function::TimestampSet(Slicable::decode(input)?),
|
||||
FunctionId::SessionSetKey =>
|
||||
Function::SessionSetKey(try_opt!(Slicable::decode(input))),
|
||||
Function::SessionSetKey(Slicable::decode(input)?),
|
||||
FunctionId::StakingStake => Function::StakingStake,
|
||||
FunctionId::StakingUnstake => Function::StakingUnstake,
|
||||
FunctionId::StakingTransfer => {
|
||||
let to = try_opt!(Slicable::decode(input));
|
||||
let amount = try_opt!(Slicable::decode(input));
|
||||
|
||||
let to = Slicable::decode(input)?;
|
||||
let amount = Slicable::decode(input)?;
|
||||
Function::StakingTransfer(to, amount)
|
||||
}
|
||||
FunctionId::CouncilVotePropose => Function::CouncilVotePropose(Slicable::decode(input)?),
|
||||
FunctionId::CouncilVoteVote => {
|
||||
let a = Slicable::decode(input)?;
|
||||
let b = Slicable::decode(input)?;
|
||||
Function::CouncilVoteVote(a, b)
|
||||
}
|
||||
FunctionId::CouncilVoteVeto => Function::CouncilVoteVeto(Slicable::decode(input)?),
|
||||
FunctionId::CouncilSetApprovals => {
|
||||
let a = Slicable::decode(input)?;
|
||||
let b = Slicable::decode(input)?;
|
||||
Function::CouncilSetApprovals(a, b)
|
||||
}
|
||||
FunctionId::CouncilReapInactiveVoter => {
|
||||
let a = Slicable::decode(input)?;
|
||||
let b = Slicable::decode(input)?;
|
||||
let c = Slicable::decode(input)?;
|
||||
let d = Slicable::decode(input)?;
|
||||
Function::CouncilReapInactiveVoter(a, b, c, d)
|
||||
}
|
||||
FunctionId::CouncilRetractVoter => Function::CouncilRetractVoter(Slicable::decode(input)?),
|
||||
FunctionId::CouncilSubmitCandidacy => Function::CouncilSubmitCandidacy(Slicable::decode(input)?),
|
||||
FunctionId::CouncilPresentWinner => {
|
||||
let a = Slicable::decode(input)?;
|
||||
let b = Slicable::decode(input)?;
|
||||
let c = Slicable::decode(input)?;
|
||||
Function::CouncilPresentWinner(a, b, c)
|
||||
}
|
||||
FunctionId::DemocracyPropose => {
|
||||
let a = Slicable::decode(input)?;
|
||||
let b = Slicable::decode(input)?;
|
||||
Function::DemocracyPropose(a, b)
|
||||
}
|
||||
FunctionId::DemocracySecond => Function::DemocracySecond(Slicable::decode(input)?),
|
||||
FunctionId::DemocracyVote => {
|
||||
let a = Slicable::decode(input)?;
|
||||
let b = Slicable::decode(input)?;
|
||||
Function::DemocracyVote(a, b)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -233,6 +294,7 @@ impl Slicable for Function {
|
||||
to.using_encoded(|s| v.extend(s));
|
||||
amount.using_encoded(|s| v.extend(s));
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
||||
v
|
||||
|
||||
@@ -258,6 +258,11 @@ pub fn leaderboard() -> Option<Vec<(Balance, AccountId)>> {
|
||||
pub mod public {
|
||||
use super::*;
|
||||
|
||||
// CouncilVotePropose(AccountId, Proposal)
|
||||
// CouncilVoteVote(AccountId, [u8; 32], bool)
|
||||
// CouncilVoteVeto(AccountId, [u8; 32])
|
||||
// CouncilSetApprovals(AccountId, Vec<bool>, u32)
|
||||
// CouncilReapInactiveVoter(AccountId, u32, AccountId, u32, u32)
|
||||
/// Set candidate approvals. Approval slots stay valid as long as candidates in those slots
|
||||
/// are registered.
|
||||
pub fn set_approvals(signed: &AccountId, votes: &Vec<bool>, index: VoteIndex) {
|
||||
@@ -354,10 +359,14 @@ pub mod public {
|
||||
storage::put(&signed.to_keyed_vec(REGISTER_INFO_OF), &(vote_index(), slot));
|
||||
}
|
||||
|
||||
// CouncilRetractVoter(AccountId, u32)
|
||||
// CouncilSubmitCandidacy(AccountId, u32)
|
||||
// CouncilPresent(AccountId, u32)
|
||||
|
||||
/// Claim that `signed` is one of the top carry_count() + current_vote().1 candidates.
|
||||
/// Only works if the block number >= current_vote().0 and < current_vote().0 + presentation_duration()
|
||||
/// `signed` should have at least
|
||||
pub fn present(signed: &AccountId, candidate: &AccountId, total: Balance, index: VoteIndex) {
|
||||
pub fn present_winner(signed: &AccountId, candidate: &AccountId, total: Balance, index: VoteIndex) {
|
||||
assert_eq!(index, vote_index(), "index not current");
|
||||
let (_, _, expiring): (BlockNumber, u32, Vec<AccountId>) = storage::get(NEXT_FINALISE)
|
||||
.expect("cannot present outside of presentation period");
|
||||
@@ -881,8 +890,8 @@ mod tests {
|
||||
|
||||
with_env(|e| e.block_number = 6);
|
||||
assert!(presentation_active());
|
||||
public::present(&Dave, &Bob, 11, 0);
|
||||
public::present(&Dave, &Eve, 41, 0);
|
||||
public::present_winner(&Dave, &Bob, 11, 0);
|
||||
public::present_winner(&Dave, &Eve, 41, 0);
|
||||
assert_eq!(leaderboard(), Some(vec![(0, AccountId::default()), (0, AccountId::default()), (11, Bob.into()), (41, Eve.into())]));
|
||||
|
||||
internal::end_block();
|
||||
@@ -911,9 +920,9 @@ mod tests {
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 6);
|
||||
public::present(&Dave, &Bob, 11, 0);
|
||||
public::present(&Dave, &Eve, 41, 0);
|
||||
public::present(&Dave, &Eve, 41, 0);
|
||||
public::present_winner(&Dave, &Bob, 11, 0);
|
||||
public::present_winner(&Dave, &Eve, 41, 0);
|
||||
public::present_winner(&Dave, &Eve, 41, 0);
|
||||
internal::end_block();
|
||||
|
||||
assert_eq!(active_council(), vec![(Eve.to_raw_public(), 11), (Bob.into(), 11)]);
|
||||
@@ -930,7 +939,7 @@ mod tests {
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 6);
|
||||
public::present(&Dave, &Bob, 11, 0);
|
||||
public::present_winner(&Dave, &Bob, 11, 0);
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 8);
|
||||
@@ -939,7 +948,7 @@ mod tests {
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 10);
|
||||
public::present(&Dave, &Eve, 41, 1);
|
||||
public::present_winner(&Dave, &Eve, 41, 1);
|
||||
internal::end_block();
|
||||
|
||||
public::reap_inactive_voter(
|
||||
@@ -965,7 +974,7 @@ mod tests {
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 6);
|
||||
public::present(&Dave, &Bob, 11, 0);
|
||||
public::present_winner(&Dave, &Bob, 11, 0);
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 8);
|
||||
@@ -974,7 +983,7 @@ mod tests {
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 10);
|
||||
public::present(&Dave, &Bob, 11, 1);
|
||||
public::present_winner(&Dave, &Bob, 11, 1);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -987,7 +996,7 @@ mod tests {
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 6);
|
||||
public::present(&Dave, &Bob, 11, 0);
|
||||
public::present_winner(&Dave, &Bob, 11, 0);
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 8);
|
||||
@@ -996,7 +1005,7 @@ mod tests {
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 10);
|
||||
public::present(&Dave, &Eve, 41, 1);
|
||||
public::present_winner(&Dave, &Eve, 41, 1);
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 11);
|
||||
@@ -1025,7 +1034,7 @@ mod tests {
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 6);
|
||||
public::present(&Dave, &Bob, 8, 0);
|
||||
public::present_winner(&Dave, &Bob, 8, 0);
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 8);
|
||||
@@ -1034,7 +1043,7 @@ mod tests {
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 10);
|
||||
public::present(&Dave, &Eve, 38, 1);
|
||||
public::present_winner(&Dave, &Eve, 38, 1);
|
||||
internal::end_block();
|
||||
|
||||
public::reap_inactive_voter(
|
||||
@@ -1055,7 +1064,7 @@ mod tests {
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 6);
|
||||
public::present(&Dave, &Bob, 8, 0);
|
||||
public::present_winner(&Dave, &Bob, 8, 0);
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 8);
|
||||
@@ -1064,7 +1073,7 @@ mod tests {
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 10);
|
||||
public::present(&Dave, &Eve, 38, 1);
|
||||
public::present_winner(&Dave, &Eve, 38, 1);
|
||||
internal::end_block();
|
||||
|
||||
public::reap_inactive_voter(
|
||||
@@ -1090,10 +1099,10 @@ mod tests {
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 6);
|
||||
public::present(&Dave, &Bob, 11, 0);
|
||||
public::present(&Dave, &Charlie, 21, 0);
|
||||
public::present(&Dave, &Dave, 31, 0);
|
||||
public::present(&Dave, &Eve, 41, 0);
|
||||
public::present_winner(&Dave, &Bob, 11, 0);
|
||||
public::present_winner(&Dave, &Charlie, 21, 0);
|
||||
public::present_winner(&Dave, &Dave, 31, 0);
|
||||
public::present_winner(&Dave, &Eve, 41, 0);
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 8);
|
||||
@@ -1101,8 +1110,8 @@ mod tests {
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 10);
|
||||
public::present(&Dave, &Bob, 11, 1);
|
||||
public::present(&Dave, &Charlie, 21, 1);
|
||||
public::present_winner(&Dave, &Bob, 11, 1);
|
||||
public::present_winner(&Dave, &Charlie, 21, 1);
|
||||
internal::end_block();
|
||||
|
||||
public::reap_inactive_voter(
|
||||
@@ -1127,7 +1136,7 @@ mod tests {
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 6);
|
||||
public::present(&Dave, &Bob, 11, 0);
|
||||
public::present_winner(&Dave, &Bob, 11, 0);
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 8);
|
||||
@@ -1136,7 +1145,7 @@ mod tests {
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 10);
|
||||
public::present(&Dave, &Eve, 41, 1);
|
||||
public::present_winner(&Dave, &Eve, 41, 1);
|
||||
internal::end_block();
|
||||
|
||||
public::reap_inactive_voter(
|
||||
@@ -1165,11 +1174,11 @@ mod tests {
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 6);
|
||||
public::present(&Dave, &Alice, 60, 0);
|
||||
public::present(&Dave, &Charlie, 21, 0);
|
||||
public::present(&Dave, &Dave, 31, 0);
|
||||
public::present(&Dave, &Eve, 41, 0);
|
||||
public::present(&Dave, &Bob, 11, 0);
|
||||
public::present_winner(&Dave, &Alice, 60, 0);
|
||||
public::present_winner(&Dave, &Charlie, 21, 0);
|
||||
public::present_winner(&Dave, &Dave, 31, 0);
|
||||
public::present_winner(&Dave, &Eve, 41, 0);
|
||||
public::present_winner(&Dave, &Bob, 11, 0);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1190,11 +1199,11 @@ mod tests {
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 6);
|
||||
public::present(&Dave, &Bob, 11, 0);
|
||||
public::present(&Dave, &Alice, 60, 0);
|
||||
public::present(&Dave, &Charlie, 21, 0);
|
||||
public::present(&Dave, &Dave, 31, 0);
|
||||
public::present(&Dave, &Eve, 41, 0);
|
||||
public::present_winner(&Dave, &Bob, 11, 0);
|
||||
public::present_winner(&Dave, &Alice, 60, 0);
|
||||
public::present_winner(&Dave, &Charlie, 21, 0);
|
||||
public::present_winner(&Dave, &Dave, 31, 0);
|
||||
public::present_winner(&Dave, &Eve, 41, 0);
|
||||
|
||||
assert_eq!(leaderboard(), Some(vec![
|
||||
(21, Charlie.into()),
|
||||
@@ -1211,7 +1220,7 @@ mod tests {
|
||||
with_externalities(&mut new_test_ext(), || {
|
||||
with_env(|e| e.block_number = 4);
|
||||
assert!(!presentation_active());
|
||||
public::present(&Eve, &Eve, 1, 0);
|
||||
public::present_winner(&Eve, &Eve, 1, 0);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1227,7 +1236,7 @@ mod tests {
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 6);
|
||||
public::present(&Dave, &Bob, 11, 1);
|
||||
public::present_winner(&Dave, &Bob, 11, 1);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1246,7 +1255,7 @@ mod tests {
|
||||
|
||||
with_env(|e| e.block_number = 6);
|
||||
assert_eq!(staking::balance(&Alice), 1);
|
||||
public::present(&Alice, &Alice, 30, 0);
|
||||
public::present_winner(&Alice, &Alice, 30, 0);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1264,7 +1273,7 @@ mod tests {
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 6);
|
||||
public::present(&Dave, &Bob, 80, 0);
|
||||
public::present_winner(&Dave, &Bob, 80, 0);
|
||||
|
||||
assert_eq!(staking::balance(&Dave), 38);
|
||||
});
|
||||
@@ -1291,16 +1300,16 @@ mod tests {
|
||||
|
||||
with_env(|e| e.block_number = 6);
|
||||
assert!(presentation_active());
|
||||
public::present(&Dave, &Alice, 60, 0);
|
||||
public::present_winner(&Dave, &Alice, 60, 0);
|
||||
assert_eq!(leaderboard(), Some(vec![
|
||||
(0, AccountId::default()),
|
||||
(0, AccountId::default()),
|
||||
(0, AccountId::default()),
|
||||
(60, Alice.to_raw_public())
|
||||
]));
|
||||
public::present(&Dave, &Charlie, 21, 0);
|
||||
public::present(&Dave, &Dave, 31, 0);
|
||||
public::present(&Dave, &Eve, 41, 0);
|
||||
public::present_winner(&Dave, &Charlie, 21, 0);
|
||||
public::present_winner(&Dave, &Dave, 31, 0);
|
||||
public::present_winner(&Dave, &Eve, 41, 0);
|
||||
assert_eq!(leaderboard(), Some(vec![
|
||||
(21, Charlie.into()),
|
||||
(31, Dave.into()),
|
||||
@@ -1346,10 +1355,10 @@ mod tests {
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 6);
|
||||
public::present(&Dave, &Alice, 60, 0);
|
||||
public::present(&Dave, &Charlie, 21, 0);
|
||||
public::present(&Dave, &Dave, 31, 0);
|
||||
public::present(&Dave, &Eve, 41, 0);
|
||||
public::present_winner(&Dave, &Alice, 60, 0);
|
||||
public::present_winner(&Dave, &Charlie, 21, 0);
|
||||
public::present_winner(&Dave, &Dave, 31, 0);
|
||||
public::present_winner(&Dave, &Eve, 41, 0);
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 8);
|
||||
@@ -1358,8 +1367,8 @@ mod tests {
|
||||
internal::end_block();
|
||||
|
||||
with_env(|e| e.block_number = 10);
|
||||
public::present(&Dave, &Charlie, 81, 1);
|
||||
public::present(&Dave, &Dave, 31, 1);
|
||||
public::present_winner(&Dave, &Charlie, 81, 1);
|
||||
public::present_winner(&Dave, &Dave, 31, 1);
|
||||
internal::end_block();
|
||||
|
||||
assert!(!presentation_active());
|
||||
|
||||
@@ -144,6 +144,39 @@ pub mod internal {
|
||||
Function::TimestampSet(t) => {
|
||||
::runtime::timestamp::public::set(t);
|
||||
}
|
||||
Function::CouncilVotePropose(ref a) => {
|
||||
::runtime::council_vote::public::propose(transactor, a);
|
||||
}
|
||||
Function::CouncilVoteVote(ref a, b) => {
|
||||
::runtime::council_vote::public::vote(transactor, a, b);
|
||||
}
|
||||
Function::CouncilVoteVeto(ref a) => {
|
||||
::runtime::council_vote::public::veto(transactor, a);
|
||||
}
|
||||
Function::CouncilSetApprovals(ref a, b) => {
|
||||
::runtime::council::public::set_approvals(transactor, a, b);
|
||||
}
|
||||
Function::CouncilReapInactiveVoter(a, ref b, c, d) => {
|
||||
::runtime::council::public::reap_inactive_voter(transactor, a, b, c, d);
|
||||
}
|
||||
Function::CouncilRetractVoter(a) => {
|
||||
::runtime::council::public::retract_voter(transactor, a);
|
||||
}
|
||||
Function::CouncilSubmitCandidacy(a) => {
|
||||
::runtime::council::public::submit_candidacy(transactor, a);
|
||||
}
|
||||
Function::CouncilPresentWinner(ref a, b, c) => {
|
||||
::runtime::council::public::present_winner(transactor, a, b, c);
|
||||
}
|
||||
Function::DemocracyPropose(ref a, b) => {
|
||||
::runtime::democracy::public::propose(transactor, a, b);
|
||||
}
|
||||
Function::DemocracySecond(a) => {
|
||||
::runtime::democracy::public::second(transactor, a);
|
||||
}
|
||||
Function::DemocracyVote(a, b) => {
|
||||
::runtime::democracy::public::vote(transactor, a, b);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user