Skip to content

Commit

Permalink
Fix init and overflow (paritytech#244)
Browse files Browse the repository at this point in the history
* Fix overflow in tokens and init intentions in staking

* Able to produce blocks continously
  • Loading branch information
liuchengxu authored Jan 24, 2019
1 parent 8994288 commit 5ac8909
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 5 deletions.
2 changes: 1 addition & 1 deletion cli/src/genesis_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ pub fn testnet_genesis(genesis_spec: GenesisSpec) -> GenesisConfig {
current_era: 0,
penalty: 100,
funding: Default::default(),
intentions: vec![],
intentions: initial_authorities.clone().into_iter().map(|i| i.0.into()).collect(),
}),
xspot: Some(XSpotConfig {
pair_list: vec![(<xassets::Module<Runtime> as ChainT>::TOKEN.to_vec(),<bitcoin::Module<Runtime> as ChainT>::TOKEN.to_vec(),7,100,100,true)],
Expand Down
Binary file not shown.
29 changes: 29 additions & 0 deletions xrml/xmining/staking/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ extern crate serde;
#[cfg(feature = "std")]
extern crate serde_derive;

#[cfg(feature = "std")]
extern crate substrate_primitives;

#[macro_use]
extern crate parity_codec_derive;
extern crate parity_codec as codec;
Expand Down Expand Up @@ -412,6 +415,32 @@ decl_storage! {
pub Penalty get(penalty) config(): T::Balance;
pub PunishList get(punish_list): Vec<T::AccountId>;
}

add_extra_genesis {
build(|storage: &mut runtime_primitives::StorageMap, _: &mut runtime_primitives::ChildrenStorageMap, config: &GenesisConfig<T>| {
use runtime_io::with_externalities;
use substrate_primitives::Blake2Hasher;
use runtime_primitives::StorageMap;

let s = storage.clone().build_storage().unwrap().0;
let mut init: runtime_io::TestExternalities<Blake2Hasher> = s.into();
with_externalities(&mut init, || {
for intention in config.intentions.clone() {
<xaccounts::IntentionImmutablePropertiesOf<T>>::insert(
&intention,
xaccounts::IntentionImmutableProps {
name: b"genesis_intention".to_vec(),
activator: b"".to_vec(),
initial_shares: 0,
registered_at: <timestamp::Module<T>>::now(),
},
);
}
});
let init: StorageMap = init.into();
storage.extend(init);
});
}
}

impl<T: Trait> Module<T> {
Expand Down
9 changes: 5 additions & 4 deletions xrml/xmining/tokens/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ extern crate xrml_bridge_bitcoin as bitcoin;
extern crate xrml_mining_staking as xstaking;
extern crate xrml_xaccounts as xaccounts;
extern crate xrml_xassets_assets as xassets;
extern crate xrml_xdex_spot as xspot;
extern crate xrml_xsupport as xsupport;
extern crate xrml_xsystem as xsystem;
extern crate xrml_xdex_spot as xspot;

#[cfg(test)]
extern crate substrate_primitives;
Expand Down Expand Up @@ -138,7 +138,6 @@ pub trait Trait:
+ xstaking::Trait
+ bitcoin::Trait
+ xspot::Trait

{
type Event: From<Event<Self>> + Into<<Self as system::Trait>::Event>;

Expand Down Expand Up @@ -388,8 +387,10 @@ impl<T: Trait> OnRewardCalculation<T::AccountId, T::Balance> for Module<T> {
let amount = <xassets::Module<T>>::all_type_balance(&token);

// Apply discount for psedu intentions
let stake =
T::Balance::sa(Self::token_discount().times(price.as_() * amount.as_()));
let stake = match price.as_().checked_mul(amount.as_()) {
Some(x) => T::Balance::sa(Self::token_discount().times(x)),
None => T::Balance::sa(u64::max_value()),
};

(RewardHolder::PseduIntention(token), stake)
})
Expand Down

0 comments on commit 5ac8909

Please sign in to comment.