Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Weight annotation. #3157

Merged
merged 45 commits into from
Jul 25, 2019
Merged
Show file tree
Hide file tree
Changes from 25 commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
b042a93
Make extrinsics extensible.
gavofyork Jul 11, 2019
37f6ae0
Rest of mockup. Add tips.
gavofyork Jul 11, 2019
2e5b1f4
Fix some build issues
gavofyork Jul 11, 2019
b7646ec
Runtiem builds :)
gavofyork Jul 11, 2019
a871c9f
Substrate builds.
kianenigma Jul 12, 2019
8e7c803
Fix a doc test
gavofyork Jul 13, 2019
a824b56
Compact encoding
gavofyork Jul 13, 2019
5de080f
Extract out the era logic into an extension
gavofyork Jul 15, 2019
a8789b9
Weight Check signed extension. (#3115)
kianenigma Jul 16, 2019
7d96429
Merge remote-tracking branch 'origin/master' into gav-extensble-trans…
gavofyork Jul 16, 2019
30b4ba7
Don't use len for weight - use data.
gavofyork Jul 16, 2019
2a9c9df
Merge remote-tracking branch 'origin/master' into gav-extensble-trans…
gavofyork Jul 19, 2019
342efb5
Operational Transaction; second attempt (#3138)
kianenigma Jul 19, 2019
b8f564e
Bump transaction version
jacogr Jul 19, 2019
07fdfe2
Merge branch 'gav-extensble-transactions' of github.com:paritytech/su…
jacogr Jul 19, 2019
7f33006
Master.into()
kianenigma Jul 19, 2019
36063fe
Merge branch 'gav-extensble-transactions' of github.com:paritytech/su…
kianenigma Jul 19, 2019
7a0fbc9
Fix weight mult test.
kianenigma Jul 19, 2019
84fa279
Fix more tests and improve doc.
kianenigma Jul 19, 2019
f4d4579
Bump.
kianenigma Jul 19, 2019
def6425
Merge remote-tracking branch 'origin/master' into gav-extensble-trans…
gavofyork Jul 20, 2019
d12713a
Make some tests work again.
kianenigma Jul 20, 2019
3350f9c
Fix subkey.
kianenigma Jul 20, 2019
b788507
Remove todos + bump.
kianenigma Jul 20, 2019
b9b6b53
First draft of annotating weights.
kianenigma Jul 21, 2019
045681e
Refactor weight to u64.
kianenigma Jul 22, 2019
bfcfa36
More refactoring and tests.
kianenigma Jul 23, 2019
107801f
One hell of a merge conflict.
kianenigma Jul 23, 2019
c100df9
New convert for weight to fee
kianenigma Jul 23, 2019
f5d33c6
more tests.
kianenigma Jul 23, 2019
0c1c268
remove merge redundancy.
kianenigma Jul 23, 2019
6a0a1d4
Fix system test.
kianenigma Jul 24, 2019
b06ef82
Master.into()
kianenigma Jul 24, 2019
c3e0ee3
Bring back subkey stuff.
kianenigma Jul 24, 2019
5b0c715
a few stress tests.
kianenigma Jul 24, 2019
e683829
fix some of the grumbles.
kianenigma Jul 24, 2019
ce11fc5
Merge branch 'master' of github.com:paritytech/substrate into kiz-ann…
kianenigma Jul 24, 2019
0b592e2
Final nits.
kianenigma Jul 24, 2019
ee970d1
Merge branch 'master' into kiz-annotate-weights
Demi-Marie Jul 24, 2019
58191a3
Update srml/system/src/lib.rs
kianenigma Jul 24, 2019
67b268a
Master.into()
kianenigma Jul 25, 2019
0d9133f
Merge conflicts.
kianenigma Jul 25, 2019
ec6554f
Scale weights by 1000.
kianenigma Jul 25, 2019
a25e4be
Bump.
kianenigma Jul 25, 2019
5724771
Fix decl_storage test.
kianenigma Jul 25, 2019
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
4 changes: 4 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

69 changes: 51 additions & 18 deletions core/sr-primitives/src/generic/checked_extrinsic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,50 +17,83 @@
//! Generic implementation of an extrinsic that has passed the verification
//! stage.

use crate::traits::{self, Member, SimpleArithmetic, MaybeDisplay};
use crate::weights::{Weighable, Weight};
use rstd::result::Result;
use crate::traits::{
self, Member, MaybeDisplay, SignedExtension, DispatchError, Dispatchable, DispatchResult,
ValidateUnsigned
};
use crate::weights::{GetDispatchInfo, DispatchInfo};
use crate::transaction_validity::TransactionValidity;

/// Definition of something that the external world might want to say; its
/// existence implies that it has been checked and is good, particularly with
/// regards to the signature.
#[derive(PartialEq, Eq, Clone)]
#[cfg_attr(feature = "std", derive(Debug))]
pub struct CheckedExtrinsic<AccountId, Index, Call> {
pub struct CheckedExtrinsic<AccountId, Call, Extra> {
/// Who this purports to be from and the number of extrinsics have come before
/// from the same signer, if anyone (note this is not a signature).
pub signed: Option<(AccountId, Index)>,
pub signed: Option<(AccountId, Extra)>,

/// The function that should be called.
pub function: Call,
}

impl<AccountId, Index, Call> traits::Applyable for CheckedExtrinsic<AccountId, Index, Call>
impl<AccountId, Call, Extra, Origin> traits::Applyable
for
CheckedExtrinsic<AccountId, Call, Extra>
where
AccountId: Member + MaybeDisplay,
Index: Member + MaybeDisplay + SimpleArithmetic,
Call: Member,
Call: Member + Dispatchable<Origin=Origin>,
Extra: SignedExtension<AccountId=AccountId>,
Origin: From<Option<AccountId>>,
{
type Index = Index;
type AccountId = AccountId;
type Call = Call;

fn index(&self) -> Option<&Self::Index> {
self.signed.as_ref().map(|x| &x.1)
}
type Call = Call;

fn sender(&self) -> Option<&Self::AccountId> {
self.signed.as_ref().map(|x| &x.0)
}

fn deconstruct(self) -> (Self::Call, Option<Self::AccountId>) {
(self.function, self.signed.map(|x| x.0))
fn validate<U: ValidateUnsigned<Call=Self::Call>>(&self,
info: DispatchInfo,
len: usize,
) -> TransactionValidity {
if let Some((ref id, ref extra)) = self.signed {
Extra::validate(extra, id, info, len).into()
} else {
match Extra::validate_unsigned(info, len) {
Ok(extra) => match U::validate_unsigned(&self.function) {
TransactionValidity::Valid(v) =>
TransactionValidity::Valid(v.combine_with(extra)),
x => x,
},
x => x.into(),
}
}
}

fn dispatch(self,
info: DispatchInfo,
len: usize,
) -> Result<DispatchResult, DispatchError> {
let maybe_who = if let Some((id, extra)) = self.signed {
Extra::pre_dispatch(extra, &id, info, len)?;
Some(id)
} else {
Extra::pre_dispatch_unsigned(info, len)?;
None
};
Ok(self.function.dispatch(Origin::from(maybe_who)))
}
}

impl<AccountId, Index, Call> Weighable for CheckedExtrinsic<AccountId, Index, Call>
impl<AccountId, Call, Extra> GetDispatchInfo for CheckedExtrinsic<AccountId, Call, Extra>
where
Call: Weighable,
Call: GetDispatchInfo,
{
fn weight(&self, len: usize) -> Weight {
self.function.weight(len)
fn get_dispatch_info(&self) -> DispatchInfo {
self.function.get_dispatch_info()
}
}
4 changes: 0 additions & 4 deletions core/sr-primitives/src/generic/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@
// end::description[]

mod unchecked_extrinsic;
mod unchecked_mortal_extrinsic;
mod unchecked_mortal_compact_extrinsic;
mod era;
mod checked_extrinsic;
mod header;
Expand All @@ -30,8 +28,6 @@ mod digest;
mod tests;

pub use self::unchecked_extrinsic::UncheckedExtrinsic;
pub use self::unchecked_mortal_extrinsic::UncheckedMortalExtrinsic;
pub use self::unchecked_mortal_compact_extrinsic::UncheckedMortalCompactExtrinsic;
pub use self::era::{Era, Phase};
pub use self::checked_extrinsic::CheckedExtrinsic;
pub use self::header::Header;
Expand Down
Loading