Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions src/currency.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
use runtime_primitives::traits::Convert;
use srml_support::traits::{Currency, LockableCurrency, ReservableCurrency};
use system;

pub trait GovernanceCurrency: system::Trait + Sized {
type Currency: Currency<Self::AccountId>
+ ReservableCurrency<Self::AccountId>
+ LockableCurrency<Self::AccountId, Moment = Self::BlockNumber>;
}

pub type BalanceOf<T> =
<<T as GovernanceCurrency>::Currency as Currency<<T as system::Trait>::AccountId>>::Balance;


/// A structure that converts the currency type into a lossy u64
/// And back from u128
pub struct CurrencyToVoteHandler;

impl Convert<u128, u64> for CurrencyToVoteHandler {
fn convert(x: u128) -> u64 {
if x >> 96 == 0 {
x as u64
} else {
u64::max_value()
}
}
}

impl Convert<u128, u128> for CurrencyToVoteHandler {
fn convert(x: u128) -> u128 {
// if it practically fits in u64
if x >> 64 == 0 {
x
}
else {
// 0000_0000_FFFF_FFFF_FFFF_FFFF_0000_0000
u64::max_value() as u128
}
}
}
2 changes: 1 addition & 1 deletion src/governance/council.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use srml_support::{decl_event, decl_module, decl_storage, ensure, StorageValue};
use system;

pub use super::election::{self, CouncilElected, Seat, Seats};
pub use super::{BalanceOf, GovernanceCurrency};
pub use crate::currency::{BalanceOf, GovernanceCurrency};

// Hook For announcing that council term has ended
pub trait CouncilTermEnded {
Expand Down
2 changes: 1 addition & 1 deletion src/governance/election.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use super::sealed_vote::SealedVote;
use super::stake::Stake;

use super::council;
pub use super::{BalanceOf, GovernanceCurrency};
pub use crate::currency::{BalanceOf, GovernanceCurrency};

use crate::traits::Members;

Expand Down
3 changes: 2 additions & 1 deletion src/governance/mock.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#![cfg(test)]

pub use super::{council, election, proposals, GovernanceCurrency};
pub use super::{council, election, proposals};
pub use crate::currency::GovernanceCurrency;
use crate::traits::Members;
pub use system;

Expand Down
12 changes: 0 additions & 12 deletions src/governance/mod.rs
Original file line number Diff line number Diff line change
@@ -1,20 +1,8 @@
use srml_support::traits::{Currency, LockableCurrency, ReservableCurrency};
use system;

pub mod council;
pub mod election;
pub mod proposals;

mod sealed_vote;
mod stake;

pub trait GovernanceCurrency: system::Trait + Sized {
type Currency: Currency<Self::AccountId>
+ ReservableCurrency<Self::AccountId>
+ LockableCurrency<Self::AccountId, Moment = Self::BlockNumber>;
}

pub type BalanceOf<T> =
<<T as GovernanceCurrency>::Currency as Currency<<T as system::Trait>::AccountId>>::Balance;

mod mock;
2 changes: 1 addition & 1 deletion src/governance/proposals.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use {
use primitives::storage::well_known_keys;

use super::council;
pub use super::{BalanceOf, GovernanceCurrency};
pub use crate::currency::{BalanceOf, GovernanceCurrency};
use crate::traits::Members;

const DEFAULT_APPROVAL_QUORUM: u32 = 60;
Expand Down
9 changes: 5 additions & 4 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ use substrate_client as client;
#[macro_use]
extern crate parity_codec_derive;

pub mod currency;
pub mod governance;
use governance::{council, election, proposals};
pub mod storage;
Expand Down Expand Up @@ -41,7 +42,7 @@ use runtime_primitives::{
create_runtime_str, generic,
traits::{
self as runtime_traits, AuthorityIdFor, BlakeTwo256, Block as BlockT,
CurrencyToVoteHandler, DigestFor, NumberFor, StaticLookup, Verify,
DigestFor, NumberFor, StaticLookup, Verify,
},
transaction_validity::TransactionValidity,
AnySignature, ApplyResult,
Expand Down Expand Up @@ -182,7 +183,7 @@ impl consensus::Trait for Runtime {

impl session::Trait for Runtime {
type ConvertAccountIdToSessionKey = ();
type OnSessionChange = (Staking,);
type OnSessionChange = (Staking, grandpa::SyncedAuthorities<Runtime>);
type Event = Event;
}

Expand Down Expand Up @@ -227,14 +228,14 @@ impl sudo::Trait for Runtime {

impl staking::Trait for Runtime {
type Currency = balances::Module<Self>;
type CurrencyToVote = CurrencyToVoteHandler;
type CurrencyToVote = currency::CurrencyToVoteHandler;
type OnRewardMinted = ();
type Event = Event;
type Slash = ();
type Reward = ();
}

impl governance::GovernanceCurrency for Runtime {
impl currency::GovernanceCurrency for Runtime {
type Currency = balances::Module<Self>;
}

Expand Down
2 changes: 1 addition & 1 deletion src/membership/members.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::governance::{BalanceOf, GovernanceCurrency};
use crate::currency::{BalanceOf, GovernanceCurrency};
use crate::traits::{Members, Roles};
use parity_codec::Codec;
use parity_codec_derive::{Decode, Encode};
Expand Down
2 changes: 1 addition & 1 deletion src/membership/mock.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#![cfg(test)]

pub use super::members;
pub use crate::governance::GovernanceCurrency;
pub use crate::currency::GovernanceCurrency;
pub use srml_support::traits::Currency;
pub use system;

Expand Down
2 changes: 1 addition & 1 deletion src/memo.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::governance::GovernanceCurrency;
use crate::currency::GovernanceCurrency;
use rstd::prelude::*;
use runtime_primitives::traits::Zero;
use srml_support::traits::Currency;
Expand Down
3 changes: 0 additions & 3 deletions src/migration.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
//use crate::governance::BalanceOf;
use crate::membership::members;
use crate::roles::actors;
use crate::VERSION;
use rstd::prelude::*;
use runtime_io::print;
//use runtime_primitives::traits::As;
use srml_support::{decl_event, decl_module, decl_storage, StorageValue};
use system;

Expand Down
2 changes: 1 addition & 1 deletion src/roles/actors.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::governance::{BalanceOf, GovernanceCurrency};
use crate::currency::{BalanceOf, GovernanceCurrency};
use parity_codec_derive::{Decode, Encode};
use rstd::prelude::*;
use runtime_primitives::traits::{As, Bounded, MaybeDebug, Zero};
Expand Down
2 changes: 1 addition & 1 deletion src/roles/mock.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#![cfg(test)]

pub use super::actors;
pub use crate::governance::GovernanceCurrency;
pub use crate::currency::GovernanceCurrency;
use crate::traits::Members;
pub use srml_support::traits::Currency;
pub use system;
Expand Down
2 changes: 1 addition & 1 deletion src/storage/mock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
pub use super::{
data_directory, data_object_storage_registry, data_object_type_registry,
};
use crate::governance::GovernanceCurrency;
use crate::currency::GovernanceCurrency;
use crate::roles::actors;
use crate::traits;
use runtime_io::with_externalities;
Expand Down